2

我需要一些很好的例子来说明如何从内核内部获取网络命名空间的名称。获取设备名称很简单,但对于网络名称空间来说并不那么明显。有谁知道从内核内部获取网络名称空间名称的简单方法。

以下代码确实打印出所有网络命名空间中的所有设备,我如何从内核内部获取要打印的命名空间的名称。struct net 结构并没有像我所知的那样指向名称。

for_each_net(净)
    for_each_netdev(网络,开发)
       printk("dev_name: %s netns: %p\n", dev->name, net);                                                            
4

2 回答 2

1

内核不使用名称存储命名空间。这些名称仅用于命名空间的轻松操作和使用。名称为 NAME 的命名空间通常存储在文件系统中,因为/var/run/netns/NAME 命名空间也可以存储在文件系统的任何其他位置。例如,Docker 将其命名空间存储在/var/run/docker/netns

您可以查看https://medium.com/@chughtapan/networking-namespaces-in-linux-b76070963964#.z1azv3467以了解有关网络命名空间的更多信息。

于 2017-01-10T06:39:30.300 回答
1

实际上,内核中没有命名空间名称的概念。关于 /var/run/netns 下的网络名称空间的名称 - 这些仅代表由“ip netns add”创建的网络名称空间。当您不是通过“ip netns add”而是通过 fork() 或 clone() 创建网络命名空间时,在 /var/run/netns 下不会创建任何条目。

拉米·罗森

于 2017-01-10T22:48:03.650 回答