for (i = 0; i < n; i++) {
_cleanup_route_free_ Route *route = NULL;
- r = route_new_dynamic(&route);
+ r = route_new_dynamic(&route, RTPROT_DHCP);
if (r < 0) {
log_error_link(link, "Could not allocate route: %s",
strerror(-r));
if (link->ipv4ll && !link->dhcp_lease) {
_cleanup_route_free_ Route *route = NULL;
- struct in_addr addr;
-
- r = sd_ipv4ll_get_address(link->ipv4ll, &addr);
- if (r < 0 && r != -ENOENT) {
- log_warning_link(link, "IPV4LL error: no address: %s",
- strerror(-r));
- return r;
- }
if (r != -ENOENT) {
- r = route_new_dynamic(&route);
+ r = route_new_dynamic(&route, RTPROT_STATIC);
if (r < 0) {
log_error_link(link, "Could not allocate route: %s",
strerror(-r));
}
if (r >= 0) {
- r = route_new_dynamic(&route);
+ r = route_new_dynamic(&route, RTPROT_DHCP);
if (r < 0) {
log_error_link(link, "Could not allocate route: %s",
strerror(-r));
return r;
}
- r = route_new_dynamic(&route_gw);
+ r = route_new_dynamic(&route_gw, RTPROT_DHCP);
if (r < 0) {
log_error_link(link, "Could not allocate route: %s",
strerror(-r));
for (i = 0; i < n; i++) {
_cleanup_route_free_ Route *route = NULL;
- r = route_new_dynamic(&route);
+ r = route_new_dynamic(&route, RTPROT_UNSPEC);
if (r >= 0) {
route->family = AF_INET;
route->in_addr.in = routes[i].gw_addr;
_cleanup_route_free_ Route *route_gw = NULL;
_cleanup_route_free_ Route *route = NULL;
- r = route_new_dynamic(&route_gw);
+ r = route_new_dynamic(&route_gw, RTPROT_UNSPEC);
if (r >= 0) {
route_gw->family = AF_INET;
route_gw->dst_addr.in = gateway;
route_drop(route_gw, link, &route_drop_handler);
}
- r = route_new_dynamic(&route);
+ r = route_new_dynamic(&route, RTPROT_UNSPEC);
if (r >= 0) {
route->family = AF_INET;
route->in_addr.in = gateway;
address_drop(address, link, &address_drop_handler);
- r = route_new_dynamic(&route);
+ r = route_new_dynamic(&route, RTPROT_UNSPEC);
if (r < 0) {
log_error_link(link, "Could not allocate route: %s",
strerror(-r));
return link_update_flags(link, m);
}
-static void serialize_addresses(FILE *f, const char *key, Address *address) {
- Address *ad;
-
- assert(f);
- assert(key);
-
- if (!address)
- return;
-
- fprintf(f, "%s=", key);
-
- LIST_FOREACH(addresses, ad, address) {
- char buf[INET6_ADDRSTRLEN];
-
- if (inet_ntop(ad->family, &ad->in_addr, buf, INET6_ADDRSTRLEN))
- fprintf(f, "%s%s", buf, (ad->addresses_next) ? " ": "");
- }
-
- fputs("\n", f);
-}
-
static void link_update_operstate(Link *link) {
assert(link);
admin_state, oper_state);
if (link->network) {
- serialize_addresses(f, "DNS", link->network->dns);
- serialize_addresses(f, "NTP", link->network->ntp);
+ char **address;
+
+ fputs("DNS=", f);
+
+ if (link->network->dhcp_dns &&
+ link->dhcp_lease) {
+ const struct in_addr *addresses;
+
+ r = sd_dhcp_lease_get_dns(link->dhcp_lease, &addresses);
+ if (r > 0) {
+ serialize_in_addrs(f, addresses, r);
+ if (link->network->dns)
+ fputs(" ", f);
+ }
+ }
+
+ STRV_FOREACH(address, link->network->dns)
+ fprintf(f, "%s%s", *address,
+ (address + 1 ? " " : ""));
+
+ fputs("\n", f);
+
+ fprintf(f, "NTP=");
+
+ if (link->network->dhcp_ntp &&
+ link->dhcp_lease) {
+ const struct in_addr *addresses;
+
+ r = sd_dhcp_lease_get_ntp(link->dhcp_lease, &addresses);
+ if (r > 0) {
+ serialize_in_addrs(f, addresses, r);
+ if (link->network->ntp)
+ fputs(" ", f);
+ }
+ }
+
+ STRV_FOREACH(address, link->network->ntp)
+ fprintf(f, "%s%s", *address,
+ (address + 1 ? " " : ""));
+
+ fputs("\n", f);
}
if (link->dhcp_lease) {
goto finish;
fprintf(f,
- "DHCP_LEASE=%s\n"
- "DHCP_USE_DNS=%s\n"
- "DHCP_USE_NTP=%s\n",
- link->lease_file,
- yes_no(link->network->dhcp_dns),
- yes_no(link->network->dhcp_ntp));
+ "DHCP_LEASE=%s\n",
+ link->lease_file);
} else
unlink(link->lease_file);