rework IPv6 address dump logic
[project/odhcpd.git] / src / router.c
index dd3f09c..6e5111a 100644 (file)
@@ -120,6 +120,7 @@ int setup_router_interface(struct interface *iface, bool enable)
                } else if (iface->ra == RELAYD_SERVER && !iface->master) {
                        iface->timer_rs.cb = trigger_router_advert;
                        uloop_timeout_set(&iface->timer_rs, 1000);
+                       ndp_rqs_addr6_dump();
                }
 
                if (iface->ra == RELAYD_RELAY || (iface->ra == RELAYD_SERVER && !iface->master))
@@ -233,7 +234,8 @@ static int calc_adv_interval(struct interface *iface, uint32_t minvalid,
                minival = (*maxival >= 9 ? *maxival/3 : *maxival);
 
        odhcpd_urandom(&msecs, sizeof(msecs));
-       msecs = (labs(msecs) % ((*maxival - minival)*1000)) + minival*1000;
+       msecs = (labs(msecs) % ((*maxival != minival) ? (*maxival - minival)*1000 : 500)) +
+                       minival*1000;
 
        return msecs;
 }
@@ -357,11 +359,8 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add
                }
 
                valid = TIME_LEFT(addr->valid, now);
-               if (iface->ra_useleasetime) {
-                       if (valid > iface->dhcpv4_leasetime)
-                               valid = iface->dhcpv4_leasetime;
-               } else if (!preferred && valid < 7200)
-                       valid = 0;
+               if (iface->ra_useleasetime && valid > iface->dhcpv4_leasetime)
+                       valid = iface->dhcpv4_leasetime;
 
                if (minvalid > valid)
                        minvalid = valid;