int ia_pd_iaid_index = 0;
static struct in6_addr ifid = IN6ADDR_ANY_INIT;
int sol_timeout = DHCPV6_SOL_MAX_RT;
+ int verbosity = 0;
bool help = false, daemonize = false;
int c;
unsigned int client_options = DHCPV6_CLIENT_FQDN | DHCPV6_ACCEPT_RECONFIGURE;
- while ((c = getopt(argc, argv, "S::N:V:P:FB:c:i:r:Ru:s:kt:m:hedp:fa")) != -1) {
+ while ((c = getopt(argc, argv, "S::N:V:P:FB:c:i:r:Ru:s:kt:m:hedp:fav")) != -1) {
switch (c) {
case 'S':
allow_slaac_only = (optarg) ? atoi(optarg) : -1;
client_options &= ~DHCPV6_ACCEPT_RECONFIGURE;
break;
+ case 'v':
+ ++verbosity;
+ break;
+
default:
help = true;
break;
}
openlog("odhcp6c", logopt, LOG_DAEMON);
+ if (!verbosity)
+ setlogmask(LOG_UPTO(LOG_WARNING));
+
const char *ifname = argv[optind];
if (help || !ifname)
return 4;
}
- char pidbuf[128];
if (!pidfile) {
- snprintf(pidbuf, sizeof(pidbuf),
- "/var/run/odhcp6c.%s.pid", ifname);
- pidfile = pidbuf;
+ snprintf((char*)buf, sizeof(buf), "/var/run/odhcp6c.%s.pid", ifname);
+ pidfile = (char*)buf;
}
- int fd = open(pidfile, O_WRONLY | O_CREAT, 0644);
- if (fd >= 0) {
- char buf[8];
- int len = snprintf(buf, sizeof(buf), "%i\n", getpid());
- write(fd, buf, len);
- close(fd);
+ FILE *fp = fopen(pidfile, "w");
+ if (fp) {
+ fprintf(fp, "%i\n", getpid());
+ fclose(fp);
}
}
while (!signal_term) { // Main logic
odhcp6c_clear_state(STATE_SERVER_ID);
+ odhcp6c_clear_state(STATE_SERVER_ADDR);
odhcp6c_clear_state(STATE_IA_NA);
odhcp6c_clear_state(STATE_IA_PD);
odhcp6c_clear_state(STATE_SNTP_IP);
break;
case DHCPV6_STATEFUL:
- script_call("bound");
bound = true;
+ script_call("bound");
syslog(LOG_NOTICE, "entering stateful-mode on %s", ifname);
while (!signal_usr2 && !signal_term) {
}
odhcp6c_clear_state(STATE_SERVER_ID); // Remove binding
+ odhcp6c_clear_state(STATE_SERVER_ADDR);
size_t ia_pd_len, ia_na_len;
odhcp6c_get_state(STATE_IA_PD, &ia_pd_len);
" -p <pidfile> Set pidfile (/var/run/odhcp6c.pid)\n"
" -d Daemonize\n"
" -e Write logmessages to stderr\n"
- //" -v Increase logging verbosity\n"
+ " -v Increase logging verbosity\n"
" -h Show this help\n\n";
write(STDERR_FILENO, buf, sizeof(buf));
return 1;
if (ra_link_up())
signal_usr2 = true;
- if (ra_updated && (bound || allow_slaac_only == 0))
+ if (ra_updated && (bound || allow_slaac_only >= 0))
script_call("ra-updated"); // Immediate process urgent events
- else if (ra_updated && !bound && allow_slaac_only > 0)
- script_delay_call("ra-updated", allow_slaac_only);
-
}
return signal_usr1 || signal_usr2 || signal_term;