vlan实现的单桥多桥方案比较和设计_第1页
vlan实现的单桥多桥方案比较和设计_第2页
vlan实现的单桥多桥方案比较和设计_第3页
vlan实现的单桥多桥方案比较和设计_第4页
vlan实现的单桥多桥方案比较和设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1TBS现在的VLAN实现分析:21.1模式分析21.2 TBS实现情况21.3 TBS实现存在问题21.4需求分析22设计分析32.1设计约束32.2可选方案32.3比较分析42.4方案选择52.5技术分析53技术设计53.1 ebtables钩子53.2 ebt_vlan.c修改63.3 VLAN设备不添加VLAN标签63.4 数据流程73.5 linux shell配置81 TBS现在的VLAN实现分析:1.1模式分析AP的VLAN实现可以分为桥模式和路由模式来考虑:桥模式:报文在AP中只实现MAC地址的交换,也就是说只在内核的桥进行MAC查表而决定出端口。路由模式:如果报文方向为LAN

2、->WAN则报文首先流入内核的桥,然后再流入内核的路由表来查表决定出口设备;而如果报文方向为WAN->LAN则报文首先进入内核的路由表然后在进入内核的桥在桥中决定LAN出端口。1.2 TBS实现情况TBS使用linux内核的VLAN功能已经实现了通过WAN口设备创建相应VLAN设备,使用此VLAN设备来解释、创建报文的VLANtag标签,并在也就是对于VLAN的路由模式来说,TBS已经实现了。对应VLAN的桥模式,TBS现在的页面操作:使用WAN设备创建相应VLAN设备,然后使用此VLAN设备创建桥连接,在将此桥连接跟一个LAN组捆绑,那么跟此LAN组捆绑的LAN端口接收的报文在桥

3、交换后通过此VLAN设备发送出去的时候就可以加上相关的VLAN标签。从这点来说,TBS现在已经实现了根据LAN端口划分VLAN进行桥模式的做法,只是界面配置不直观。1.3 TBS实现存在问题TBS VLAN桥模式存在的问题:如果WAN口设备本身也加入到桥中,那么根据此WAN口设备创建的VLAN设备无法生效。这是由于WAN口设备进入桥后再上报linux内核的上层会将skb->dev修改为桥,导致问题发生。那么,现在的TBS VLAN桥模式中WAN口只可以接收带VLAN标签的报文进行桥模式转发,而不带VLAN标签的报文则无法进入桥模式转发。1.4需求分析VLAN桥模式后续需求:1. 根据MA

4、C地址划分VLAN2. 根据业务类型(流)划分VLAN2 设计分析2.1设计约束1. 需要与现有功能兼容,否则会导致平台软件大修改;2. 由于TBS平台软件还在开发中,故VLAN功能需要能够容易合进入后续的平台软件版本;2.2可选方案l 单桥方案:1. 现在内核的桥为不支持VLAN的桥,单桥的核心是将内核的桥修改为支持VLAN的桥,将桥的mac表修改为使用mac和vlan作为索引,这样在转发查表时就会根据vlan和mac来决定出端口;报文在流出桥时,如果报文需要加tag,则在桥中添加;2. 桥的端口可以配置PVID和默认优先级;3. 如果需要根据mac地址或者流来决定报文的vlan时,可以使用

5、ebtables来设置skb->vlan;l 多桥方案:1. 维持内核的桥流程,一个vlan使用一个桥来实现,利用桥之间的隔离来达到vlan的隔离功能,如果报文流出桥时需要加tag,则使用现在设备的vlan设备来实现,也就是说需要根据端口设备创建对应的vlan设备,然后在将此vlan设备加到桥中;2. 在报文流进桥时,需要添加代码可以根据端口、mac地址或者流来决定报文的vlan,然后引入相应的桥中;2.3比较分析下面从代码复杂性、兼容性和可移植性三个方面对两个方案进行比较分析功能点比较分析选择页面操作:兼容性:加了VLAN配置页面,必然会跟WAN VLAN配置存在冲突,这里加个规则,如

