lsw:基于双平面网络的计算节点板交换板网络配置组件

Switch module chip management app

分支4Tags17
文件最后提交记录最后更新时间
11 天前
6 个月前
12 天前
12 天前
12 天前
1 年前
11 天前
1 个月前
9 个月前
12 天前
12 天前
1 年前
12 天前
9 个月前

lsw

功能简介

lsw组件仓主要用于计算节点板中lsw交换板的网络配置,基于双平面网络实现对内/对外通信功能。

目录结构

├── luaclib                                              -- c代码
│   ├── CMakeLists.txt                                   -- c代码构建配置
│   ├── chip_dev.c                                       -- 芯片驱动
│   ├── chip_dev.h                                       -- 芯片驱动头文件
│   ├── gpio_driver.h                                    -- gpio驱动头文件
│   ├── lsw_drv.c                                        -- lua和c交互接口
│   ├── mdio_driver.c                                    -- mdio驱动
│   ├── mdio_driver.h                                    -- mdio驱动头文件
│   ├── phy_dev.c                                        -- phy驱动
│   ├── phy_dev.h                                        -- phy驱动头文件
│   ├── port_dev.c                                       -- port驱动
│   ├── port_dev.h                                       -- port驱动头文件
│   ├── rtk_type.h                                       -- rtk驱动头文件
│   ├── rtl8367_api.h                                    -- 芯片驱动接口
│   ├── rtl8367_type.h                                   -- 芯片类型定义
│   ├── vlan_dev.c                                       -- vlan驱动
│   └── vlan_dev.h                                       -- vlan驱动头文件
├── lualib                                               -- lua代码
│   ├── alarm
│   │   └── alarm.lua                                    -- 告警处理逻辑
│   ├── domain
│   │   ├── debug
│   │   │   ├── debug.lua                                -- debug方法,lsw配置及查询接口
│   │   │   └── monitor.lua                              -- 监控状态方法
│   │   ├── defs.lua                                     -- 固件定义信息文件
│   │   ├── device
│   │   │   ├── switch
│   │   │   │   ├── chip
│   │   │   │   │   ├── external_vlan.lua                -- 外网vlan配置
│   │   │   │   │   ├── port.lua                         -- lsw端口配置
│   │   │   │   │   ├── switch_chip.lua                  -- lsw chip芯片配置(8367/2507)
│   │   │   │   │   └── vlan.lua                         -- vlan配置(内网)
│   │   │   │   ├── component.lua
│   │   │   │   ├── phy
│   │   │   │   │   ├── phy.lua                          -- phy芯片配置(8211/8521)
│   │   │   │   │   └── phy_chip.lua
│   │   │   │   └── switch.lua                           -- lsw配置入口
│   │   │   └── switch_mgt.lua                           -- 注册对象分发回调函数
│   │   └── drv
│   ├── infrastructure
│   │   └── event.lua
│   ├── interface
│   │   └── rpc.lua                                      -- rpc方法
│   ├── lsw_app.lua
│   └── service
│       └── ipmi_service.lua
└── service
    └── main.lua                                         -- app入口

关键特性

整体架构设计

机柜内置网片提供框内/对外通信功能:

  • 内部组网采用独立双平面方式,对外采用管理板集中出线方式
  • 管理板与计算节点按照应用场景分为HPC与AI两种形态,硬件实现存在差异,软件采用归一化设计

组网应用中,外部组网采用3层交换网络,因此

  • 管理板对外对接3层网络(HPC场景为2层,AI场景为3层)
  • 内部通信为2层网络。无框间级联场景

不同场景下采取的方案

  • 管理板:双平面双MAC + 近端运维MGMT网口;
  • HPC节点板:双平面双MAC;
  • AI节点版本:单平面单MAC; 内部通信场景,通过增加vlan方式,补充为双平面,实现方案归一。

框内通信

通过VLAN划分内外网,同时从可靠性考虑,2个平面同时可用

管理板:

  • 2个SGMII网口分别配置不同VLAN;

