X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Fsd-dhcp6-lease.c;h=e2715ea659d370168fbb92c1b0a5be32d280c8bc;hb=79008bddf679a5e0900369950eb346c9fa687107;hp=cbda7d8c84bb8932ce811c474d625feaf7c7b38a;hpb=ea3b3a75abb3f8b853f7da454b9b8e258a120eea;p=elogind.git diff --git a/src/libsystemd-network/sd-dhcp6-lease.c b/src/libsystemd-network/sd-dhcp6-lease.c index cbda7d8c8..e2715ea65 100644 --- a/src/libsystemd-network/sd-dhcp6-lease.c +++ b/src/libsystemd-network/sd-dhcp6-lease.c @@ -33,6 +33,28 @@ int dhcp6_lease_clear_timers(DHCP6IA *ia) { return 0; } +int dhcp6_lease_ia_rebind_expire(const DHCP6IA *ia, uint32_t *expire) { + DHCP6Address *addr; + uint32_t valid = 0, t; + + assert_return(ia, -EINVAL); + assert_return(expire, -EINVAL); + + LIST_FOREACH(addresses, addr, ia->addresses) { + t = be32toh(addr->iaaddr.lifetime_valid); + if (valid < t) + valid = t; + } + + t = be32toh(ia->lifetime_t2); + if (t > valid) + return -EINVAL; + + *expire = valid - t; + + return 0; +} + DHCP6IA *dhcp6_lease_free_ia(DHCP6IA *ia) { DHCP6Address *address; @@ -96,6 +118,23 @@ int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *preference) { return 0; } +int dhcp6_lease_set_rapid_commit(sd_dhcp6_lease *lease) { + assert_return(lease, -EINVAL); + + lease->rapid_commit = true; + + return 0; +} + +int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *rapid_commit) { + assert_return(lease, -EINVAL); + assert_return(rapid_commit, -EINVAL); + + *rapid_commit = lease->rapid_commit; + + return 0; +} + int dhcp6_lease_get_iaid(sd_dhcp6_lease *lease, be32_t *iaid) { assert_return(lease, -EINVAL); assert_return(iaid, -EINVAL); @@ -117,9 +156,11 @@ int sd_dhcp6_lease_get_next_address(sd_dhcp6_lease *lease, if (!lease->addr_iter) return -ENOMSG; - memcpy(addr, &lease->addr_iter->address, sizeof(struct in6_addr)); - *lifetime_preferred = be32toh(lease->addr_iter->lifetime_preferred); - *lifetime_valid = be32toh(lease->addr_iter->lifetime_valid); + memcpy(addr, &lease->addr_iter->iaaddr.address, + sizeof(struct in6_addr)); + *lifetime_preferred = + be32toh(lease->addr_iter->iaaddr.lifetime_preferred); + *lifetime_valid = be32toh(lease->addr_iter->iaaddr.lifetime_valid); lease->addr_iter = lease->addr_iter->addresses_next;