1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-09 12:58:26 +03:00

Merge pull request #24805 from yuwata/sd-network

sd-network: several cleanups
This commit is contained in:
Lennart Poettering 2022-09-27 11:28:25 +02:00 committed by GitHub
commit dd51b0f952
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 121 additions and 225 deletions

View File

@ -25,40 +25,37 @@ static int network_get_string(const char *field, char **ret) {
assert_return(ret, -EINVAL);
r = parse_env_file(NULL, "/run/systemd/netif/state", field, &s);
if (r == -ENOENT)
return -ENODATA;
if (r < 0)
return r;
if (isempty(s))
return -ENODATA;
*ret = TAKE_PTR(s);
return 0;
}
int sd_network_get_operational_state(char **state) {
return network_get_string("OPER_STATE", state);
int sd_network_get_operational_state(char **ret) {
return network_get_string("OPER_STATE", ret);
}
int sd_network_get_carrier_state(char **state) {
return network_get_string("CARRIER_STATE", state);
int sd_network_get_carrier_state(char **ret) {
return network_get_string("CARRIER_STATE", ret);
}
int sd_network_get_address_state(char **state) {
return network_get_string("ADDRESS_STATE", state);
int sd_network_get_address_state(char **ret) {
return network_get_string("ADDRESS_STATE", ret);
}
int sd_network_get_ipv4_address_state(char **state) {
return network_get_string("IPV4_ADDRESS_STATE", state);
int sd_network_get_ipv4_address_state(char **ret) {
return network_get_string("IPV4_ADDRESS_STATE", ret);
}
int sd_network_get_ipv6_address_state(char **state) {
return network_get_string("IPV6_ADDRESS_STATE", state);
int sd_network_get_ipv6_address_state(char **ret) {
return network_get_string("IPV6_ADDRESS_STATE", ret);
}
int sd_network_get_online_state(char **state) {
return network_get_string("ONLINE_STATE", state);
int sd_network_get_online_state(char **ret) {
return network_get_string("ONLINE_STATE", ret);
}
static int network_get_strv(const char *key, char ***ret) {
@ -69,16 +66,12 @@ static int network_get_strv(const char *key, char ***ret) {
assert_return(ret, -EINVAL);
r = parse_env_file(NULL, "/run/systemd/netif/state", key, &s);
if (r == -ENOENT)
return -ENODATA;
if (r < 0)
return r;
if (isempty(s)) {
*ret = NULL;
return 0;
}
if (isempty(s))
return -ENODATA;
a = strv_split(s, " ");
a = strv_split(s, NULL);
if (!a)
return -ENOMEM;
@ -86,7 +79,6 @@ static int network_get_strv(const char *key, char ***ret) {
r = (int) strv_length(a);
*ret = TAKE_PTR(a);
return r;
}
@ -117,20 +109,27 @@ static int network_link_get_string(int ifindex, const char *field, char **ret) {
xsprintf(path, "/run/systemd/netif/links/%i", ifindex);
r = parse_env_file(NULL, path, field, &s);
if (r == -ENOENT)
return -ENODATA;
if (r < 0)
return r;
if (isempty(s))
return -ENODATA;
*ret = TAKE_PTR(s);
return 0;
}
static int network_link_get_boolean(int ifindex, const char *key) {
_cleanup_free_ char *s = NULL;
int r;
r = network_link_get_string(ifindex, key, &s);
if (r < 0)
return r;
return parse_boolean(s);
}
static int network_link_get_strv(int ifindex, const char *key, char ***ret) {
char path[STRLEN("/run/systemd/netif/links/") + DECIMAL_STR_MAX(ifindex)];
_cleanup_strv_free_ char **a = NULL;
_cleanup_free_ char *s = NULL;
int r;
@ -138,18 +137,11 @@ static int network_link_get_strv(int ifindex, const char *key, char ***ret) {
assert_return(ifindex > 0, -EINVAL);
assert_return(ret, -EINVAL);
xsprintf(path, "/run/systemd/netif/links/%i", ifindex);
r = parse_env_file(NULL, path, key, &s);
if (r == -ENOENT)
return -ENODATA;
r = network_link_get_string(ifindex, key, &s);
if (r < 0)
return r;
if (isempty(s)) {
*ret = NULL;
return 0;
}
a = strv_split(s, " ");
a = strv_split(s, NULL);
if (!a)
return -ENOMEM;
@ -157,145 +149,83 @@ static int network_link_get_strv(int ifindex, const char *key, char ***ret) {
r = (int) strv_length(a);
*ret = TAKE_PTR(a);
return r;
}
int sd_network_link_get_setup_state(int ifindex, char **state) {
return network_link_get_string(ifindex, "ADMIN_STATE", state);
int sd_network_link_get_setup_state(int ifindex, char **ret) {
return network_link_get_string(ifindex, "ADMIN_STATE", ret);
}
int sd_network_link_get_network_file(int ifindex, char **filename) {
return network_link_get_string(ifindex, "NETWORK_FILE", filename);
int sd_network_link_get_network_file(int ifindex, char **ret) {
return network_link_get_string(ifindex, "NETWORK_FILE", ret);
}
int sd_network_link_get_operational_state(int ifindex, char **state) {
return network_link_get_string(ifindex, "OPER_STATE", state);
int sd_network_link_get_operational_state(int ifindex, char **ret) {
return network_link_get_string(ifindex, "OPER_STATE", ret);
}
int sd_network_link_get_required_family_for_online(int ifindex, char **state) {
_cleanup_free_ char *s = NULL;
int r;
assert_return(state, -EINVAL);
r = network_link_get_string(ifindex, "REQUIRED_FAMILY_FOR_ONLINE", &s);
if (r < 0) {
if (r != -ENODATA)
return r;
s = strdup("any");
if (!s)
return -ENOMEM;
}
*state = TAKE_PTR(s);
return 0;
int sd_network_link_get_required_family_for_online(int ifindex, char **ret) {
return network_link_get_string(ifindex, "REQUIRED_FAMILY_FOR_ONLINE", ret);
}
int sd_network_link_get_carrier_state(int ifindex, char **state) {
return network_link_get_string(ifindex, "CARRIER_STATE", state);
int sd_network_link_get_carrier_state(int ifindex, char **ret) {
return network_link_get_string(ifindex, "CARRIER_STATE", ret);
}
int sd_network_link_get_address_state(int ifindex, char **state) {
return network_link_get_string(ifindex, "ADDRESS_STATE", state);
int sd_network_link_get_address_state(int ifindex, char **ret) {
return network_link_get_string(ifindex, "ADDRESS_STATE", ret);
}
int sd_network_link_get_ipv4_address_state(int ifindex, char **state) {
return network_link_get_string(ifindex, "IPV4_ADDRESS_STATE", state);
int sd_network_link_get_ipv4_address_state(int ifindex, char **ret) {
return network_link_get_string(ifindex, "IPV4_ADDRESS_STATE", ret);
}
int sd_network_link_get_ipv6_address_state(int ifindex, char **state) {
return network_link_get_string(ifindex, "IPV6_ADDRESS_STATE", state);
int sd_network_link_get_ipv6_address_state(int ifindex, char **ret) {
return network_link_get_string(ifindex, "IPV6_ADDRESS_STATE", ret);
}
int sd_network_link_get_online_state(int ifindex, char **state) {
return network_link_get_string(ifindex, "ONLINE_STATE", state);
int sd_network_link_get_online_state(int ifindex, char **ret) {
return network_link_get_string(ifindex, "ONLINE_STATE", ret);
}
int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **iaid) {
return network_link_get_string(ifindex, "DHCP6_CLIENT_IAID", iaid);
int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **ret) {
return network_link_get_string(ifindex, "DHCP6_CLIENT_IAID", ret);
}
int sd_network_link_get_dhcp6_client_duid_string(int ifindex, char **duid) {
return network_link_get_string(ifindex, "DHCP6_CLIENT_DUID", duid);
int sd_network_link_get_dhcp6_client_duid_string(int ifindex, char **ret) {
return network_link_get_string(ifindex, "DHCP6_CLIENT_DUID", ret);
}
int sd_network_link_get_required_for_online(int ifindex) {
_cleanup_free_ char *s = NULL;
int r;
r = network_link_get_string(ifindex, "REQUIRED_FOR_ONLINE", &s);
if (r < 0) {
/* Handle -ENODATA as RequiredForOnline=yes, for compatibility */
if (r == -ENODATA)
return true;
return r;
}
return parse_boolean(s);
return network_link_get_boolean(ifindex, "REQUIRED_FOR_ONLINE");
}
int sd_network_link_get_required_operstate_for_online(int ifindex, char **state) {
_cleanup_free_ char *s = NULL;
int r;
assert_return(state, -EINVAL);
r = network_link_get_string(ifindex, "REQUIRED_OPER_STATE_FOR_ONLINE", &s);
if (r < 0) {
if (r != -ENODATA)
return r;
/* For compatibility, assuming degraded. */
s = strdup("degraded");
if (!s)
return -ENOMEM;
}
*state = TAKE_PTR(s);
return 0;
int sd_network_link_get_required_operstate_for_online(int ifindex, char **ret) {
return network_link_get_string(ifindex, "REQUIRED_OPER_STATE_FOR_ONLINE", ret);
}
int sd_network_link_get_activation_policy(int ifindex, char **policy) {
_cleanup_free_ char *s = NULL;
int r;
assert_return(policy, -EINVAL);
r = network_link_get_string(ifindex, "ACTIVATION_POLICY", &s);
if (r < 0) {
if (r != -ENODATA)
return r;
/* For compatibility, assuming up. */
s = strdup("up");
if (!s)
return -ENOMEM;
}
*policy = TAKE_PTR(s);
return 0;
int sd_network_link_get_activation_policy(int ifindex, char **ret) {
return network_link_get_string(ifindex, "ACTIVATION_POLICY", ret);
}
int sd_network_link_get_llmnr(int ifindex, char **llmnr) {
return network_link_get_string(ifindex, "LLMNR", llmnr);
int sd_network_link_get_llmnr(int ifindex, char **ret) {
return network_link_get_string(ifindex, "LLMNR", ret);
}
int sd_network_link_get_mdns(int ifindex, char **mdns) {
return network_link_get_string(ifindex, "MDNS", mdns);
int sd_network_link_get_mdns(int ifindex, char **ret) {
return network_link_get_string(ifindex, "MDNS", ret);
}
int sd_network_link_get_dns_over_tls(int ifindex, char **dns_over_tls) {
return network_link_get_string(ifindex, "DNS_OVER_TLS", dns_over_tls);
int sd_network_link_get_dns_over_tls(int ifindex, char **ret) {
return network_link_get_string(ifindex, "DNS_OVER_TLS", ret);
}
int sd_network_link_get_dnssec(int ifindex, char **dnssec) {
return network_link_get_string(ifindex, "DNSSEC", dnssec);
int sd_network_link_get_dnssec(int ifindex, char **ret) {
return network_link_get_string(ifindex, "DNSSEC", ret);
}
int sd_network_link_get_dnssec_negative_trust_anchors(int ifindex, char ***nta) {
return network_link_get_strv(ifindex, "DNSSEC_NTA", nta);
int sd_network_link_get_dnssec_negative_trust_anchors(int ifindex, char ***ret) {
return network_link_get_strv(ifindex, "DNSSEC_NTA", ret);
}
int sd_network_link_get_dns(int ifindex, char ***ret) {
@ -319,26 +249,10 @@ int sd_network_link_get_route_domains(int ifindex, char ***ret) {
}
int sd_network_link_get_dns_default_route(int ifindex) {
char path[STRLEN("/run/systemd/netif/links/") + DECIMAL_STR_MAX(ifindex)];
_cleanup_free_ char *s = NULL;
int r;
assert_return(ifindex > 0, -EINVAL);
xsprintf(path, "/run/systemd/netif/links/%i", ifindex);
r = parse_env_file(NULL, path, "DNS_DEFAULT_ROUTE", &s);
if (r == -ENOENT)
return -ENODATA;
if (r < 0)
return r;
if (isempty(s))
return -ENODATA;
return parse_boolean(s);
return network_link_get_boolean(ifindex, "DNS_DEFAULT_ROUTE");
}
static int network_link_get_ifindexes(int ifindex, const char *key, int **ret) {
char path[STRLEN("/run/systemd/netif/links/") + DECIMAL_STR_MAX(ifindex)];
_cleanup_free_ int *ifis = NULL;
_cleanup_free_ char *s = NULL;
size_t c = 0;
@ -347,10 +261,7 @@ static int network_link_get_ifindexes(int ifindex, const char *key, int **ret) {
assert_return(ifindex > 0, -EINVAL);
assert_return(ret, -EINVAL);
xsprintf(path, "/run/systemd/netif/links/%i", ifindex);
r = parse_env_file(NULL, path, key, &s);
if (r == -ENOENT)
return -ENODATA;
r = network_link_get_string(ifindex, key, &s);
if (r < 0)
return r;
@ -375,7 +286,6 @@ static int network_link_get_ifindexes(int ifindex, const char *key, int **ret) {
ifis[c] = 0; /* Let's add a 0 ifindex to the end, to be nice */
*ret = TAKE_PTR(ifis);
return c;
}
@ -503,14 +413,12 @@ int sd_network_monitor_flush(sd_network_monitor *m) {
}
int sd_network_monitor_get_fd(sd_network_monitor *m) {
assert_return(m, -EINVAL);
return MONITOR_TO_FD(m);
}
int sd_network_monitor_get_events(sd_network_monitor *m) {
assert_return(m, -EINVAL);
/* For now we will only return POLLIN here, since we don't
@ -520,14 +428,13 @@ int sd_network_monitor_get_events(sd_network_monitor *m) {
return POLLIN;
}
int sd_network_monitor_get_timeout(sd_network_monitor *m, uint64_t *timeout_usec) {
int sd_network_monitor_get_timeout(sd_network_monitor *m, uint64_t *ret_usec) {
assert_return(m, -EINVAL);
assert_return(timeout_usec, -EINVAL);
assert_return(ret_usec, -EINVAL);
/* For now we will only return UINT64_MAX, since we don't
* need any timeout. However, let's have this API to keep our
* options open should we later on need it. */
*timeout_usec = UINT64_MAX;
*ret_usec = UINT64_MAX;
return 0;
}

View File

@ -836,9 +836,7 @@ static int list_links(int argc, char *argv[], void *userdata) {
(void) sd_network_link_get_operational_state(links[i].ifindex, &operational_state);
operational_state_to_color(links[i].name, operational_state, &on_color_operational, NULL);
r = sd_network_link_get_setup_state(links[i].ifindex, &setup_state);
if (r == -ENODATA) /* If there's no info available about this iface, it's unmanaged by networkd */
setup_state = strdup("unmanaged");
(void) sd_network_link_get_setup_state(links[i].ifindex, &setup_state);
setup_state_to_color(setup_state, &on_color_setup, NULL);
r = net_get_type_string(links[i].sd_device, links[i].iftype, &t);
@ -851,7 +849,7 @@ static int list_links(int argc, char *argv[], void *userdata) {
TABLE_STRING, t,
TABLE_STRING, operational_state,
TABLE_SET_COLOR, on_color_operational,
TABLE_STRING, setup_state,
TABLE_STRING, setup_state ?: "unmanaged",
TABLE_SET_COLOR, on_color_setup);
if (r < 0)
return table_log_add_error(r);
@ -1563,9 +1561,7 @@ static int link_status_one(
(void) sd_network_link_get_online_state(info->ifindex, &online_state);
online_state_to_color(online_state, &on_color_online, NULL);
r = sd_network_link_get_setup_state(info->ifindex, &setup_state);
if (r == -ENODATA) /* If there's no info available about this iface, it's unmanaged by networkd */
setup_state = strdup("unmanaged");
(void) sd_network_link_get_setup_state(info->ifindex, &setup_state);
setup_state_to_color(setup_state, &on_color_setup, &off_color_setup);
(void) sd_network_link_get_dns(info->ifindex, &dns);
@ -1573,6 +1569,10 @@ static int link_status_one(
(void) sd_network_link_get_route_domains(info->ifindex, &route_domains);
(void) sd_network_link_get_ntp(info->ifindex, &ntp);
(void) sd_network_link_get_sip(info->ifindex, &sip);
(void) sd_network_link_get_network_file(info->ifindex, &network);
(void) sd_network_link_get_carrier_bound_to(info->ifindex, &carrier_bound_to);
(void) sd_network_link_get_carrier_bound_by(info->ifindex, &carrier_bound_by);
(void) sd_network_link_get_activation_policy(info->ifindex, &activation_policy);
if (info->sd_device) {
(void) sd_device_get_property_value(info->sd_device, "ID_NET_LINK_FILE", &link);
@ -1590,11 +1590,6 @@ static int link_status_one(
if (r == -ENOMEM)
return log_oom();
(void) sd_network_link_get_network_file(info->ifindex, &network);
(void) sd_network_link_get_carrier_bound_to(info->ifindex, &carrier_bound_to);
(void) sd_network_link_get_carrier_bound_by(info->ifindex, &carrier_bound_by);
char lease_file[STRLEN("/run/systemd/netif/leases/") + DECIMAL_STR_MAX(int)];
xsprintf(lease_file, "/run/systemd/netif/leases/%i", info->ifindex);
@ -1646,7 +1641,7 @@ static int link_status_one(
r = table_add_cell_stringf(table, NULL, "%s%s%s (%s%s%s)",
on_color_operational, strna(operational_state), off_color_operational,
on_color_setup, strna(setup_state), off_color_setup);
on_color_setup, setup_state ?: "unmanaged", off_color_setup);
if (r < 0)
return table_log_add_error(r);
@ -2188,15 +2183,9 @@ static int link_status_one(
if (r < 0)
return r;
r = sd_network_link_get_activation_policy(info->ifindex, &activation_policy);
if (r >= 0) {
r = table_add_many(table,
TABLE_EMPTY,
TABLE_STRING, "Activation Policy:",
TABLE_STRING, activation_policy);
if (r < 0)
return table_log_add_error(r);
}
r = table_add_string_line(table, "Activation Policy:", activation_policy);
if (r < 0)
return r;
r = sd_network_link_get_required_for_online(info->ifindex);
if (r >= 0) {

View File

@ -107,14 +107,14 @@ int link_update_monitor(Link *l) {
r = sd_network_link_get_required_for_online(l->ifindex);
if (r < 0)
ret = log_link_debug_errno(l, r, "Failed to determine whether the link is required for online or not, "
"ignoring: %m");
else
l->required_for_online = r > 0;
"assuming required: %m");
l->required_for_online = r != 0;
r = sd_network_link_get_required_operstate_for_online(l->ifindex, &required_operstate);
if (r < 0)
if (r < 0) {
ret = log_link_debug_errno(l, r, "Failed to get required operational state, ignoring: %m");
else if (isempty(required_operstate))
l->required_operstate = LINK_OPERSTATE_RANGE_DEFAULT;
} else if (isempty(required_operstate))
l->required_operstate = LINK_OPERSTATE_RANGE_DEFAULT;
else {
r = parse_operational_state_range(required_operstate, &l->required_operstate);

View File

@ -469,7 +469,7 @@ static int link_update_dnssec_negative_trust_anchors(Link *l) {
r = sd_network_link_get_dnssec_negative_trust_anchors(l->ifindex, &ntas);
if (r == -ENODATA)
return r;
return 0;
if (r < 0)
return r;

View File

@ -49,26 +49,26 @@ _SD_BEGIN_DECLARATIONS;
* Possible return codes:
* -ENODATA: networkd is not aware of any links
*/
int sd_network_get_operational_state(char **state);
int sd_network_get_carrier_state(char **state);
int sd_network_get_address_state(char **state);
int sd_network_get_ipv4_address_state(char **state);
int sd_network_get_ipv6_address_state(char **state);
int sd_network_get_online_state(char **state);
int sd_network_get_operational_state(char **ret);
int sd_network_get_carrier_state(char **ret);
int sd_network_get_address_state(char **ret);
int sd_network_get_ipv4_address_state(char **ret);
int sd_network_get_ipv6_address_state(char **ret);
int sd_network_get_online_state(char **ret);
/* Get DNS entries for all links. These are string representations of
* IP addresses */
int sd_network_get_dns(char ***dns);
int sd_network_get_dns(char ***ret);
/* Get NTP entries for all links. These are domain names or string
* representations of IP addresses */
int sd_network_get_ntp(char ***ntp);
int sd_network_get_ntp(char ***ret);
/* Get the search domains for all links. */
int sd_network_get_search_domains(char ***domains);
int sd_network_get_search_domains(char ***ret);
/* Get the search domains for all links. */
int sd_network_get_route_domains(char ***domains);
int sd_network_get_route_domains(char ***ret);
/* Get setup state from ifindex.
* Possible states:
@ -81,7 +81,7 @@ int sd_network_get_route_domains(char ***domains);
* Possible return codes:
* -ENODATA: networkd is not aware of the link
*/
int sd_network_link_get_setup_state(int ifindex, char **state);
int sd_network_link_get_setup_state(int ifindex, char **ret);
/* Get operational state from ifindex.
* Possible states:
@ -94,14 +94,14 @@ int sd_network_link_get_setup_state(int ifindex, char **state);
* Possible return codes:
* -ENODATA: networkd is not aware of the link
*/
int sd_network_link_get_operational_state(int ifindex, char **state);
int sd_network_link_get_required_operstate_for_online(int ifindex, char **state);
int sd_network_link_get_required_family_for_online(int ifindex, char **state);
int sd_network_link_get_carrier_state(int ifindex, char **state);
int sd_network_link_get_address_state(int ifindex, char **state);
int sd_network_link_get_ipv4_address_state(int ifindex, char **state);
int sd_network_link_get_ipv6_address_state(int ifindex, char **state);
int sd_network_link_get_online_state(int ifindex, char **state);
int sd_network_link_get_operational_state(int ifindex, char **ret);
int sd_network_link_get_required_operstate_for_online(int ifindex, char **ret);
int sd_network_link_get_required_family_for_online(int ifindex, char **ret);
int sd_network_link_get_carrier_state(int ifindex, char **ret);
int sd_network_link_get_address_state(int ifindex, char **ret);
int sd_network_link_get_ipv4_address_state(int ifindex, char **ret);
int sd_network_link_get_ipv6_address_state(int ifindex, char **ret);
int sd_network_link_get_online_state(int ifindex, char **ret);
/* Indicates whether the network is relevant to being online.
* Possible return codes:
@ -114,10 +114,10 @@ int sd_network_link_get_required_for_online(int ifindex);
/* Get activation policy for ifindex.
* Possible values are as specified for ActivationPolicy=
*/
int sd_network_link_get_activation_policy(int ifindex, char **policy);
int sd_network_link_get_activation_policy(int ifindex, char **ret);
/* Get path to .network file applied to link */
int sd_network_link_get_network_file(int ifindex, char **filename);
int sd_network_link_get_network_file(int ifindex, char **ret);
/* Get DNS entries for a given link. These are string representations of
* IP addresses */
@ -136,7 +136,7 @@ int sd_network_link_get_sip(int ifindex, char ***ret);
* Possible return codes:
* -ENODATA: networkd is not aware of the link
*/
int sd_network_link_get_llmnr(int ifindex, char **llmnr);
int sd_network_link_get_llmnr(int ifindex, char **ret);
/* Indicates whether or not MulticastDNS should be enabled for the
* link.
@ -144,7 +144,7 @@ int sd_network_link_get_llmnr(int ifindex, char **llmnr);
* Possible return codes:
* -ENODATA: networkd is not aware of the link
*/
int sd_network_link_get_mdns(int ifindex, char **mdns);
int sd_network_link_get_mdns(int ifindex, char **ret);
/* Indicates whether or not DNS-over-TLS should be enabled for the
* link.
@ -152,41 +152,41 @@ int sd_network_link_get_mdns(int ifindex, char **mdns);
* Possible return codes:
* -ENODATA: networkd is not aware of the link
*/
int sd_network_link_get_dns_over_tls(int ifindex, char **dns_over_tls);
int sd_network_link_get_dns_over_tls(int ifindex, char **ret);
/* Indicates whether or not DNSSEC should be enabled for the link
* Possible levels of support: yes, no, allow-downgrade
* Possible return codes:
* -ENODATA: networkd is not aware of the link
*/
int sd_network_link_get_dnssec(int ifindex, char **dnssec);
int sd_network_link_get_dnssec(int ifindex, char **ret);
/* Returns the list of per-interface DNSSEC negative trust anchors
* Possible return codes:
* -ENODATA: networkd is not aware of the link, or has no such data
*/
int sd_network_link_get_dnssec_negative_trust_anchors(int ifindex, char ***nta);
int sd_network_link_get_dnssec_negative_trust_anchors(int ifindex, char ***ret);
/* Get the search DNS domain names for a given link. */
int sd_network_link_get_search_domains(int ifindex, char ***domains);
int sd_network_link_get_search_domains(int ifindex, char ***ret);
/* Get the route DNS domain names for a given link. */
int sd_network_link_get_route_domains(int ifindex, char ***domains);
int sd_network_link_get_route_domains(int ifindex, char ***ret);
/* Get whether this link shall be used as 'default route' for DNS queries */
int sd_network_link_get_dns_default_route(int ifindex);
/* Get the carrier interface indexes to which current link is bound to. */
int sd_network_link_get_carrier_bound_to(int ifindex, int **ifindexes);
int sd_network_link_get_carrier_bound_to(int ifindex, int **ret);
/* Get the CARRIERS that are bound to current link. */
int sd_network_link_get_carrier_bound_by(int ifindex, int **ifindexes);
int sd_network_link_get_carrier_bound_by(int ifindex, int **ret);
/* Get DHCPv6 client IAID for a given link. */
int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **iaid);
int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **ret);
/* Get DHCPv6 client DUID for a given link. */
int sd_network_link_get_dhcp6_client_duid_string(int ifindex, char **duid);
int sd_network_link_get_dhcp6_client_duid_string(int ifindex, char **ret);
int sd_network_link_get_stat(int ifindex, struct stat *ret);
@ -209,7 +209,7 @@ int sd_network_monitor_get_fd(sd_network_monitor *m);
int sd_network_monitor_get_events(sd_network_monitor *m);
/* Get timeout for poll(), as usec value relative to CLOCK_MONOTONIC's epoch */
int sd_network_monitor_get_timeout(sd_network_monitor *m, uint64_t *timeout_usec);
int sd_network_monitor_get_timeout(sd_network_monitor *m, uint64_t *ret_usec);
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_network_monitor, sd_network_monitor_unref);

View File

@ -972,7 +972,7 @@ static int manager_network_read_link_servers(Manager *m) {
if (r < 0) {
if (r == -ENOMEM)
log_oom();
else
else if (r != -ENODATA)
log_debug_errno(r, "Failed to get link NTP servers: %m");
goto clear;
}