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

Reply via email to