Linux IGMP SNOOPING 學習筆記 之三 igmp snooping實現需求分析
本文主要是總結分析,在前面兩節中,我們根據linux2.6.32中實現的igmp snooping程式碼,分析了igmp snooping的流程。
本節在前兩節的基礎上分析實現igmp snooping所需要的功能
一、資料結構
對於實現一個子層功能,最主要的就是資料結構的建立。對於igmp snooping來說,我們需要建立的資料結構之間的關係是
1、一個組播組可以與多個橋埠關聯
2、一個橋埠可以與多個組播組關聯
3、一個橋埠只與一個橋關聯
4、對於橋埠而言,有lan側橋埠與wan側橋埠之分
5、組播組資料項之間如何進行連結(可以通過連結串列實現等)
6、如何通過一個橋埠,快速的查詢到其所加入的所有組播組
7、如何通過一個組播組資料項,快速的查詢到加入到該組播組的所有橋埠
根據上面的條件我們就可以構造相應的組播組資料結構滿足上述要求。對於一個子系統,資料結構最能體現功能的好壞,所以我們的資料結構就需要儘可能的去考慮
各種條件。
2、功能實現
1、對於igmp report報文的處理,對於igmp加入報文,我們就需要建立相應的組播組資料項,然後再將加入報文傳送出去。
對於已建立的組播組項,我們需要相應的過期定時器,以及傳送查詢定時器,用於維護組播組資料庫的更新操作。
2、對於leave報文,需要刪除相應的組播組資料庫項等。
3、對於lan側橋埠與wan側橋埠,其接收或者傳送igmp 報文的型別限制等。
4、提供外部介面,對於二層接收到的組播流資料,判斷是否需要轉發到相應的一個或者多個埠
5、提供組播snooping功能開啟或者關閉的介面函式供應用層呼叫
6、在/proc目錄下建立子文件,用於檢視目前已加入組播組的橋埠及組播組資訊,以用於除錯。
7、程式碼實現中使用巨集嚴格隔開igmp snooping功能,當不編譯igmp snooping功能時,保證核心可以正常工作。
如果是我們自己實現igmp snooping功能的話,考慮到上述大致情形,應該是可以簡單的實現igmp snooping 的功能了。在實際的實現中,對於每一個
函式我們都進行詳細設計,增加判斷條件等,這樣最終我們自己實現的igmp snooping功能應該也是ok的。
如果依據上面的總體需求,再去閱讀linux igmp snooping的實現程式碼,會容易很多。對於閱讀linux核心程式碼來說,我們最主要的是理解其實現原理。
如果我們每閱讀完一個子系統的功能實現流程後,都花一點時間去思考其實現原理及需求,應該對我們平常的程式碼設計會有很大的幫助。