- apply_lease(iface, c, false);
-}
-
-static void reconf_timeout_cb(struct uloop_timeout *event)
-{
- struct dhcpv6_assignment *a = container_of(event, struct dhcpv6_assignment, reconf_timer);
-
- if (a->reconf_cnt > 0 && a->reconf_cnt < DHCPV6_REC_MAX_RC) {
- send_reconf(a);
- uloop_timeout_set(&a->reconf_timer,
- DHCPV6_REC_TIMEOUT << a->reconf_cnt);
- a->reconf_cnt++;
- } else
- stop_reconf(a);
-}
-
-static void start_reconf(struct dhcpv6_assignment *a)
-{
- uloop_timeout_set(&a->reconf_timer,
- DHCPV6_REC_TIMEOUT << a->reconf_cnt);
- a->reconf_timer.cb = reconf_timeout_cb;
- a->reconf_cnt++;
-
- send_reconf(a);
-}
-
-static void stop_reconf(struct dhcpv6_assignment *a)
-{
- uloop_timeout_cancel(&a->reconf_timer);
- a->reconf_cnt = 0;
- a->reconf_timer.cb = NULL;
-}
-
-void dhcpv6_ia_postupdate(struct interface *iface)
-{
- if (iface->dhcpv6 != MODE_SERVER)
- return;
-
- time_t now = odhcpd_time();
- int minprefix = -1;
- for (size_t i = 0; i < iface->ia_addr_len; ++i) {
- if (iface->ia_addr[i].preferred > (uint32_t)now &&
- iface->ia_addr[i].prefix < 64 &&
- iface->ia_addr[i].prefix > minprefix)
- minprefix = iface->ia_addr[i].prefix;
+ __apply_lease(iface, c, info->addrs_old.addrs,
+ info->addrs_old.len, false);
+
+ for (size_t i = 0; i < iface->addr6_len; ++i) {
+ if (iface->addr6[i].preferred > (uint32_t)now &&
+ iface->addr6[i].prefix < 64 &&
+ iface->addr6[i].prefix > minprefix)
+ minprefix = iface->addr6[i].prefix;