summaryrefslogtreecommitdiff
path: root/src/odhcp6c.c
diff options
context:
space:
mode:
authorKaspar Schleiser <kaspar@schleiser.de>2014-03-04 16:29:02 +0100
committerKaspar Schleiser <kaspar@schleiser.de>2014-03-04 16:29:02 +0100
commitd88e97eade44c39d4b51eef440c3506edb050044 (patch)
treeb3de0b6073b20e64e3c2bed453ff5bd968c8d405 /src/odhcp6c.c
parentba6df2a68fcad5040f3746419aaac2bc3283a33d (diff)
downloadodhcp6c-d88e97eade44c39d4b51eef440c3506edb050044.tar.gz
add option to specify minimum interval for accepting RA or DHCP updates.
This was fixed to 60s. Add '-m <seconds>' option to change default time.
Diffstat (limited to 'src/odhcp6c.c')
-rw-r--r--src/odhcp6c.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/odhcp6c.c b/src/odhcp6c.c
index dfd9925..798598f 100644
--- a/src/odhcp6c.c
+++ b/src/odhcp6c.c
@@ -52,6 +52,8 @@ static int urandom_fd = -1, allow_slaac_only = 0;
static bool bound = false, release = true;
static time_t last_update = 0;
+static unsigned int min_update_interval = DEFAULT_MIN_UPDATE_INTERVAL;
+
int main(_unused int argc, char* const argv[])
{
// Allocate ressources
@@ -77,7 +79,7 @@ int main(_unused int argc, char* const argv[])
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:hedp:fa")) != -1) {
+ while ((c = getopt(argc, argv, "S::N:V:P:FB:c:i:r:Ru:s:kt:m:hedp:fa")) != -1) {
switch (c) {
case 'S':
allow_slaac_only = (optarg) ? atoi(optarg) : -1;
@@ -197,6 +199,10 @@ int main(_unused int argc, char* const argv[])
sol_timeout = atoi(optarg);
break;
+ case 'm':
+ min_update_interval = atoi(optarg);
+ break;
+
case 'e':
logopt |= LOG_PERROR;
break;
@@ -447,6 +453,7 @@ static int usage(void)
" -f Don't send Client FQDN option\n"
" -k Don't send a RELEASE when stopping\n"
" -t <seconds> Maximum timeout for DHCPv6-SOLICIT (3600)\n"
+ " -m <seconds> Minimum time between accepting updates (60)\n"
"\nInvocation options:\n"
" -p <pidfile> Set pidfile (/var/run/odhcp6c.pid)\n"
" -d Daemonize\n"
@@ -593,10 +600,10 @@ bool odhcp6c_update_entry_safe(enum odhcp6c_state state, struct odhcp6c_entry *n
if (new->valid > 0) {
if (x) {
if (new->valid >= x->valid && new->valid != UINT32_MAX &&
- new->valid - x->valid < 60 &&
+ new->valid - x->valid < min_update_interval &&
new->preferred >= x->preferred &&
new->preferred != UINT32_MAX &&
- new->preferred - x->preferred < 60 &&
+ new->preferred - x->preferred < min_update_interval &&
x->class == new->class)
return false;
x->valid = new->valid;