网络子系统74_邻居子系统结构图

//	1.系统所有邻居协议控制块通过neigh_tables链接在一起。
//	2.neigh_table->hash_mask 默认初始化为1,表示每个邻居协议有两个bucket。
//	3.net_device->ip_ptr->arp_params调整其上运行的arp协议行为。

                                                                  

//参考 深入理解linux网络技术内幕
时间: 2024-09-08 17:18:26

网络子系统74_邻居子系统结构图的相关文章

网络子系统14_邻居子系统通用接口

//创建一个新的邻居项 //参考 深入理解linux网络技术内幕 // 1.邻居子系统为具体的邻居协议,提供通用的功能接口 // 2.系统中所有的邻居协议被链接在neigh_tables链表中 // 3.neigh_table代表一个具体的邻居协议 // 4.具体邻居协议在运行时的行为,可以通过struct neigh_parms调节, // neigh_params与设备关联,每个邻居协议neigh_table提供一个默认的neigh_params. //注册一个邻居协议到系统中 // 1.与

网络子系统12_邻居子系统垃圾回收

// 邻居子系统垃圾回收机制: // 1.异步回收机制:通过定时器,定期检测邻居缓存使用的内存阈值 // 2.同步回收机制:无法分配新neighbour实例时,同步回收内存. // 同步,异步回收机制的区别: // 1.同步回收比异步回收更加严格: // 1.1 回收的数量:同步回收遍历每一个bucket: // 异步回收接着上次清理的bucket开始,只清理一个bucket // 1.2 回收的条件:同步回收视没有被引用,非静态配置的邻居项均视为可回收项: // 异步回收见下3.1 // 2.

网络子系统13_邻居子系统状态机

// 参考深入理解linux网络技术内幕 // 头文件net/neighbour.h //一个solicitation请求已发出,但是还没有收到应答,在这个状态下,不适用任何硬件地址 #define NUD_INCOMPLETE 0x01 //该邻居是可到达的 #define NUD_REACHABLE 0x02 //缓存中包含此邻居项,但是该地址已有一段时间没有被确认了,上一次确认时间由 //neighbour->confirmed成员指出,当下一次有封包要到达这个邻居时,要启动可到达性确认,

网络子系统15_arp邻居项初始化

// 初始化struct neighbour // 当邻居子系统新创一个neighbour时,邻居子系统调用特定协议的初始化函数,初始化邻居项. // 调用路径:neigh_create->arp_constructor // 函数主要任务: // 1.设置邻居项的地址类型,a,b,c,d // 2.使用与此邻居项关联的接口设备的neigh_param作为该邻居项调整邻居协议的参数. // 3.根据与此邻居项关联的接口设备的信息,初始化邻居项的状态,以及ops // 3.1 驱动没有提供填充l2

网络子系统63_路由子系统处理netlink事件

// 路由子系统netlink控制块 // 在ip_rt_init->devinet_init中注册. 1.1 static struct rtnetlink_link inet_rtnetlink_table[RTM_MAX - RTM_BASE + 1] = { [4] = { .doit = inet_rtm_newaddr, }, [5] = { .doit = inet_rtm_deladdr, }, [6] = { .dumpit = inet_dump_ifaddr, }, [8]

网络子系统62_路由子系统处理设备事件

// 监听设备事件 // 在ip_rt_init->devinet_init中注册 1.1 static struct notifier_block ip_netdev_notifier = { .notifier_call =inetdev_event, }; // 路由子系统对网络设备事件的处理 // 与事件相关的设备需要有inet配置信息 // 函数主要任务: // 1.开启设备,加入多播组,为回环设备配置ip地址 // 2.关闭设备,设备退出多播组 // 3.设备注销,删除该设备的配置信

网络子系统27_桥接子系统初始化

//桥接子系统以模块的形式提供 //函数主要任务: // 1.转发数据库slab缓存 // 2.向socket的ioctl添加回调函数 // 3.在netif_receive_skb中路径上添加回调函数 // 4.向netdev_chain注册监听块 1.1 static int __init br_init(void) { //转发数据库初始化 br_fdb_init(); //桥接子系统中有关netfilter的初始化 ... //向socket的ioctl注册回调函数,处理对网桥的io命令

网络子系统61_路由子系统初始化

// 路由缓存内存量指定办法: // 1.通过启动参数rhash_entries指定hash表bucket个数 // 2.根据物理内存页数确定使用的内存量 // 根据物理页数分配缓存内存: // 1.goal目标内存页数=总页数/(2**(26-PAGE_SHIFT)) // 2.最接近goal内存页数的order,用于从伙伴系统中分配 // 3.rt_hash_mask=order页可容纳的bucket数 // 4.对齐rt_hash_mask到2的幂次 // 5.从伙伴系统中分配order页

网络子系统30_桥接子系统通用接口

// 添加网桥设备 // 参数: // name,需要全局唯一 // 调用路径:socket ioctl->br_add_bridge // 函数主要任务: // 1.创建一个新的网络设备 // 2.初始化网络设备的通用字段以及网桥设备的字段 // 3.向系统注册网络设备 1.1 int br_add_bridge(const char *name) { struct net_device *dev;//net_bridge->dev int ret; dev = new_bridge_dev