网络管理机制指南
更新时间: 2025/12/06
在Gitcode上查看源码

1. BMC 网络管理介绍

bmc_network主要负责功能是IPv4/IPv6配置,从两个角度保障BMC的正常网络通信:

  1. 配置对外IP,用户可以通过BMC配置的管理IP连接BMC
  2. 配置对内IP,主要用于管理板与BMC之间或者同一机框内多个BMC之间的网络通信

组网举例:

eth0.702(702为VLAN号)网口设备属于对内网口组,网段为171.31.1。

eth0.701/eth2/eth3属于对外网口组,网段为xx.xx.16,对外的IP在这三个网口设备之间切换,我们目前用到的基本是eth0和eth2

2. BMC 网络管理对象

2.1 常用对象

IPv4

该类主要承载对外网口的IPv4信息,包括:IP地址、掩码、默认网关、地址获取模式(DHCP/Static)、备份IP(备份IP在DHCP模式下被激活)、备份掩码,并提供以上属性的修改接口。

属性属性说明
IpModeIPv4的网络模式,DHCP/Static
IpAddrIP地址
BackupIpAddr备份IPv4地址
SubnetMaskIPv4子网掩码
BackupSubnetMask备份IPv4掩码
DefaultGatewayIPv4默认网关
EthName对外网口设备的名称:如eth0.701(701表示带了VLAN)

IPv6

该类主要承载对外网口的IPv6信息,包括:IP地址、前缀长度、默认网关、地址获取模式(DHCPv6/Static),并提供以上属性的修改接口(接口使用见part3)。

属性属性说明
IpModeIPv6的网络模式,DHCPv6/Static
IpAddrIP地址
PrefixLengthIPv6前缀长度
ScopeLink,Global
DefaultGatewayIPv6默认网关

EthernetInterfaces

该类主要承载对外网口的大部分信息,主要包括:

属性属性说明
EthName对外网口设备的名称:如eth0.701(701表示带了VLAN)
NetMode固定网口模式/自适应模式(按网卡优先级选择对外网口设备)
MacBMC对外的MAC地址
IpVersionIPv4/IPv6使能状态
PortId当前激活正在使用的网口ID,对应MgmtPort的Id
NcsiEnableNCSI使能状态
VLANEnableNCSI的VLAN使能状态
VLANIdNCSI的VLANId
LinkLocalAddressIPv6本地链路地址

MgmtPort

该类主要承载的是物理网卡信息,主要包括:

属性属性说明
Id唯一的标识(EthernetInterfaces的PortId指的就是这个Id),当前专用口固定1,后面从2开始并返回给network adapter
EthId关联的eth设备号,2代表eth2
DeviceId网卡设备信息,当前都是1,不关键
DevicePortId网卡上的端口号(一张网卡有多个端口),port1、port2
Silkscreen网卡丝印,Mgmt、Port1
AdaptiveFlag是否参与自适应标识
LinkStatus链路状态:Disconnected、Connected(专用口由bmc_network更新,NCSI口由network adapter更新)
Type网卡类型(PCIe/Dedicated/OCP/LOM等)
VLANEnabled当id = 1,表示专用口的VLAN信息,当id ≠ 1,表示NCSI口的VLAN信息
VLANIdVLAN ID
Priority自适应优先级

LldpConfig

该类主要承载LLDP的相关配置,主要包括:

属性属性说明
EnabledLLDP服务使能:true为使能,默认不使能
WorkModeLLDP工作模式,目前仅支持Tx模式
TxDelaySecondsLLDP Tx延时
TxIntervalSecondsLLDP Tx间隔时间
TxHoldLLDP Tx保持时间
LLDPSupportLLDP 功能支持开关,默认是不支持,不支持时不会启动 LLDP 服务以及服务例测
LLDPParseEnabledLLDP 解析功能支持开关,默认是不支持,不支持时不会解析 LLDP 报文
LLDPOverNCSIEnabledLLDP Over NCSI功能支持开关,默认是不支持,不支持时 LLDP 不会解析 NCSI 发送的报文
LLDPGetPortDescEnabledLLDP获取端口描述功能支持开关,默认是不支持,不支持时不会解析Port Desc字段

LLDPInfo

该类主要承载LLDP报文解析相关信息,主要包括:

