summaryrefslogtreecommitdiff
path: root/src/network/networkd-radv.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-10-25 02:44:29 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-10-27 23:58:28 +0900
commit95e104e04957cd984600ecdaa4216950303031dc (patch)
tree4f60a694a7626d5ed1907cf17631ee9f3b432659 /src/network/networkd-radv.c
parenteef5ebec9775d15b07f5660b501cb8fc7f3446c8 (diff)
downloadsystemd-95e104e04957cd984600ecdaa4216950303031dc.tar.gz
sd-radv: make prefix/route prefix lifetime can be specified with independently with valid_until
Previously, valid_until (or preferred_until for preferred lifetime) was calculated from lifetime. So, when an upstream interface acquire a dynamic prefix (e.g. through DHCPv6-PD) with long lifetime, then sd-radv advertise the same lifetime. It may not be desired for some situations.
Diffstat (limited to 'src/network/networkd-radv.c')
-rw-r--r--src/network/networkd-radv.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c
index 08a8bbf8da..eda44e191e 100644
--- a/src/network/networkd-radv.c
+++ b/src/network/networkd-radv.c
@@ -249,11 +249,11 @@ static int radv_set_prefix(Link *link, Prefix *prefix) {
if (r < 0)
return r;
- r = sd_radv_prefix_set_preferred_lifetime(p, usec_to_lifetime(prefix->preferred_lifetime));
+ r = sd_radv_prefix_set_preferred_lifetime(p, prefix->preferred_lifetime, USEC_INFINITY);
if (r < 0)
return r;
- r = sd_radv_prefix_set_valid_lifetime(p, usec_to_lifetime(prefix->valid_lifetime));
+ r = sd_radv_prefix_set_valid_lifetime(p, prefix->valid_lifetime, USEC_INFINITY);
if (r < 0)
return r;
@@ -265,7 +265,7 @@ static int radv_set_prefix(Link *link, Prefix *prefix) {
if (r < 0)
return r;
- return sd_radv_add_prefix(link->radv, p, false);
+ return sd_radv_add_prefix(link->radv, p);
}
static int radv_set_route_prefix(Link *link, RoutePrefix *prefix) {
@@ -284,11 +284,11 @@ static int radv_set_route_prefix(Link *link, RoutePrefix *prefix) {
if (r < 0)
return r;
- r = sd_radv_route_prefix_set_lifetime(p, usec_to_lifetime(prefix->lifetime));
+ r = sd_radv_route_prefix_set_lifetime(p, prefix->lifetime, USEC_INFINITY);
if (r < 0)
return r;
- return sd_radv_add_route_prefix(link->radv, p, false);
+ return sd_radv_add_route_prefix(link->radv, p);
}
static int network_get_ipv6_dns(Network *network, struct in6_addr **ret_addresses, size_t *ret_size) {
@@ -654,7 +654,6 @@ int radv_add_prefix(
usec_t lifetime_valid_usec) {
_cleanup_(sd_radv_prefix_unrefp) sd_radv_prefix *p = NULL;
- usec_t now_usec;
int r;
assert(link);
@@ -662,8 +661,6 @@ int radv_add_prefix(
if (!link->radv)
return 0;
- now_usec = now(clock_boottime_or_monotonic());
-
r = sd_radv_prefix_new(&p);
if (r < 0)
return r;
@@ -672,15 +669,15 @@ int radv_add_prefix(
if (r < 0)
return r;
- r = sd_radv_prefix_set_preferred_lifetime(p, usec_sub_unsigned(lifetime_preferred_usec, now_usec) / USEC_PER_SEC);
+ r = sd_radv_prefix_set_preferred_lifetime(p, lifetime_preferred_usec, lifetime_preferred_usec);
if (r < 0)
return r;
- r = sd_radv_prefix_set_valid_lifetime(p, usec_sub_unsigned(lifetime_valid_usec, now_usec) / USEC_PER_SEC);
+ r = sd_radv_prefix_set_valid_lifetime(p, lifetime_valid_usec, lifetime_valid_usec);
if (r < 0)
return r;
- r = sd_radv_add_prefix(link->radv, p, true);
+ r = sd_radv_add_prefix(link->radv, p);
if (r < 0 && r != -EEXIST)
return r;