计算节点:

  • HPC节点板,2个SGMII网口分别配置不同VLAN;
  • AI节点板,BMC在同1个SGMII网口配置2个VLAN ;
  • AI节点板,LSW配置2个VLAN可以同时转发;
  • BMC复位场景,LSW不能跟随复位,不能影响1260与管理板1213之间的通信。

管理交换板lsw/phy芯片驱动,支持完成lsw、phy芯片网络配置

故障检测/自愈

  • lsw支持检测lsw、phy芯片配置异常检测,检测到配置状态异常时触发自愈
  • 若连续自愈失败,网络状态异常,触发lsw/phy链路异常告警
  • 支持上报故障码,用于查看网络配置状态

对外接口

资源协作接口

/bmc/kepler/Debug/LanSwitchMock - GetPortInfo

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Debug/LanSwitchMock bmc.kepler.Debug.LanSwitchMock GetPortInfo a{ss}uu s 查询交换板端口的信息 查询交换板端口的信息 Unit和Port需唯一且存在 不涉及 不涉及 需要完成交换板网络初始化 不涉及 不涉及 不涉及

/bmc/kepler/Debug/LanSwitchMock - SetPortEnable

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Debug/LanSwitchMock bmc.kepler.Debug.LanSwitchMock SetPortEnable a{ss}uuu 不涉及 设置交换板端口的开关状态 设置交换板端口的开关状态 Unit和Port需唯一且存在 不涉及 不涉及 需要完成交换板网络初始化 不涉及 不涉及 不涉及

/bmc/kepler/Debug/LanSwitchMock - SetPortStpState

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Debug/LanSwitchMock bmc.kepler.Debug.LanSwitchMock SetPortStpState a{ss}uuu 不涉及 设置交换板端口的STP状态 设置交换板端口的STP状态 Unit和Port需唯一且存在 不涉及 不涉及 需要完成交换板网络初始化 不涉及 不涉及 不涉及

/bmc/kepler/Debug/LanSwitchMock - GetSwitchErrorCode

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Debug/LanSwitchMock bmc.kepler.Debug.LanSwitchMock GetSwitchErrorCode a{ss}uu u 获取交换板端口的错误码 获取交换板端口的错误码 Unit和UtpNum需唯一且存在 不涉及 不涉及 需要完成交换板网络初始化 不涉及 不涉及 不涉及

/bmc/kepler/Debug/LanSwitchMock - SetPortMacAddr

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Debug/LanSwitchMock bmc.kepler.Debug.LanSwitchMock SetPortMacAddr a{ss}uus 不涉及 获取交换板端口的错误码 获取交换板端口的错误码 Unit和Port需唯一且存在 不涉及 不涉及 需要完成交换板网络初始化 不涉及 不涉及 不涉及

/bmc/kepler/Debug/LanSwitchMock - FlushPortAddr

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Debug/LanSwitchMock bmc.kepler.Debug.LanSwitchMock FlushPortAddr a{ss}uu 不涉及 清空交换板端口的错静态MAC地址 清空交换板端口的错静态MAC地址 Unit和Port需唯一且存在 不涉及 不涉及 需要完成交换板网络初始化 不涉及 不涉及 不涉及

/bmc/kepler/Debug/LanSwitchMock - GetVlanInfo

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Debug/LanSwitchMock bmc.kepler.Debug.LanSwitchMock GetVlanInfo a{ss}u s 获取交换板的vlan信息 获取交换板的vlan信息 Unit需唯一且存在 不涉及 不涉及 需要完成交换板网络初始化 不涉及 不涉及 不涉及

/bmc/kepler/Debug/LanSwitchMock - RegRead

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Debug/LanSwitchMock bmc.kepler.Debug.LanSwitchMock RegRead a{ss}yyyu u 读取交换板寄存器的值 读取交换板寄存器的值 Unit和Port需唯一且存在; Type:1.hard reset、2.soft reset 不涉及 不涉及 不涉及 不涉及 不涉及 不涉及

