X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Fubus.c;h=d562c0f85e26ae8cf89c10af196dc18e3a8e8b61;hp=0b51183f5c9cec3cdd4c2ac6ebc20d9e2cc1e21c;hb=adc8f6269d82f526e225fd8d4b78388fc2da0659;hpb=8b33974cfae233ef6ad764051a3194db29c7ff11 diff --git a/src/ubus.c b/src/ubus.c index 0b51183..d562c0f 100644 --- a/src/ubus.c +++ b/src/ubus.c @@ -34,7 +34,7 @@ static int handle_dhcpv4_leases(struct ubus_context *ctx, _unused struct ubus_ob struct dhcpv4_assignment *lease; list_for_each_entry(lease, &iface->dhcpv4_assignments, head) { - if (lease->valid_until < now) + if (!INFINITE_VALID(lease->valid_until) && lease->valid_until < now) continue; void *l = blobmsg_open_table(&b, NULL); @@ -50,7 +50,8 @@ static int handle_dhcpv4_leases(struct ubus_context *ctx, _unused struct ubus_ob inet_ntop(AF_INET, &addr, buf, INET_ADDRSTRLEN); blobmsg_add_string_buffer(&b); - blobmsg_add_u32(&b, "valid", now - lease->valid_until); + blobmsg_add_u32(&b, "valid", INFINITE_VALID(lease->valid_until) ? + (uint32_t)-1 : (uint32_t)(lease->valid_until - now)); blobmsg_close_table(&b, l); } @@ -83,7 +84,7 @@ static int handle_dhcpv6_leases(_unused struct ubus_context *ctx, _unused struct struct dhcpv6_assignment *lease; list_for_each_entry(lease, &iface->ia_assignments, head) { - if (lease->valid_until < now) + if (!INFINITE_VALID(lease->valid_until) && lease->valid_until < now) continue; void *l = blobmsg_open_table(&b, NULL); @@ -106,8 +107,10 @@ static int handle_dhcpv6_leases(_unused struct ubus_context *ctx, _unused struct addr = iface->ia_addr[i].addr; if (lease->length == 128) addr.s6_addr32[3] = htonl(lease->assigned); - else + else { addr.s6_addr32[1] |= htonl(lease->assigned); + addr.s6_addr32[2] = addr.s6_addr32[3] = 0; + } char *c = blobmsg_alloc_string_buffer(&b, NULL, INET6_ADDRSTRLEN); inet_ntop(AF_INET6, &addr, c, INET6_ADDRSTRLEN); @@ -115,7 +118,8 @@ static int handle_dhcpv6_leases(_unused struct ubus_context *ctx, _unused struct } blobmsg_close_table(&b, m); - blobmsg_add_u32(&b, "valid", now - lease->valid_until); + blobmsg_add_u32(&b, "valid", INFINITE_VALID(lease->valid_until) ? + (uint32_t)-1 : (uint32_t)(lease->valid_until - now)); blobmsg_close_table(&b, l); } @@ -345,7 +349,7 @@ bool ubus_has_prefix(const char *name, const char *ifname) continue; if ((cur = tb[IFACE_ATTR_PREFIX])) { - if (blobmsg_type(cur) != BLOBMSG_TYPE_ARRAY || !blobmsg_check_attr(cur, NULL)) + if (blobmsg_type(cur) != BLOBMSG_TYPE_ARRAY || !blobmsg_check_attr(cur, false)) continue; struct blob_attr *d;