static volatile int do_signal = 0;
static int urandom_fd = -1;
-static bool bound = false, allow_slaac_only = true;
+static bool bound = false, allow_slaac_only = true, release = true;
int main(_unused int argc, char* const argv[])
{
- openlog("odhcp6c", LOG_PERROR | LOG_PID, LOG_DAEMON);
-
// Allocate ressources
const char *pidfile = NULL;
const char *script = "/usr/sbin/odhcp6c-update";
enum odhcp6c_ia_mode ia_na_mode = IA_MODE_TRY;
bool help = false, daemonize = false;
+ int logopt = LOG_PID;
int c, request_pd = 0;
- while ((c = getopt(argc, argv, "SN:P:c:r:s:hdp:")) != -1) {
+ while ((c = getopt(argc, argv, "SN:P:c:r:s:khedp:")) != -1) {
switch (c) {
case 'S':
allow_slaac_only = false;
buf[0] = 0;
buf[1] = DHCPV6_OPT_CLIENTID;
buf[2] = 0;
- buf[4] = l;
+ buf[3] = l;
odhcp6c_add_state(STATE_CLIENT_ID, buf, l + 4);
} else {
help = true;
script = optarg;
break;
+ case 'k':
+ release = false;
+ break;
+
+ case 'e':
+ logopt |= LOG_PERROR;
+ break;
+
case 'd':
daemonize = true;
break;
}
}
+ openlog("odhcp6c", logopt, LOG_DAEMON);
const char *ifname = argv[optind];
if (help || !ifname)
bound = false;
script_call("unbound");
- if (server_id_len > 0 && (ia_pd_len > 0 || ia_na_len > 0))
+ if (server_id_len > 0 && (ia_pd_len > 0 || ia_na_len > 0) && release)
dhcpv6_request(DHCPV6_MSG_RELEASE);
odhcp6c_clear_state(STATE_IA_NA);
" -c <clientid> Override client-ID (base-16 encoded)\n"
" -r <options> Options to be requested (comma-separated)\n"
" -s <script> Status update script (/usr/sbin/odhcp6c-update)\n"
+ " -k Don't send a RELEASE when stopping\n"
"\nInvocation options:\n"
" -p <pidfile> Set pidfile (/var/run/6relayd.pid)\n"
" -d Daemonize\n"
+ " -e Write logmessages to stderr\n"
//" -v Increase logging verbosity\n"
" -h Show this help\n\n";
write(STDERR_FILENO, buf, sizeof(buf));
if (x) {
x->valid = new->valid;
x->preferred = new->preferred;
+ x->prefix_class = new->prefix_class;
} else {
odhcp6c_add_state(state, new, sizeof(*new));
}