关联issue
BMC SDK 的定制化能力,暂无 issue
背景
需求
当前BMC的网口支持 DHCP(包含 DHCPv6)获取网口的动态地址,各种不同的硬件产品需要根据自身产品携带不同的信息配置 DHCP(包含DHCPv6)中的 Vendor Class 字段。具体 Vendor Class 字段在 DHCP 协议中有不同的含义:
- 在 DHCPv4 中,
Vendor Class Identifier由 RFC 2132 定义。该文档中规定,DHCPv4 客户端会在发送给服务器的所有 DHCPv4 数据包中发送厂商信息,由 Option60 承载。 - 在 DHCPv6 中,
Vendor Class Option由 RFC 3315 定义。该文档中规定,DHCPv6 客户端会在所有发送给 DHCPv6 服务器的数据包中发送厂商信息,由 Option16 承载,格式为 “4 字节厂商编号 + 可变长度标识字符串”。
现状
BMC 的网络管理中对于 DHCP 客户端请求携带 Vendor Class 有不同的处理:
- DHCPv4 配置的 Vendor Class 字段支持两种类型,由 SR 文件进行出厂配置,其中一种是板类型+框标识+槽位号,一种是空值。
- DHCPv6 目前不支持 Vendor Class 字段配置。
方案
- 增加定制化项,在出厂配置时按照诉求进行定制,默认或者空定制化时恢复到默认值
- 增加配置项,可以在现网进行当前配置的快速复制部署,支持配置项导出之后直接导入
- 新增定制化项和配置项均覆盖 DHCPv4 和 DHCPv6
评审点
评审点1:新增定制化项 Custom_DHCPv4VendorClassIdentifier
| 项目 | 值 |
|---|---|
| 定制化项 | DHCPv4VendorClassIdentifier 定制项 |
| 定制化接口名称 | Custom_DHCPv4VendorClassIdentifier |
| 取值类型 | string |
| 取值范围 | 字母、数字、下划线、短横线的组合 |
| 默认值 | “” |
| 字符串长度最大值 | 254,不带有结束符 |
| 处理逻辑 | if (Custom_DHCPv4VendorClassIdentifier != “”) 修改DHCPv4报文的Vendor字段为 Custom_DHCPv4VendorClassIdentifier 的值 else 还原空字符串 |
评审点2:新增配置导入导出项 DHCPv4VendorClassIdentifier
| 项目 | 值 |
|---|---|
| 导出项 | BMC |
| 导出子项 | DHCPv4VendorClassIdentifier |
| 取值类型 | string |
| 取值范围 | 字母、数字、下划线、短横线的组合 |
| 默认值 | “” |
| 字符串长度最大值 | 254,不带有结束符 |
| 含义说明 | DHCPv4报文中Vendor 字段值 |
| 导出后是否可以直接导入 | 是 |
评审点3:新增定制化项 Custom_DHCPv6VendorClassOption
| 项目 | 值 |
|---|---|
| 定制化项 | DHCPv6VendorClassOption定制项 |
| 定制化接口名称 | Custom_DHCPv6VendorClassOption |
| 取值类型 | string |
| 取值范围 | 4 字节厂商编号 + 可变长度标识字符串(字母、数字、下划线、短横线的组合) |
| 格式 | 厂商id加冒号再加厂商标识,例如:2636:Linux |
| 字符串长度最大值 | 254,不带有结束符 |
| 默认值 | “” |
| 处理逻辑 | if (Custom_DHCPv6VendorClassOption != “”) 修改DHCPv6报文的Vendor字段为 Custom_DHCPv6VendorClassOption 的值 else 还原空字符串 |
评审点4:新增配置导入导出项 DHCPv6VendorClassOption
| 项目 | 值 |
|---|---|
| 导出项 | BMC |
| 导出子项 | DHCPv6VendorClassOption |
| 取值类型 | string |
| 取值范围 | 4 字节厂商编号 + 可变长度标识字符串(字母、数字、下划线、短横线的组合) |
| 格式 | 厂商id加冒号再加厂商标识,例如:2636:Linux |
| 字符串长度最大值 | 254,不带有结束符 |
| 默认值 | “” |
| 含义说明 | DHCPv6 报文中Vendor 字段值 |
| 导出后是否可以直接导入 | 是 |
评审结论
通过,具体结论如下:
- 同意新增定制化项
Custom_DHCPv4VendorClassIdentifier,用于出厂定制 DHCPv4 客户端请求 IPv4 地址时携带 Vendor Class;类型为string,默认值为空字符串,字符串最大长度为 254(不带结束符),字符串为字母、数字、下划线、短横线的组合 - 同意新增配置项
DHCPv4VendorClassIdentifier,用于配置导出和导入 DHCPv4 客户端请求 IPv4 地址时携带 Vendor Class;类型为string,默认值为空字符串,字符串最大长度为 254(不带结束符),字符串为字母、数字、下划线、短横线的组合 - 同意新增定制化项
Custom_DHCPv6VendorClassOption,用于出厂定制 DHCPv6 客户端请求 IPv6 地址时携带 Vendor Class;类型为string,默认值为空字符串,字符串最大长度为 254(不带结束符),字符串格式为厂商编号(4个字符):可变长度标识(字母、数字、下划线、短横线的组合) - 同意新增配置项
DHCPv6VendorClassOption,用于配置导出和导入 DHCPv6 客户端请求IPv6 地址时携带 Vendor Class;类型为string,默认值为空字符串,字符串最大长度为 254(不带结束符),字符串格式为厂商编号(4个字符):可变长度标识(字母、数字、下划线、短横线的组合)
遗留问题
- 确认Vendor Class Identifier与Vendor Class Option两个字段长度限制
结论:254 (规范中没有明确定义,在 udhcpc/udhcpc6 开源软件中缓冲区限制长度为 254)