diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c index ca59c86a7b..d7e4f7b233 100644 --- a/src/network/networkd-ipv4ll.c +++ b/src/network/networkd-ipv4ll.c @@ -195,6 +195,28 @@ int ipv4ll_configure(Link *link) { return 0; } +int link_serialize_ipv4ll(Link *link, FILE *f) { + struct in_addr address; + int r; + + assert(link); + + if (!link->ipv4ll) + return 0; + + r = sd_ipv4ll_get_address(link->ipv4ll, &address); + if (r == -ENOENT) + return 0; + if (r < 0) + return r; + + fputs("IPV4LL_ADDRESS=", f); + serialize_in_addrs(f, &address, 1, false, NULL); + fputc('\n', f); + + return 0; +} + int link_deserialize_ipv4ll(Link *link, const char *ipv4ll_address) { union in_addr_union address; int r; diff --git a/src/network/networkd-ipv4ll.h b/src/network/networkd-ipv4ll.h index 0d2cec84c6..82f67bc1e2 100644 --- a/src/network/networkd-ipv4ll.h +++ b/src/network/networkd-ipv4ll.h @@ -8,6 +8,7 @@ typedef struct Link Link; int ipv4ll_configure(Link *link); +int link_serialize_ipv4ll(Link *link, FILE *f); int link_deserialize_ipv4ll(Link *link, const char *ipv4ll_address); CONFIG_PARSER_PROTOTYPE(config_parse_ipv4ll); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 98bd4e80d5..db01654699 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3511,16 +3511,9 @@ int link_save(Link *link) { } else (void) unlink(link->lease_file); - if (link->ipv4ll) { - struct in_addr address; - - r = sd_ipv4ll_get_address(link->ipv4ll, &address); - if (r >= 0) { - fputs("IPV4LL_ADDRESS=", f); - serialize_in_addrs(f, &address, 1, false, NULL); - fputc('\n', f); - } - } + r = link_serialize_ipv4ll(link, f); + if (r < 0) + goto fail; if (link->dhcp6_client) { _cleanup_free_ char *duid = NULL;