【发布时间】:2022-01-28 13:47:27
【问题描述】:
我的程序需要连接到两个 TAP 接口,每个接口都位于各自的网络命名空间中。因为setns() 在 pthread 级别工作,所以我计划为每个接口设置一个专用的 pthread。 (我的程序本身在“根”命名空间中运行。)
但是,setns() 函数要求我将文件描述符传递给我要进入的网络命名空间。获取此描述符需要该名称空间中已存在的进程的 pid。一旦我有了那个 PID,我就可以调用 open() 来获取网络命名空间的文件描述符:
int fd = open("/proc/<pid>/ns/net");
但是我如何获得那个 PID?
一种方法是在所需的命名空间中创建一个“虚拟”进程:
ip netns exec tap101-ns sleep 100 &
[1] 30645
然后在我的程序中使用该 PID:int fd = open("/proc/30645/ns/net")
不过,这种工作方式似乎有点傻……
当我只有想要输入的命名空间的名称时,是否有更简洁的方法来输入网络命名空间?
【问题讨论】: