网络双平面机制和BFD检测机制指导
更新时间: 2026/04/17
在Gitcode上查看源码

1 使用场景

硬件平台面向某些超算场景,通过算网融合、多平面正交互连、以冷板为中心等架构创新实现交换多场景硬件平台归一:

  • XX机柜内置网片提供框内/对外通信功能,内部组网采用独立双平面方式,对外采用管理板集中出线方式,管理板与计算节点按照应用场景分为不同形态,硬件实现存在差异,软件采用归一化设计。
  • 组网应用中,外部组网采用3层交换网络,因此,管理板对外对接3层网络,内部通信为2层网络。无框间级联场景。

网络配置为产品基础功能,在框式设备场景,框内内置交换网片可实现管理板与计算节点、计算节点与计算节点间的内部通信;对外可实现管理板统一出线的扁平化、集中式管理方式灵活选择。BMC网络配置特性可提供灵活、高可靠的网络功能。某些节点板采用双平面双MAC,某些节点板采用单平面单MAC。对于内部通信场景,通过增加VLAN方式,补充为双平面,实现方案归一。

1.1 机框网络配置

(1)采用双平面的节点板,通过vpd配置2个专用网口,内网配置策略为不同网口配置不同VLAN;

(2)采用单平面的节点板,通过vpd配置1个专用网口,内网配置策略为一个网口配置2个VLAN,同时对LSW配置2个对应的VLAN;

(3)bmc_network网口初始化时,分别对内外网进行处理,外网地址通过DHCP获取,内外从配置中获取,其中初始化动作包括:网口拉起、Mac地址、IP地址及nat规则配置;

(4)内网网口创建BFD报文处理,支持BFD单臂回声功能,链路故障检测时,完成外网网口切换;

(5)监听CPLD发送的主备状态,在主备倒换时,完成外网网口切换。

2 网络双平面机制

2.1 节点板网口配置

platform.sr配置:

  • 配置EthMac对象eth2\eth3

  • 配置DedicatedPort对象eth2\eth3

  • 配置ETHGroup对象内网eth2.vlan1和eth3.vlan2

2.2 节点板内网配置

配置内网:eth2.vlan1和eth3.vlan2

2.3 CSR配置示例

XX节点板场景,机框内部双平面实现通过双网口双MAC,内部通信使用双网口分别配置VLAN方式实现。方案实现:

(1)vpd仓根据产品自行定制专用口网口个数及内网信息,对外网口类型(OutType)为INNER(值为1,内部网口):

  • 网口配置拉起eth2\eth3:
json
"EthMac_Eth0": {
    "EthId": 0,
    "EthName": "eth0",
    "GroupId": "EthGroup0",
    "Mac": "xx:xx:xx:xx:xx:xx",
    "MacUseEnabled": false,
    "SpeedDuplexEnable": true,
    "SpeedSetting": 0,
    "DuplexSetting": 0
},
"EthMac_Eth2": {
    "EthId": 2,
    "EthName": "eth2",
    "GroupId": "EthGroup0",
    "Mac": "xx:xx:xx:xx:xx:xx",
    "MacUseEnabled": true,
    "SpeedDuplexEnable": true,
    "SpeedSetting": 0,
    "DuplexSetting": 0
},
"EthMac_Eth3": {
    "EthId": 3,
    "EthName": "eth3",
    "GroupId": "EthGroup1",
    "Mac": "xx:xx:xx:xx:xx:xx",
    "MacUseEnabled": true,
    "SpeedDuplexEnable": true,
    "SpeedSetting": 0,
    "DuplexSetting": 0
},
  • 专用口内网配置eth2.xxy:
json
"EthGroup_DedicatedInner1": {
    "Name": "DedicatedInner1",
    "GroupId": 5,
    "OutType": 1,
    "ActiveEthId": 2,
    "InnerNerwork": "xx.xx.xx.xx",
    "VLANID": xxy,
    "VLANEnabled": true,
    "EthAlias": 255,
    "IpAddr": "xx.xx.xx.xx",
    "BaseIpAddr": "xx.xx.xx.xx",
    "DefaultGateway": "",
    "IpPolicy": 0,
    "Status": true,
    "Channel": 17
},
  • 网口配置拉起eth2\eth3:
json
"DedicatedPort_Eth2": {
    "Id": 1,
    "EthId": 2,
    "DeviceId": 1,
    "DevicePortId": 1,
    "Silkscreen": "Mgmt"
},
"DedicatedPort_Eth3": {
    "Id": 2,
    "EthId": 3,
    "DeviceId": 2,
    "DevicePortId": 1,
    "Silkscreen": "Mgmt"
},
  • 专用口内网配置eth2.xxz:
json
"EthGroup_DedicatedInner2": {
    "Name": "DedicatedInner2",
    "GroupId": 6,
    "OutType": 1,
    "ActiveEthId": 3,
    "InnerNerwork": "xx.xx.xx.xx",
    "VLANID": xxz,
    "VLANEnabled": true,
    "EthAlias": 255,
    "IpAddr": "xx.xx.xx.xx",
    "BaseIpAddr": "xx.xx.xx.xx",
    "DefaultGateway": "",
    "IpPolicy": 0,
    "Status": true,
    "Channel": 17
},

(2)bmc_network根据OutType处理自发现的数据,不用判断激活网口与当前对外网口相同,直接配置内网IP。

注意:

  1. 切换到ncsi口时,不影响所有专用口内网接口;
  2. 切换到不同专用网口时,不影响所有专用口内网接口。

3 BFD检测机制

控制网片支持BFD功能,其上创建单臂回声功能的BFD会话,并主动发起回声请求报文,BMC接收到该报文后直接将其环回,从而实现转发链路的连通性检测功能。

3.1 BFD单臂回声功能

使用BFD单臂回声功能来检测转发链路的连通性,组网中控制网片支持BFD功能,BMC无需支持BFD功能,只需要支持基本的网络层转发,将收到的BFD报文直接环回到控制网片即可。

【输入】BFD请求报文

【输出】BFD单臂响应报文

  1. 创建绑定xx端口的socket;
  2. 控制网片支持BFD功能,其上创建单臂回声功能的BFD会话,并主动发起回声请求报文;
  3. BMC接收到该报文后直接将其环回,只更换报文源、目的IP和MAC,从而实现转发链路的连通性检测功能。

3.2 BFD链路检测及主备倒换触发对外网口切换

主备切换: BMC实时获取主备状态,当发现主备倒换时,触发网口切换,并将原网口对应的内网网口停止5s回复BFD报文,让控制网卡对指定端口表项进行刷新。

  • 基于BFD链路检测到某条链路故障或CPLD传递主备状态,主备倒换时,触发网口切换:
  1. BMC保存当前主备状态,实时监听主备状态,当发现主备倒换时,触发网口切换,并将原网口停止5s回复BFD报文,让控制网卡对指定端口表项进行刷新;
  2. BMC实时处理BFD请求报文,当某条链路未收到BFD请求报文时,即认为该链路故障,触发网口切换。

网口选择CSR配置(主备状态)举例:

json
//节点板1
"NetSwitchConfig": {
    "SMM1LinkLswPort": "1", // SMM1连接lsw端口号,且为默认lsw端口号
    "SMM2LinkLswPort": "2", // SMM2连接lsw端口号
    "SMM1LinkNet": 2, // SMM1连接网口,且为默认网口
    "SMM2LinkNet": 3 , // SMM2连接网口
    "SMM1InnerlinkNet": "eth2.xxy", // SMM1连接内网网口
    "SMM2InnerLinkNet": "eth3.xxz", // SMM2连接内网网口
    "SMM1State": "<=Scanner_PrimaryOrStandbySMM1State.Value", // SMM1状态:0:不合法 1:主 2:备
    "SMM2State": "<=Scanner_PrimaryOrStandbySMM2State.Value"// SMM2状态:0:不合法 1:主 2:备
}
json
//节点板2
"NetSwitchConfig": {
    "SMM1LinkLswPort": "", // SMM1连接lsw端口号,且为默认lsw端口号
    "SMM2LinkLswPort": "", // SMM2连接lsw端口号
    "SMM1LinkNet": 2, // SMM1连接网口,且为默认网口
    "SMM2LinkNet": 2, // SMM2连接网口
    "SMM1InnerlinkNet": "eth2.xxy", // SMM1连接内网网口
    "SMM2InnerLinkNet": "eth2.xxz", // SMM2连接内网网口
    "SMM1State": "<=Scanner_PrimaryOrStandbySMM1State.Value", // SMM1状态:0:不合法 1:主 2:备
    "SMM2State": "<=Scanner_PrimaryOrStandbySMM2State.Value" // SMM2状态:0:不合法 1:主 2:备
}

SMM0State、SMM1State的值,CSR关联寄存器获取,由硬件提供CPLD寄存器偏移。

json
"BfdConfig": {
    "BfdRecvPacketTimeOut": 5, // BFD接收报文超时时间
    "BfdDisconnectTime": 5 // BFD主动断开时间(单位:s) 
}