X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=src%2Fodhcp6c.c;h=4e50758c1aee91775f53f73959998eb0cfa9cc5c;hb=d30e43bca363c003dfa41c963ab2e36d67365cc1;hp=7c4904030e9f875ea994103f564e0f586bb2d102;hpb=4be3f666fde73be0d7046fac1ab8075aa5b1e8db;p=odhcp6c.git diff --git a/src/odhcp6c.c b/src/odhcp6c.c index 7c49040..4e50758 100644 --- a/src/odhcp6c.c +++ b/src/odhcp6c.c @@ -31,8 +31,6 @@ static void sighandler(int signal); -static int sysctl_interface(const char *ifname, const char *option, - const char *data); static int usage(void); @@ -55,14 +53,10 @@ int main(_unused int argc, char* const argv[]) uint16_t opttype; enum odhcp6c_ia_mode ia_na_mode = IA_MODE_TRY; - bool help = false, daemonize = false, reset = false; - int c, request_pd = 0, timeout = 0; - while ((c = getopt(argc, argv, "RN:P:c:r:s:t:hdp:")) != -1) { + bool help = false, daemonize = false; + int c, request_pd = 0; + while ((c = getopt(argc, argv, "N:P:c:r:s:hdp:")) != -1) { switch (c) { - case 'R': - reset = true; - break; - case 'N': if (!strcmp(optarg, "force")) ia_na_mode = IA_MODE_FORCE; @@ -109,10 +103,6 @@ int main(_unused int argc, char* const argv[]) script = optarg; break; - case 't': - timeout = strtoul(optarg, NULL, 10); - break; - case 'd': daemonize = true; break; @@ -140,19 +130,11 @@ int main(_unused int argc, char* const argv[]) signal(SIGHUP, sighandler); signal(SIGINT, sighandler); - signal(SIGALRM, sighandler); signal(SIGCHLD, sighandler); signal(SIGTERM, sighandler); signal(SIGUSR1, sighandler); signal(SIGUSR2, sighandler); - // Configure interface to accept RA - if (reset) { - sysctl_interface(ifname, "disable_ipv6", "1"); - sysctl_interface(ifname, "accept_ra", "2"); - sysctl_interface(ifname, "disable_ipv6", "0"); - } - if (daemonize) { openlog("odhcp6c", LOG_PID, LOG_DAEMON); // Disable LOG_PERROR if (daemon(0, 0)) { @@ -177,14 +159,18 @@ int main(_unused int argc, char* const argv[]) } } + script_call("started"); + while (do_signal != SIGTERM) { // Main logic odhcp6c_clear_state(STATE_SERVER_ID); odhcp6c_clear_state(STATE_SERVER_CAND); odhcp6c_clear_state(STATE_IA_PD); - odhcp6c_clear_state(STATE_IA_PD_LOST); + odhcp6c_clear_state(STATE_SNTP_IP); + odhcp6c_clear_state(STATE_SNTP_FQDN); + odhcp6c_clear_state(STATE_SIP_IP); + odhcp6c_clear_state(STATE_SIP_FQDN); dhcpv6_set_ia_na_mode(ia_na_mode); - alarm(timeout); do_signal = 0; int res = dhcpv6_request(DHCPV6_MSG_SOLICIT); @@ -202,14 +188,10 @@ int main(_unused int argc, char* const argv[]) else if (res > 0) script_call("informed"); - alarm(0); if (dhcpv6_poll_reconfigure() > 0) script_call("informed"); } - if (do_signal == SIGALRM) - script_call("timeout"); - continue; } @@ -218,7 +200,6 @@ int main(_unused int argc, char* const argv[]) continue; script_call("bound"); - alarm(0); while (do_signal == 0 || do_signal == SIGUSR1) { // Renew Cycle @@ -268,18 +249,13 @@ int main(_unused int argc, char* const argv[]) size_t ia_pd_len, ia_na_len, server_id_len; - uint8_t *ia_pd = odhcp6c_get_state(STATE_IA_PD, &ia_pd_len); + odhcp6c_get_state(STATE_IA_PD, &ia_pd_len); odhcp6c_get_state(STATE_IA_NA, &ia_na_len); odhcp6c_get_state(STATE_SERVER_ID, &server_id_len); // Add all prefixes to lost prefixes - odhcp6c_add_state(STATE_IA_PD_LOST, ia_pd, ia_pd_len); odhcp6c_clear_state(STATE_IA_PD); - - if (do_signal == SIGALRM) - script_call("timeout"); - else - script_call("unbound"); + script_call("unbound"); // Remove assigned addresses if (ia_na_len > 0) @@ -289,6 +265,7 @@ int main(_unused int argc, char* const argv[]) dhcpv6_request(DHCPV6_MSG_RELEASE); } + script_call("stopped"); return 0; } @@ -303,7 +280,6 @@ static int usage(void) " -c Override client-ID (base-16 encoded)\n" " -r Options to be requested (comma-separated)\n" " -s