[PATCH 5/6] udhcp: Add DHCP address scheme client config
Samuel Mendoza-Jonas
sam at mendozajonas.com
Tue May 8 06:30:24 UTC 2018
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 <sam at 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 3ba2c4be5..0b6c4b28a 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
More information about the busybox
mailing list