对网络设备的跟踪已经考虑到命名空间的效应,对最重要的一些协议的命名空间支持也是可用的 。由于本书中尚未讨论网络实现的任何具体内容,struct net 中引用的结构当然还是未知的(但在本章行文过程中,这一点会逐渐改变) 。现在,只需要简要地概述一下,哪些概念是以可感知命名空间的方式进行处理的即可. - count是一个标准的使用计数器,在使用特定的net实例前后,需要分别调用辅助函数get_net和put_net. 在count降低到0时,将释放该命名空间,并将其从系统中删除.
- 所有可用的命名空间都保存在一个双链表上,表头是net_namespace_list 。list用作链表元素. copy_net_ns函数向该链表添加一个新的命名空间 。在用create_new_namespace创建一组新的命名空间时,会自动调用该函数 。
- 由于每个命名空间都包含不同的网络设备,这必然会反映到procfs的内容上(参见10.1节) 。各命名空间的处理需要三个数据项:/proc/net由proc_net表示,而/proc/net/stats由proc_net_stats表示,proc_net_root指向当前命名空间的procfs实例的根结点,即/proc
- 每个命名空间都可以有一个不同的环回设备,而loopback_dev指向履行该职责的(虚拟)网络设备.
- 网络设备由struct net_device表示 。与特定命名空间关联的所有设备都保存在一个双链表上,表头为dev_base_head 。各个设备还通过另外两个双链表维护:一个将设备名用作散列键(dev_name_head),另一个将接口索引用作散列键(dev_index_head) 。
- 请注意,术语“设备”和“接口”有细微的差别 。设备表示提供物理传输能力的硬件设备,而接口可以是纯虚拟的实体,可能在真正的设备上实现 。例如,一个网卡可以提供两个接口 。对我们来说,两个术语的区别不那么重要,在下文中将交替使用这两个术语 。网络子系统的许多组件仍然需要做很多工作才能正确处理命名空间,要使网络子系统能够完全感知命名空间,还有相当长的路要走 。例如,内核版本2.6.25(在撰写本章时,仍处于开发中)将开始一些最初的准备工作,以便使特定的协议能够感知到命名空间:
struct net{ /*......*/struct net_device*loopback_dev;/* The loopback */struct netns_corecore;struct netns_mibmib;struct netns_packetpacket;struct netns_unixunx;struct netns_ipv4ipv4;#if IS_ENABLED(CONFIG_IPV6)struct netns_ipv6ipv6;#endif /*......*/} - ipv4用于存储协议参数(此前是全局的), 为此引入了特定于协议的结构. 这个方 法是逐步进行的:首先设置好基本框架,后续的各个步骤,将全局属性迁移到各命名空间的表示,这些结构最初都是空的 。在未来的内核版本中,还将引入更多此类代码
- linux系统包括默认的命名空间 : "init_net"和用户自定义的net
- 我们通常说的namespace 一般是默认的命名空间 : "init_net", 也就是所有的"网络通信协议"+"网络设备"都是属于默认的命名空间.
- 大多数计算机通常都只需要一个网络命名空间. 即只有默认命名空间init_net(该变量实际上是全局的,并未包含在另一个命名空间中,其定义如下:
//http://lxr.free-electrons.com/source/net/core/net_namespace.c?v=4.7#L35struct net init_net = {.dev_base_head = LIST_HEAD_INIT(init_net.dev_base_head),};EXPORT_SYMBOL(init_net); - init_net会被链接到net_namespace_list这个双向链表上, 定义如下所示:
- net_namespace_list就包含了所有的网络命令空间, 其以init_net为表头
LIST_HEAD(net_namespace_list);EXPORT_SYMBOL_GPL(net_namespace_list);2.2 初始化 & 清理元组 pernet_operations(创建命名空间)初始化 & 清理元组pernet_operations
- 每个网络命名空间由几个部分组成, 例如, 在procfs中的表示. 每当创建一个新的网络命名空间时, 必须初始化这些部分. 在删除命名空间时, 也同样需要一些清理工作. 内核采用下列结构来跟踪所有必需的初始化/清理元组.
//http://lxr.free-electrons.com/source/include/net/net_namespace.h?v=4.7#L288struct pernet_operations {struct list_head list;int (*init)(struct net *net);void (*exit)(struct net *net);void (*exit_batch)(struct list_head *net_exit_list);int *id;size_t size;};//http://lxr.free-electrons.com/source/include/net/net_namespace.h?v=4.7#L316int register_pernet_subsys(struct pernet_operations *);void unregister_pernet_subsys(struct pernet_operations *);int register_pernet_device(struct pernet_operations *);void unregister_pernet_device(struct pernet_operations *);
推荐阅读
-
长茄子文化|田径第一女神王美媛现状:因为身材颜值走红,为跑步杠杠铃做深蹲
-
陈两岁|一汽红旗7月销1.75万 涨99% 马自达亏出11年记录,8月1日汽车要闻
-
-
-
佰信集团|进入法国市场就等于进入了整个欧盟市场?为什么要去法国创业?
-
|《三十而已》剧情提前曝光!顾佳追讨小三开房费,许幻山呆坐一旁
-
「清梦载春秋」好运接二连三,睡着都能笑醒,生肖马:脚踏聚宝盆
-
『食快乐』5分钟就能搞定,香辣过瘾,简单又快手的包菜炒粉丝
-
就要买买买|3.5GHz频谱拍卖:联邦通讯委员会总入账超45亿美元
-
「苏州」苏州最美古街 至今仍保持唐宋格局 被誉为“微缩版的苏州古城”!
-
腾讯科技为霍金感到遗憾!其论文重要合作伙伴获今年诺贝尔物理奖
-
李凡看军事|法国紧急驰援阵风战机,土耳其要被胖揍?,希腊获得内部支持
-
-
人民日报海外网|只顾自己私利!《柳叶刀》批美破坏全球共同抗疫
-
脱口秀大会|一年一度喜剧大赛2本周停播,脱口秀大会5本周也停播,为何?
-
-
「时代之声V」二不停工,却成首个扭转疫情的海外国,自律得可怕!韩国一不封城
-
苹果发布第四季度财报:iPhone收入下滑20%,大中华区营收大降28%
-
懂车帝报道|| 细节满满 DS7 Crossback特别版官图发布,新车
-
「印度」时隔33年之后,印度LCA战机终于修成正果,放话从此不再怕歼10