6、果在VLAN配置页面中的配置的VLAN包含WAN端口,则在WAN VLAN配置的此WAN VLAN设备的IP功能不生效。对于多桥方案,还存在一个WAN VLAN设备创建/删除的冲突问题。可移植性:单桥方案集中在桥修改,而多桥由于存在冲突问题,移植性比较差。复杂性:对于单桥将WAN设备加到桥后,还需要桥逻辑以便WAN设备和WAN VLAN设备的IP功能生效。单桥LAN组绑定兼容性:单桥存在冲突性;而多桥配置VLAN时需要创建多个桥,并需要创建相应LAN口设备的对应VLAN设备并加入桥中。由于LAN口设备不发送带VLAN标签的报文,需要LAN口设备的VLAN设备在发送报文时不添加VLAN标签。复杂

7、性:多桥比较复杂, 多桥WAN桥兼容性:在多桥中当WAN设备加入到桥中,WAN口的VLAN设备则无法接收到报文,而单桥则不存在此问题。复杂性:多桥方案中,为了兼容性,需要做到WAN设备加入到桥后,此WAN口的VLAN设备可以接收到报文,比较复杂。单桥2.4方案选择从功能冲突来说,单桥方案与LAN组绑定存在不可协调冲突,故只能够选择多桥方案,但多桥方案涉及WAN功能和LAN组绑定功能同时修改,对于可移植性来说是不利的。2.5技术分析下面从linux和tbs两个方面来分析实现VLAN需求需要的技术:在linux中,使用多桥来实现可以根据MAC地址或者业务类型(流)确定VLAN的VLAN功能的关键技

8、术:1. 可以使用桥来进行VLAN标签的添加和去除:在linux中,通过往桥添加VLAN设备即可以实现。2. 可以使用桥来进行COS字段的添加修改:使用VLAN设备来对报文进行VLAN标签的添加时,COS字段是又vconfig egress-map 此命令确定的,需要修改相关流程以便可以根据业务类型(流)或者入端口来选择不同COS值。3. 根据MAC地址、业务类型(流)或者端口将报文引到不同桥中:要达到这项要求需要对报文进行分析,为了简便,可以利用ebtables功能来对报文进行分析,但是ebtables现在所有的钩子入口都是在桥中,不符合需求,需要在桥外增加一个钩子入口来达到要求,这是在li

9、ux中最关键也是最复杂的部分。4. LAN口的VLAN在发送报文时不添加VLAN标签。5. WAN设备加入到桥后,WAN设备的VLAN设备也可以接收VLAN报文。在tbs中,需要增加一个VLAN逻辑模块,此逻辑模块完成桥与VLAN的对应关系、对桥进行维护、完成桥的IP功能,维护相关配置节点。3技术设计3.1 ebtables钩子内核修改:1. 在filter表中增加一个VLAN train:参考NF_BR_LOCAL_IN,主要在ebtable_filter.c中增加相关VLAN train的初始化代码;开源软件ebtables修改:1. 修改相关代码配合实验增加的VLAN train3.2

10、ebt_vlan.c修改VLAN需求:根据MAC、业务类型(流)分配VLAN此需求在3.1ebtables钩子功能增加后,可以在shell里面通过下面命令进行VLAN分配:Ebtables t filter A VLAN < 匹配项目> -j vlan vlan-set <vlan_value> vlan-priority <priority>由于VLAN设备构造VLAN标签时的cos算法如下:static inline unsigned short vlan_dev_get_egress_qos_mask(struct net_device* d

11、ev, struct sk_buff* skb)struct vlan_priority_tci_mapping *mp =VLAN_DEV_INFO(dev)->egress_priority_map(skb->priority & 0xF);while (mp) if (mp->priority = skb->priority) return mp->vlan_qos; /* This should already be shifted to mask * correctly with the VLAN's TCI */mp = mp->

