admin管理员组

文章数量:1529452

2024-07-29 作者:

88E6095芯片VLAN技术分析

MARVEL出产的88E6095芯片是一款较高端的交换芯片,它带有8个FE口和3个GE口,其VLAN功能分析如下(本文档只讨论基于802.1Q的VLAN):

1 交换模式

6095芯片对每个端口支持不同的交换模式,可以通过配置寄存器Port Control 2

(Reg0x08)的Bit11:10来实现,提供的Dsdt接口为:

GT_STATUS gvlnSetPortVlanDot1qMode (

IN GT_QD_DEV *dev,

IN GT_LPORT port,

IN GT_DOT1Q_MODE mode

);

包括4种模式:

 Secure模式:所带VLAN tag必须存在于VTU表中,且入端口必须是该VLAN成员,

否则丢弃报文

 Check模式:所带VLAN tag必须存在于VTU表中,否则丢弃报文

 Fallback模式:入端口报文不丢弃

 802.1Q Disabled:802.1Q关闭,使用端口VLAN模式,所有报文透传

前3种模式都遵循802.1Q规则,报文进入后按照VLAN表项进行转发,不同就在于进入的时候条件限制,有的未作限制(Fallback模式),有的(Secure模式)要求严格。我们在实现基于802.1Q的VLAN时采用第1种,Secure模式。报文进来时先识别所带的VLAN tag。若所带VLAN tag未存在于VLAN表项中,或者进来的端口不属于该VLAN tag的VLAN成员,报文被丢弃,顺利进入的报文则指定VLAN tag的VID进行转发;若报文中不带VLAN tag,则判断该端口的缺省VLAN(PVID),当端口未加入缺省VLAN,报文被丢弃,当端口已经加入缺省VLAN 时,则指定PVID进行转发。

我们在实现基于端口的VLAN时采用第4种,802.1Q Disabled。此时端口不识别报文所带的VLAN tag,被认为是不带VLAN tag的报文并被加上它的PVID,结合VLANTable(Port Base

VLAN Table)的取值,查找MAC表进行转发。

2 端口隔离

端口隔离是比VLAN表更底层的隔离,它在802.1Q使能的情况也生效,也就是说配置了隔离的端口即使在同一VLAN中也不相通。

通过端口隔离特性,用户可以对需要进行控制的端口配置端口隔离功能,实现所有需要隔离端口之间业务数据的隔离,既增强了网络的安全性,也为用户提供了灵活的组网方案。

此功能可以通过配置VLANTable来实现,寄存器Port Based Vlan Map(Reg0x08)的BIT10:0。提供的Dsdt接口为

GT_STATUS gvlnSetPortVlanPorts (

IN GT_QD_DEV *dev,

IN GT_LPORT port,

IN GT_LPORT memPorts[],

IN GT_U8 memPortsLen );

这是个单向表,例如,将Port 0的Bit 1写1表示数据可从Port 0 流向Port 1,因此要实现Port 0和Port 1的隔离需要把Port 0的Bit 1写0,同时把Port 1的Bit 0写0。

3 端口类型

6095芯片从逻辑功能上可以实现如下三种的以下三种端口类型:

 Access类型,端口只能属于 1 个VLAN,只能接收和发送1个 VLAN 的报文(发

送报文不带Tag),一般用于与终端用户之间的连接;

 Trunk 类型,端口可以属于多个 VLAN,可以接收和发送多个 VLAN 的报文(发送

报文都带Tag),一般用于与交换机之间的连接;

 Hybrid类型,端口可以属于多个 VLAN,可以接收和发送多个 VLAN 的报文

(Untagged的VLAN发送报文都不带Tag,tagged的VLAN发送的报文都带vlan tag),一般用于特殊场景的连接。

在802.1Q模式下,端口对标签的处理需要在VTU表项中配置标签处理模式,配置VTU

Data Register(Reg0x07~09)。也就是说对每条VLAN,一个端口的标签处理方式可以不同,这样的处理才能实现如上描述的Hybrid类型。

