【问题标题】:Listing all Linux net namespaces by name from inside the Kernel从内核中按名称列出所有 Linux 网络名称空间
【发布时间】:2016-12-19 21:40:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux linux-kernel linux-namespaces


    【解决方案1】:

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

    拉米·罗森

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-11
        • 1970-01-01
        • 2015-12-06
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        相关资源
        最近更新 更多