12、next;return 0;可以看出需要将skb->priority配置为所需要的值,故ebt_vlan.c中需要将优先级配置到skb->priority中.3.3 VLAN设备不添加VLAN标签增加一个私有UNTAG标记,可以使用下面中的flags字段,此字段现在只使用了一位。当存在使用UNTAG标记时,VLAN设备发送报文时,如果报文为untag报文则不添加VLAN标签。struct vlan_dev_info /* This will be the mapping that correlates skb->priority to * 3 bits of VLAN QOS

13、 tags. */unsigned long ingress_priority_map8;struct vlan_priority_tci_mapping *egress_priority_map16; /* hash table */unsigned short vlan_id; /* The VLAN Identifier for this interface. */unsigned short flags; /* (1 << 0) re_order_header This option will cause the * VLAN code to move around the

14、 ethernet header on * ingress to make the skb look *exactly* like it * came in from an ethernet port. This destroys some of * the VLAN information in the skb, but it fixes programs * like DHCP that use packet-filtering and don't understand * 802.1Q */struct dev_mc_list *old_mc_list; /* old multi

15、-cast list for the VLAN interface. * we save this so we can tell what changes were * made, in order to feed the right changes down * to the real hardware. */int old_allmulti; /* similar to above. */int old_promiscuity; /* similar to above. */struct net_device *real_dev; /* the underlying device/inte

16、rface */struct proc_dir_entry *dent; /* Holds the proc data */unsigned long cnt_inc_headroom_on_tx; /* How many times did we have to grow the skb on TX. */unsigned long cnt_encap_on_xmit; /* How many times did we have to encapsulate the skb on TX. */struct net_device_stats dev_stats; /* Device stats

17、 (rx-bytes, tx-pkts, etc.) */;3.4 WAN口设备接收流程WAN设备加入到桥后,根据linux的接收流程,此WAN设备的VLAN设备则无法接收到对应的VLAN报文,在这些需要修改为可以接收到对应的VLAN报文。在报文进入桥的流程之前进行修改:判断如果报文为VLAN报文,并且此WAN口的VLAN设备存在,则修改skb->dev为此VLAN设备。在现在的流程中可以通过ebtables t filter A VLAN i eth0 j vlan vlan-set 0来实现。3.5 数据流程这里对多桥方案下的关键数据流程进行描述:例子环境:存在VLAN 100和20

18、0,都包含ath0此LAN口,MAC1为VLAN 100,优先级为P1,而MAC2为VLAN 200,优先级为P2。关键数据流:1. LAN口(ath0)到WAN口(eth0):A) ath0接收到数据后skb->dev为ath0,然后进入在dev.c中netif_receive_skb,在这里会进入桥处理函数handle_bridge,在此函数中会进行ebtables的VLAN train处理,在VLAN train中发现MAC为MAC1,则将skb->vlan配置为100,skb->priority配置为P1;B) 在VLAN train处理后,查找ath0.100设备是

19、否存在,如果存在,则将skb->dev配置为ath0.100,再继续桥处理。这时skb->dev为ath0.100,故此报文将进入桥br.100中;C) 在br.100中,报文会通过eth0.100发送出去,eth0.100发送时添加VLAN标签,VLAN为100,优先级为P1;2. WAN口(eth0)到LAN口(ath0):A) eth0设备接收到VLAN为100的tag报文,在VLAN协议处理中会将skb->dev配置为eth0.100,并去除VLAN tag;B) 报文进入在dev.c中netif_receive_skb,在这里会进入桥处理函数handle_bridg

20、e,然后根据eth0.100进入桥br.100;C) 在桥br.100中会根据MAC地址转发表进入ath0.100此VLAN设备进行报文发送;D) 由于ath0.100此VLAN设备存在UNTAG标记,它在发送报文时不会添加VLAN标签;3.6 linux shell配置例子环境:存在VLAN 100和200,都包含ath0此LAN口,MAC1为VLAN 100,优先级为P1,而MAC2为VLAN 200,优先级为P2。桥创建,VLAN 100对应br.100,而VLAN 200对应br.200:Brctl addbr br.100Brctl addbr br.200Brctl setfd b

21、r.100 0Brctl setfd br.200 0Ifconfig br.100 upIfconfig br.200 up端口VLAN设备创建:Vconfig add eth0 100Vconfig add eth0 200Ifconfig eth0.100 upIfconfig eth0.200 upVconfig add ath0 100Vconfig add ath0 200Ifconfig ath0.100 upIfconfig ath0.200 up配置LAN口VLAN发送untag报文:Vconfig set_untag_flag ath0.100 2 1Vconfig set

22、_untag_flag ath0.200 2 1配置WAN口VLAN设备优先级映射:Vconfig set_egressmap eth0.100 0 0Vconfig set_egressmap eth0.100 1 1Vconfig set_egressmap eth0.100 2 2Vconfig set_egressmap eth0.100 3 3Vconfig set_egressmap eth0.100 4 4Vconfig set_egressmap eth0.100 5 5Vconfig set_egressmap eth0.100 6 6Vconfig set_egressmap eth0.100 7 7Vconfig set_egressmap eth0.200 0 0Vconfig set_egressmap eth0.200 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论