X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Fdhcpv6-ia.c;h=c8786c3672c32d925e1da1d21d76ace66493de2c;hp=df69759fdc1b70db0a7639c79b91235f0d9a6f18;hb=561890e1ce8aa467a83db5f05e563a00d4d9aa47;hpb=541219e7795a5137c1cd32829064419e479ea4a7;ds=sidebyside diff --git a/src/dhcpv6-ia.c b/src/dhcpv6-ia.c index df69759..c8786c3 100644 --- a/src/dhcpv6-ia.c +++ b/src/dhcpv6-ia.c @@ -450,7 +450,7 @@ static void managed_handle_pd_data(struct ustream *s, _unused int bytes_new) if (first && c->managed_size == 0) free_dhcpv6_assignment(c); - else if (first) + else if (first & !(c->flags & OAF_STATIC)) c->valid_until = now + 150; } @@ -460,7 +460,9 @@ static void managed_handle_pd_done(struct ustream *s) { struct dhcpv6_assignment *c = container_of(s, struct dhcpv6_assignment, managed_sock); - c->valid_until = odhcpd_time() + 15; + if (!(c->flags & OAF_STATIC)) + c->valid_until = odhcpd_time() + 15; + c->managed_size = 0; if (c->accept_reconf) @@ -484,7 +486,10 @@ static bool assign_pd(struct interface *iface, struct dhcpv6_assignment *assign) iaidbuf, assign->iaid, assign->length); ustream_write_pending(&assign->managed_sock.stream); assign->managed_size = -1; - assign->valid_until = odhcpd_time() + 15; + + if (!(assign->flags & OAF_STATIC)) + assign->valid_until = odhcpd_time() + 15; + list_add(&assign->head, &iface->ia_assignments); /* Wait initial period of up to 250ms for immediate assignment */