if (!link->network)
return false;
+ if (streq_ptr(link->kind, "wireguard"))
+ return false;
+
return link->network->link_local & ADDRESS_FAMILY_IPV4;
}
if (!link->network)
return false;
+ if (streq_ptr(link->kind, "wireguard"))
+ return false;
+
return link->network->link_local & ADDRESS_FAMILY_IPV6;
}
if (r < 0)
return r;
- *ret = link;
- link = NULL;
+ *ret = TAKE_PTR(link);
return 0;
}
if (r < 0)
return log_link_error_errno(link, r, "Failed to add route: %m");
- if (lifetime != USEC_INFINITY) {
+ if (lifetime != USEC_INFINITY && !kernel_route_expiration_supported()) {
r = sd_event_add_time(link->manager->event, &expire, clock_boottime_or_monotonic(), lifetime,
0, route_expire_handler, route);
if (r < 0)
route->lifetime = lifetime;
sd_event_source_unref(route->expire);
- route->expire = expire;
- expire = NULL;
+ route->expire = TAKE_PTR(expire);
}
}
return log_link_warning_errno(link, r, "Could not update DUID/IAID in DHCP client: %m");
break;
}
+ case DHCP_CLIENT_ID_DUID_ONLY: {
+ const DUID *duid = link_duid(link);
+
+ r = sd_dhcp_client_set_duid(link->dhcp_client,
+ duid->type,
+ duid->raw_data_len > 0 ? duid->raw_data : NULL,
+ duid->raw_data_len);
+ if (r < 0)
+ return log_link_warning_errno(link, r, "Could not update DUID in DHCP client: %m");
+ break;
+ }
case DHCP_CLIENT_ID_MAC:
r = sd_dhcp_client_set_client_id(link->dhcp_client,
ARPHRD_ETHER,
if (r < 0)
return log_link_warning_errno(link, r, "Could not update MAC for Router Advertisement: %m");
}
+
+ if (link->ndisc) {
+ r = sd_ndisc_set_mac(link->ndisc, &link->mac);
+ if (r < 0)
+ return log_link_warning_errno(link, r, "Could not update MAC for ndisc: %m");
+ }
}
}