2016-08-12 12 views
1

カーネル内部からネットネームスペースの名前を取得する方法について、良い例が必要です。デバイス名を取得することは簡単ですが、ネットネームスペースではそれほど明白ではありません。誰もカーネル内部から ネット名前空間名を取得する簡単な方法を知っていますか?カーネル内部から名前ですべてのLinuxネットネームスペースを表示する

次のコードは、すべてのネットネームスペース内のすべてのデバイスを出力しますが、カーネル内部からプリントするネームスペースの名前を取得するにはどうすればよいですか。構造体のネット構造は、私が知る限り、近くの名前を指していません。

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

答えて

0

カーネルは名前を使って名前空間を保存しません。名前は、名前空間の操作や使用を簡単にするためにのみ使用されます。 NAMEという名前の名前空間は、一般的にファイルシステムに/var/run/netns/NAME という名前で格納されます。名前空間はファイルシステムの他の場所にも格納できます。たとえば、Dockerは名前空間を格納します。/var/run/docker/netns

ネットワークネームスペースの詳細については、https://medium.com/@chughtapan/networking-namespaces-in-linux-b76070963964#.z1azv3467をご覧ください。

0

実際、カーネルには名前空間名の概念はありません。/var/run/netnsのネットワークネームスペースの名前に関しては、 "ip netns add"によって作成されたネットワークネームスペースのみを表します。 "ip netns add"ではなく、fork()またはclone()によってネットワークネームスペースを作成すると、/ var/run/netnsの下にエントリは作成されません。

ラミローゼン

関連する問題