net: consolidate PXE processor architecture type Kconfig

DHCP and DHCPv6 use the same value defined in
https://www.iana.org/assignments/dhcpv6-parameters#processor-architecture
to encode the processor architecture type. We should only use a single
Kconfig symbol for both protocols.

Furthermore we should make the value customizable. This allows for instance
to choose between "x86 BIOS" or "x64 UEFI".

As "x86 BIOS" is encoded as 0, we should not use this value to switch
off transmission of the DHCP option. Use 0xFF instead.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
Heinrich Schuchardt
2025-06-08 09:42:28 +02:00
committed by Tom Rini
parent 14480c84dc
commit 092f0c45f4
3 changed files with 22 additions and 18 deletions

View File

@@ -1864,12 +1864,6 @@ config CMD_DHCP6
if CMD_DHCP6
config DHCP6_PXE_CLIENTARCH
hex
default 0x16 if ARM64
default 0x15 if ARM
default 0xFF
config DHCP6_PXE_DHCP_OPTION
bool "Request & store 'pxe_configfile' from DHCP6 server"
@@ -1977,12 +1971,22 @@ config BOOTP_PXE
help
Supported for ARM, ARM64, and x86 for now.
config BOOTP_PXE_CLIENTARCH
hex
depends on BOOTP_PXE
default 0x16 if ARM64
default 0x15 if ARM
default 0x0 if X86
config DHCP_PXE_CLIENTARCH
hex "DCHCP client system architecture type"
depends on BOOTP_PXE || CMD_DHCP6
default 0x16 if ARM64 # arm 64 uboot
default 0x15 if ARM # arm 32 uboot
default 0x0 if X86 # x86 BIOS
default 0xFF # DHCP option not sent
help
DHCP option 93 (defined in RFC4578) or DHCPv6 option 61 (defined in
RFC 5970) is used to transmit the client system architecture type
to the DHCP server. The DHCP server may use this information to
choose the boot file. For a complete list of assigned values see
https://www.iana.org/assignments/dhcpv6-parameters#processor-architecture.
If the value is set to the reserved value 0xFF, the DHCP option will
not be sent by U-Boot.
config BOOTP_PXE_DHCP_OPTION
bool "Request & store 'pxe_configfile' from BOOTP/DHCP server"

View File

@@ -545,14 +545,14 @@ static int dhcp_extended(u8 *e, int message_type, struct in_addr server_ip,
}
#endif
#ifdef CONFIG_BOOTP_PXE_CLIENTARCH
clientarch = CONFIG_BOOTP_PXE_CLIENTARCH;
#ifdef CONFIG_DHCP_PXE_CLIENTARCH
clientarch = CONFIG_DHCP_PXE_CLIENTARCH;
#endif
if (env_get("bootp_arch"))
clientarch = env_get_ulong("bootp_arch", 16, clientarch);
if (clientarch > 0) {
if (clientarch != 0xff) {
*e++ = 93; /* Client System Architecture */
*e++ = 2;
*e++ = (clientarch >> 8) & 0xff;

View File

@@ -128,7 +128,7 @@ static int dhcp6_add_option(int option_id, uchar *pkt)
break;
case DHCP6_OPTION_CLIENT_ARCH_TYPE:
client_arch_opt = (struct dhcp6_option_client_arch *)dhcp_option_start;
client_arch_opt->arch_type[num_client_arch++] = htons(CONFIG_DHCP6_PXE_CLIENTARCH);
client_arch_opt->arch_type[num_client_arch++] = htons(CONFIG_DHCP_PXE_CLIENTARCH);
opt_len = sizeof(__be16) * num_client_arch;
break;
@@ -194,7 +194,7 @@ static void dhcp6_send_solicit_packet(void)
pkt += dhcp6_add_option(DHCP6_OPTION_ELAPSED_TIME, pkt);
pkt += dhcp6_add_option(DHCP6_OPTION_IA_NA, pkt);
pkt += dhcp6_add_option(DHCP6_OPTION_ORO, pkt);
if (CONFIG_DHCP6_PXE_CLIENTARCH != 0xFF)
if (CONFIG_DHCP_PXE_CLIENTARCH != 0xFF)
pkt += dhcp6_add_option(DHCP6_OPTION_CLIENT_ARCH_TYPE, pkt);
pkt += dhcp6_add_option(DHCP6_OPTION_VENDOR_CLASS, pkt);
pkt += dhcp6_add_option(DHCP6_OPTION_NII, pkt);
@@ -244,7 +244,7 @@ static void dhcp6_send_request_packet(void)
memcpy(pkt, sm_params.server_uid.uid_ptr, sm_params.server_uid.uid_size);
pkt += sm_params.server_uid.uid_size;
}
if (CONFIG_DHCP6_PXE_CLIENTARCH != 0xFF)
if (CONFIG_DHCP_PXE_CLIENTARCH != 0xFF)
pkt += dhcp6_add_option(DHCP6_OPTION_CLIENT_ARCH_TYPE, pkt);
pkt += dhcp6_add_option(DHCP6_OPTION_VENDOR_CLASS, pkt);
pkt += dhcp6_add_option(DHCP6_OPTION_NII, pkt);