单个应用程序

时间:2015-06-25 02:27:15

标签: linux multithreading linux-namespaces

我尝试使用网络命名空间来实现网络隔离的VRF行为(虚拟路由和转发)。基本上我有一个服务器应用程序(C / C ++)在默认命名空间的TCP端口上运行。我想做的是使用网络命名空间来创建使用VLAN的隔离VRF,然后让在默认命名空间中运行的应用程序能够为每个命名空间生成一个线程,以便在每个命名空间上监听命名空间。

我有网络方面的想法,我只是看不出我如何产生一个线程(如果可能的话,更喜欢使用pthread'而不是clone()),在其中一个上调用setns()这些命名空间,然后绑定到命名空间内的同一端口。这就是我在创建命名空间和桥接时所做的事情(为简单起见,此处限制为一个命名空间):

# ip netns add ns_vlan100
# ip link add link eno1 eno1.100 type vlan id 100

# ip link add veth0 type veth peer name veth_vlan100
# ip link set veth0 netns ns_vlan100

# ip netns exec ns_vlan100 ip link set dev veth0 up
# ip link set dev veth_vlan100 up

# brctl addbr bridge_vlan100
# brctl addif bridge_vlan100 eno1.100
# brctl addif bridge_vlan100 veth_vlan100

# ip link set dev bridge_vlan100 up
# ip link set dev eno1.100 up

# ip netns exec ns_vlan100 ifconfig veth0 10.10.10.1 netmask 255.255.255.0 up
# ip netns exec ns_vlan100 ip route add default via 10.10.10.1

有了这个,我可以在对等机器上创建一个VLAN(没有容器)并且毫无问题地ping 10.10.10.1。所以我知道链接很好。我想要做的是让我现有的应用程序能够在C或C ++中生成一个线程(pthreads是首选),并且该线程调用setns()并将其放入命名空间ns_vlan100,这样我就可以绑定到我的应用程序的相同端口,就在该命名空间内。

我似乎无法弄清楚如何做到这一点。非常感谢任何帮助。

0 个答案:

没有答案