不同连接类型的端口加入VLAN的Tagged或Untag成员,Access端口只能加入Untag成员;Trunk端口以Untag成员加入等于自身PVID的VLAN,其余以Tagged方式加入;Hybrid端口按需求加入Untag成员或者Tagged成员。Untag成员配置成“01”,Taged成员配置成“10”,其他非成员端口默认为“11”。

由Access端口修改为Trunk端口(或Hybrid端口),只需修改端口类型为Trunk类型(或Hybrid类型)。由Trunk端口(或Hybrid端口)修改为Access端口,将端口类型修改为Access类型,同时端口回到VLAN1。Trunk端口不能修改为Hybrid端口,反之也是。

4 端口PVID

当以太网端口接收到不带VLAN Tag 的报文时,端口将在缺省VLAN 的范围内传输该报文。Access端口只能属于 1 个VLAN,所以它的缺省VLAN 就是它所在的VLAN;Trunk 端口和Hybrid端口可以属于多个 VLAN,所以需要手工设置端口的缺省VLAN ID。

端口PVID可以通过修改寄存器Default Port VLAN ID &Priority(Reg0x07)的Bit11:0来实现。提供的Dsdt接口为

GT_STATUS gvlnSetPortVid (

IN GT_QD_DEV *dev,

IN GT_LPORT port,

IN GT_U16 vid );

5 VLAN表项

用户可以将端口加入到指定的VLAN 中。执行该配置以后,以太网端口就可以转发指定VLAN 的报文,从而实现本交换机上的VLAN 与对端交换机上相同 VLAN 的互通。

Access端口只能加入到 1 个VLAN 中,Trunk 端口和Hybrid端口可以加入到多个 VLAN

中,端口加入VLAN 时的处理,参见3 端口类型。

Dsdt提供的接口为

GT_STATUS gvtuAddEntry (

IN GT_QD_DEV *dev,

IN GT_VTU_ENTRY *vtuEntry );

GT_STATUS gvtuDelEntry (

IN GT_QD_DEV *dev,

IN GT_VTU_ENTRY *vtuEntry );

我们可以根据需求填写正确的vtuEntry的信息来下发VLAN表项。

每一条VTU表项的配置,包含以下内容:

Reg0x07~09为成员列表,只列Reg0x09图

6 报文处理方式

对88E6095芯片而言,将端口加入VLAN并指定了端口的缺省VLAN后,三类端口对报文的接收和发送会有不同的处理方式:

 Access端口收发报文的处理

接收报文时的处理

当接收到的报文不带Tag 时

1. 接收该报文,并为报文添加缺省VLAN 的Tag

当接收到的报文带有Tag 时

1. 当VLAN ID与端口的缺省VLAN相同时:接收该报文

2. 当VLAN ID与端口的缺省VLAN不同时:丢弃该报文

发送报文时的处理

报文不带Tag 后发送

 Trunk端口收发报文的处理

接收报文时的处理

当接收到的报文不带Tag 时 当接收到的报文带有Tag 时

发送报文时的处理

1. VLAN ID与缺省VLAN相同时,报文不带Tag发送

2. 其他所有报文都是带Tag

发送

1. 当端口已经加入缺省VLAN 1. 当VLAN ID是该端口允许通过时,为报文添加缺省VLAN的Tag

丢弃该报文

的VLAN ID 时:接收该报文

过的VLAN ID 时:丢弃该报文

2. 当端口没有加入缺省VLAN时,2. 当VLAN ID不是该端口允许通

 Hybrid端口收发报文的处理

接收报文时的处理

当接收到的报文不带Tag 时 当接收到的报文带有Tag 时

发送报文时的处理

1. VLAN ID是Untag VLAN时,报文不带Tag发送

2. VLAN ID是Untag VLAN时,报文带Tag 发送

1. 当端口已经加入缺省VLAN 1. 当VLAN ID是该端口允许通过时,为报文添加缺省VLAN的Tag

丢弃该报文

的VLAN ID 时:接收该报文

过的VLAN ID 时:丢弃该报文

2. 当端口没有加入缺省VLAN时,2. 当VLAN ID不是该端口允许通

本文标签: 88E6095芯片VLAN技术分析