Hi Heinrich On Sun, 8 Jun 2025 at 10:42, Heinrich Schuchardt <heinrich.schucha...@canonical.com> wrote: > > 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.schucha...@canonical.com> > --- > cmd/Kconfig | 28 ++++++++++++++++------------ > net/bootp.c | 6 +++--- > net/dhcpv6.c | 6 +++--- > 3 files changed, 22 insertions(+), 18 deletions(-) > > diff --git a/cmd/Kconfig b/cmd/Kconfig > index c335eceea63..4eb0140c10a 100644 > --- a/cmd/Kconfig > +++ b/cmd/Kconfig > @@ -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"
DHCP ? Other than that Acked-by: Ilias Apalodimas <ilias.apalodi...@linaro.org> > + 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" > diff --git a/net/bootp.c b/net/bootp.c > index f22921ed388..95d906e3b2d 100644 > --- a/net/bootp.c > +++ b/net/bootp.c > @@ -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; > diff --git a/net/dhcpv6.c b/net/dhcpv6.c > index 0c2de75ba1d..5bf935cb6a3 100644 > --- a/net/dhcpv6.c > +++ b/net/dhcpv6.c > @@ -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); > -- > 2.48.1 >