一種ONU的基于VLAN的IGMP Snooping實現方法
【專利摘要】本發明提供了一種ONU的基于IGMP?Snooping實現方法,內容主要集中在linux內核的二層橋處理的地方,在bridgenetfilter的鉤子點NF_BR_PRE_ROUTING的鉤子函數br_handle_frame_finish中再掛一個鉤子函數igmp_snooping_handler,并實現一個igmp_snooping.ko的內核模塊,當igmp_snooping.ko內核模塊初始化時將igmp_snooping的實際處理函數br_handle_igmp_snooping(structsk_buff*skb)賦值給igmp_snooping_handler。
【專利說明】—種ONU的基于VLAN的IGMP Snooping實現方法
【技術領域】
[0001]本發明涉及網絡通信終端領域,特別涉及一種ONU的基于VLAN的IGMP Snooping實現方法。
【背景技術】
[0002]IGMP Snooping 是 Internet Group Management Protocol Snooping (互聯網組管理協議窺探)的簡稱,它是運行在二層設備上的組播約束機制,用于管理和控制組播組。
[0003]運行IGMP Snooping的二層設備通過對收到的IGMP報文進行分析,為端口和MAC組播地址建立起映射關系,并根據這樣的映射關系轉發組播數據。當二層設備沒有運行IGMP Snooping時,組播數據在二層被廣播;當二層設備運行了 IGMP Snooping后,已知組播組的組播數據不會在二層被廣播,而在二層被組播給指定的接收者。
[0004]許多網絡設備都已經實現了 IGMP Snooping,盡管實現方式不盡相同,但是原理都是相通的,就是在網絡的二層通過對收到的IGMP控制報文進行分析,為端口和MAC組播地址建立起映射關系,并根據這樣的映射關系轉發組播數據。若網絡設備不支持IGMPSnooping或者沒有運行IGMP Snooping時,組播數據在二層會被廣播到每個端口 ;若網絡設備支持IGMP Snooping而且運行了 IGMP Snooping后,組播數據不會在二層被廣播,而在二層被組播給指定的接收者,若沒有接收者點播組播服務,則不轉發組播數據。IGMPSnooping使用戶只在需要時才轉發組播數據,這樣不僅能夠達到抑制二層組播泛濫的作用,同時在降低網絡負荷方面也起到一定的作用,特別是在視頻服務越來越豐富的今天。
[0005]IGMP典型組網如圖1的光纖到戶拓撲圖,ONU放置在用戶家中,HomePC點播視頻服務后,IGMP Server的組播數據流帶上組播VLAN后發送到0NU,開啟IGMP Snooping的ONU將組播數據的VLAN剝除后轉發給HomePC,Laptop不會收到組播數據,從而不影響其上網等業務。
[0006]還有一種情況,如圖2的光纖到樓拓撲圖,ONU放置在樓道中,下面接多臺交換機,多臺交換機都配置了 VLAN,且VLAN分別不同,這就要求ONU配置成VLAN透傳模式,將IGMPServer帶組播VLAN的數據流依然帶上原有VLAN轉發給下面的交換機。然而,很多ONU的IGMP Snooping不能處理帶VLAN的組播數據流,原因是普通的IGMP Snooping處理的都是不帶VLAN的報文,沒有考慮到圖2的VLAN透傳的應用場景。所以當成普通的二層數據廣播到各個SWICH,IGMP Snooping功能失效。
【發明內容】
[0007]為了克服目前如圖2的光纖到樓拓撲圖中,很多ONU的IGMP Snooping不能處理帶VLAN的組播數據流,所以當成普通的二層數據廣播到各個SWICH,IGMP Snooping功能失效的不足。提供一種可以實現帶VLAN的IGMP Snooping方法。
[0008]本發明的技術方案是:一種ONU的基于VLAN的IGMP Snooping實現方法,該方法中,主要由Iinux內核的二層橋實現基于VLAN的IGMP Snooping,在bridge netfilter的鉤子點NF_BR_PRE_ROUTING實現,內核收到組播報文以后,進入到鉤子點NF_BR_PRE_ROUTING,包括以下步驟:
步驟1、報文進入到鉤子點NF_BR_PRE_ROUTING時,確定是否為IGMP控制報文,如果是IGMP控制報文,轉向步驟3,否則,轉向步驟2 ;
步驟2、從bridge的mc_list組播轉發表中查找報文對應的組播轉發條目,若能找到則根據找到的組播轉發條目的目的端口轉發所述的IGMP數據報文,結束,否則進入步驟5處理;
步驟3、在啟用帶VLAN的IGMP Snooping功能的情況下,將IGMP控制報文的VLAN的標簽去除,并記錄下VLAN ID和VLAN優先級;
步驟 4、若 IGMP 控制報文是 IGMPV2_H0ST_MEMBERSHIP_REP0RT 或 IGMP_H0ST_MEMBERSHIP_REPORT時;先判斷該報文對應的轉發條目是否存在,存在則更新,不存在則添加對應的轉發條目;
若IGMP控制報文為IGMPV3_H0ST_MEMBERSHIP_REP0RT時,對IGMPv3進行處理,更新或添加組播轉發條目;
若IGMP控制報文是IGMP_HOST_LEAVE_MESSAGE ;刪除報文對應的組播轉發條目;
步驟5、所有的IGMP控制報文進入bridge 二層轉發處理,bridge根據二層轉發表條目來轉發該報文,若二層轉發條目不存在,則將報文轉送到該bridge的每個端口。
[0009]本發明中,通過刪除VLAN標簽,記錄VLAN信息,最后還原VLAN標簽來解決目前普通的IGMP Snooping處理的都是不帶VLAN的報文,不能實現IGMP Snooping的不足。
[0010]下面結合具體實施例對本發明作較為詳細的描述。
【專利附圖】
【附圖說明】
[0011]圖1是光纖到戶拓撲圖(I)。
[0012]圖2是光纖到戶拓撲圖(2)。
[0013]圖3是本發明實施例流程圖。
【具體實施方式】
[0014]實施例1,本實施例提供了一種類似于如圖2所示的光纖到戶拓撲結構的家庭網絡中VLAN的IGMP Snooping實現方法。以下對本發明方法進行詳細說明。
[0015]本實施例中,需要在內核netfilter中的鉤子點NF_BR_PRE_R0UTING的鉤子函數 br_handle_frame_finish 中再掛一個鉤子函數 igmp_snooping_handler。另外,還需要實現一個igmp_snooping的內核模塊,當igmp_snooping內核模塊初始化時將igmp_snooping 的實際處理函數 br_handle_igmp_snooping (struct sk_buff *skb)賦值給igmp_snooping_handler。
[0016]如圖3所示,是帶VLAN的IGMP Snooping實現的處理流程圖,包括如下步驟: 本實施例步驟Ml至M8是判斷接收到的報文是IGMP控制報文,只有是IGMP控制報文
才需要進行實現IGMP Snooping處理。
[0017]步驟Ml:本步驟為內核在netif_receive_skb收到報文。
[0018]步驟M2:本步驟為報文進入到內核鉤子點BR_PRE_R0UTING的br_handle_frame_finish 函數。
[0019]步驟M3:本步驟判斷接收到的報文是否為組播報文,如果是組播報文則進入步驟M4處理,否則進入步驟M20處理。
[0020]步驟M4:本步驟判斷鉤子函數igmp_snooping_handler是否為空,不為空則進入步驟M5處理,為空則進入步驟M20處理。
[0021]步驟M5:本步驟主要判斷報文是否為IP報文。如果不是IP報文,則進入步驟M6處理;否則進入M7處理。
[0022]步驟M6:本步驟判斷是否開啟帶VLAN的IGMP Snooping功能且報文為VLAN報文。若開啟帶VLAN的IGMP Snooping功能且報文為VLAN報文則進入步驟M7處理,否則進入步驟M20處理。
[0023]步驟M7:本步驟判斷報文是否為IGMP控制報文,若不是IGMP控制報文則進入步驟M8處理,如果是IGMP控制報文進入步驟MlO處理。
[0024]步驟M8:本步驟從bridge的mc_list組播轉發表中查找報文對應的組播轉發條目,若能找到則進入步驟M9處理,否則進入步驟M20處理。
[0025]步驟M9:本步驟將根據找到的組播轉發條目的目的端口轉發IGMP數據報文。
[0026]步驟MlO:本步驟判斷是否開啟帶VLAN的IGMP Snooping功能且報文為VLAN報文。若開啟帶VLAN的IGMP Snooping功能且報文為VLAN報文則進入步驟Mll處理,否則進入步驟Ml2處理,
步驟Mll:本步驟將報文的VLAN Tag去除,并記錄下VLAN ID和VLAN Priority,然后進入步驟Ml2處理。
[0027]步驟Ml2:本步驟判斷IGMP報文類型是否為IGMPV2_H0ST_MEMBERSHIP_REP0RT或IGMP_H0ST_MEMBERSHIP_REP0RT。若是則進入步驟M13處理,否則進入步驟M14處理。
[0028]步驟M13:本步驟先判斷該報文對應的轉發條目是否存在,存在則更新,不存在則添加對應的轉發條目,然后進入步驟M20處理。
[0029]步驟M14:本步驟判斷IGMP報文類型是否為IGMPV3_H0ST_MEMBERSHIP_REP0RT,若是則進入步驟M15處理,否則進入步驟M16處理。
[0030]步驟M15:本步驟對IGMPv3進行處理,最終更新或添加組播轉發條目,然后進入步驟M20處理。
[0031]步驟M16:本步驟判斷IGMP報文類型是否為IGMP_H0ST_LEAVE_MESSAGE,若是則進入步驟M17處理,否則進入步驟M18處理。
[0032]步驟M17:本步驟刪除報文對應的組播轉發條目,然后進入步驟M20處理。
[0033]上面主要描述對四種IGMP控制報文的處理過程,IGMPV2_H0ST_MEMBERSHIP_REPORT 或 IGMP_H0ST_MEMBERSHIP_REP0RT 的處理過程如步驟 13。 IGMPV3_H0ST_MEMBERSHIP_REP0RT的處理過程如步驟15。IGMP_H0ST_LEAVE_MESSAGE的處理過程如步驟17。
[0034]步驟M18:本步驟判斷該報文是否記錄過VLAN ID和VLAN Priority,若記錄過則進入步驟M19處理,否則進入步驟M20處理。
[0035]步驟M19:本步驟根據該報文記錄過的VLAN ID和VLAN Priority添加VLAN Tag,然后進入步驟M20處理。[0036]步驟M20 ;本步驟報文進入bridge 二層轉發處理,bridge根據二層轉發表條目來轉發該報文,若二層轉發條目不存在,則將報文flood到該bridge的每個端口。
[0037]以上所述的具體實施例,僅用于例釋本發明的特點及功效,而非用于限定本發明的可實施范疇,在未脫離本發明上述的精神與技術范圍的情況下,任何運用本發明所揭示內容而完成的等效改變及修飾,均仍應被上述的權利要求所涵蓋。
【權利要求】
1.一種ONU的基于VLAN的IGMP Snooping實現方法,該方法中,主要由Iinux內核的二層橋實現基于 VLAN 的 IGMP Snooping,在 bridge netfilter 的鉤子點 NF_BR_PRE_ROUTING實現,其特征在于:內核收到組播報文以后,進入到鉤子點NF_BR_PRE_ROUTING,包括以下步驟: 步驟1、報文進入到鉤子點NF_BR_PRE_ROUTING時,確定是否為IGMP控制報文,如果是IGMP控制報文,轉向步驟3,否則,轉向步驟2 ; 步驟2、從bridge的mc_list組播轉發表中查找報文對應的組播轉發條目,若能找到則根據找到的組播轉發條目的目的端口轉發所述的IGMP數據報文,結束,否則進入步驟5處理; 步驟3、在啟用帶VLAN的IGMP Snooping功能的情況下,將IGMP控制報文的VLAN的標簽去除,并記錄下VLAN ID和VLAN優先級; 步驟 4、若 IGMP 控制報文是 IGMPV2_H0ST_MEMBERSHIP_REP0RT 或 IGMP_H0ST_MEMBERSHIP_REPORT時;先判斷該報文對應的轉發條目是否存在,存在則更新,不存在則添加對應的轉發條目; 若IGMP控制報文為IGMPV3_H0ST_MEMBERSHIP_REP0RT時,對IGMPv3進行處理,更新或添加組播轉發條目; 若IGMP控制報文是IGMP_HOST_LEAVE_MESSAGE ;刪除報文對應的組播轉發條目; 步驟5、所有的IGMP控制報文進入bridge 二層轉發處理,bridge根據二層轉發表條目來轉發該報文,若二層轉發條目不存在,則將報文轉送到該bridge的每個端口。
【文檔編號】H04L29/06GK103457861SQ201310371678
【公開日】2013年12月18日 申請日期:2013年8月23日 優先權日:2013年8月23日
【發明者】伍國祥, 郭小東, 黃錚, 張煒 申請人:深圳市共進電子股份有限公司