mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
sd-dhcp6-client: introduce sd_dhcp6_lease_get_t1() and friends
This commit is contained in:
@@ -47,7 +47,6 @@ struct sd_dhcp6_lease {
|
||||
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);
|
||||
|
||||
@@ -1069,7 +1069,15 @@ static int client_enter_bound_state(sd_dhcp6_client *client) {
|
||||
(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;
|
||||
|
||||
|
||||
@@ -70,20 +70,47 @@ static void dhcp6_lease_set_lifetime(sd_dhcp6_lease *lease) {
|
||||
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);
|
||||
#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 (!lease->ia_na && !lease->ia_pd)
|
||||
return -ENODATA;
|
||||
|
||||
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);
|
||||
|
||||
@@ -1045,7 +1045,7 @@ static int dhcp_server_append_json(Link *link, JsonVariant **v) {
|
||||
|
||||
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);
|
||||
@@ -1054,17 +1054,22 @@ static int dhcp6_client_lease_append_json(Link *link, JsonVariant **v) {
|
||||
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;
|
||||
|
||||
|
||||
@@ -30,6 +30,12 @@ _SD_BEGIN_DECLARATIONS;
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user