您的位置:首页 > 运维架构 > Linux

linux 网桥代码分析 二 网桥初始化

2014-11-04 17:00 316 查看
本节主要分析网桥初始化相关的代码

对于网桥初始化所需要做的功能,主要有以下几项

1、CAM表的初始化

2、注册网桥相关的网络防火墙钩子函数

3、向通知链表中注册网桥的回调函数,处理网桥感兴趣的一些事件

4、设置网桥的ioctl,以便处理应用层添加网桥、删除网桥的需求

5、注册网桥处理回调函数,在接收封包处理函数netif_receive_skb中用来处理网桥设备

而网桥相关的初始化,主要是由函数br_init来完成的。

下面是br_init的代码

其完成的功能有:

1、调用stp_proto_register进行stp相关的初始化

2、调用br_fdb_init进行CAM表的初始化

3、调用register_pernet_subsys,为bridge模块注册网络命名空间。而br_net_ops的 init函数为NULL,所以调用register_pernet_subsys并没有在/proc目录下生成任何与bridge相关的目录,如果我们想在/proc下生成bridge相关的子目录或子文件,我们可以自己写init函数。

关于register_pernet_subsys函数的详细处理流程可看我以前的文档register_pernet_subsys相关学习

static structpernet_operations br_net_ops = {

.exit = br_net_exit,

};

4、调用函数br_netfilter_init,注册网络防火墙相关的钩子函数,主要是实现ebtables相关的功能

5、调用函数register_netdevice_notifier,向通知链中注册网桥感兴趣的信息。

6、调用函数br_netlink_init,进行netlink的初始化

7、调用brioctl_set,设置网桥相关的ioctl回调函数br_ioctl_deviceless_stub,

8、设置br_handle_frame_hook的回调函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: