sd-network: introduce functions for new link and manager states
This commit is contained in:
parent
3cf7a9807e
commit
ac999bf07d
|
@ -18,13 +18,13 @@
|
|||
#include "strv.h"
|
||||
#include "util.h"
|
||||
|
||||
_public_ int sd_network_get_operational_state(char **state) {
|
||||
static int network_get_string(const char *field, char **ret) {
|
||||
_cleanup_free_ char *s = NULL;
|
||||
int r;
|
||||
|
||||
assert_return(state, -EINVAL);
|
||||
assert_return(ret, -EINVAL);
|
||||
|
||||
r = parse_env_file(NULL, "/run/systemd/netif/state", "OPER_STATE", &s);
|
||||
r = parse_env_file(NULL, "/run/systemd/netif/state", field, &s);
|
||||
if (r == -ENOENT)
|
||||
return -ENODATA;
|
||||
if (r < 0)
|
||||
|
@ -32,11 +32,23 @@ _public_ int sd_network_get_operational_state(char **state) {
|
|||
if (isempty(s))
|
||||
return -ENODATA;
|
||||
|
||||
*state = TAKE_PTR(s);
|
||||
*ret = TAKE_PTR(s);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
_public_ int sd_network_get_operational_state(char **state) {
|
||||
return network_get_string("OPER_STATE", state);
|
||||
}
|
||||
|
||||
_public_ int sd_network_get_carrier_state(char **state) {
|
||||
return network_get_string("CARRIER_STATE", state);
|
||||
}
|
||||
|
||||
_public_ int sd_network_get_address_state(char **state) {
|
||||
return network_get_string("ADDRESS_STATE", state);
|
||||
}
|
||||
|
||||
static int network_get_strv(const char *key, char ***ret) {
|
||||
_cleanup_strv_free_ char **a = NULL;
|
||||
_cleanup_free_ char *s = NULL;
|
||||
|
@ -149,6 +161,14 @@ _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_carrier_state(int ifindex, char **state) {
|
||||
return network_link_get_string(ifindex, "CARRIER_STATE", state);
|
||||
}
|
||||
|
||||
_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_required_for_online(int ifindex) {
|
||||
_cleanup_free_ char *s = NULL;
|
||||
int r;
|
||||
|
|
|
@ -3607,7 +3607,7 @@ static void print_link_hashmap(FILE *f, const char *prefix, Hashmap* h) {
|
|||
int link_save(Link *link) {
|
||||
_cleanup_free_ char *temp_path = NULL;
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
const char *admin_state, *oper_state;
|
||||
const char *admin_state, *oper_state, *carrier_state, *address_state;
|
||||
Address *a;
|
||||
Route *route;
|
||||
Iterator i;
|
||||
|
@ -3631,6 +3631,12 @@ int link_save(Link *link) {
|
|||
oper_state = link_operstate_to_string(link->operstate);
|
||||
assert(oper_state);
|
||||
|
||||
carrier_state = link_carrier_state_to_string(link->carrier_state);
|
||||
assert(carrier_state);
|
||||
|
||||
address_state = link_address_state_to_string(link->address_state);
|
||||
assert(address_state);
|
||||
|
||||
r = fopen_temporary(link->state_file, &f, &temp_path);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
@ -3640,8 +3646,10 @@ int link_save(Link *link) {
|
|||
fprintf(f,
|
||||
"# This is private data. Do not parse.\n"
|
||||
"ADMIN_STATE=%s\n"
|
||||
"OPER_STATE=%s\n",
|
||||
admin_state, oper_state);
|
||||
"OPER_STATE=%s\n"
|
||||
"CARRIER_STATE=%s\n"
|
||||
"ADDRESS_STATE=%s\n",
|
||||
admin_state, oper_state, carrier_state, address_state);
|
||||
|
||||
if (link->network) {
|
||||
char **dhcp6_domains = NULL, **dhcp_domains = NULL;
|
||||
|
|
|
@ -1083,7 +1083,7 @@ static int manager_save(Manager *m) {
|
|||
LinkOperationalState operstate = LINK_OPERSTATE_OFF;
|
||||
LinkCarrierState carrier_state = LINK_CARRIER_STATE_OFF;
|
||||
LinkAddressState address_state = LINK_ADDRESS_STATE_OFF;
|
||||
const char *operstate_str;
|
||||
const char *operstate_str, *carrier_state_str, *address_state_str;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
|
@ -1196,6 +1196,12 @@ static int manager_save(Manager *m) {
|
|||
operstate_str = link_operstate_to_string(operstate);
|
||||
assert(operstate_str);
|
||||
|
||||
carrier_state_str = link_carrier_state_to_string(carrier_state);
|
||||
assert(carrier_state_str);
|
||||
|
||||
address_state_str = link_address_state_to_string(address_state);
|
||||
assert(address_state_str);
|
||||
|
||||
r = fopen_temporary(m->state_file, &f, &temp_path);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -1204,7 +1210,10 @@ static int manager_save(Manager *m) {
|
|||
|
||||
fprintf(f,
|
||||
"# This is private data. Do not parse.\n"
|
||||
"OPER_STATE=%s\n", operstate_str);
|
||||
"OPER_STATE=%s\n"
|
||||
"CARRIER_STATE=%s\n"
|
||||
"ADDRESS_STATE=%s\n",
|
||||
operstate_str, carrier_state_str, address_state_str);
|
||||
|
||||
ordered_set_print(f, "DNS=", dns);
|
||||
ordered_set_print(f, "NTP=", ntp);
|
||||
|
|
|
@ -49,6 +49,8 @@ _SD_BEGIN_DECLARATIONS;
|
|||
* -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);
|
||||
|
||||
/* Get DNS entries for all links. These are string representations of
|
||||
* IP addresses */
|
||||
|
@ -90,6 +92,8 @@ 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_carrier_state(int ifindex, char **state);
|
||||
int sd_network_link_get_address_state(int ifindex, char **state);
|
||||
|
||||
/* Indicates whether the network is relevant to being online.
|
||||
* Possible return codes:
|
||||
|
|
Loading…
Reference in New Issue