From: Yu Watanabe Date: Sun, 20 Jun 2021 17:29:46 +0000 (+0900) Subject: sd-ipv4acd: allow to change MAC address without restarting sd-ipv4acd X-Git-Tag: v249-rc3~17^2~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fcb7345950beb1f21237df93e1e288c3e222493e;p=thirdparty%2Fsystemd.git sd-ipv4acd: allow to change MAC address without restarting sd-ipv4acd This also makes sd_ipv4acd_set_mac() refuses null MAC address. --- diff --git a/src/libsystemd-network/sd-ipv4acd.c b/src/libsystemd-network/sd-ipv4acd.c index ee4f215002d..d763ba8e62e 100644 --- a/src/libsystemd-network/sd-ipv4acd.c +++ b/src/libsystemd-network/sd-ipv4acd.c @@ -432,12 +432,24 @@ const char *sd_ipv4acd_get_ifname(sd_ipv4acd *acd) { } int sd_ipv4acd_set_mac(sd_ipv4acd *acd, const struct ether_addr *addr) { + int r; + assert_return(acd, -EINVAL); assert_return(addr, -EINVAL); - assert_return(acd->state == IPV4ACD_STATE_INIT, -EBUSY); + assert_return(!ether_addr_is_null(addr), -EINVAL); acd->mac_addr = *addr; + if (!sd_ipv4acd_is_running(acd)) + return 0; + + assert(acd->fd >= 0); + r = arp_update_filter(acd->fd, &acd->address, &acd->mac_addr); + if (r < 0) { + ipv4acd_reset(acd); + return r; + } + return 0; }