1. BMC 网络管理介绍
bmc_network主要负责功能是IPv4/IPv6配置,从两个角度保障BMC的正常网络通信:
- 配置对外IP,用户可以通过BMC配置的管理IP连接BMC
- 配置对内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模式下被激活)、备份掩码,并提供以上属性的修改接口。
| 属性 | 属性说明 |
|---|---|
| IpMode | IPv4的网络模式,DHCP/Static |
| IpAddr | IP地址 |
| BackupIpAddr | 备份IPv4地址 |
| SubnetMask | IPv4子网掩码 |
| BackupSubnetMask | 备份IPv4掩码 |
| DefaultGateway | IPv4默认网关 |
| EthName | 对外网口设备的名称:如eth0.701(701表示带了VLAN) |
IPv6
该类主要承载对外网口的IPv6信息,包括:IP地址、前缀长度、默认网关、地址获取模式(DHCPv6/Static),并提供以上属性的修改接口(接口使用见part3)。
| 属性 | 属性说明 |
|---|---|
| IpMode | IPv6的网络模式,DHCPv6/Static |
| IpAddr | IP地址 |
| PrefixLength | IPv6前缀长度 |
| Scope | Link,Global |
| DefaultGateway | IPv6默认网关 |
EthernetInterfaces
该类主要承载对外网口的大部分信息,主要包括:
| 属性 | 属性说明 |
|---|---|
| EthName | 对外网口设备的名称:如eth0.701(701表示带了VLAN) |
| NetMode | 固定网口模式/自适应模式(按网卡优先级选择对外网口设备) |
| Mac | BMC对外的MAC地址 |
| IpVersion | IPv4/IPv6使能状态 |
| PortId | 当前激活正在使用的网口ID,对应MgmtPort的Id |
| NcsiEnable | NCSI使能状态 |
| VLANEnable | NCSI的VLAN使能状态 |
| VLANId | NCSI的VLANId |
| LinkLocalAddress | IPv6本地链路地址 |
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信息 |
| VLANId | VLAN ID |
| Priority | 自适应优先级 |
LldpConfig
该类主要承载LLDP的相关配置,主要包括:
| 属性 | 属性说明 |
|---|---|
| Enabled | LLDP服务使能:true为使能,默认不使能 |
| WorkMode | LLDP工作模式,目前仅支持Tx模式 |
| TxDelaySeconds | LLDP Tx延时 |
| TxIntervalSeconds | LLDP Tx间隔时间 |
| TxHold | LLDP Tx保持时间 |
| LLDPSupport | LLDP 功能支持开关,默认是不支持,不支持时不会启动 LLDP 服务以及服务例测 |
| LLDPParseEnabled | LLDP 解析功能支持开关,默认是不支持,不支持时不会解析 LLDP 报文 |
| LLDPOverNCSIEnabled | LLDP Over NCSI功能支持开关,默认是不支持,不支持时 LLDP 不会解析 NCSI 发送的报文 |
| LLDPGetPortDescEnabled | LLDP获取端口描述功能支持开关,默认是不支持,不支持时不会解析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 |
| IpAddr | IPv4地址 |
| BaseIpAddr | 基准IPv4地址,和IpAdd作比较,内网ip判断是否根据槽位号生成过Ip |
| SubnetMask | IPv4掩码 |
| DefaultGateway | IPv4网关 |
| Ipv6Addr | IPv6地址 |
| PrefixLength | IPv6前缀长 |
| Ipv6DefaultGateway | IPv6网关 |
| IpPolicy | ip生成策略:0:根据默认IP地址,1:根据槽位和基准IP地址生成 |
| Status | 该IP是否在工作状态中 |
| IpMode | IPv4模式,Static或者DHCP |
| Ipv6Mode | IPv6模式,Static或者DHCPv6 |
| IpVersion | IP协议类型,IPv4、IPv6、IPv4AndIPv6 |
| AssociatedPortType | 网口组关联的网口类型 |
| Channel | 网口对应LAN通道的channel number |
类之间相互关系
2.2 常用定制化项说明
| 定制化项 | 定制化接口名称 | 默认值 | 处理逻辑 | 说明 |
|---|---|---|---|---|
| BMC主机名称 | BMCSet_Hostname Custom_SerialNUM | BMCSet_Hostname:off | if (BMCSet_Hostname == on) 将Custom_SerialNUM作为Hostname else if(FRU数据中的产品序列号 != 空) 将FRU数据中的产品序列号(product-serialnumber)作为Hostname else 主机名设置为HostName | BMCSet_Hostname如果设置为on,则表示把Custom_SerialNUM设置为主机名称,长度范围:1~64 (1)默认写产品序列号作为主机名称 (2)主机名限制字符:`~!@#$%^&*()_=+[{}]|;:’,<.>/?\(包含空格) |
| 管理网口Ipv4 | BMCSet_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_Mode | mgnt | if(BMCSet_NET_Mode == 空 设置网口模式为强制专用管理网口 else 设置网口模式为BMCSet_NET_Mode的值 | 配置BMC管理网口的模式,取值范围: mgnt或不配置:强制管理网口 auto:自适应(以管理网口的link状态为准) pcie:强制PCIE NCSI模式 |
| 绑定NCSI网口 | Custom_NCSI_Port_Num | 0 | if(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网口VlanID | BMCSet_NCSI_VLAN_ID | 0 | if (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_IPVersion | IPv4AndIPv6 | if (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对象
"EthMac_Eth0": {
"EthId": 0,
"EthName": "eth0",
"GroupId": "EthGroup0",
"Mac": "20:22:01:75:BC:60",
"MacUseEnabled": false,
"SpeedDuplexEnable": true,
"SpeedSetting": 0,
"DuplexSetting": 0
},
"EthMac_Eth2": {
"EthId": 2,
"EthName": "eth2",
"GroupId": "EthGroup0",
"Mac": "20:22:01:75:BC:60",
"MacUseEnabled": true,
"SpeedDuplexEnable": true,
"SpeedSetting": 0,
"DuplexSetting": 0
}说明:GroupId配置一样表示Eth0和Eth2同为对外网口组,Mac地址统一使用配置MacUseEnabled为true的网口的mac,即Eth0使用Eth2的mac地址。
双网口配置(ncsi和专用口均配置对外ip),专用口使用ipv4对象,新增网口使用EthGroup对象
"EthMac_Eth0": {
"EthId": 0,
"EthName": "eth0",
"GroupId": "EthGroup0",
"Mac": "20:22:01:75:BC:60",
"MacUseEnabled": false,
"SpeedDuplexEnable": true,
"SpeedSetting": 0,
"DuplexSetting": 0
},
"EthMac_Eth2": {
"EthId": 2,
"EthName": "eth2",
"GroupId": "EthGroup0",
"Mac": "20:22:01:75:BC:60",
"MacUseEnabled": true,
"SpeedDuplexEnable": true,
"SpeedSetting": 0,
"DuplexSetting": 0
},
"EthGroup_OutEthGroup1": {
"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
},
"IPMIChannel_LAN2": {
"ChanType": 4,
"Instance": 2,
"ChanPro": 1,
"ChannelID": 2,
"DestAddr": 32,
"SrcAddr": 0,
"MedType": 4
}2.4 bmc_network外网初始化流程
2.5 bmc_network内网初始化流程
2.6 DHCP任务流程
3. 网络相关特性
3.1 配置IPv4
IPv4有两种方式设置:
- 设置静态IPv4信息:IP、掩码、网关
- 设置DHCP模式由DHCP服务器动态分发IPv4信息,配置成DHCP时,还可配置备份IPv4地址、掩码,当DHCP未获取到IP地址时,还可以通过备份IP访问
3.2 配置IPv6
IPv6地址有三种方式设置:
3.3 外网网口切换
BMC的网络设备通常就是两种(专用网口、NCSI网口),专用网口是BMC自身的管理网口(通常对应eth2),NCSI网口指BMC通过NCSI技术与服务器内其他网络设备实现共享的网口(通常对应eth0);这里的网口切换指的是对外网络的配置在专用网口、NCSI网口之间切换,例如从专用网口切换到NCSI网口时,eth2上的对外IP会被清除,eth0上会重新配置对外IP,外网网口切换有两种模式:
- 手动切换到指定网口
- 设置自适应模式,自动选择优先级高且是连接状态的网口(通常专用网口优先级最高)
3.4 外网VLAN配置
VLAN配置分为专用网口VLAN和NCSI网口VLAN两种配置,当配置了VLAN后,BMC的网口只会处理带了对应VLAN tag的报文,相当于划分了虚拟的局域网。
3.5 网口相关配置
- 网口mac配置,可通过ipmi命令修改BMC网口的mac地址,mac地址一般在装备阶段设置一次后就固化下来
- 网口速率配置,支持配置自协商或者非自协商模式下自定义网口速率和半/全双工模式
- 支持up/down网口,初始化时会将所有网口全部up起来,同时也提供接口up/down网口
4. BMC 网络常用接口
4.1 busctl接口
设置Ipv4信息
busctl设置IP、掩码、网关,依次传入四段式的IP、掩码、网关:
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv4 bmc.kepler.Managers.EthernetInterfaces.Ipv4 SetIpMaskGateway a{ss}sss 3 Interface a UserName a ClientAddr a <ipaddr> <mask> <gateway>busctl设置IP、掩码,依次传入四段式的IP、掩码:
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv4 bmc.kepler.Managers.EthernetInterfaces.Ipv4 SetIpAddr a{ss}ss 3 Interface a UserName a ClientAddr a <ipaddr> <mask>busctl设置网关:
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv4 bmc.kepler.Managers.EthernetInterfaces.Ipv4 SetDefaultGateway a{ss}s 3 Interface a UserName a ClientAddr a <gateway>设置Ipv6信息
busctl设置IP、前缀、网关,依次传入IP、前缀、网关:
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv6 bmc.kepler.Managers.EthernetInterfaces.Ipv6 SetIpv6PrefixGateway a{ss}sis 3 Interface a UserName a ClientAddr a <ipaddr> <prefix> <gateway>busctl设置IP、前缀,依次传入IP、前缀:
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv6 bmc.kepler.Managers.EthernetInterfaces.Ipv6 SetIpAddr a{ss}si 3 Interface a UserName a ClientAddr a <ipaddr> <prefix>busctl设置网关:
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Ipv6 bmc.kepler.Managers.EthernetInterfaces.Ipv6 SetDefaultGateway a{ss}s 3 Interface a UserName a ClientAddr a <ipaddr> <prefix>外网网口切换
busctl切换网口:
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces bmc.kepler.Managers.EthernetInterfaces SetNetworkConfig a{ss}sybq 3 Interface a UserName a ClientAddr a <网络模式> <网口id> <NCSI VLAN使能> <NCSI VLAN id>参数说明:
- 网络模式:取值为Automatic/Fixed,切换到指定网口时需传Fixed,设置自适应模式需传Automatic;
- 网口id:网络模式为Fixed时这个参数才会生效,表示要切换的网口id(通常专用网口的id为1);
- NCSI VLAN使能:类型为布尔值,NCSI网口是否使能VLAN;
- NCSI VLAN id:VLAN使能时才有效,未使能时传0;
外网VLAN配置
注意事项: 配置之后会导致网络不通,需要在局域网内配置相同vlan,可以通过串口连接 查询方式:通过ifconfig查询 busctl设置VLAN:
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces bmc.kepler.Managers.EthernetInterfaces SetVLANConfig a{ss}bqy 3 Interface a UserName a ClientAddr a <VLAN使能> <VLAN id> <port type>参数说明:
- VLAN使能:类型为布尔值,是否使能VLAN;
- VLAN id:VLAN使能时传入大于0的id才有效,未使能时传0;
- port type:0表示设置NCSI的VLAN,1表示设置专用网口的VLAN;
网口配置
设置网口速率
查询方法:ethtool + <网口名称> | cat /sys/class/net/<网口名称>/speed busctl设置网口速率:
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces/Eth bmc.kepler.Managers.EthernetInterfaces.EthConfig SetSpeed a{ss}sbyy 3 Interface a UserName a ClientAddr a <网口名> <自协商使能> <网口速率> <双工模式>参数说明:
- 网口名:例如eth2、eth0
- 自协商使能:布尔值,网口自协商模式使能
- 网口速率:0-不涉及(自协商使能时传0)1-10M 2-100M 3-1000M
- 双工模式:0-不涉及(自协商使能时传0)1-半双工 2-全双工
设置网口状态
查询方式:ipmcget -d ethport busctl设置网口状态:
busctl --user call bmc.kepler.bmc_network /bmc/kepler/Managers/1/EthernetInterfaces bmc.kepler.Managers.EthernetInterfaces SetEthState a{ss}sb 3 Interface a UserName a ClientAddr a <网口名> <网口状态>参数说明:
- 网口名:例如eth2、eth0
- 网口状态:布尔值,true表示up网口,false表示down网口
4.2 CLI接口
设置Ipv4信息
cli设置IPv4静态IP、掩码、网关,-v后面依次传入四段式的IP、掩码、网关(网关可不传):
ipmcset -d ipaddr -v <ipaddr> <mask> [gateway]cli设置IPv4静态网关:
ipmcset -d gateway -v <gateway>cli设置IPv4模式为DHCP/Static:
ipmcset -d ipmode -v <dhcp|static>设置Ipv6信息
cli设置IPv6静态IP、前缀、网关,-v后面依次传入IP、前缀、网关(网关可以不传):
ipmcset -d ipaddr6 -v <ipaddr> <prefix> [gateway]cli设置IPv6静态网关:
ipmcset -d gateway6 -v <gateway>cli设置IPv6模式为DHCPv6/Static:
ipmcset -d ipmode6 -v <dhcp|static>外网网口切换
cli设置网络模式,传1表示固定网口,传2表示自适应模式:
ipmcset -d netmode -v <网络模式>cli切换网口(网络模式为固定模式才能切换网口):
ipmcset -d activeport -v <网口类型> <port id>参数说明:
- 网口类型:0-专用网口 1-LOM 2-PCIe
- port id: 切换到该类型网口的第几个port(port id从0开始,网口类型传0时,该参数可不传)
4.3 IPMI接口
设置IPv4信息
设置外网IPv4地址
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0x03 <四个字节的IP地址>设置外网IPv4掩码
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0x06 <四个字节的掩码>设置外网IPv4网关
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0x0c <四个字节的网关>设置外网IPv4模式
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)
说明:
- 仅使能IPv6时,不允许设置IPv4地址,掩码,网关
- 设置前若为DHCP模式,设置成功后将变成Static模式
- IP传入全0时,表示清除IPv4地址(掩码、网关也会被清除)
- 掩码传入全0时,表示清除IPv4掩码(网关也会被清除)
- 如果设置的网关和当前IP不在同一网段,则此次操作失败
- 网关传入全0时,表示清除IPv4网关
查询外网IPv4地址
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0x03 0x00 0x00查询外网IPv4掩码
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0x06 0x00 0x00查询外网IPv4网关
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0x0c 0x00 0x00查询外网IPv4模式
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0x04 0x00 0x00第一个字节固定返回11,后面的字节是查询的内容。
设置IPv6信息
设置外网IPv6地址
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0xcc <3字节的厂商id> <16字节的IPv6地址>设置外网IPv6前缀
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0xcd <3字节的厂商id> <1字节的前缀>设置外网IPv6网关
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0xce <3字节的厂商id> <16字节的网关>设置外网IPv6模式
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x01 0x01 0xd0 <3字节的厂商id> <1字节的mode>查询外网IPv6地址
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0xcc 0x00 0x00查询外网IPv6前缀
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0xcd 0x00 0x00查询外网IPv6网关(网关地址按小端方式传入)
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0xce 0x00 0x00查询外网IPv6模式
ipmitool -H <BMC的IP> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x0c 0x02 0x01 0xd0 0x00 0x00第一个字节固定返回11,紧跟的三个字节是厂商ID,后面的字节是查询的内容。
设置网络模式
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
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>参数说明:
- port type:0表示设置NCSI的VLAN,1表示设置专用网口的VLAN;
- VLAN使能:0表示关闭,1表示使能;
- VLAN id:由两个字节组成,由前一个字节的低四位和后一个字节组成12位数字
4.4 RPC接口
IPv4
Ipv4SetIpAddr
回调函数: set_ipv4_addr
功能: 设置IPv4地址,只传IP和子网掩码。
前置条件:
- 校验入参IPv4地址有效性
- 校验入参子网掩码有效性
- ip_version需要支持IPv4
- 检查是否和内网、维护IP网段冲突
注意: DHCP模式下设置,会停止DHCP客户端,并切换为静态地址模式。
功能实现:
- 修改资源树和数据库信息
- 记录操作日志
- 通过socket实际设置IPv4地址和子网掩码【核心实现】
- 更新对外网络NAT表(网络地址转换表)的iptables规则
- 发射IPv4的IP、子网掩码变化信号
- 清除别名网口
- IP发生变化时修改iptables规则
- 广播ARP报文
Ipv4SetDefaultGateway
回调函数: set_ipv4_gateway
功能: 单独设置IPv4网关。
前置条件:
- 校验入参网关地址有效性
- ip_version需要支持IPv4
- 检查当前网关是否和要设置的IP在同一网段
功能实现:
- 修改资源树和数据库信息【DefaultGateway】
- 记录操作日志
- 通过socket实际设置IPv4网关【核心实现】
- 发射IPv4网关变化信号
- 广播ARP报文
Ipv4SetIpMaskGateway
回调函数: set_ipv4_mask_gateway
功能: 设置IPv4地址,需要传入IP和子网掩码、网关。
前置条件:
- 校验入参合法性
- 校验同网段
- 检查是否和其他IP冲突
注意: DHCP模式下设置,会停止DHCP客户端,并切换为静态地址模式。
功能实现:
- 修改数据库和资源树
- 记录操作日志
- 通过socket实际设置IPv4地址和子网掩码、默认网关【核心实现】
- 更新对外网络NAT表的iptables规则
- IP发生变化时修改iptables规则
- 发送IPv4信息变化信号
- 清除别名网口
- 广播ARP报文
Ipv4SetDedicatedMaintIpMask
回调函数: set_dedicated_maint_ipv4_mask
功能: 设置专用口运维IPv4地址和子网掩码。
前置条件:
- 校验入参合法性
- 校验同网段
- 检查是否和其他IP冲突
功能实现:
- 更新运维专用网络
- 通过socket实际设置运维网口IPv4地址和子网掩码【核心实现】
- 设置route_localnet为1,保证Web和SSH等服务正常
- 更新运维网络NAT表的iptables规则
- 运维网口配置后,导致ARP地址解析到维护IP,因此对外网口主动ARP报文,触发地址学习到对外IP
- 记录操作日志
IPv6
Ipv6SetIpAddr
回调函数: set_ipv6_addr
功能: 设置IPv6地址,只传IP和前缀,其中ipv6_addr为最简字符串形式,形如:fe80::格式。
前置条件:
- 校验IPv6地址合法性
- 校验前缀(前缀最大为128)
- ip_version需要支持IPv6
注意:
1.传入的prefix为0,则设置prefix为默认值64
2.如果设置前为DHCP模式,则需要关闭DHCPv6服务
功能实现:
- 记录操作日志
- 修改数据库和资源树
- 通过socket删除之前的IPv6信息
- 通过socket设置新的IPv6信息【核心实现】
- 发射IPv6的IP、前缀变化信号
- 发送邻居通告报文NA
- IPv6地址发生变化时修改ip6tables规则
Ipv6SetDefaultGateway
回调函数: set_ipv6_gateway
功能: 单独设置IPv6网关。
前置条件:
- 检验网关合法性
- 判断要设置的网关和此时的IP是否在同一网段
- ip_version需要支持IPv6
功能实现:
- 记录操作日志
- 修改资源树和数据库信息【DefaultGateway】
- 通过socket删除之前的IPv6网关
- 通过socket添加新IPv6网关【核心实现】
- 发射IPv6网关变化信号
Ipv6SetIpv6PrefixGateway
回调函数: set_ipv6_prefix_gateway
功能: 设置IPv6地址,需要传入IP和前缀、网关。
前置条件:
- Redfish场景下,IpAddr和PrefixLength任意一个合法均需要设置
- 校验IP、前缀、网关合法性
- 判断要设置的网关和此时的IP是否在同一网段
- ip_version需要支持IPv6
注意:
1.Redfish场景InvalidIPv6Address报错
2.如果设置前为DHCP模式,则需要关闭DHCPv6服务
3.如果传入的prefix为0,则设置prefix为默认值64
功能实现:
- 记录操作日志
- 修改资源树和数据库信息
- 通过socket删除之前的IPv6网关
- 通过socket添加新IPv6网关【核心实现】
- 通过socket删除之前的IPv6信息
- 通过socket设置新的IPv6信息【核心实现】
- 发射IPv6的IP、前缀变化、网关变化信号
- 发送邻居通告报文NA
- 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
前置条件:
- 检查和内网VLAN是否冲突
- port id校验
- 自适应模式下,端口与之前的端口保持不变,不接受接口参数
- 如果在VLAN使能为false状态下仅修改vlan_id不重启网络
功能实现:
- NetMode包含自适应模式,固定网口模式
- 更新数据库和资源树信息
- 切换网口重启网络,更新对外网口多IP配置
- NCSI网口VLAN信息变化重启网络
EthernetInterfacesAddMgmtPort
回调函数: add_mgmt_port
功能: 添加管理端口。
注意:
1.port id不等于0,有则更新,没有注册指定port id的端口
2.等于0表示是新注册的,需要自动生成port id
3.专用网口不提供修改
功能实现:
- 添加资源树对象
EthernetInterfacesDeleteMgmtPort
回调函数: delete_mgmt_port
功能: 删除管理端口。
注意:
1.port_id = 255时删除所有NCSI网口
2.id为专用网口,不可删除
功能实现:
- 删除资源树对象
EthernetInterfacesSetVLANConfig
回调函数: rpc_set_vlan
功能: 设置VLAN。
前置条件:
- 检查和内网VLAN是否冲突
- 检查vlan_id范围(1-4094)
功能实现:
- 根据port_type设置vlan_id,当前只支持两种type:0-NCSI、1-Dedicated
- 判断当前机型是否支持专用网口设置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.入参校验,包括特殊字符校验
功能实现:
- OS执行iptables命令实现
EthernetInterfacesAddIp6tablesRule
回调函数: add_ip6tables_rule
入参: interface_name、ipv6_addr
注意:
1.ssdp组件间内部调该RPC方法时不用记录操作日志
2.入参校验,包括特殊字符校验
功能实现:
- OS执行ip6tables命令实现
NatConfigAddNatRule
回调函数: add_nat_rule
功能: 添加地址映射规则。
入参: service_name、reg_params
注意:
1.目前一种网口类型只支持新增一个指定IP的转发规则
2.基于当前所有service的转发规则,新增由ps.Address转发至内部地址的转发规则,暂时只支持IPv4
功能实现:
- add_multi_nat_rules or add_single_nat_rule
- OS执行iptables命令实现
NatConfigUpdateNatRule
回调函数: update_nat_rule
功能: 更新地址映射规则。
入参: service_name、reg_params
功能实现:
- update_multi_nat_rules or update_single_nat_rule
- OS执行iptables命令实现
- 网口不可用则设置route_localnet为0