Allow the DHCP address scheme to be set in the client config so that it is known in common functions used by both udhcpc and udhcpc6.
Signed-off-by: Samuel Mendoza-Jonas <s...@mendozajonas.com> --- networking/udhcp/common.c | 7 ++++--- networking/udhcp/common.h | 8 +++++++- networking/udhcp/d6_dhcpc.c | 4 +++- networking/udhcp/dhcpc.c | 4 +++- networking/udhcp/dhcpc.h | 1 + networking/udhcp/dhcpd.c | 2 +- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c index fbf9c6878..2fdec1d55 100644 --- a/networking/udhcp/common.c +++ b/networking/udhcp/common.c @@ -383,7 +383,8 @@ static NOINLINE void attach_option( struct option_set **opt_list, const struct dhcp_optflag *optflag, char *buffer, - int length) + int length, + enum client_addr_type addr_type) { struct option_set *existing; char *allocated = NULL; @@ -450,7 +451,7 @@ static NOINLINE void attach_option( free(allocated); } -int FAST_FUNC udhcp_str2optset(const char *const_str, void *arg, const struct dhcp_optflag *optflags, const char *option_strings) +int FAST_FUNC udhcp_str2optset(const char *const_str, void *arg, const struct dhcp_optflag *optflags, const char *option_strings, enum client_addr_type addr_type) { struct option_set **opt_list = arg; char *opt; @@ -601,7 +602,7 @@ case_OPTION_STRING: } if (retval) - attach_option(opt_list, optflag, opt, length); + attach_option(opt_list, optflag, opt, length, addr_type); } while (retval && (optflag->flags & OPTION_LIST)); return retval; diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h index 13059f106..e8c3dc2af 100644 --- a/networking/udhcp/common.h +++ b/networking/udhcp/common.h @@ -181,6 +181,11 @@ enum { #define DHCP_MINTYPE DHCPDISCOVER #define DHCP_MAXTYPE DHCPINFORM +enum client_addr_type { + CLIENT_CONFIG_DHCPV4, + CLIENT_CONFIG_DHCPV6, +}; + struct dhcp_optflag { uint8_t flags; uint8_t code; @@ -293,7 +298,8 @@ int FAST_FUNC udhcp_str2nip(const char *str, void *arg); int FAST_FUNC udhcp_str2optset(const char *str, void *arg, const struct dhcp_optflag *optflags, - const char *option_strings); + const char *option_strings, + enum client_addr_type addr_type); #if ENABLE_UDHCPC || ENABLE_UDHCPD void udhcp_init_header(struct dhcp_packet *packet, char type) FAST_FUNC; diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c index 43b1483ed..26ce147c4 100644 --- a/networking/udhcp/d6_dhcpc.c +++ b/networking/udhcp/d6_dhcpc.c @@ -1161,6 +1161,7 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv) IF_FEATURE_UDHCP_PORT(SERVER_PORT6 = 547;) IF_FEATURE_UDHCP_PORT(CLIENT_PORT6 = 546;) client_config.interface = "eth0"; + client_config.dhcp_type = CLIENT_CONFIG_DHCPV6; client_config.script = CONFIG_UDHCPC_DEFAULT_SCRIPT; /* Parse command line */ @@ -1217,7 +1218,8 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv) } while (list_x) { char *optstr = xstrdup(llist_pop(&list_x)); - udhcp_str2optset(optstr, &client_config.options, d6_optflags, d6_option_strings); + udhcp_str2optset(optstr, &client_config.options, d6_optflags, d6_option_strings, + client_config.dhcp_type); free(optstr); } diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c index bd9e8fdc2..73f044b6d 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c @@ -1265,6 +1265,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv) IF_FEATURE_UDHCP_PORT(SERVER_PORT = 67;) IF_FEATURE_UDHCP_PORT(CLIENT_PORT = 68;) client_config.interface = "eth0"; + client_config.dhcp_type = CLIENT_CONFIG_DHCPV4; client_config.script = CONFIG_UDHCPC_DEFAULT_SCRIPT; str_V = "udhcp "BB_VER; @@ -1337,7 +1338,8 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv) } while (list_x) { char *optstr = xstrdup(llist_pop(&list_x)); - udhcp_str2optset(optstr, &client_config.options, dhcp_optflags, dhcp_option_strings); + udhcp_str2optset(optstr, &client_config.options, dhcp_optflags, dhcp_option_strings, + client_config.dhcp_type); free(optstr); } diff --git a/networking/udhcp/dhcpc.h b/networking/udhcp/dhcpc.h index 7fdbc9a6c..c6ab1225e 100644 --- a/networking/udhcp/dhcpc.h +++ b/networking/udhcp/dhcpc.h @@ -21,6 +21,7 @@ struct client_config_t { uint8_t *vendorclass; /* Optional vendor class-id to use */ uint8_t *hostname; /* Optional hostname to use */ uint8_t *fqdn; /* Optional fully qualified domain name to use */ + enum client_addr_type dhcp_type; uint16_t first_secs; uint16_t last_secs; diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c index 19f94a2d7..54cf30a83 100644 --- a/networking/udhcp/dhcpd.c +++ b/networking/udhcp/dhcpd.c @@ -362,7 +362,7 @@ static int FAST_FUNC read_staticlease(const char *const_line, void *arg) } static int FAST_FUNC read_optset(const char *line, void *arg) { - return udhcp_str2optset(line, arg, dhcp_optflags, dhcp_option_strings); + return udhcp_str2optset(line, arg, dhcp_optflags, dhcp_option_strings, CLIENT_CONFIG_DHCPV4); } struct config_keyword { -- 2.17.0 _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox