Fix IA expiring logic
authorSteven Barth <steven@midlink.org>
Mon, 20 May 2013 14:27:23 +0000 (16:27 +0200)
committerSteven Barth <steven@midlink.org>
Mon, 20 May 2013 14:27:23 +0000 (16:27 +0200)
src/dhcpv6.c
src/odhcp6c.c

index d2cd656e5ae59bede3a2906d6c58ae3fc13ccfb6..9b4247ca9fde4ef9f01426c33fe279c2f47f5dfd 100644 (file)
@@ -667,13 +667,15 @@ static int dhcpv6_handle_reply(enum dhcpv6_msg orig,
        uint8_t *odata;
        uint16_t otype, olen;
 
-       static time_t last_update = 0;
-       time_t now = odhcp6c_get_milli_time() / 1000;
-
-       uint32_t elapsed = now - last_update;
        odhcp6c_expire();
 
        if (orig == DHCPV6_MSG_UNKNOWN) {
+               static time_t last_update = 0;
+               time_t now = odhcp6c_get_milli_time() / 1000;
+
+               uint32_t elapsed = (last_update > 0) ? now - last_update : 0;
+               last_update = now;
+
                t1 -= elapsed;
                t2 -= elapsed;
                t3 -= elapsed;
index 274a97ab7dbe188d97e0ff7580781d04444f90a7..d70546b366ed4c7ebd47c554922d9ea27cd6860c 100644 (file)
@@ -470,7 +470,7 @@ void odhcp6c_expire(void)
        static time_t last_update = 0;
        time_t now = odhcp6c_get_milli_time() / 1000;
 
-       uint32_t elapsed = now - last_update;
+       uint32_t elapsed = (last_update > 0) ? now - last_update : 0;
        last_update = now;
 
        odhcp6c_expire_list(STATE_RA_PREFIX, elapsed);