[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 2/3] Set net_<interface>_client{id, uuid} variables from D
From: |
Javier Martinez Canillas |
Subject: |
Re: [PATCH v2 2/3] Set net_<interface>_client{id, uuid} variables from DHCP options |
Date: |
Tue, 22 Oct 2019 10:08:30 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.0 |
Hello Daniel,
On 10/21/19 4:40 PM, Daniel Kiper wrote:
> On Fri, Oct 18, 2019 at 09:59:09AM +0200, Javier Martinez Canillas wrote:
>> From: Paulo Flabiano Smorigo <address@hidden>
>>
>> This patch sets a net_<interface>_clientid and net_<interface>_clientuuid
>> GRUB environment variables, using the DHCP client ID and UUID options if
>> these are found.
>>
>> In the same way than net_<interface>_<option> variables are set for other
>> options such domain name, boot file, next server, etc.
>>
>> Signed-off-by: Paulo Flabiano Smorigo <address@hidden>
>> Signed-off-by: Javier Martinez Canillas <address@hidden>
>> Reviewed-by: Daniel Kiper <address@hidden>
>
> It seems to me that this RB should land in patch #3. Does not it?
Ups, sorry about that.
> Anyway, Reviewed-by: Daniel Kiper <address@hidden> :-)
> except one thing...
>
>> ---
>>
>> Changes in v2:
>> - Use the existing grub_env_set_net_property() and remove duplicated code.
>>
>> grub-core/net/bootp.c | 48 +++++++++++++++++++++++++++++++++++--------
>> include/grub/net.h | 2 ++
>> 2 files changed, 42 insertions(+), 8 deletions(-)
>>
>> diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c
>> index 04cfbb04504..377006da938 100644
>> --- a/grub-core/net/bootp.c
>> +++ b/grub-core/net/bootp.c
>> @@ -95,6 +95,14 @@ enum
>> /* Max timeout when waiting for BOOTP/DHCP reply */
>> #define GRUB_DHCP_MAX_PACKET_TIMEOUT 32
>>
>> +static char
>> +hexdigit (grub_uint8_t val)
>> +{
>> + if (val < 10)
>> + return val + '0';
>> + return val + 'a' - 10;
>> +}
>> +
>> static const void *
>> find_dhcp_option (const struct grub_net_bootp_packet *bp, grub_size_t size,
>> grub_uint8_t opt_code, grub_uint8_t *opt_len)
>> @@ -152,6 +160,9 @@ again:
>> if (i + taglength >= size)
>> return NULL;
>>
>> + grub_dprintf("net", "DHCP option %u (0x%02x) found with length %u.\n",
>> + tagtype, tagtype, taglength);
>> +
>> /* FIXME RFC 3396 options concatentation */
>> if (tagtype == opt_code)
>> {
>> @@ -406,6 +417,35 @@ grub_net_configure_by_dhcp_ack (const char *name,
>> if (opt && opt_len)
>> grub_env_set_net_property (name, "extensionspath", (const char *) opt,
>> opt_len);
>>
>> + opt = find_dhcp_option (bp, size, GRUB_NET_BOOTP_CLIENT_ID, &opt_len);
>> + if (opt && opt_len)
>> + grub_env_set_net_property (name, "clientid", (const char *) opt,
>> opt_len);
>> +
>> + opt = find_dhcp_option (bp, size, GRUB_NET_BOOTP_CLIENT_UUID, &opt_len);
>> + if (opt && opt_len == 17)
>> + {
>> + /* The format is 9cfe245e-d0c8-bd45-a79f-54ea5fbd3d97 */
>> +
>> + opt += 1;
>> + opt_len -= 1;
>> +
>> + char *val = grub_malloc (2 * opt_len + 4 + 1);
>> + int i = 0;
>> + int j = 0;
>> + for (i = 0; i < opt_len; i++)
>> + {
>> + val[2 * i + j] = hexdigit (opt[i] >> 4);
>> + val[2 * i + 1 + j] = hexdigit (opt[i] & 0xf);
>> +
>> + if ((i == 3) || (i == 5) || (i == 7) || (i == 9))
>> + {
>> + j++;
>> + val[2 * i + 1+ j] = '-';
>> + }
>> + }
>> + grub_env_set_net_property (name, "clientuuid", (char *) val, 2 *
>> opt_len + 4);
>> + }
>> +
>> inter->dhcp_ack = grub_malloc (size);
>> if (inter->dhcp_ack)
>> {
>> @@ -631,14 +671,6 @@ grub_net_process_dhcp (struct grub_net_buff *nb,
>> }
>> }
>>
>> -static char
>> -hexdigit (grub_uint8_t val)
>> -{
>> - if (val < 10)
>> - return val + '0';
>> - return val + 'a' - 10;
>> -}
>> -
>> static grub_err_t
>> grub_cmd_dhcpopt (struct grub_command *cmd __attribute__ ((unused)),
>> int argc, char **args)
>> diff --git a/include/grub/net.h b/include/grub/net.h
>> index 4a9069a1474..556c54e579f 100644
>> --- a/include/grub/net.h
>> +++ b/include/grub/net.h
>> @@ -462,6 +462,8 @@ enum
>> GRUB_NET_BOOTP_DOMAIN = 0x0f,
>> GRUB_NET_BOOTP_ROOT_PATH = 0x11,
>> GRUB_NET_BOOTP_EXTENSIONS_PATH = 0x12,
>> + GRUB_NET_BOOTP_CLIENT_ID = 0x3d,
>> + GRUB_NET_BOOTP_CLIENT_UUID = 0x61,
>> GRUB_NET_DHCP_REQUESTED_IP_ADDRESS = 50,
>> GRUB_NET_DHCP_OVERLOAD = 52,
>> GRUB_NET_DHCP_MESSAGE_TYPE = 53,
>
> I have just realized that this enum is a mixture of decimals and hexes.
> This is a mess. Could you add a patch before that patch changing all
> decimals to hexes and sort them properly?
>
Sure. I'll do that.
I also noticed that we have a patch that adds documentation about the
netboot grub.cfg selection order so I'll also include that patch in v3.
> Daniel
>
Best regards,
--
Javier Martinez Canillas
Software Engineer - Desktop Hardware Enablement
Red Hat