//桥接子系统以模块的形式提供
//函数主要任务:
// 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命令
brioctl_set(br_ioctl_deviceless_stub);
//桥接入口skb处理,在netif_recive_skb中被调用
br_handle_frame_hook = br_handle_frame;
//netdev_chain上注册一个监听器
register_netdevice_notifier(&br_device_notifier);
return 0;
}
//监听器
1.2 struct notifier_block br_device_notifier = {
.notifier_call = br_device_event
};
// 桥接子系统处理的网络配置事件:
// 前提:与事件相关的dev需要是网桥的端口
// 1.mtu改变,更新网桥设备的mtu
// 2.mac地址改变,在转发数据库中更新该端口的mac地址,重新计算网桥id
// 3.载波状态改变,检测到载波,使能端口;载波消失,disable端口
// 4.设备关闭,disable端口
// 5.设备开启,enable端口
// 6.设备注销,从网桥设备中删除该端口
//
1.3 static int br_device_event(struct notifier_block *unused, unsigned lon
网络子系统27_桥接子系统初始化
最新推荐文章于 2022-08-24 16:24:19 发布
本文介绍Linux内核中桥接子系统的初始化过程,包括转发数据库的初始化、socket的ioctl回调函数设置、netif_receive_skb的处理函数以及netdev_chain的监听器注册。同时,详细阐述了桥接子系统如何处理网络配置事件,如MTU改变、MAC地址更新、载波状态变化等,确保网络桥接的正确运行。
摘要由CSDN通过智能技术生成