【已评审】新增定制化项与配置导入导出项,支持DHCP报文中Vendor字段内容定制

关联issue

BMC SDK 的定制化能力,暂无 issue

背景

需求

当前BMC的网口支持 DHCP(包含 DHCPv6)获取网口的动态地址,各种不同的硬件产品需要根据自身产品携带不同的信息配置 DHCP(包含DHCPv6)中的 Vendor Class 字段。具体 Vendor Class 字段在 DHCP 协议中有不同的含义:

  • 在 DHCPv4 中,Vendor Class IdentifierRFC 2132 定义。该文档中规定,DHCPv4 客户端会在发送给服务器的所有 DHCPv4 数据包中发送厂商信息,由 Option60 承载。
  • 在 DHCPv6 中,Vendor Class OptionRFC 3315 定义。该文档中规定,DHCPv6 客户端会在所有发送给 DHCPv6 服务器的数据包中发送厂商信息,由 Option16 承载,格式为 “4 字节厂商编号 + 可变长度标识字符串”。

现状

BMC 的网络管理中对于 DHCP 客户端请求携带 Vendor Class 有不同的处理:

  • DHCPv4 配置的 Vendor Class 字段支持两种类型,由 SR 文件进行出厂配置,其中一种是板类型+框标识+槽位号,一种是空值。
  • DHCPv6 目前不支持 Vendor Class 字段配置。

方案

  1. 增加定制化项,在出厂配置时按照诉求进行定制,默认或者空定制化时恢复到默认值
  2. 增加配置项,可以在现网进行当前配置的快速复制部署,支持配置项导出之后直接导入
  3. 新增定制化项和配置项均覆盖 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 字段值
导出后是否可以直接导入

评审结论

通过,具体结论如下:

  1. 同意新增定制化项 Custom_DHCPv4VendorClassIdentifier,用于出厂定制 DHCPv4 客户端请求 IPv4 地址时携带 Vendor Class;类型为 string,默认值为空字符串,字符串最大长度为 254(不带结束符),字符串为 字母、数字、下划线、短横线的组合
  2. 同意新增配置项 DHCPv4VendorClassIdentifier,用于配置导出和导入 DHCPv4 客户端请求 IPv4 地址时携带 Vendor Class;类型为 string,默认值为空字符串,字符串最大长度为 254(不带结束符),字符串为 字母、数字、下划线、短横线的组合
  3. 同意新增定制化项 Custom_DHCPv6VendorClassOption,用于出厂定制 DHCPv6 客户端请求 IPv6 地址时携带 Vendor Class;类型为 string,默认值为空字符串,字符串最大长度为 254(不带结束符),字符串格式为 厂商编号(4个字符):可变长度标识(字母、数字、下划线、短横线的组合)
  4. 同意新增配置项 DHCPv6VendorClassOption,用于配置导出和导入 DHCPv6 客户端请求IPv6 地址时携带 Vendor Class;类型为 string,默认值为空字符串,字符串最大长度为 254(不带结束符),字符串格式为 厂商编号(4个字符):可变长度标识(字母、数字、下划线、短横线的组合)

遗留问题

  1. 确认Vendor Class Identifier与Vendor Class Option两个字段长度限制
    结论:254 (规范中没有明确定义,在 udhcpc/udhcpc6 开源软件中缓冲区限制长度为 254)

【预审】

  1. 对于VendorClass属性,在DHCPv4和DHCPv6报文中的option是不一样的,不应该体现 option60,就是定制 DHCP 报文中的 VendorClass option。
  2. 保持默认的 option60 的值,需要明确这里的默认的值是啥,其实就是无动作吧

DHCPv6 无 Option 60

DHCPv4 的 Option 60 定义为 Vendor Class Identifier(VCI),用于客户端向服务器传递厂商 / 设备类型标识;而 DHCPv6 的协议规范(RFC 3315)中,并未分配 Option 60 对应的功能,不存在 “DHCPv6 Option 60” 这一标准字段。

DHCPv6 对应功能的替代选项

若需在 DHCPv6 中实现 “客户端标识厂商信息” 的功能(与 DHCPv4 Option 60 作用一致),需使用 Option 16(Vendor Class Option),而非 Option 60。Option 16 的格式为 “4 字节 IANA 厂商编号 + 可变长度标识字符串”,例如 2636:Linux-udhcpc6-v1.35,这也是 udhcpc6 通过 -V 参数配置的核心字段。

Vendor Class Identifier(厂商类别标识符)和Vendor Class Option(厂商类别选项)的定义分别出自以下 RFC 文档:

  • Vendor Class Identifier:在 DHCPv4 中,Vendor Class IdentifierRFC 2132定义。该文档中规定,DHCPv4 客户端会在发送给服务器的所有 DHCPv4 数据包中发送厂商信息,以指示客户端上运行的操作系统的厂商或版本,这个信息就是以Vendor Class Identifier选项的形式发送的。
  • Vendor Class Option:在 DHCPv6 中,Vendor Class OptionRFC 3315定义。根据该文档,DHCPv6 客户端会在所有发送给 DHCPv6 服务器的数据包中发送厂商信息,此信息以Vendor Class Option的形式发送,且支持 DHCPv6 的实现必须支持这个选项。