static volatile int do_signal = 0;
static int urandom_fd = -1;
-static bool bound = false, allow_slaac_only = false;
+static bool bound = false, allow_slaac_only = true;
int main(_unused int argc, char* const argv[])
while ((c = getopt(argc, argv, "SN:P:c:r:s:hdp:")) != -1) {
switch (c) {
case 'S':
- allow_slaac_only = true;
+ allow_slaac_only = false;
break;
case 'N':
break;
case 'P':
+ allow_slaac_only = false;
request_pd = strtoul(optarg, NULL, 10);
if (request_pd == 0)
request_pd = -1;
dhcpv6_set_ia_na_mode(ia_na_mode);
bound = false;
+ syslog(LOG_NOTICE, "(re)starting transaction on %s", ifname);
+
do_signal = 0;
int res = dhcpv6_request(DHCPV6_MSG_SOLICIT);
odhcp6c_signal_process();
script_call("informed");
bound = true;
+ syslog(LOG_NOTICE, "entering stateless-mode on %s", ifname);
if (dhcpv6_poll_reconfigure() > 0)
script_call("informed");
odhcp6c_signal_process();
script_call("bound");
bound = true;
+ syslog(LOG_NOTICE, "entering stateful-mode on %s", ifname);
while (do_signal == 0 || do_signal == SIGUSR1) {
// Renew Cycle
const char buf[] =
"Usage: odhcp6c [options] <interface>\n"
"\nFeature options:\n"
- " -S Allow SLAAC-only assignment\n"
+ " -S Don't allow SLAAC-only (implied by -P)\n"
" -N <mode> Mode for requesting addresses [try|force|none]\n"
" -P <length> Request IPv6-Prefix (0 = auto)\n"
" -c <clientid> Override client-ID (base-16 encoded)\n"