[SLOF] [PATCH v2 09/11] libnet: Add support for DHCPv4 options 209 and 210

Thomas Huth thuth at redhat.com
Fri May 25 17:18:22 AEST 2018


On 25.05.2018 08:47, Alexey Kardashevskiy wrote:
> On 19/5/18 1:45 am, Thomas Huth wrote:
>> There are two dedicated DHCP options for loading PXELINUX config files,
>> option 209 (config file name) and 210 (path prefix). We should support
>> them, too, in case some users want to configure their boot flow this way.
>> See RFC 5071 and the following URL for more details:
>> https://www.syslinux.org/wiki/index.php?title=PXELINUX#DHCP_options
>>
>> Unlike most other strings in libnet, I've chosen to not use fixed-size
>> arrays for these two strings, but to allocate the memory via malloc here.
>> We always have to make sure not to overflow the stack in Paflof, so
>> adding 2 * 256 byte arrays to struct filename_ip sounded just too
>> dangerous to me.
>>
>> Signed-off-by: Thomas Huth <thuth at redhat.com>
>> ---
>>  lib/libnet/dhcp.c     | 33 +++++++++++++++++++++++++++++++++
>>  lib/libnet/netload.c  |  7 ++++++-
>>  lib/libnet/ping.c     | 14 +++++++++-----
>>  lib/libnet/pxelinux.c | 24 +++++++++++++++++++-----
>>  lib/libnet/tftp.h     |  2 ++
>>  5 files changed, 69 insertions(+), 11 deletions(-)
>>
>> diff --git a/lib/libnet/dhcp.c b/lib/libnet/dhcp.c
>> index d3e5170..85cd7c0 100644
>> --- a/lib/libnet/dhcp.c
>> +++ b/lib/libnet/dhcp.c
>> @@ -79,6 +79,8 @@
>>  #define DHCP_TFTP_SERVER      66
>>  #define DHCP_BOOTFILE         67
>>  #define DHCP_CLIENT_ARCH      93
>> +#define DHCP_PXELINUX_CFGFILE 209   /* See RFC 5071 */
>> +#define DHCP_PXELINUX_PREFIX  210
>>  #define DHCP_ENDOPT         0xFF
>>  #define DHCP_PADOPT         0x00
>>  
>> @@ -167,6 +169,8 @@ static uint32_t dhcp_siaddr_ip     = 0;
>>  static char   dhcp_filename[256];
>>  static char   dhcp_tftp_name[256];
>>  static uint32_t dhcp_xid;
>> +static char *pxelinux_cfgfile;
>> +static char *pxelinux_prefix;
> 
> Why are not these in dhcp_options_t?

That whole dhcp code is a little bit strange: dhcp_options_t is only
"valid" during handle_dhcp(), so it finally copies the options also into
the static char dhcp_filename[256] and the static char
dhcp_tftp_name[256] - and dhcpv4() finally copies the stuff over into
filename_ip_t. So the "static" variables are urgently needed for the
currently logic here, while an entry in dhcp_options_t is just optional.
Thus let's keep it simple and only use the static variables here.

 Thomas


PS:
If somebody gets bored, I think a major refactoring of the dhcp code
could make this dhcp.c file way more readable. E.g. I also have not
understood yet why dhcp_encode_options() is checking flag[DHCP_BOOTFILE]
and flag[DHCP_TFTP_SERVER] for example...


More information about the SLOF mailing list