摘要:
两个函数分别完成ip地址的添加和删除工作,具体见下面源码分析; 1 /* 2 添加ip地址 3 主地址添加到最后一个满足范围的主地址后面 4 从地址添加到整个列表后面 5 若列表中存在与插入地址在同一子网的地址,则 6 要求ip地址不同且范围相同,并且插入地址认为是从地址 7 */ 8 static 阅读全文
摘要:
1 /* 根据指定设备的ip配置块,判断地址a,b是否在同一子网 */ 2 /* 3 --邻居项要求,在同一子网中的两个设备, 4 至少有一个接口有相同的子网配置, 5 --也就是说对端的in_dev->ifa_list中也能找到一个与当前 6 in_dev->ifa_list中相同的ifa_mas 阅读全文
摘要:
确认给定参数范围的ip地址是否存在; 1 /* 2 * Confirm that local IP address exists using wildcards: 3 * - net: netns to check, cannot be NULL 4 * - in_dev: only on this 阅读全文
摘要:
当通过输出设备向目的地址发送报文时,如果没有源地址,则需要调用inet_select_addr来选择ip地址作为源地址; 1 /* 2 选择ip地址 3 4 通过设备找到ip控制块,从ip控制块中遍历地址列表中的主地址, 5 优先选择满足范围,满足于目的地址网络部分相同的地址, 6 找不到则默认第一 阅读全文
摘要:
inetdev_init为传入设备分配和绑定ip控制块,查看其调用关系如下: 1 /** 2 * fs_initcall(inet_init) 3 * |-->inet_init 4 * |-->ip_init 5 * |-->ip_rt_init 6 * |-->devinet_init 7 * 阅读全文
摘要:
in_device为ip配置块,关联了二层设备,包含ip地址列表,组播配置,arp参数,接口配置等; 1 /* ip配置块 */ 2 struct in_device { 3 /* 二层设备 */ 4 struct net_device *dev; 5 /* 引用计数 */ 6 atomic_t r 阅读全文
摘要:
网络模块的初始化顺序 系统启动初始化时,一旦进入start_kernel,则说明低级初始化已经完成,接下来是对各种设备和子系统的初始化,网络模块初始化流程的调用关系如下图(图片来自:《Linux内核源码剖析-tcp/ip实现》): 在内核初始化过程中,初始化了很多模块,如图中的中断模块(init_i 阅读全文