属性属性说明
PortName报文解析出来的端口号
PortDesc报文解析出来的端口描述
SystemDesc报文解析出来的交换机型号
OrgSpec报文解析出来的组织型号
ManagementIP报文解析出来的管理地址
SlotId机柜端口对应的U位号,默认0

Assembly

该类主要承载LLDP报文解析相关信息,主要包括:

属性属性说明
HostName主机名
SystemGUID系统全局唯一标识符,用户可修改
DomainName域名
UUID设备全局唯一标识符,只能ipmi生成,不可修改
ManagementIP报文解析出来的管理地址
FQDN完全限定域名,FQDN由两部分组成:主机名.域名

Group

该类目前主要持久化了对外网口的MAC地址,主要包括:

属性属性说明
GroupId固定为EthGroup0
EthName对外网口名,eth2、eth0
EthId对外网口ID,2、0
Mac对外网口MAC,默认20:22:01:75:BC:60

EthMac

该类主要承载网口硬件相关配置,主要包括:

属性属性说明
GroupId网口组Id,EthGroup0、MaintEthGroup
EthName网口名,eth2、eth0
EthId对外网口ID,2、0
Mac网口MAC地址
MacUseEnabled可使用MAC地址标志,同一网口组只使能一个
SpeedDuplexEnable网口自协商模式使能
SpeedSetting网口速率:0:不涉及 1:10M, 2:100M, 3:1000M
DuplexSetting网口工作模式:0:不涉及配置 1:半双工 2:全双工

HeartBeat

该类主要承载内网心跳配置,主要包括:

属性属性说明
Name监控心跳的实体名称,IRMHeartBeat
Status当前心跳状态,Lost

EthGroup

该类主要承载内网、多个对外网口、维护网口配置,主要包括:

属性属性说明
GroupId网口组Id,唯一性
Name网口组名称,InnerEthGroup、MaintEthGroup、VethGroup
OutType网口组的类型:1:对内,2:对外,3:veth,4:Atlas计算节点近端维护内部网络,5:Atlas计算节点近端维护外出网络,6:SMM板浮动IP网络,7:SMM板出对板的内部网络,8:专用网口近端运维网络,9:机柜管理板内网,10: 机柜节点内网
ActiveEthId当前激活的网口号,例如eth2的话此处网口号为2
InnerNetWork内网网段,未使用
VLANId该网口组激活网口对应的VLANID
VLANEnabled该网口组激活网口对应的VLAN使能
EthAlias激活网口别名,有别名时取值最大为254(255表示没有别名网口),如eth2:0
InnerNetWork内网网段,172.31.1.0
IpAddrIPv4地址
BaseIpAddr基准IPv4地址,和IpAdd作比较,内网ip判断是否根据槽位号生成过Ip
SubnetMaskIPv4掩码
DefaultGatewayIPv4网关
Ipv6AddrIPv6地址
PrefixLengthIPv6前缀长
Ipv6DefaultGatewayIPv6网关
IpPolicyip生成策略:0:根据默认IP地址,1:根据槽位和基准IP地址生成
Status该IP是否在工作状态中
IpModeIPv4模式,Static或者DHCP
Ipv6ModeIPv6模式,Static或者DHCPv6
IpVersionIP协议类型,IPv4、IPv6、IPv4AndIPv6
AssociatedPortType网口组关联的网口类型
Channel网口对应LAN通道的channel number

类之间相互关系

2.2 常用定制化项说明

定制化项文档路径

