address_netlink_handler_t netlink_handler,
Request **ret) {
- Address *acquired, *existing;
+ Address *acquired, *existing = NULL;
int r;
assert(link);
address_set_broadcast(address, link);
}
- if (address_get(link, address, &existing) < 0) {
+ (void) address_get(link, address, &existing);
+
+ if (address->lifetime_valid_usec == 0)
+ /* The requested address is outdated. Let's remove it. */
+ return address_remove_and_drop(existing);
+
+ if (!existing) {
_cleanup_(address_freep) Address *tmp = NULL;
if (consume_object)
if (r < 0)
return log_link_error_errno(link, r, "Failed to get gateway lifetime from RA: %m");
- if (lifetime_sec == 0) /* not a default router */
- return 0;
-
r = sd_ndisc_router_get_timestamp(rt, CLOCK_BOOTTIME, ×tamp_usec);
if (r < 0)
return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
if (r < 0)
return log_link_error_errno(link, r, "Failed to get prefix valid lifetime: %m");
- if (lifetime_valid_sec == 0) {
- log_link_debug(link, "Ignoring prefix as its valid lifetime is zero.");
- return 0;
- }
-
r = sd_ndisc_router_prefix_get_preferred_lifetime(rt, &lifetime_preferred_sec);
if (r < 0)
return log_link_error_errno(link, r, "Failed to get prefix preferred lifetime: %m");
if (r < 0)
return log_link_error_errno(link, r, "Failed to get prefix lifetime: %m");
- if (lifetime_sec == 0)
- return 0;
-
r = sd_ndisc_router_get_timestamp(rt, CLOCK_BOOTTIME, ×tamp_usec);
if (r < 0)
return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
if (r < 0)
return log_link_error_errno(link, r, "Failed to get route lifetime from RA: %m");
- if (lifetime_sec == 0)
- return 0;
-
r = sd_ndisc_router_route_get_address(rt, &dst);
if (r < 0)
return log_link_error_errno(link, r, "Failed to get route destination address: %m");
if (r < 0)
return log_link_error_errno(link, r, "Failed to get RDNSS lifetime: %m");
- if (lifetime_sec == 0)
- return 0;
-
lifetime_usec = sec_to_usec(lifetime_sec, timestamp_usec);
n = sd_ndisc_router_rdnss_get_addresses(rt, &a);
.address = a[j],
};
+ if (lifetime_usec == 0) {
+ /* The entry is outdated. */
+ free(set_remove(link->ndisc_rdnss, &d));
+ updated = true;
+ continue;
+ }
+
rdnss = set_get(link->ndisc_rdnss, &d);
if (rdnss) {
rdnss->router = router;
if (r < 0)
return log_link_error_errno(link, r, "Failed to get DNSSL lifetime: %m");
- if (lifetime_sec == 0)
- return 0;
-
lifetime_usec = sec_to_usec(lifetime_sec, timestamp_usec);
r = sd_ndisc_router_dnssl_get_domains(rt, &l);
strcpy(NDISC_DNSSL_DOMAIN(s), *j);
+ if (lifetime_usec == 0) {
+ /* The entry is outdated. */
+ free(set_remove(link->ndisc_dnssl, s));
+ updated = true;
+ continue;
+ }
+
dnssl = set_get(link->ndisc_dnssl, s);
if (dnssl) {
dnssl->router = router;
route_netlink_handler_t netlink_handler,
Request **ret) {
- Route *existing;
+ Route *existing = NULL;
int r;
assert(link);
assert(route->source != NETWORK_CONFIG_SOURCE_FOREIGN);
assert(!route_needs_convert(route));
- if (route_get(link->manager, link, route, &existing) < 0) {
+ (void) route_get(link->manager, link, route, &existing);
+
+ if (route->lifetime_usec == 0)
+ /* The requested route is outdated. Let's remove it. */
+ return route_remove_and_drop(existing);
+
+ if (!existing) {
_cleanup_(route_freep) Route *tmp = NULL;
if (consume_object)