X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=src%2Fodhcp6c.c;h=f7ae2fb917e73b8d3be1d3dd6d810386dd3440d3;hb=dcbce9858dabb558980c537ff2332ff8f25e740e;hp=061cb42a607f7ac8e94f477c2eb0e6d466431f7d;hpb=49db5eb7406cd57b6ed64f5ee7130226d0fef66b;p=odhcp6c.git diff --git a/src/odhcp6c.c b/src/odhcp6c.c index 061cb42..f7ae2fb 100644 --- a/src/odhcp6c.c +++ b/src/odhcp6c.c @@ -41,7 +41,7 @@ static size_t state_len[_STATE_MAX] = {0}; 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[]) @@ -62,7 +62,7 @@ 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': @@ -77,6 +77,7 @@ int main(_unused int argc, char* const argv[]) break; case 'P': + allow_slaac_only = false; request_pd = strtoul(optarg, NULL, 10); if (request_pd == 0) request_pd = -1; @@ -294,7 +295,7 @@ static int usage(void) const char buf[] = "Usage: odhcp6c [options] \n" "\nFeature options:\n" - " -S Allow SLAAC-only assignment\n" + " -S Don't allow SLAAC-only (implied by -P)\n" " -N Mode for requesting addresses [try|force|none]\n" " -P Request IPv6-Prefix (0 = auto)\n" " -c Override client-ID (base-16 encoded)\n" @@ -409,10 +410,12 @@ void odhcp6c_update_entry_safe(enum odhcp6c_state state, struct odhcp6c_entry *n new->valid = safe; if (new->valid > 0) { - if (x) - *x = *new; - else + if (x) { + x->valid = new->valid; + x->preferred = new->preferred; + } else { odhcp6c_add_state(state, new, sizeof(*new)); + } } else if (x) { odhcp6c_remove_state(state, (x - start) * sizeof(*x), sizeof(*x)); }