From bbea881312e2635c53aae99d2f816b448bc9504e Mon Sep 17 00:00:00 2001 From: LetzteInstanz Date: Mon, 12 Apr 2021 13:50:32 +0300 Subject: [PATCH] sd-network: read IPv4/IPv6 address states from state files --- src/libsystemd/sd-network/sd-network.c | 36 ++++++++++++++++++++++++++ src/systemd/sd-network.h | 5 ++++ 2 files changed, 41 insertions(+) diff --git a/src/libsystemd/sd-network/sd-network.c b/src/libsystemd/sd-network/sd-network.c index ccdfde9137e..b190e8f8810 100644 --- a/src/libsystemd/sd-network/sd-network.c +++ b/src/libsystemd/sd-network/sd-network.c @@ -48,6 +48,14 @@ _public_ int sd_network_get_address_state(char **state) { return network_get_string("ADDRESS_STATE", state); } +_public_ int sd_network_get_ipv4_address_state(char **state) { + return network_get_string("IPV4_ADDRESS_STATE", state); +} + +_public_ int sd_network_get_ipv6_address_state(char **state) { + return network_get_string("IPV6_ADDRESS_STATE", state); +} + static int network_get_strv(const char *key, char ***ret) { _cleanup_strv_free_ char **a = NULL; _cleanup_free_ char *s = NULL; @@ -160,6 +168,26 @@ _public_ int sd_network_link_get_operational_state(int ifindex, char **state) { return network_link_get_string(ifindex, "OPER_STATE", state); } +_public_ 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; +} + _public_ int sd_network_link_get_carrier_state(int ifindex, char **state) { return network_link_get_string(ifindex, "CARRIER_STATE", state); } @@ -168,6 +196,14 @@ _public_ int sd_network_link_get_address_state(int ifindex, char **state) { return network_link_get_string(ifindex, "ADDRESS_STATE", state); } +_public_ int sd_network_link_get_ipv4_address_state(int ifindex, char **state) { + return network_link_get_string(ifindex, "IPV4_ADDRESS_STATE", state); +} + +_public_ int sd_network_link_get_ipv6_address_state(int ifindex, char **state) { + return network_link_get_string(ifindex, "IPV6_ADDRESS_STATE", state); +} + _public_ int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **iaid) { return network_link_get_string(ifindex, "DHCP6_CLIENT_IAID", iaid); } diff --git a/src/systemd/sd-network.h b/src/systemd/sd-network.h index 884dba81b9b..3f4ccf19087 100644 --- a/src/systemd/sd-network.h +++ b/src/systemd/sd-network.h @@ -51,6 +51,8 @@ _SD_BEGIN_DECLARATIONS; 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); /* Get DNS entries for all links. These are string representations of * IP addresses */ @@ -92,8 +94,11 @@ int sd_network_link_get_setup_state(int ifindex, char **state); */ 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); /* Indicates whether the network is relevant to being online. * Possible return codes: -- 2.47.3