network: introduce ipv4ll_update_mac()
This commit is contained in:
parent
5460bde5c5
commit
a3adb4a6a2
|
@ -195,6 +195,36 @@ int ipv4ll_configure(Link *link) {
|
||||||
return 0;
|
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) {
|
int link_serialize_ipv4ll(Link *link, FILE *f) {
|
||||||
struct in_addr address;
|
struct in_addr address;
|
||||||
int r;
|
int r;
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
typedef struct Link Link;
|
typedef struct Link Link;
|
||||||
|
|
||||||
int ipv4ll_configure(Link *link);
|
int ipv4ll_configure(Link *link);
|
||||||
|
int ipv4ll_update_mac(Link *link);
|
||||||
int link_serialize_ipv4ll(Link *link, FILE *f);
|
int link_serialize_ipv4ll(Link *link, FILE *f);
|
||||||
int link_deserialize_ipv4ll(Link *link, const char *ipv4ll_address);
|
int link_deserialize_ipv4ll(Link *link, const char *ipv4ll_address);
|
||||||
|
|
||||||
|
|
|
@ -3035,25 +3035,9 @@ int link_update(Link *link, sd_netlink_message *m) {
|
||||||
mac.ether_addr_octet[4],
|
mac.ether_addr_octet[4],
|
||||||
mac.ether_addr_octet[5]);
|
mac.ether_addr_octet[5]);
|
||||||
|
|
||||||
if (link->ipv4ll) {
|
r = ipv4ll_update_mac(link);
|
||||||
bool restart = sd_ipv4ll_is_running(link->ipv4ll) > 0;
|
if (r < 0)
|
||||||
|
return log_link_warning_errno(link, r, "Could not update MAC address in IPv4LL client: %m");
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (link->dhcp_client) {
|
if (link->dhcp_client) {
|
||||||
r = sd_dhcp_client_set_mac(link->dhcp_client,
|
r = sd_dhcp_client_set_mac(link->dhcp_client,
|
||||||
|
|
Loading…
Reference in a new issue