From 90b2a6b4c4875379d18014673bafaddc1079d1af Mon Sep 17 00:00:00 2001 From: Logan Gunthorpe Date: Mon, 18 Nov 2019 16:58:04 -0700 Subject: [PATCH] dhcp: Set hostname for DISCOVER packets If the hostname is not set in the DISCOVER packet, then some servers might issue an OFFER with hostname configured and consequently reject the REQUEST with any other hostname. Signed-off-by: Logan Gunthorpe Co-Authored-By: Simon Goldschmidt --- src/core/ipv4/dhcp.c | 4 ++++ src/include/lwip/opt.h | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/core/ipv4/dhcp.c b/src/core/ipv4/dhcp.c index 3ce7be59..99ebe3e6 100644 --- a/src/core/ipv4/dhcp.c +++ b/src/core/ipv4/dhcp.c @@ -1031,6 +1031,10 @@ dhcp_discover(struct netif *netif) options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); +#if LWIP_NETIF_HOSTNAME && LWIP_DHCP_DISCOVER_ADD_HOSTNAME + options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif); +#endif /* LWIP NETIF HOSTNAME && LWIP_DHCP_DISCOVER_ADD_HOSTNAME */ + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); diff --git a/src/include/lwip/opt.h b/src/include/lwip/opt.h index 08c2628a..4824adeb 100644 --- a/src/include/lwip/opt.h +++ b/src/include/lwip/opt.h @@ -966,6 +966,14 @@ #if !defined LWIP_DHCP_MAX_DNS_SERVERS || defined __DOXYGEN__ #define LWIP_DHCP_MAX_DNS_SERVERS DNS_MAX_SERVERS #endif + +/** LWIP_DHCP_DISCOVER_ADD_HOSTNAME: Set to 1 to include hostname opt in discover packets. + * If the hostname is not set in the DISCOVER packet, then some servers might issue an OFFER with hostname + * configured and consequently reject the REQUEST with any other hostname. + */ +#if !defined LWIP_DHCP_DISCOVER_ADD_HOSTNAME || defined __DOXYGEN__ +#define LWIP_DHCP_DISCOVER_ADD_HOSTNAME 0 +#endif /* LWIP_DHCP_DISCOVER_ADD_HOSTNAME */ /** * @} */