Linux软桥支持VLAN的方法

文档序号:7811234阅读:758来源:国知局
Linux软桥支持VLAN的方法
【专利摘要】本发明公开了一种Linux软桥支持VLAN的方法,包括以下步骤:在Linux内核创建网桥br0和VLAN网络端口,并将网络端口和VLAN网络端口加入到网桥br0中形成相应的网桥端口,网桥端口以VLAN端口链表组的形式进行维护;配置网桥br0中网桥端口,创建或更新对应VLAN端口链表;利用网桥br0实现基于VLAN的数据转发。本发明实现了Linux网络协议栈网桥对VLAN支持,能在不同网络端口上实现基于VLAN的二层转发;有助于基于Linux的网络设备在支持路由基础上实现二层VLAN功能,实现桥内VLAN网络端口和网络端口的灵活配置,弥补了Linux软桥不支持VLAN功能的缺陷。
【专利说明】Linux软桥支持VLAN的方法

【技术领域】
[0001] 本发明涉及网络设备,具体涉及Linux软桥支持VLAN的方法。

【背景技术】
[0002] Linux操作系统已广泛应用于各种嵌入式系统。同其他操作系统相比具有以下 优势:首先,Linux是开放源代码的,不存在黑箱技术,遍布全球的众多Linux爱好者又是 Linux开发者的强大技术支持;其次,Linux的内核小、效率高,内核的更新速度很快,Linux 是可以定制的,其系统内核最小只有约上百K字节;最后,Linux是免费的0S,在价格上极具 竞争力。另外,Linux还有着嵌入式操作系统所需要的很多特色,突出的就是Linux适应于 多种CPU和多种硬件平台,是一个跨平台的系统。Linux对网络中最常用的TCP/IP协议有 最完备的支持,提供了包括十兆、百兆、千兆的以太网络以及无线网络、令牌环网,甚至卫星 的支持,所以Linux很适于网络设备。
[0003] Linux操作系统具有有巨大的市场前景和商业机会,出现了大量的专业公司和产 品,如 Montavista Lineo Emi 等,有行业协会如 Embedded Linux Consortum 等,得到世界 著名计算机公司和OEM板级厂商的支持,例如IBM Motorola Intel等。传统的嵌入式系统 厂商也采用了 Linux策略,如Lynxworks Windriver QNX等,还有Internet上的大量嵌入 式Linux爱好者的支持。嵌入式Linux支持几乎所有的嵌入式CPU和被移植到几乎所有的 嵌入式(EM板。
[0004] Linux操作系统应用领域非常广泛,主要的应用领域有信息家电、PDA、机顶盒、 Digital Telephone、Answering Machine、Screen Phone、数据网络、Ethernet Switches、 Router、Bridge、Hub、Remote access servers、ATM、Frame relay、远程通信、医疗电子、交 通运输计算机外设、工业控制、航空航天领域等。
[0005] 目前路由器应用和网桥等设备中都存在不同网络端口之间的桥接需求,例如无线 WiFi端口和以太网端口之间、用户侧端口和网络侧端口之间等需要桥接数据。
[0006] Linux网络协议栈实现了基本的网桥功能,支持网桥的MAC地址学习、老化和数据 包转发功能,可以实时进行网桥的创建,网桥内的端口可进行动态添加和删除,支持STP协 议等。另外Linux内核网络协议栈在实际网络端口基础上实现了 802. 1Q协议栈,通过创建 的虚拟网络端口,可以处理带802. 1Q标记的数据包,用于添加和删除标记,同时可以根据 标记中的802. Ip实现优先级处理。
[0007] 但是Linux网络协议栈软桥不支持VLAN功能,而对于网桥等网络设备来说,一般 都需要支持VLAN功能,因此Linux网络协议栈软桥存在功能缺陷。


【发明内容】

[0008] 本发明所要解决的技术问题是Linux软桥不支持VLAN功能的问题。
[0009] 为了解决上述技术问题,本发明所采用的技术方案是提供一种Linux软桥支持 VLAN的方法,包括以下步骤:
[0010] 步骤A10、在Linux内核创建网桥brO和VLAN网络端口,并将网络端口和VLAN网 络端口加入到网桥brO中形成相应的网桥端口,网桥端口以VLAN端口链表组的形式进行 维护;
[0011] 步骤A20、配置网桥brO中网桥端口,创建或更新对应VLAN端口链表;
[0012] 步骤A30、利用网桥brO实现基于VLAN的数据转发。
[0013] 在上述方法中,步骤A10中网桥VLAN端口链表的维护方法如下:
[0014] (1) 一组VLAN ID相同的网桥端口通过一个VLAN端口链表来组织;
[0015] ⑵每个网桥端口的结构成员中包含指向所属VLAN端口链表的链表头信息,用于 数据包洪泛转发时遍历VLAN上的所有端;
[0016] (3)在网桥中创建新的VLAN网络端口时,需创建新的VLAN端口链表;
[0017] (4)添加网络端口或者VLAN网络端口到网桥时,根据网桥端口的PVID或VLAN ID 查找对应VLAN端口链表,添加网桥端口到该VLAN端口链表的表尾;
[0018] (5)删除网桥中网络端口或者VLAN网络端口时,根据网桥端口的VLAN ID查找对 应VLAN端口链表,遍历VLAN端口链表查找相应成员,将其删除。
[0019] 在上述方法中,步骤A20包括以下步骤:
[0020] 步骤A21、配置VLAN网络端口的网络端口和VLAN ID,创建基于802. 1Q的虚拟端 口,配置网络端口的PVID属性;
[0021] 步骤A22、判断新增网桥端口是否为网络端口,如果是网络端口,则获取该网桥端 口的PVID,转步骤A23 ;如果是VLAN网络端口,则获取该虚拟端口的VLAN ID,转步骤A23 ;
[0022] 步骤A23、以VLAN ID或者PVID为索引,查找对应VLAN端口链表是否存在,如果不 存在,创建新的VLAN端口链表;如果存在,将新增的网桥端口加入对应的VLAN端口链表。
[0023] 在上述方法中,步骤A30包括以下步骤:
[0024] 步骤A31、网络端口接收到数据包;
[0025] 步骤A32、检查该数据包是否带有802. IQ TAG,如果数据包协议类型为802. 1Q,则 转步骤A33 ;否则转步骤A34 ;
[0026] 步骤A33、剥离数据包中的802. 1Q字段,修改数据包的接收端口为VLAN网络端口, 转步骤A34 ;
[0027] 步骤A34、判断数据包的接收端口是否为网桥端口,如果是,则转步骤A35 ;否则送 Linux上层协议栈处理,结束;
[0028] 步骤A35、数据包进入桥协议栈进行处理,并创建或更新转发表;
[0029] 步骤A36、判断数据包的目的MAC地址是广播地址还是单播地址,如果是广播地 址,则转步骤A39 ;否则转步骤A37 ;
[0030] 步骤A37、根据数据包目的MAC地址和VLAN信息查找转发表;
[0031] 步骤A38、如果转发表中存在与目的MAC地址相同的VLAN网络端口,转步骤A40 ; 如果不存在,则转步骤A39 ;
[0032] 步骤A39、根据接收数据包的网络端口 VLAN ID信息,获取该网桥端口所属的网桥 VLAN端口链表,向VLAN端口链表中的其他网络端口进行洪泛;
[0033] 步骤A40、定位到与目的MAC地址相同的VLAN网络端口,由网桥端口转发;
[0034] 步骤A41、判断桥端口是否为VLAN网络端口,如果是,则转步骤A42 ;否则转步骤 A43 ;
[0035] 步骤A42、通过802. 1Q协议栈添加对应的802. IQ TAG,转步骤A43 ;
[0036] 步骤A43、将数据包经由网络端口发送出去;
[0037] 步骤A44、结束。
[0038] 本发明,在Linux软桥协议栈基础上,当进行转发表表项学习时,基于数据包的端 口信息和VLAN ID来更新转发表项;在决定转发目的端口时,除了查询目的端口外还比较 表项VLAN信息和数据包的VLAN ID,来决定转发目的端口,从而实现了 Linux软桥的VLAN 功能。

【专利附图】

【附图说明】
[0039] 图1为Linux软桥支持VLAN的方法流程图;
[0040] 图2为Linux内核网桥VLAN端口链表;
[0041] 图3为Linux软桥支持VLAN的配置VLAN端口流程图;
[0042] 图4为软桥支持VLAN的数据转发流程图。

【具体实施方式】
[0043] 下面结合说明书附图和具体实施例对本发明做出详细的说明。
[0044] 本实施例的实施环境为嵌入式Linux系统的网络设备,假定该网络设备的网络端 口分别为 ethO, ethl,eth2, eth3, eth4,…,VLAN 配置如下所示:
[0045] ethO:PVID 为 100,同时属于 VLAN 101,102, 103, 104 ;
[0046] ethl:PVID 为 101,同时属于 VLAN 100,102, 103, 104 ;
[0047] eth2:PVID 为 102,同时属于 VLAN 101,100, 103, 104 ;
[0048] eth3:PVID 为 103,同时属于 VLAN 101,102, 100, 104 ;
[0049] eth4:PVID 为 104,同时属于 VLAN 101,102, 103, 100 ;
[0050] …
[0051] 如图1所示,本发明提供的Linux软桥支持VLAN的方法包括以下步骤:
[0052] 步骤A10、在网络设备的Linux内核中创建网桥brO和VLAN网络端口(虚拟端口 ethx. XXX),并将网络端口(物理端口 ethx,具有PVID属性)和VLAN网络端口加入到网桥 brO中形成相应的网桥VLAN端口(简称网桥端口),网桥端口在Linux内核中以如图1所 示的VLAN端口链表组的形式进行维护。例如图1第一行中:VLAN100表示VLAN ID =100 网桥端口,ethO 表示网络端口,ethL 100、eth2. 100、eth3. 100、eth4. 100 表示网桥端口相 同的VLAN网络端口。
[0053] VLAN端口链表的维护方法如下:
[0054] (1) -组VLAN ID相同的网桥端口通过一个VLAN端口链表来组织,如图1中的每 一行;
[0055] (2)每个网桥端口的结构成员中包含指向该网桥端口所属VLAN端口链表的链表 头信息,用于数据包洪泛转发时遍历该VLAN上的所有端口;
[0056] (3)当在网桥中创建新的VLAN网络端口时,需创建新的VLAN端口链表;
[0057] (4)添加网络端口或者VLAN网络端口到网桥时,根据网桥端口的PVID或VLAN ID 查找对应VLAN端口链表,并添加网桥端口到VLAN端口链表的表尾;
[0058] (5)当从网桥中删除网络端口或者VLAN网络端口时,根据网桥端口的VLAN ID查 找对应VLAN端口链表,遍历VLAN端口链表查找相应的成员,并从VLAN端口链表中删除。
[0059] 步骤A20、配置网桥brO中的网桥端口,创建或更新对应的VLAN端口链表。
[0060] 网桥端口包含网络端口和VLAN网络端口信息,其中网络端口具有PVID属性,PVID 为网络端口的端口 VLAN ID。
[0061] 如图2所示,步骤A20具体包括以下步骤:
[0062] 步骤A21、通过本地WEB管理页面,将新增的VLAN网络端口的网络端口(ethx)和 VLAN ID配置为基于802. 1Q的虚拟端口(ethx. XXX)的形式,其中,VLAN网络端口基于实际 网络端口进行配置,VLAN范围从1-4095;通过本地WEB管理页面配置网络端口(ethx)的 PVID属性,不配置情况下,所有网络端口 PVID为1 ;
[0063] 步骤A22、将网络端口和新创建的VLAN网络端口加入到网桥brO (新增了网桥端 口)后,判断该网桥端口是否为网络端口,如果是网络端口,则获取该网桥端口的PVID,转 步骤A23 ;如果是VLAN网络端口,则获取该VLAN网络端口的VLAN ID,转步骤A23 ;
[0064] 步骤A23、以PVID或者VLAN ID为索引,查找对应的VLAN端口链表是否存在,如果 不存在,则创建新的VLAN端口链表;如果存在,则将新增的网桥端口加入到对应的VLAN端 口链表中进行维护。
[0065] 步骤A30、利用网桥brO实现基于VLAN的数据转发。
[0066] 如图3所示,步骤A30具体包括以下步骤:
[0067] 步骤A31、网络端口 ethx接收到数据包;
[0068] 步骤A32、Linux内核中的桥钩子函数检查该数据包是否带有802. IQ TAG,如果数 据包协议类型为802. 1Q,则转步骤A33 ;如果数据包协议类型不为802. 1Q,则转步骤A34 ;
[0069] 步骤A33、由802. 1Q协议栈处理数据包剥离数据包中的802. 1Q字段,修改数据包 的接收端口为VLAN网络端口(ethx. XXX),转步骤A34 ;
[0070] 步骤A34、判断数据包的接收端口是否为网桥端口,如果是,则转步骤A35,否则送 Linux上层协议栈处理,结束;
[0071] 步骤A35、数据包进入桥协议栈进行处理,并在网桥brO中,基于数据包源MAC地 址和VLAN信息查找转发表,如果不存在,则添加转发表项,如果存在,则更新转发表项时间 戳;
[0072] 步骤A36、判断数据包的目的MAC地址是广播地址还是单播地址,如果是广播地 址,则转步骤A39 ;如果数据包目的MAC地址为单播地址,则转步骤A37 ;
[0073] 步骤A37、根据数据包目的MAC地址和VLAN信息查找转发表;
[0074] 步骤A38、如果转发表中存在与目的MAC地址相同的VLAN网络端口,转步骤A40 ; 如果不存在,则转步骤A39 ;
[0075] 步骤A39、根据接收数据包的网络端口 VLAN ID信息,获取该网桥端口所属的网桥 VLAN端口链表,向VLAN端口链表中的其他网络端口进行洪泛;
[0076] 步骤A40、定位到与目的MAC地址相同的VLAN网络端口,由网桥端口转发;
[0077] 由于VLAN端口链表的创建,使广播包洪泛范围局限于具有相同VLAN划分的软桥 端口之间;
[0078] 步骤A41、判断网桥端口是否为VLAN网络端口,如果是,则转步骤A42 ;否则转步骤 A43 ;
[0079] 步骤A42、通过802. 1Q协议栈添加对应的802. IQ TAG,转步骤A43 ;
[0080] 步骤A43、将数据包经由网络端口发送出去;
[0081] 步骤A44、结束。
[0082] 本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下作出的结 构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。
【权利要求】
1. Linux软桥支持VLAN的方法,其特征在于,包括以下步骤: 步骤A10、在Linux内核创建网桥brO和VLAN网络端口,并将网络端口和VLAN网络端 口加入到网桥brO中形成相应的网桥端口,网桥端口以VLAN端口链表组的形式进行维护; 步骤A20、配置网桥brO中网桥端口,创建或更新对应的VLAN端口链表; 步骤A30、利用网桥brO实现基于VLAN的数据转发。
2. 如权利要求1所述,其特征在于,步骤A10中网桥VLAN端口链表的维护方法如下: (1) 一组VLAN ID相同的网桥端口通过一个VLAN端口链表来组织; (2) 每个网桥端口的结构成员中包含指向所属VLAN端口链表的链表头信息,用于数据 包洪泛转发时遍历VLAN上的所有端口; (3) 在网桥中创建新的VLAN网络端口时,需创建新的VLAN端口链表; (4) 添加网络端口或者VLAN网络端口到网桥时,根据网桥端口的PVID或VLAN ID查找 对应VLAN端口链表,添加网桥端口到该VLAN端口链表的表尾; (5) 删除网桥中网络端口或者VLAN网络端口时,根据网桥端口的VLAN ID查找对应 VLAN端口链表,遍历VLAN端口链表查找相应成员,将其删除。
3. 如权利要求1所述,其特征在于,步骤A20包括以下步骤: 步骤A21、配置VLAN网络端口的网络端口和VLAN ID,创建基于802. 1Q的虚拟端口,配 置网络端口的PVID属性; 步骤A22、判断新增网桥端口是否为网络端口,如果是网络端口,则获取该网桥端口的 PVID,转步骤A23 ;如果是VLAN网络端口,则获取该虚拟端口的VLAN ID,转步骤A23 ; 步骤A23、以VLAN ID或者PVID为索引,查找对应VLAN端口链表是否存在,如果不存 在,创建新的VLAN端口链表;如果存在,将新增的网桥端口加入对应的VLAN端口链表。
4. 如权利要求1所述,其特征在于,步骤A30包括以下步骤: 步骤A31、网络端口接收到数据包; 步骤A32、检查该数据包是否带有802. IQ TAG,如果数据包协议类型为802. 1Q,则转步 骤A33 ;否则转步骤A34 ; 步骤A33、剥离数据包中的802. 1Q字段,修改数据包的接收端口为VLAN网络端口,转步 骤 A34 ; 步骤A34、判断数据包的接收端口是否为网桥端口,如果是,则转步骤A35;否则送 Linux上层协议栈处理,结束; 步骤A35、数据包进入桥协议栈进行处理,并创建或更新转发表; 步骤A36、判断数据包的目的MAC地址是广播地址还是单播地址,如果是广播地址,则 转步骤A39 ;否则转步骤A37 ; 步骤A37、根据数据包目的MAC地址和VLAN信息查找转发表; 步骤A38、如果转发表中存在与目的MAC地址相同的VLAN网络端口,转步骤A40 ;如果 不存在,则转步骤A39 ; 步骤A39、根据接收数据包的网络端口 VLAN ID信息,获取该网桥端口所属的网桥VLAN 端口链表,向VLAN端口链表中的其他网络端口进行洪泛; 步骤A40、定位到与目的MAC地址相同的VLAN网络端口,由网桥端口转发; 步骤A41、判断桥端口是否为VLAN网络端口,如果是,则转步骤A42 ;否则转步骤A43 ; 步骤A42、通过802. 1Q协议栈添加对应的802. IQ TAG,转步骤A43 ; 步骤A43、将数据包经由网络端口发送出去; 步骤A44、结束。
【文档编号】H04L12/46GK104125128SQ201410395046
【公开日】2014年10月29日 申请日期:2014年8月12日 优先权日:2014年8月12日
【发明者】周转运, 李长春, 王志军, 赵伟 申请人:烽火通信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1