定制化项定制化接口名称默认值处理逻辑说明
BMC主机名称BMCSet_Hostname
Custom_SerialNUM
BMCSet_Hostname:offif (BMCSet_Hostname == on)
将Custom_SerialNUM作为Hostname
else
if(FRU数据中的产品序列号 != 空)
将FRU数据中的产品序列号(product-serialnumber)作为Hostname
else
主机名设置为HostName
BMCSet_Hostname如果设置为on,则表示把Custom_SerialNUM设置为主机名称,长度范围:1~64
(1)默认写产品序列号作为主机名称
(2)主机名限制字符:`~!@#$%^&*()_=+[{}]|;:’,<.>/?\(包含空格)
管理网口Ipv4BMCSet_ETH0_DHCPMode
BMCSet_Eth0_Ipv4
Custom_Eth0_Ip_Addr
Custom_ipv4_gateway
Custom_Eth0_DefaultPolicy
BMCSet_ETH0_DHCPMode:on
BMCSet_Eth0_Ipv4:off
Custom_Eth0_Ip_Addr:空串
Custom_ipv4_gateway:空串
Custom_Eth0_DefaultPolicy:1
if(BMCSet_ETH0_DHCPMode == off)
if(BMCSet_Eth0_Ipv4 = on)
设置对外网口IPv4地址和掩码为Custom_Eth0_Ip_Addr的值
if(Custom_ipv4_gateway != 空)
设置对外网口IPv4网关为Custom_ipv4_gateway的值
else
设置对外网口IPv4网关为Custom_Eth0_Ip_Addr的值
else
if(Custom_Eth0_DefaultPolicy == 2)
设置对外网口IPv4地址和掩码为固定值:192.168.2.100/24
设置对外网口IPv4网关为固定值:192.168.2.100
else
设置对外网口IPv4为DHCP模式
else
设置对外网口IPv4为DHCP模式
BMCSet_ETH0_DHCPMode:定制BMC的IPv4地址获取模式,取值:
on/不配置:IPV4地址获取模式为DHCP
off:IPV4地址获取模式为STATIC

BMCSet_Eth0_Ipv4:定制BMC的IPv4地址(含掩码),取值:
on:根据Custom_Eth0_Ip_Addr的值设置静态地址
off或不配置:配置为DHCP模式

Custom_Eth0_DefaultPolicy:定制BMC的网口默认策略,取值:
1:配置为DHCP模式
2:配置为固定模式,192.168.2.100/24
BMC对外网口模式BMCSet_NET_Modemgntif(BMCSet_NET_Mode == 空
设置网口模式为强制专用管理网口
else
设置网口模式为BMCSet_NET_Mode的值
配置BMC管理网口的模式,取值范围:
mgnt或不配置:强制管理网口
auto:自适应(以管理网口的link状态为准)
pcie:强制PCIE NCSI模式
绑定NCSI网口Custom_NCSI_Port_Num0if(BMCSet_NET_Mode != auto && BMCSet_NET_Mode != mgnt)
if (Custom_NCSI_Port_Num != 空)
绑定Custom_NCSI_Port_Num指定的NCSI网口
else
无动作
elseif (BMCSet_NET_Mode == auto && Custom_NCSI_Port_Num != 空)
将Custom_NCSI_Port_Num指定的NCSI网口加入到自适应网口
else
无动作
定制NCSI的网口号:
四网口配置取值为0-3
两网口配置取值为0-1
备注:当前只支持标准PCIe网卡绑定NCSI端口
NCSI网口VlanIDBMCSet_NCSI_VLAN_ID0if (BMCSet_NCSI_VLAN_ID != 空 )
设置NCSI网口VLAN ID为BMCSet_NCSI_VLAN_ID的值
else
设置NCSI网口VLAN ID为0(关闭Vlan功能)
设置NCSI网口的VLAN ID,取值范围:
0:关闭VLAN 功能
1~4094:实际生效的VLAN ID
网口IPv4/IPv6使能BMCSet_IPVersionIPv4AndIPv6if (BMCSet_IPVersion == 空 )
设置IP版本为成IPv4AndIPv6
else
设置IP版本为BMCSet_IPVersion的值
定制BMC网络支持的IP版本,取值范围:
IPv4
IPv4AndIPv6
IPv6
BMC域名BMCSet_DDSN_DomainName设置域名为BMCSet_DDSN_DomainName的值长度范围:0~67
取值格式:
1、由数字、英文字母、连字符(-),点号(.)组成
2、连字符不能作为开头和结尾,点号不能作为开头
3、任意两个点号之间的字符长度不超过63

2.3 常用网络CSR配置

网络配置CSR文件:vpd仓库对应机型platform.sr

eth0和eth2同为对外网口,两个网口给用ip和mac地址,ip地址来源于IPv4/IPv6对象

json
        "EthMac_Eth0": &#123;
            "EthId": 0,
            "EthName": "eth0",
            "GroupId": "EthGroup0",
            "Mac": "20:22:01:75:BC:60",
            "MacUseEnabled": false,
            "SpeedDuplexEnable": true,
            "SpeedSetting": 0,
            "DuplexSetting": 0
        &#125;,
        "EthMac_Eth2": &#123;
            "EthId": 2,
            "EthName": "eth2",
            "GroupId": "EthGroup0",
            "Mac": "20:22:01:75:BC:60",
            "MacUseEnabled": true,
            "SpeedDuplexEnable": true,
            "SpeedSetting": 0,
            "DuplexSetting": 0
        &#125;

说明:GroupId配置一样表示Eth0和Eth2同为对外网口组,Mac地址统一使用配置MacUseEnabled为true的网口的mac,即Eth0使用Eth2的mac地址。

双网口配置(ncsi和专用口均配置对外ip),专用口使用ipv4对象,新增网口使用EthGroup对象

json
        "EthMac_Eth0": &#123;
            "EthId": 0,
            "EthName": "eth0",
            "GroupId": "EthGroup0",
            "Mac": "20:22:01:75:BC:60",
            "MacUseEnabled": false,
            "SpeedDuplexEnable": true,
            "SpeedSetting": 0,
            "DuplexSetting": 0
        &#125;,
        "EthMac_Eth2": &#123;
            "EthId": 2,
            "EthName": "eth2",
            "GroupId": "EthGroup0",
            "Mac": "20:22:01:75:BC:60",
            "MacUseEnabled": true,
            "SpeedDuplexEnable": true,
            "SpeedSetting": 0,
            "DuplexSetting": 0
        &#125;,
        "EthGroup_OutEthGroup1": &#123;
            "Name": "OutEthGroup1",
            "GroupId": 0,
            "OutType": 2,
            "ActiveEthId": 0,
            "InnerNetWork": "",
            "VLANId": 4092,
            "VLANEnabled": false,
            "EthAlias": 255,
            "IpAddr":"192.168.2.200",
            "BackupIpAddr": "",
            "BaseIpAddr": "",
            "SubnetMask": "255.255.255.0",
            "BackUpSubnetMask": "",
            "DefaultGateway": "192.168.2.200",
            "IpPolicy": 0,
            "Status": true,
            "IpMode": "DHCP",
            "Ipv6Mode": "Static",
            "Ipv6Addr": "",
            "PrefixLength": 0,
            "Ipv6DefaultGateway": "",
            "AssociatedPortType": 1,
            "Channel": 2
        &#125;,
        "IPMIChannel_LAN2": &#123;
            "ChanType": 4,
            "Instance": 2,
            "ChanPro": 1,
            "ChannelID": 2,
            "DestAddr": 32,
            "SrcAddr": 0,
            "MedType": 4
        &#125;

2.4 bmc_network外网初始化流程

2.5 bmc_network内网初始化流程

2.6 DHCP任务流程

3. 网络相关特性

3.1 配置IPv4

IPv4有两种方式设置:

  1. 设置静态IPv4信息:IP、掩码、网关
  2. 设置DHCP模式由DHCP服务器动态分发IPv4信息,配置成DHCP时,还可配置备份IPv4地址、掩码,当DHCP未获取到IP地址时,还可以通过备份IP访问

3.2 配置IPv6

IPv6地址有三种方式设置:

  1. 设置静态IPv6信息:IP、前缀、网关
  2. 设置DHCPv6模式动态分发IPv6信息,详情见DHCPv6介绍
  3. 通过SLAAC自动配置无状态地址

3.3 外网网口切换

BMC的网络设备通常就是两种(专用网口、NCSI网口),专用网口是BMC自身的管理网口(通常对应eth2),NCSI网口指BMC通过NCSI技术与服务器内其他网络设备实现共享的网口(通常对应eth0);这里的网口切换指的是对外网络的配置在专用网口、NCSI网口之间切换,例如从专用网口切换到NCSI网口时,eth2上的对外IP会被清除,eth0上会重新配置对外IP,外网网口切换有两种模式:

  1. 手动切换到指定网口
  2. 设置自适应模式,自动选择优先级高且是连接状态的网口(通常专用网口优先级最高)

3.4 外网VLAN配置

VLAN配置分为专用网口VLAN和NCSI网口VLAN两种配置,当配置了VLAN后,BMC的网口只会处理带了对应VLAN tag的报文,相当于划分了虚拟的局域网。

3.5 网口相关配置

  1. 网口mac配置,可通过ipmi命令修改BMC网口的mac地址,mac地址一般在装备阶段设置一次后就固化下来
  2. 网口速率配置,支持配置自协商或者非自协商模式下自定义网口速率和半/全双工模式
  3. 支持up/down网口,初始化时会将所有网口全部up起来,同时也提供接口up/down网口

4. BMC 网络常用接口

4.1 busctl接口

设置Ipv4信息

busctl设置IP、掩码、网关,依次传入四段式的IP、掩码、网关:

bash
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv4 bmc.kepler.Managers.EthernetInterfaces.Ipv4 SetIpMaskGateway a&#123;ss&#125;sss 3 Interface a UserName a ClientAddr a <ipaddr> <mask> <gateway>

busctl设置IP、掩码,依次传入四段式的IP、掩码:

bash
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv4 bmc.kepler.Managers.EthernetInterfaces.Ipv4 SetIpAddr a&#123;ss&#125;ss 3 Interface a UserName a ClientAddr a <ipaddr> <mask>

busctl设置网关:

bash
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv4 bmc.kepler.Managers.EthernetInterfaces.Ipv4 SetDefaultGateway a&#123;ss&#125;s 3 Interface a UserName a ClientAddr a <gateway>

设置Ipv6信息

busctl设置IP、前缀、网关,依次传入IP、前缀、网关:

bash
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv6 bmc.kepler.Managers.EthernetInterfaces.Ipv6 SetIpv6PrefixGateway a&#123;ss&#125;sis 3 Interface a UserName a ClientAddr a <ipaddr> <prefix> <gateway>

busctl设置IP、前缀,依次传入IP、前缀:

bash
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv6 bmc.kepler.Managers.EthernetInterfaces.Ipv6 SetIpAddr a&#123;ss&#125;si 3 Interface a UserName a ClientAddr a <ipaddr> <prefix>

busctl设置网关:

bash
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv6 bmc.kepler.Managers.EthernetInterfaces.Ipv6 SetDefaultGateway a&#123;ss&#125;s 3 Interface a UserName a ClientAddr a <ipaddr> <prefix>

外网网口切换

busctl切换网口:

bash
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces bmc.kepler.Managers.EthernetInterfaces SetNetworkConfig a&#123;ss&#125;sybq 3 Interface a UserName a ClientAddr a <网络模式> <网口id> <NCSI VLAN使能> <NCSI VLAN id>

参数说明:

  1. 网络模式:取值为Automatic/Fixed,切换到指定网口时需传Fixed,设置自适应模式需传Automatic;
  2. 网口id:网络模式为Fixed时这个参数才会生效,表示要切换的网口id(通常专用网口的id为1);
  3. NCSI VLAN使能:类型为布尔值,NCSI网口是否使能VLAN;
  4. NCSI VLAN id:VLAN使能时才有效,未使能时传0;

外网VLAN配置

注意事项: 配置之后会导致网络不通,需要在局域网内配置相同vlan,可以通过串口连接 查询方式:通过ifconfig查询 busctl设置VLAN:

bash
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces bmc.kepler.Managers.EthernetInterfaces SetVLANConfig a&#123;ss&#125;bqy 3 Interface a UserName a ClientAddr a <VLAN使能> <VLAN id> <port type>

参数说明:

  1. VLAN使能:类型为布尔值,是否使能VLAN;
  2. VLAN id:VLAN使能时传入大于0的id才有效,未使能时传0;
  3. port type:0表示设置NCSI的VLAN,1表示设置专用网口的VLAN;

网口配置

设置网口速率

查询方法:ethtool + <网口名称> | cat /sys/class/net/<网口名称>/speed busctl设置网口速率:

bash
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Eth bmc.kepler.Managers.EthernetInterfaces.EthConfig SetSpeed a&#123;ss&#125;sbyy 3 Interface a UserName a ClientAddr a <网口名> <自协商使能> <网口速率> <双工模式>

参数说明:

  1. 网口名:例如eth2、eth0
  2. 自协商使能:布尔值,网口自协商模式使能
  3. 网口速率:0-不涉及(自协商使能时传0)1-10M 2-100M 3-1000M
  4. 双工模式:0-不涉及(自协商使能时传0)1-半双工 2-全双工

设置网口状态

查询方式:ipmcget -d ethport busctl设置网口状态:

bash
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces bmc.kepler.Managers.EthernetInterfaces SetEthState a&#123;ss&#125;sb 3 Interface a UserName a ClientAddr a <网口名> <网口状态>

参数说明:

  1. 网口名:例如eth2、eth0
  2. 网口状态:布尔值,true表示up网口,false表示down网口

4.2 CLI接口

设置Ipv4信息

cli设置IPv4静态IP、掩码、网关,-v后面依次传入四段式的IP、掩码、网关(网关可不传):

bash
ipmcset -d ipaddr -v <ipaddr> <mask> [gateway]

cli设置IPv4静态网关:

bash
ipmcset -d gateway -v <gateway>

cli设置IPv4模式为DHCP/Static:

bash
ipmcset -d ipmode -v <dhcp|static>

设置Ipv6信息

cli设置IPv6静态IP、前缀、网关,-v后面依次传入IP、前缀、网关(网关可以不传):

bash
ipmcset -d ipaddr6 -v <ipaddr> <prefix> [gateway]

cli设置IPv6静态网关:

bash
ipmcset -d gateway6 -v <gateway>

cli设置IPv6模式为DHCPv6/Static:

bash
ipmcset -d ipmode6 -v <dhcp|static>

外网网口切换

cli设置网络模式,传1表示固定网口,传2表示自适应模式:

bash
ipmcset -d netmode -v <网络模>

cli切换网口(网络模式为固定模式才能切换网口):

bash
ipmcset -d activeport -v <网口类> <port id>

参数说明:

  1. 网口类型:0-专用网口 1-LOM 2-PCIe
  2. port id: 切换到该类型网口的第几个port(port id从0开始,网口类型传0时,该参数可不传)

4.3 IPMI接口

设置IPv4信息

设置外网IPv4地址

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0x03 <四个字节的IP地>

设置外网IPv4掩码

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0x06 <四个字节的掩>

设置外网IPv4网关

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0x0c <四个字节的网>

设置外网IPv4模式

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0x04 <1字节的mode>

最后一个字节为模式:0x01(Static) 0x02(DHCP)

说明:

  1. 仅使能IPv6时,不允许设置IPv4地址,掩码,网关
  2. 设置前若为DHCP模式,设置成功后将变成Static模式
  3. IP传入全0时,表示清除IPv4地址(掩码、网关也会被清除)
  4. 掩码传入全0时,表示清除IPv4掩码(网关也会被清除)
  5. 如果设置的网关和当前IP不在同一网段,则此次操作失败
  6. 网关传入全0时,表示清除IPv4网关

查询外网IPv4地址

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0x03 0x00 0x00

查询外网IPv4掩码

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0x06 0x00 0x00

查询外网IPv4网关

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0x0c 0x00 0x00

查询外网IPv4模式

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0x04 0x00 0x00

第一个字节固定返回11,后面的字节是查询的内容。

设置IPv6信息

设置外网IPv6地址

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0xcc <3字节的厂商id> <16字节的IPv6地>

设置外网IPv6前缀

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0xcd <3字节的厂商id> <1字节的前>

设置外网IPv6网关

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0xce <3字节的厂商id> <16字节的网>

设置外网IPv6模式

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0xd0 <3字节的厂商id> <1字节的mode>

查询外网IPv6地址

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0xcc 0x00 0x00

查询外网IPv6前缀

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0xcd 0x00 0x00

查询外网IPv6网关(网关地址按小端方式传入)

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0xce 0x00 0x00

查询外网IPv6模式

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0xd0 0x00 0x00

第一个字节固定返回11,紧跟的三个字节是厂商ID,后面的字节是查询的内容。

设置网络模式

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <用户> -P <> -C 17 raw 0x0c 0x01 0x01 <3字节的厂商id> <1字节的网络模>

网络模式参数说明:1-专用网口 3-自适应模式 4-PCIe (默认切换到该类型网口的第一个port)

设置VLAN

bash
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <用户> -P <> -C 17 raw 0x30 0x93 <3字节的厂商id> 0x5a 0x1a 0x00 0x04 0x00 <1字节的port type> <1字节的VLAN使> <2字节的VLAN id>

参数说明:

  1. port type:0表示设置NCSI的VLAN,1表示设置专用网口的VLAN;
  2. VLAN使能:0表示关闭,1表示使能;
  3. VLAN id:由两个字节组成,由前一个字节的低四位和后一个字节组成12位数字

4.4 RPC接口

IPv4

Ipv4SetIpAddr

回调函数: set_ipv4_addr

功能: 设置IPv4地址,只传IP和子网掩码。

前置条件:

  1. 校验入参IPv4地址有效性
  2. 校验入参子网掩码有效性
  3. ip_version需要支持IPv4
  4. 检查是否和内网、维护IP网段冲突

注意: DHCP模式下设置,会停止DHCP客户端,并切换为静态地址模式。

功能实现:

  1. 修改资源树和数据库信息
  2. 记录操作日志
  3. 通过socket实际设置IPv4地址和子网掩码【核心实现】
  4. 更新对外网络NAT表(网络地址转换表)的iptables规则
  5. 发射IPv4的IP、子网掩码变化信号
  6. 清除别名网口
  7. IP发生变化时修改iptables规则
  8. 广播ARP报文

Ipv4SetDefaultGateway

回调函数: set_ipv4_gateway

功能: 单独设置IPv4网关。

前置条件:

  1. 校验入参网关地址有效性
  2. ip_version需要支持IPv4
  3. 检查当前网关是否和要设置的IP在同一网段

功能实现:

  1. 修改资源树和数据库信息【DefaultGateway】
  2. 记录操作日志
  3. 通过socket实际设置IPv4网关【核心实现】
  4. 发射IPv4网关变化信号
  5. 广播ARP报文

Ipv4SetIpMaskGateway

回调函数: set_ipv4_mask_gateway

功能: 设置IPv4地址,需要传入IP和子网掩码、网关。

前置条件:

  1. 校验入参合法性
  2. 校验同网段
  3. 检查是否和其他IP冲突

注意: DHCP模式下设置,会停止DHCP客户端,并切换为静态地址模式。

功能实现:

  1. 修改数据库和资源树
  2. 记录操作日志
  3. 通过socket实际设置IPv4地址和子网掩码、默认网关【核心实现】
  4. 更新对外网络NAT表的iptables规则
  5. IP发生变化时修改iptables规则
  6. 发送IPv4信息变化信号
  7. 清除别名网口
  8. 广播ARP报文

Ipv4SetDedicatedMaintIpMask

回调函数: set_dedicated_maint_ipv4_mask

功能: 设置专用口运维IPv4地址和子网掩码。

前置条件:

  1. 校验入参合法性
  2. 校验同网段
  3. 检查是否和其他IP冲突

功能实现:

  1. 更新运维专用网络
    • 通过socket实际设置运维网口IPv4地址和子网掩码【核心实现】
    • 设置route_localnet为1,保证Web和SSH等服务正常
    • 更新运维网络NAT表的iptables规则
    • 运维网口配置后,导致ARP地址解析到维护IP,因此对外网口主动ARP报文,触发地址学习到对外IP
  2. 记录操作日志

IPv6

Ipv6SetIpAddr

回调函数: set_ipv6_addr

功能: 设置IPv6地址,只传IP和前缀,其中ipv6_addr为最简字符串形式,形如:fe80::格式。

前置条件:

  1. 校验IPv6地址合法性
  2. 校验前缀(前缀最大为128)
  3. ip_version需要支持IPv6

注意:
1.传入的prefix为0,则设置prefix为默认值64
2.如果设置前为DHCP模式,则需要关闭DHCPv6服务

功能实现:

  1. 记录操作日志
  2. 修改数据库和资源树
  3. 通过socket删除之前的IPv6信息
  4. 通过socket设置新的IPv6信息【核心实现】
  5. 发射IPv6的IP、前缀变化信号
  6. 发送邻居通告报文NA
  7. IPv6地址发生变化时修改ip6tables规则

Ipv6SetDefaultGateway

回调函数: set_ipv6_gateway

功能: 单独设置IPv6网关。

前置条件:

  1. 检验网关合法性
  2. 判断要设置的网关和此时的IP是否在同一网段
  3. ip_version需要支持IPv6

功能实现:

  1. 记录操作日志
  2. 修改资源树和数据库信息【DefaultGateway】
  3. 通过socket删除之前的IPv6网关
  4. 通过socket添加新IPv6网关【核心实现】
  5. 发射IPv6网关变化信号

Ipv6SetIpv6PrefixGateway

回调函数: set_ipv6_prefix_gateway

功能: 设置IPv6地址,需要传入IP和前缀、网关。

前置条件:

  1. Redfish场景下,IpAddr和PrefixLength任意一个合法均需要设置
  2. 校验IP、前缀、网关合法性
  3. 判断要设置的网关和此时的IP是否在同一网段
  4. ip_version需要支持IPv6

注意:
1.Redfish场景InvalidIPv6Address报错
2.如果设置前为DHCP模式,则需要关闭DHCPv6服务
3.如果传入的prefix为0,则设置prefix为默认值64

功能实现:

  1. 记录操作日志
  2. 修改资源树和数据库信息
  3. 通过socket删除之前的IPv6网关
  4. 通过socket添加新IPv6网关【核心实现】
  5. 通过socket删除之前的IPv6信息
  6. 通过socket设置新的IPv6信息【核心实现】
  7. 发射IPv6的IP、前缀变化、网关变化信号
  8. 发送邻居通告报文NA
  9. IPv6地址发生变化时修改ip6tables规则

Ethernet

EthernetInterfacesGetAllPort

回调函数: get_all_port

功能实现:

遍历slot.Port,返回所有port信息:

  • Id
  • EthId
  • DeviceId
  • DevicePortId
  • Silkscreen
  • Type
  • AdaptiveFlag
  • LinkStatus
  • Mac

EthernetInterfacesSetNetworkConfig

回调函数: set_network_config

功能: 设置网络配置。

入参: NetMode、PortId、VLANEnable、VLANId

前置条件:

  1. 检查和内网VLAN是否冲突
  2. port id校验
  3. 自适应模式下,端口与之前的端口保持不变,不接受接口参数
  4. 如果在VLAN使能为false状态下仅修改vlan_id不重启网络

功能实现:

  1. NetMode包含自适应模式,固定网口模式
  2. 更新数据库和资源树信息
  3. 切换网口重启网络,更新对外网口多IP配置
  4. NCSI网口VLAN信息变化重启网络

EthernetInterfacesAddMgmtPort

回调函数: add_mgmt_port

功能: 添加管理端口。

注意:
1.port id不等于0,有则更新,没有注册指定port id的端口
2.等于0表示是新注册的,需要自动生成port id
3.专用网口不提供修改

功能实现:

  1. 添加资源树对象

EthernetInterfacesDeleteMgmtPort

回调函数: delete_mgmt_port

功能: 删除管理端口。

注意:
1.port_id = 255时删除所有NCSI网口
2.id为专用网口,不可删除

功能实现:

  1. 删除资源树对象

EthernetInterfacesSetVLANConfig

回调函数: rpc_set_vlan

功能: 设置VLAN。

前置条件:

  1. 检查和内网VLAN是否冲突
  2. 检查vlan_id范围(1-4094)

功能实现:

  1. 根据port_type设置vlan_id,当前只支持两种type:0-NCSI、1-Dedicated
  2. 判断当前机型是否支持专用网口设置VLAN,不支持直接返回失败

HeartBeatBeat

回调函数: heart_beat:beat

功能: 心跳。

EthernetInterfacesNetworkFailover

回调函数: network_failover

功能: 网络更新主备状态。

注意: LSW切换port时主动发送ARP报文和NA报文。

iptables

EthernetInterfacesAddIptablesRule

回调函数: add_iptables_rule

入参: interface_name、ip_addr

注意:
1.ssdp组件间内部调该RPC方法时不用记录操作日志
2.入参校验,包括特殊字符校验

功能实现:

  1. OS执行iptables命令实现

EthernetInterfacesAddIp6tablesRule

回调函数: add_ip6tables_rule

入参: interface_name、ipv6_addr

注意:
1.ssdp组件间内部调该RPC方法时不用记录操作日志
2.入参校验,包括特殊字符校验

功能实现:

  1. OS执行ip6tables命令实现

NatConfigAddNatRule

回调函数: add_nat_rule

功能: 添加地址映射规则。

入参: service_name、reg_params

注意:
1.目前一种网口类型只支持新增一个指定IP的转发规则
2.基于当前所有service的转发规则,新增由ps.Address转发至内部地址的转发规则,暂时只支持IPv4

功能实现:

  1. add_multi_nat_rules or add_single_nat_rule
  2. OS执行iptables命令实现

NatConfigUpdateNatRule

回调函数: update_nat_rule

功能: 更新地址映射规则。

入参: service_name、reg_params

功能实现:

  1. update_multi_nat_rules or update_single_nat_rule
  2. OS执行iptables命令实现
  3. 网口不可用则设置route_localnet为0