diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-10-25 02:44:29 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-10-27 23:58:28 +0900 |
commit | 95e104e04957cd984600ecdaa4216950303031dc (patch) | |
tree | 4f60a694a7626d5ed1907cf17631ee9f3b432659 /src/network/networkd-radv.c | |
parent | eef5ebec9775d15b07f5660b501cb8fc7f3446c8 (diff) | |
download | systemd-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.c | 19 |
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; |