network: introduce link_serialize_addresses()

This commit is contained in:
Yu Watanabe 2020-10-02 11:40:37 +09:00
parent 32400c2ff0
commit 3b31e2b718
3 changed files with 25 additions and 14 deletions

View file

@ -1217,6 +1217,27 @@ int manager_rtnl_process_address(sd_netlink *rtnl, sd_netlink_message *message,
return 1;
}
int link_serialize_addresses(Link *link, FILE *f) {
bool space = false;
Address *a;
assert(link);
fputs("ADDRESSES=", f);
SET_FOREACH(a, link->addresses) {
_cleanup_free_ char *address_str = NULL;
if (in_addr_to_string(a->family, &a->in_addr, &address_str) < 0)
continue;
fprintf(f, "%s%s/%u", space ? " " : "", address_str, a->prefixlen);
space = true;
}
fputc('\n', f);
return 0;
}
static void static_address_on_acd(sd_ipv4acd *acd, int event, void *userdata) {
_cleanup_free_ char *pretty = NULL;
Address *address;

View file

@ -77,6 +77,7 @@ DEFINE_NETWORK_SECTION_FUNCTIONS(Address, address_free);
int link_set_addresses(Link *link);
int link_drop_addresses(Link *link);
int link_drop_foreign_addresses(Link *link);
int link_serialize_addresses(Link *link, FILE *f);
int manager_rtnl_process_address(sd_netlink *nl, sd_netlink_message *message, Manager *m);

View file

@ -3707,7 +3707,6 @@ int link_save(Link *link) {
const char *admin_state, *oper_state, *carrier_state, *address_state;
_cleanup_free_ char *temp_path = NULL;
_cleanup_fclose_ FILE *f = NULL;
Address *a;
int r;
assert(link);
@ -3925,19 +3924,9 @@ int link_save(Link *link) {
/************************************************************/
fputs("ADDRESSES=", f);
space = false;
SET_FOREACH(a, link->addresses) {
_cleanup_free_ char *address_str = NULL;
r = in_addr_to_string(a->family, &a->in_addr, &address_str);
if (r < 0)
goto fail;
fprintf(f, "%s%s/%u", space ? " " : "", address_str, a->prefixlen);
space = true;
}
fputc('\n', f);
r = link_serialize_addresses(link, f);
if (r < 0)
goto fail;
/************************************************************/