linux kernel bridge entrance

來源:互聯網
上載者:User

好久沒有隨筆了,帖下昨天的一部分筆記吧,現在在研究 linux bridge 部分,希望實現與硬體switch的完美結合。
以下是核心 bridge 模組初始化部分分析,核心版本是 2.6.23.9。只涉及到進入點,STP部分及其他細節部分沒有在這裡談及。通過這些入口,大致可以瞭解 linux bridge部分的流程了。Hope its useful. Any comment is welcome.


1.
     模組入口(br_init)

該函數初始化橋接器模組及進入點函數。

1.1.    初始化

-           br_fdb_init()

-           br_netfilter_init()

-           register_netdevice_notifier()

-           br_netlink_init()

-           brioctl_set(br_ioctl_deviceless_stub) bridge與使用者態介面之一,另一個是dev_ioctl

-           br_fdb_get_hook/br_fdb_put_hook 為其他核心模組提供的介面

1.2.    進入點流程

-           br_stp_rcv

1           處理BPDU報文,如果STP是核心態,就交給核心STP協議棧處理。

-           br_handle_frame

1           處理報文,包括br_stp_rcv沒有處理的BPDU;

2           能進入這個函數一定是bridge上的一個port,也就是收到報文的是橋接器的一個端點;

3           對於目標地址是802.1D規定的保留地址的報文並且STP開啟,該函數執行NF_HOOK(NF_BR_LOCAL_IN),如果無人關心這個報文,即返回給上層函數,繼續走流程,報文離開bridge。

4           對於3沒有處理的報文,並且端點狀態是轉寄或者學習狀態的報文進行處理,處理將進入br_handle_frame_finish。

-           br_handle_frame_finish

1           橋接器處於混雜模式或者報文目標地址是組播地址,該報文會走br_pass_frame_up流程。

2           同時,如果報文目標地址不是本橋接器上的某一端點(!dst->is_local),該報文可能將複製,並進行forward。

-           br_pass_frame_up

1           注意到,該函數切換skb->dev,並執行NF_HOOK(NR_BR_LOCAL_IN, netif_receive_skb),相當於重新接收報文,但是skb->dev是br,非port,因此進不到bridge處理流程,果真是pass up。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.