linux 網橋程式碼分析 二 網橋初始化

tycoon1988發表於2014-11-04

本節主要分析網橋初始化相關的程式碼

對於網橋初始化所需要做的功能,主要有以下幾項

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的回撥函式

相關文章