一种Linux内核协议栈网桥数据转发方法

文档序号:7857060阅读:545来源:国知局
专利名称:一种Linux内核协议栈网桥数据转发方法
技术领域
本发明涉及嵌入式操作系统领域,特别涉及Linux内核协议栈网桥数据转发方法。
背景技术
目前LINUX内核协议栈网桥的实现方式中当在一个桥里面添加两个或两个以出设备时,对于同一目的MAC需要走不同出设备的数据报文将只有一个数据流能通。原因在于LINUX内核协议栈网桥转发表项的学习和转发原理是根据MAC计算HASH值,以计算出的 HASH值为索引建立和查找转发表项进行数据报文的转发,一个转发表项至少包括端口号、转发标记、老化时间、出设备。这里出设备就是对应的硬件的端ロ,通常在表象中ー个mac地址只能对应ー个出设备,每ー个mac地址对应ー个出设备。在学习阶段,计算数据报文源MAC地址的HASH值建立转发表项;在转发阶段,计算目的MAC地址的HASH值,通过HASH查找转发表项进行转发。因此,对于同一个MAC地址计算出的HASH值在网桥中只能建立ー个转发表项、对应ー个出设备,对于去往其它出设备的数据报文因走错出设备而到达不了目的地,不能满足数据转发的需求。

发明内容
本发明针对目前目前LINUX内核协议栈网桥的实现方式中对于同一个MAC地址计算出的HASH值在网桥中只能建立ー个转发表项、对应ー个出设备,对于去往其它出设备的数据报文因走错出设备而到达不了目的地,不能满足数据转发的需求的不足,提供ー种利用VLAN ID + MAC实现Linux内核协议栈网桥数据转发方法。本发明为了完成其技术目的所采用的技术方案是ー种Linux内核协议栈网桥数据转发方法,包括以下步骤
A、系统启动时初始化存储转发表项的双向链表;
B、根据待转发数据报文所帯源设备与VLAN的绑定关系找该待转发数据报文用于建立转发表项的VLAN ID ;从数据包中提取出用于建立转发表项的源MAC地址;
C、计算步骤K的所述的VLANID和源MAC地址的HASH值;
D、根据步骤C计算的HASH值轮询转发表项
a)未找到转发表项,建立以HASH值为索引的转发表项插入到转发表中;
b)找到转发表项,更新找到转发表项的老化时间;
E、根据待转发数据报文所帯源设备与VLAN的绑定关系找该待转发数据报文用于查找转发表项的VLAN ID ;从数据包中提取出用于查找转发表项的目的MAC地址;
F、计算步骤E中的所述的VLANID和目的MAC地址的HASH值;
G、根据步骤F中计算的HASH值轮询转发表项
1)找到转发表项,根据转发表项进行转发;
2)未找到转发表项,在桥中广播该数据报文。
进ー步的,上述的Linux内核协议栈网桥数据转发方法中所述的步骤A中,初始化存储转发表项的双向链表是在LINUX内核启动的时初始化的。进ー步的,上述的Linux内核协议栈网桥数据转发方法中在步骤B和E中,通过应用层的设置将VALN ID和端ロ设备进行绑定,在系统启动时我们将VLAN和端ロ设备的绑定关系传入内核协议栈,在内核中根据数据报文所帯的源端ロ设备可以快速查找VLAN对应的 VLAN ID。进ー步的,上述的Linux内核协议栈网桥数据转发方法中在步骤D中,插入转发表项时需要给表项分配内存,然后插入到存储转发表项的双向链表中;在表项超时后,需要将对应的转发表项从存储转发表项的双向链表中删除,同时将分配改该表项的内存释放掉。
本发明的有益效果是整个过程实现起来简单,容易实施,对LINUX内核的稳定性,扩展性有保证,非常适合于基于LINUX系统的嵌入式设备网桥数据转发的需求。LINUX内核协议栈网桥的学习和转发方法原理是根据MAC计算HASH值,以计算的HASH值为索引建立和查找转发表象进行数据报文的转发,对应同一个MAC地址只能建立一个转发表象,而ー个转发表象对应同一个出设备,这样就导致了同一个MAC去往不同出设备的数据流只有一个能通;本发明通过VLAN ID和MAC共同计算HASH值,对于同一个MAC可以学习到对应不同出设备的转发表象,保证同一个MAC去往不同出设备的数据流畅通。下面通过结合具体实施例和附图对本发明进行进ー步的说明。


