char *captive_portal;
};
-int dhcp6_lease_get_lifetime(sd_dhcp6_lease *lease, usec_t *ret_t1, usec_t *ret_t2, usec_t *ret_valid);
int dhcp6_lease_set_clientid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len);
int dhcp6_lease_get_clientid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *ret_len);
int dhcp6_lease_set_serverid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len);
(void) event_source_disable(client->receive_message);
(void) event_source_disable(client->timeout_resend);
- r = dhcp6_lease_get_lifetime(client->lease, &lifetime_t1, &lifetime_t2, &lifetime_valid);
+ r = sd_dhcp6_lease_get_t1(client->lease, &lifetime_t1);
+ if (r < 0)
+ goto error;
+
+ r = sd_dhcp6_lease_get_t2(client->lease, &lifetime_t2);
+ if (r < 0)
+ goto error;
+
+ r = sd_dhcp6_lease_get_valid_lifetime(client->lease, &lifetime_valid);
if (r < 0)
goto error;
lease->lifetime_t2 = t2;
}
-int dhcp6_lease_get_lifetime(sd_dhcp6_lease *lease, usec_t *ret_t1, usec_t *ret_t2, usec_t *ret_valid) {
- assert(lease);
-
- if (!lease->ia_na && !lease->ia_pd)
- return -ENODATA;
+#define DEFINE_GET_TIME_FUNCTIONS(name, val) \
+ int sd_dhcp6_lease_get_##name( \
+ sd_dhcp6_lease *lease, \
+ uint64_t *ret) { \
+ \
+ assert_return(lease, -EINVAL); \
+ \
+ if (!lease->ia_na && !lease->ia_pd) \
+ return -ENODATA; \
+ \
+ if (ret) \
+ *ret = lease->val; \
+ return 0; \
+ } \
+ \
+ int sd_dhcp6_lease_get_##name##_timestamp( \
+ sd_dhcp6_lease *lease, \
+ clockid_t clock, \
+ uint64_t *ret) { \
+ \
+ usec_t s, t; \
+ int r; \
+ \
+ assert_return(lease, -EINVAL); \
+ \
+ r = sd_dhcp6_lease_get_##name(lease, &s); \
+ if (r < 0) \
+ return r; \
+ \
+ r = sd_dhcp6_lease_get_timestamp(lease, clock, &t); \
+ if (r < 0) \
+ return r; \
+ \
+ if (ret) \
+ *ret = time_span_to_stamp(s, t); \
+ return 0; \
+ }
- if (ret_t1)
- *ret_t1 = lease->lifetime_t1;
- if (ret_t2)
- *ret_t2 = lease->lifetime_t2;
- if (ret_valid)
- *ret_valid = lease->lifetime_valid;
- return 0;
-}
+DEFINE_GET_TIME_FUNCTIONS(t1, lifetime_t1);
+DEFINE_GET_TIME_FUNCTIONS(t2, lifetime_t1);
+DEFINE_GET_TIME_FUNCTIONS(valid_lifetime, lifetime_valid);
static void dhcp6_lease_set_server_address(sd_dhcp6_lease *lease, const struct in6_addr *server_address) {
assert(lease);
static int dhcp6_client_lease_append_json(Link *link, JsonVariant **v) {
_cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
- usec_t lease_timestamp_usec;
+ usec_t ts, t1, t2;
int r;
assert(link);
if (!link->dhcp6_lease)
return 0;
- r = sd_dhcp6_lease_get_timestamp(link->dhcp6_lease, CLOCK_BOOTTIME, &lease_timestamp_usec);
+ r = sd_dhcp6_lease_get_timestamp(link->dhcp6_lease, CLOCK_BOOTTIME, &ts);
if (r < 0)
- return 0;
+ return r;
+
+ r = sd_dhcp6_lease_get_t1_timestamp(link->dhcp6_lease, CLOCK_BOOTTIME, &t1);
+ if (r < 0)
+ return r;
+
+ r = sd_dhcp6_lease_get_t2_timestamp(link->dhcp6_lease, CLOCK_BOOTTIME, &t2);
+ if (r < 0)
+ return r;
r = json_build(&w, JSON_BUILD_OBJECT(
- JSON_BUILD_PAIR_FINITE_USEC("Timeout1USec",
- usec_add(link->dhcp6_lease->lifetime_t1, lease_timestamp_usec)),
- JSON_BUILD_PAIR_FINITE_USEC("Timeout2USec",
- usec_add(link->dhcp6_lease->lifetime_t2, lease_timestamp_usec)),
- JSON_BUILD_PAIR_FINITE_USEC("LeaseTimestampUSec",
- lease_timestamp_usec)));
+ JSON_BUILD_PAIR_FINITE_USEC("Timeout1USec", t1),
+ JSON_BUILD_PAIR_FINITE_USEC("Timeout2USec", t2),
+ JSON_BUILD_PAIR_FINITE_USEC("LeaseTimestampUSec", ts)));
if (r < 0)
return r;
typedef struct sd_dhcp6_lease sd_dhcp6_lease;
int sd_dhcp6_lease_get_timestamp(sd_dhcp6_lease *lease, clockid_t clock, uint64_t *ret);
+int sd_dhcp6_lease_get_t1(sd_dhcp6_lease *lease, uint64_t *ret);
+int sd_dhcp6_lease_get_t1_timestamp(sd_dhcp6_lease *lease, clockid_t clock, uint64_t *ret);
+int sd_dhcp6_lease_get_t2(sd_dhcp6_lease *lease, uint64_t *ret);
+int sd_dhcp6_lease_get_t2_timestamp(sd_dhcp6_lease *lease, clockid_t clock, uint64_t *ret);
+int sd_dhcp6_lease_get_valid_lifetime(sd_dhcp6_lease *lease, uint64_t *ret);
+int sd_dhcp6_lease_get_valid_lifetime_timestamp(sd_dhcp6_lease *lease, clockid_t clock, uint64_t *ret);
int sd_dhcp6_lease_get_server_address(sd_dhcp6_lease *lease, struct in6_addr *ret);
int sd_dhcp6_lease_address_iterator_reset(sd_dhcp6_lease *lease);