diff options
author | Kaspar Schleiser <kaspar@schleiser.de> | 2014-01-23 17:05:18 +0100 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2014-01-27 14:16:44 +0100 |
commit | dc30922e418be6271ad177f3f9d4ecf0c1eb3f01 (patch) | |
tree | 04bba4684bf2e760f32a6c956f2a4857d4dd0f5b /src/odhcp6c.c | |
parent | b146f9adc80cc2c2cdf2b04bfeec4c861a2a0e23 (diff) | |
download | odhcp6c-dc30922e418be6271ad177f3f9d4ecf0c1eb3f01.tar.gz |
allow disabling "client fqdn" and "accept reconfiguration" options
Some DHCPv6 servers require these to be absent, so add
command line switches that allow disabling them.
(includes "Combination of command line switches -f and -a
broke "-N none" and IA_PD." from Christian Carstensen)
Contributed by T-Labs, Deutsche Telekom Innovation Laboratories
Diffstat (limited to 'src/odhcp6c.c')
-rw-r--r-- | src/odhcp6c.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/odhcp6c.c b/src/odhcp6c.c index fdfc327..9334c7a 100644 --- a/src/odhcp6c.c +++ b/src/odhcp6c.c @@ -71,10 +71,12 @@ int main(_unused int argc, char* const argv[]) int bfd_interval = 0, bfd_loss = 3; #endif - bool help = false, daemonize = false, strict_options = false; + bool help = false, daemonize = false; int logopt = LOG_PID; int c; - while ((c = getopt(argc, argv, "S::N:P:FB:c:i:r:Rs:kt:hedp:")) != -1) { + unsigned int client_options = DHCPV6_CLIENT_FQDN | DHCPV6_ACCEPT_RECONFIGURE; + + while ((c = getopt(argc, argv, "S::N:P:FB:c:i:r:Rs:kt:hedp:fa")) != -1) { switch (c) { case 'S': allow_slaac_only = (optarg) ? atoi(optarg) : -1; @@ -160,7 +162,7 @@ int main(_unused int argc, char* const argv[]) break; case 'R': - strict_options = true; + client_options |= DHCPV6_STRICT_OPTIONS; break; case 's': @@ -187,6 +189,14 @@ int main(_unused int argc, char* const argv[]) pidfile = optarg; break; + case 'f': + client_options &= ~DHCPV6_CLIENT_FQDN; + break; + + case 'a': + client_options &= ~DHCPV6_ACCEPT_RECONFIGURE; + break; + default: help = true; break; @@ -208,7 +218,7 @@ int main(_unused int argc, char* const argv[]) signal(SIGUSR2, sighandler); if ((urandom_fd = open("/dev/urandom", O_CLOEXEC | O_RDONLY)) < 0 || - init_dhcpv6(ifname, strict_options, sol_timeout) || + init_dhcpv6(ifname, client_options, sol_timeout) || ra_init(ifname, &ifid) || script_init(script, ifname)) { syslog(LOG_ERR, "failed to initialize: %s", strerror(errno)); return 3; @@ -412,6 +422,8 @@ static int usage(void) " -r <options> Options to be requested (comma-separated)\n" " -R Do not request any options except those specified with -r\n" " -s <script> Status update script (/usr/sbin/odhcp6c-update)\n" + " -a Don't send Accept Reconfigure option\n" + " -f Don't send Client FQDN option\n" " -k Don't send a RELEASE when stopping\n" " -t <seconds> Maximum timeout for DHCPv6-SOLICIT (120)\n" "\nInvocation options:\n" |