From: Yu Watanabe Date: Fri, 2 Oct 2020 11:25:11 +0000 (+0900) Subject: network: introduce ipv4ll_update_mac() X-Git-Tag: v247-rc1~117^2~22 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a3adb4a6a29bb3a427faabb93751075e36e33c05;p=thirdparty%2Fsystemd.git network: introduce ipv4ll_update_mac() --- diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c index d7e4f7b233b..706393b2f2a 100644 --- a/src/network/networkd-ipv4ll.c +++ b/src/network/networkd-ipv4ll.c @@ -195,6 +195,36 @@ int ipv4ll_configure(Link *link) { return 0; } +int ipv4ll_update_mac(Link *link) { + bool restart; + int r; + + assert(link); + + if (!link->ipv4ll) + return 0; + + restart = sd_ipv4ll_is_running(link->ipv4ll) > 0; + + if (restart) { + r = sd_ipv4ll_stop(link->ipv4ll); + if (r < 0) + return r; + } + + r = sd_ipv4ll_set_mac(link->ipv4ll, &link->mac); + if (r < 0) + return r; + + if (restart) { + r = sd_ipv4ll_start(link->ipv4ll); + if (r < 0) + return r; + } + + return 0; +} + int link_serialize_ipv4ll(Link *link, FILE *f) { struct in_addr address; int r; diff --git a/src/network/networkd-ipv4ll.h b/src/network/networkd-ipv4ll.h index 82f67bc1e29..4833e304b6c 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 ipv4ll_update_mac(Link *link); int link_serialize_ipv4ll(Link *link, FILE *f); int link_deserialize_ipv4ll(Link *link, const char *ipv4ll_address); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 864ad1d132b..5682a1447b6 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3035,25 +3035,9 @@ int link_update(Link *link, sd_netlink_message *m) { mac.ether_addr_octet[4], mac.ether_addr_octet[5]); - if (link->ipv4ll) { - bool restart = sd_ipv4ll_is_running(link->ipv4ll) > 0; - - if (restart) { - r = sd_ipv4ll_stop(link->ipv4ll); - if (r < 0) - return log_link_warning_errno(link, r, "Could not stop IPv4LL client: %m"); - } - - r = sd_ipv4ll_set_mac(link->ipv4ll, &link->mac); - if (r < 0) - return log_link_warning_errno(link, r, "Could not update MAC address in IPv4LL client: %m"); - - if (restart) { - r = sd_ipv4ll_start(link->ipv4ll); - if (r < 0) - return log_link_warning_errno(link, r, "Could not restart IPv4LL client: %m"); - } - } + r = ipv4ll_update_mac(link); + if (r < 0) + return log_link_warning_errno(link, r, "Could not update MAC address in IPv4LL client: %m"); if (link->dhcp_client) { r = sd_dhcp_client_set_mac(link->dhcp_client,