附图I是本发明实施例I流程图。
具体实施例方式如图I所示,本实施例是ー种以VLAN+MAC实现的LINUX内核协议栈网桥的数据转发方法,该方法借助网络数据报文和设备配套软件指令实现,具体包括启动引导程序、加载LINUX系统内核、启动应用程序、查找MAC和VLAN、学习转发表项、转发数据报文过程。首先在LINUX内核协议栈起来时,初始化ー个存储转发表项的双向链表,当有数据报文进入内核协议栈网桥时,通过VLAN和MAC共同计算HASH值,以HASH为索引建立转发表项,插入到存储转发表项的双向链表中,对于同一源的MAC地址,能学习到对应多个不同出设备的转发表项。本方法的步骤包括
步骤I、系统启动,初始化存储转发表项的双向链表;
步骤2、根据数据报文所帯源设备与VLAN ID
的绑定关系找该数据报文用于建立转发表项的VLAN ID ;从数据包中提取出用于建立转发表项的源MAC地址;
步骤3、计算步骤2中VLAN ID和MAC地址的HASH值;
步骤4、根据步骤3计算的HASH值轮询转发表项
1)未找到转发表项,建立以HASH值为索引的转发表项插入到转发表中;
2)找到转发表项,更新找到转发表项的老化时间;
步骤5、根据数据报文所帯源设备与VLAN ID的绑定关系找该数据报文用于查找转发表项的VLAN ID ;从数据包中提取出用于查找转发表项的目的MAC地址;
这里步骤2和5中的vlan id都是应用层设定的与端ロ设备绑定的vlan id,不同的vlan id与不同的端ロ设备绑定,因此根据数据包所帯源设备与vlan id的绑定关系可以查找 vlan id。步骤6、计算步骤5中VLAN ID和MAC地址的HASH值;
步骤7、根据步骤F中计算的HASH值轮询转发表项
3)找到转发表项,根据转发表项进行转发;
4)未找到转发表项,在桥中广播该数据报文; 本实施例在建立转发表项前,先要初始化存储转发表项的双向链表,在步骤A中,初始化存储转发表项的双向链表是在LINUX内核启动的时初始化的。在步骤B和E中,通过应用层的设置将VALN和端ロ设备进行绑定(对于没有绑定VLAN的端ロ设备默认其VLAN为0 ),在系统启动时我们将VLAN和端ロ设备的绑定关系传入内核协议栈,在内核中根据数据报文所帯的入端ロ设备可以快速查找VLAN其对应的VLAN值。在步骤D中,插入转发表项时需要给表项分配内存,然后插入到存储转发表项的双向链表中;在表项超时后,需要将对应的转发表项从存储转发表项的双向链表中删除,同时将分配改该表项的内存释放棹,以节省内存空间,防止内存泄露。在整个LINUX内核协议栈网桥的转发过程中,有两次查找转发表项的动作,第一次查找是在学习阶段,根据数据报文源MAC和VLAN计算的HASH值查找的,以确定对应该源MAC和VLAN组合的转发表项有没有建立。这里学习阶段就是指转发表项建立阶段,转发表项都是通过学习建立的,在学习阶段根据源mac和vlan id计算的hash值查找转发表项,没有找到就建立转发表项,找到了就更新老化时间。转发阶段就是指转发数据的时候查找转发表项进行数据转发的过程,根据目的mac和vlan id计算hash值如果找到表象就转发数据报文,没有找到就广播数据报文;VLAN ID用来区分不同的业务数据流(业务如上网、语音、IPTV业务等),值在I到4096之间。第二次是在转发阶段,根据数据报文的目的MAC和VLAN计算的HASH值进行查找的,用于确定数据报文往那个接ロ转发,对于没有找到表项的数据报文则在网桥中广播该数据报文。
权利要求
1.ー种Linux内核协议栈网桥数据转发方法,其特征在于,包括以下步骤 A、系统启动时初始化存储转发表项的双向链表; B、根据待转发数据报文所帯源设备与VLAN的绑定关系找该待转发数据报文用于建立转发表项的VLAN ID ;从数据包中提取出用于建立转发表项的源MAC地址; C、计算步骤K的所述的VLANID和源MAC地址的HASH值; D、根据步骤C计算的HASH值轮询转发表项 未找到转发表项,建立以HASH值为索引的转发表项插入到转发表中; 找到转发表项,更新找到转发表项的老化时间; E、根据待转发数据报文所帯源设备与VLAN的绑定关系找该待转发数据报文用于查找转发表项的VLAN ID ;从数据包中提取出用于查找转发表项的目的MAC地址; F、计算步骤E中的所述的VLANID和目的MAC地址的HASH值; G、根据步骤F中计算的HASH值轮询转发表项 1)找到转发表项,根据转发表项进行转发; 2)未找到转发表项,在桥中广播该数据报文。
2.根据权利要求I所述的Linux内核协议栈网桥数据转发方法,其特征在于所述的步骤A中,初始化存储转发表项的双向链表是在LINUX内核启动的时初始化的。
3.根据权利要求I所述的Linux内核协议栈网桥数据转发方法,其特征在于在步骤B和E中,通过应用层的设置将VALN ID和端ロ设备进行绑定,在系统启动时我们将VLAN和端ロ设备的绑定关系传入内核协议栈,在内核中根据数据报文所帯的源端ロ设备可以快速查找VLAN对应的VLAN ID。
4.根据权利要求I所述的Linux内核协议栈网桥数据转发方法,其特征在于在步骤D中,插入转发表项时需要给表项分配内存,然后插入到存储转发表项的双向链表中;在表项超时后,需要将对应的转发表项从存储转发表项的双向链表中删除,同时将分配改该表项的内存释放掉。
全文摘要
本发明提供了一种Linux内核协议栈网桥数据转发方法,在LINUX内核协议栈起来时,初始化一个存储转发表项的双向链表,当有数据报文进入内核协议栈网桥时,通过VLAN和MAC共同计算HASH值,以HASH为索引建立转发表项,插入到存储转发表项的双向链表中,对于同一源的MAC地址,能学习到对应多个不同出设备的转发表项。本发明的有益效果是整个过程实现起来简单,容易实施,对LINUX内核的稳定性,扩展性有保证,非常适合于基于LINUX系统的嵌入式设备网桥数据转发的需求。
文档编号H04L12/46GK102780627SQ20121026696
公开日2012年11月14日 申请日期2012年7月31日 优先权日2012年7月31日
发明者何思斌, 王志波, 邓永坚, 郭小东 申请人:深圳市共进电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1