/bmc/kepler/Debug/LanSwitchMock - RegWrite

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Debug/LanSwitchMock bmc.kepler.Debug.LanSwitchMock RegWrite a{ss}yyyuu 不涉及 设置交换板寄存器的值 设置交换板寄存器的值 Unit和Port需唯一且存在; Type:1.hard reset、2.soft reset 不涉及 不涉及 不涉及 不涉及 不涉及 不涉及

/bmc/kepler/Chassis/:ChassisId/LanSwitchs/:Id - LswReset

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Chassis/:ChassisId/LanSwitchs/:Id bmc.kepler.Chassis.LanSwitch LswReset a{ss}uu 不涉及 复位交换板相关器件 复位交换板相关器件 Device:1.chip、2.phy、3.all; Type:1.hard reset、2.soft reset 不涉及 不涉及 不涉及 不涉及 ChassisId唯一,Id在ChassisId下唯一 不涉及

/bmc/kepler/Chassis/:ChassisId/LanSwitchs/:Id - GetConfigInfo

接口路径(path) 接口名称(interface) 方法名(method) 输入参数 输出参数 说明 业务作用 约束 单位 互斥关系 依赖关系 格式样例 唯一性要求 兼容性要求
/bmc/kepler/Chassis/:ChassisId/LanSwitchs/:Id bmc.kepler.Chassis.LanSwitch GetConfigInfo a{ss} s 获取交换板器件网络配置状态 获取交换板器件网络配置状态 不涉及 不涉及 不涉及 不涉及 不涉及 ChassisId唯一,Id在ChassisId下唯一 不涉及

IPMI命令

  • 具体参数参考本组件配置文件ipmi.json
方法 描述
GetPortLinkStatus 获取端口连接状态
GetPortSpeed 获取端口速率

配置介绍

LSW网络配置

框内(内部通信)场景

场景 单板类型 VLAN 描述
框内设备管理 管理板/计算节点 4090 限于框内通性,SMM和BMC/BMC和BMC之间通信
框内设备管理 管理板/计算节点 4091 限于框内通性,SMM和BMC/BMC和BMC之间通信

BMC在同1个SGMII网口配置2个VLAN(4090、4091) LSW配置2个VLAN可以同时转发(port 0配置4090、4091,port 2配置4091,port 3配置4092) BMC复位场景,LSW不能跟随复位,不能影响1260与管理板1213之间的通信

2.png

网管对接/远程运维/近端运维场景

场景 单板类型 VLAN 描述
网管对接/远程运维 计算节点 1 单IP,BMC与外部网管通信
网管对接/远程运维 管理板 1 浮动IP,SMM与外部网管通信
网管对接/远程运维 管理板 1 静态IP,SMM与外部网管通信(浮动IP不可用时,预留逃生通道,按需配置
近端运维 管理板 1 单IP,近端运维使用(按需配置)

LSW配置:对port0、port2、port3配置pvid为1

1.png

主备倒换场景

场景 单板类型 VLAN 描述
主备倒换 计算节点 1 1、单IP,跟随主用单板切换2、切换后触发外部交换机表项刷新
主备倒换 管理板 1 1、浮动IP,跟随主用单板切换2、切换后触发外部交换机表项刷新

主备管理:

  1. 软件通过发送心跳来确认本板软件的正常运行状态
  2. 两块SMM谁先发送心跳,谁就先抢到主
  3. 创建一个主备管理任务,定时发送软心跳,并根据硬件主备状态寄存器值来实现主备状态迁移管理

平台子系统发送主备切换信号,lsw监听到信号后配置对相应通路端口配置外网vlan(默认1)

lsw网络配置流程

lsw网络配置主要包含以下几个步骤:

  1. chip(Realtek rtl8367 / Huyang sf2507)初始化
  2. port(port0 - port4)初始化
  3. phy(8211 / 8521)初始化
  4. 配置vlan(4090、4091)

配置过程如下:

  • 配置csr
  • 自发现分发对象
  • 创建管理对象并添加相应对象
  • 进行初始化,并配置相关信息

流程图如下: 3.png

项目介绍

Switch module chip management app

定制我的领域