[PATCH v2 3/3] net: consolidate PXE processor architecture type Kconfig

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Tue Jun 10 11:00:13 CEST 2025


On 10.06.25 09:16, Ilias Apalodimas wrote:
> Hi Heinrich
> 
> On Sun, 8 Jun 2025 at 10:42, Heinrich Schuchardt
> <heinrich.schuchardt at 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.schuchardt at 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 ?

Thanks for pointing out the typo.

Best regards

Heinrich

> 
> Other than that
> Acked-by: Ilias Apalodimas <ilias.apalodimas at 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
>>



More information about the U-Boot mailing list