admin管理员组

文章数量:1559062

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不是该端口允许通

本文标签: