From: LetzteInstanz Date: Mon, 12 Apr 2021 10:50:32 +0000 (+0300) Subject: sd-network: read IPv4/IPv6 address states from state files X-Git-Tag: v249-rc1~420^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bbea881312e2635c53aae99d2f816b448bc9504e;p=thirdparty%2Fsystemd.git sd-network: read IPv4/IPv6 address states from state files --- 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: