summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libsystemd-network/sd-ipv4acd.c6
-rw-r--r--src/libsystemd-network/sd-ipv4ll.c2
-rw-r--r--src/libsystemd-network/test-acd.c2
-rw-r--r--src/network/networkd-address.c2
-rw-r--r--src/systemd/sd-ipv4acd.h3
5 files changed, 9 insertions, 6 deletions
diff --git a/src/libsystemd-network/sd-ipv4acd.c b/src/libsystemd-network/sd-ipv4acd.c
index 5a0b6e45dc..d957202a68 100644
--- a/src/libsystemd-network/sd-ipv4acd.c
+++ b/src/libsystemd-network/sd-ipv4acd.c
@@ -441,7 +441,7 @@ int sd_ipv4acd_is_running(sd_ipv4acd *acd) {
return acd->state != IPV4ACD_STATE_INIT;
}
-int sd_ipv4acd_start(sd_ipv4acd *acd) {
+int sd_ipv4acd_start(sd_ipv4acd *acd, bool reset_conflicts) {
int r;
assert_return(acd, -EINVAL);
@@ -458,7 +458,9 @@ int sd_ipv4acd_start(sd_ipv4acd *acd) {
safe_close(acd->fd);
acd->fd = r;
acd->defend_window = 0;
- acd->n_conflict = 0;
+
+ if (reset_conflicts)
+ acd->n_conflict = 0;
r = sd_event_add_io(acd->event, &acd->receive_message_event_source, acd->fd, EPOLLIN, ipv4acd_on_packet, acd);
if (r < 0)
diff --git a/src/libsystemd-network/sd-ipv4ll.c b/src/libsystemd-network/sd-ipv4ll.c
index fa9b4f6039..aa1ece41d2 100644
--- a/src/libsystemd-network/sd-ipv4ll.c
+++ b/src/libsystemd-network/sd-ipv4ll.c
@@ -241,7 +241,7 @@ static int ipv4ll_start_internal(sd_ipv4ll *ll, bool reset_generation) {
picked_address = true;
}
- r = sd_ipv4acd_start(ll->acd);
+ r = sd_ipv4acd_start(ll->acd, reset_generation);
if (r < 0) {
/* We couldn't start? If so, let's forget the picked address again, the user might make a change and
diff --git a/src/libsystemd-network/test-acd.c b/src/libsystemd-network/test-acd.c
index 302eea2c30..27a1a21400 100644
--- a/src/libsystemd-network/test-acd.c
+++ b/src/libsystemd-network/test-acd.c
@@ -47,7 +47,7 @@ static int client_run(int ifindex, const struct in_addr *pa, const struct ether_
log_info("starting IPv4ACD client");
- assert_se(sd_ipv4acd_start(acd) >= 0);
+ assert_se(sd_ipv4acd_start(acd, true) >= 0);
assert_se(sd_event_loop(e) >= 0);
diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c
index 23a970a13f..886a8c0665 100644
--- a/src/network/networkd-address.c
+++ b/src/network/networkd-address.c
@@ -670,7 +670,7 @@ int address_configure(
log_debug("Starting IPv4ACD client. Probing address %s", strna(pretty));
}
- r = sd_ipv4acd_start(address->acd);
+ r = sd_ipv4acd_start(address->acd, true);
if (r < 0)
log_link_warning_errno(link, r, "Failed to start IPv4ACD client, ignoring: %m");
}
diff --git a/src/systemd/sd-ipv4acd.h b/src/systemd/sd-ipv4acd.h
index 039ed3c7f2..ebf723fc22 100644
--- a/src/systemd/sd-ipv4acd.h
+++ b/src/systemd/sd-ipv4acd.h
@@ -20,6 +20,7 @@
#include <net/ethernet.h>
#include <netinet/in.h>
+#include <stdbool.h>
#include "sd-event.h"
@@ -44,7 +45,7 @@ int sd_ipv4acd_set_mac(sd_ipv4acd *acd, const struct ether_addr *addr);
int sd_ipv4acd_set_ifindex(sd_ipv4acd *acd, int interface_index);
int sd_ipv4acd_set_address(sd_ipv4acd *acd, const struct in_addr *address);
int sd_ipv4acd_is_running(sd_ipv4acd *acd);
-int sd_ipv4acd_start(sd_ipv4acd *acd);
+int sd_ipv4acd_start(sd_ipv4acd *acd, bool reset_conflicts);
int sd_ipv4acd_stop(sd_ipv4acd *acd);
sd_ipv4acd *sd_ipv4acd_ref(sd_ipv4acd *acd);
sd_ipv4acd *sd_ipv4acd_unref(sd_ipv4acd *acd);