From 3286e40ff01e78c172dfb0cdb684b58854af7604 Mon Sep 17 00:00:00 2001 From: liuzhikang Date: Thu, 31 Oct 2019 16:07:22 +0800 Signed-off-by: liuzhikang --- client/dhc6.c | 3 ++- client/dhclient.c | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/client/dhc6.c b/client/dhc6.c index 5460ee1..fe0057c 100644 --- a/client/dhc6.c +++ b/client/dhc6.c @@ -148,6 +148,7 @@ static int dhc6_score_lease(struct client_state *client, extern int onetry; extern int stateless; +extern int address_prefix_len; /* * Assign DHCPv6 port numbers as a client. @@ -4364,7 +4365,7 @@ dhc6_marshall_values(const char *prefix, struct client_state *client, (unsigned) addr->plen); } else { client_envadd(client, prefix, "ip6_prefixlen", - "%d", DHCLIENT_DEFAULT_PREFIX_LEN); + "%d", address_prefix_len); client_envadd(client, prefix, "ip6_address", "%s", piaddr(addr->address)); } diff --git a/client/dhclient.c b/client/dhclient.c index 62b90cf..9f8ba06 100644 --- a/client/dhclient.c +++ b/client/dhclient.c @@ -108,6 +108,7 @@ int require_all_ias = 0; /* If the user requires all of the IAs to be available before accepting a lease 0 = no, 1 = requries */ int dad_wait_time = 0; +int address_prefix_len = DHCLIENT_DEFAULT_PREFIX_LEN; char *mockup_relay = NULL; char *progname = NULL; @@ -190,9 +191,11 @@ usage(const char *sfmt, const char *sarg) #ifdef DHCP4o6 "[-4|-6] [-SNTPRI1dvrxi] [-nw] -4o6 ] [-p ]\n" " [-D LL|LLT] [--dad-wait-time seconds]\n" + " [--address-prefix-len length]\n" #else /* DHCP4o6 */ "[-4|-6] [-SNTPRI1dvrxi] [-nw] [-p ]\n" - " [-D LL|LLT] [--dad-wait-time seconds]\n" + " [-D LL|LLT] [--dad-wait-time seconds]\n" + " [--address-prefix-len length]\n" #endif #else /* DHCPv6 */ "[-I1dvrxi] [-nw] [-p ] [-D LL|LLT] \n" @@ -452,7 +455,17 @@ main(int argc, char **argv) { if (errno || (*s != '\0') || (dad_wait_time < 0)) { usage("Invalid value for --dad-wait-time: %s", argv[i]); } - + } else if (!strcmp(argv[i], "--address-prefix-len")) { + if (++i == argc) { + usage(use_noarg, argv[i-1]); + } + errno = 0; + address_prefix_len = (int)strtol(argv[i], &s, 10); + if (errno || (*s != '\0') || + (address_prefix_len < 0)) { + usage("Invalid value for" + " --address-prefix-len: %s", argv[i]); + } #endif /* DHCPv6 */ } else if (!strcmp(argv[i], "-D")) { duid_v4 = 1; -- 2.19.1