projects
/
project
/
odhcpd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dhcpv6-ia: create assignment for unknown IA in rebind messages
[project/odhcpd.git]
/
src
/
ubus.c
diff --git
a/src/ubus.c
b/src/ubus.c
index
0b51183
..
d562c0f
100644
(file)
--- 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) {
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);
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);
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);
}
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) {
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);
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);
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[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);
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_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);
}
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])) {
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;
continue;
struct blob_attr *d;