基于88E6095的链路冗余协议开发(三)
来源:互联网 发布:好心分手 知乎 编辑:程序博客网 时间:2024/06/09 19:20
VLAN配置
链路冗余协议支持两种运行方式:1. 基于物理端口进行计算,不考虑VLAN功能实现,例如STP,RSTP如果我们要实现基本VLAN模式的链路冗余协议,在协议配置之前,需要确定端口的VLAN配置信息。
2. 基于VLAN中的端口进行计算,例如MSTP
VLAN的功能参考网络资料及802.1Q说明文档,该章节不对VLAN功能本身进行说明,主要介绍VLAN功能在88E6095的支持和应用。
88E6095支持两种VLAN模式,分别为3.5.6 Port Based VLANs和3.5.7 802.1Q VLANs。我们主要对802.1Q VLANs的实现进行介绍。
802.1Q VLAN主要支持一下几个方面的功能:
1. vlan优先级
2. 端口配置3. 端口stp状态
功能实现
88E6095通过VLAN Translation Unit Operations接口对802.1Q VLANs进行配置,VTU通过一组VTU配置寄存器,组成VTU Entry对VTU database进行读写,参考88E6095的3.5.11 VLAN Translation Unit Operations。VTU提供的配置寄存器如下:
其中VTU Operation寄存器定了VTU支持的操作功能,如下:
由VTU register的内容组成一条VTU Entry,格式如下:
其中各字段内容说明如下:
对各字段的简单说明如下:
MemberTag:
用来指定当前端口是否包含在该VID指定的VLAN中。如果包含在该VLAN中,则可以指定该port对vlan tag的操作模式,包括四种状态:
00:port在vlan内,转发报文不修改报文的vlan tag状态
01:port在vlan内,发送报文剥离vlan tag
02:port在vlan内,发送报文添加vlan tag
03:port不包含在该vlan内
PortState:
用来配置vlan中port的stp状态,该功能实现了对基于vlan的链路冗余协议的支持。
接口函数
函数名称:vlan_add
函数功能:
添加端口到指定vlan。
(该函数当前添加指定端口按照00(port在vlan内,转发报文不修改报文的vlan tag状态)进行添加。后期需要根据功能需求对接口函数进行修改。
Vlan添加端口一般不使用00模式,主要使用01(utag)和02(tag)模式进行添加。其中一个端口使用utag模式只可以添加一个vlan,使用tag模式可以添加多个vlan。
当前函数原型为void vlan_add(U16 vid, U16 port)。
建议后期修改为int vlan_add(U16 vid, U16 utag_map, U16 tag_map)实现可以参考vlan_add的当前实现进行修改。)
函数名称:
vlan_read
函数功能:
根据指定的VID读取VTU Entry。
函数名称:
vlan_delete
函数功能:
根据指定的VID删除VLAN。
(该函数功能当前未实现,根据vlan_add的代码及88E6095文档3.5.11说明进行操作)
函数名称:
Set_vlan_port_status
函数功能:
设置指定vlan中指定端口的stp状态。
该函数当前未实现,建议实现原型如下:
int Set_vlan_port_status(U16 vid, U16 port, U16 status)
在链路冗余协议中,在使用vlan base模式时,会使用多个vlan组成一个stg,协议状态机基于stg进行计算和配置操作。
使用88E6095实现是,需要对Set_vlan_port_status函数进行封装,根据vlan和协议配置,软件层实现stg层实现,包括以下函数。
Int stg_vlan_add(U16 stg, U16 vid)
Int stg_vlan_del(U16 stg, U16 vid)
int Set_stg_port_status(U16 vid, U16 port, U16 status)
加入一个stg的vlan,原则上要求添加的port相同(tag状态不需要相同),在执行Set_stg_port_status操作时,对加入的stg的vlan进行遍历,然后调用Set_vlan_port_status进行设置。
- 基于88E6095的链路冗余协议开发(三)
- 基于88E6095的链路冗余协议开发(一)
- 基于88E6095的链路冗余协议开发(二)
- 基于88E6095的链路冗余协议开发(四)
- 基于Wms协议的Map开发(三:写在前面)
- ASM提供的三种冗余方法
- MySQL冗余数据的三种方案
- MySQL冗余数据的三种方案
- 基于TR-069 协议的开发(一)
- 基于C#的http协议开发
- 基于C#的http协议开发
- 基于C#的http协议开发
- 基于XMPP 协议的开发 android
- 关于基于HTTP协议的ios开发
- 虚拟路由器冗余协议
- 冗余路由协议
- 虚拟路由冗余协议
- 基于Dubbo协议的消费者示例及详解(三)
- Git版本管理之旅(二)—— Git基本操作流程及相关命令
- 精灵图专题
- 淡入淡出轮播图
- 线性代数入门知识2(简单向量)
- SQLAlchemy ORM教程之二:Query
- 基于88E6095的链路冗余协议开发(三)
- BZOJ 1237: [SCOI2008]配对 一个神奇的东西然后简单DP
- MySQL的部分笔记与他人的整理链接
- (转)Android View的测量
- 图像匹配算法
- SQLAlchemy ORM教程之三:Relationship
- Leetcode 264. Ugly Number II
- 使用Nose模块,出现了Traceback,SystemExit: False.
- C#.NET学习心得(二)