network: introduce ipv4ll_update_mac()

This commit is contained in:
Yu Watanabe 2020-10-02 20:25:11 +09:00
parent 5460bde5c5
commit a3adb4a6a2
3 changed files with 34 additions and 19 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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,