mirror of
https://github.com/systemd/systemd.git
synced 2024-12-22 17:35:35 +03:00
libsystemd-network: sd-ipv4ll: acquire new address after claimed address conflict
If a conflict occurs on a claimed ipv4ll address, the device releases the address and then does not attempt to acquire a new ipv4ll address. According to RFC3927, releasing the address in this situation is correct. However, this should be followed by an attempt to configure a new ipv4ll address. This commit restarts the ipv4ll address acquisition state machine after releasing the conflicting address. From RFC3927 Section 2.5 conflict defense method (b): ... However, if this is not the first conflicting ARP packet the host has seen, and the time recorded for the previous conflicting ARP packet is recent, within DEFEND_INTERVAL seconds, then the host MUST immediately cease using this address and configure a new IPv4 Link-Local address as described above. ... Signed-off-by: Jason Reeder <jasonreeder@gmail.com>
This commit is contained in:
parent
5e25a13a05
commit
0698ff4184
@ -179,12 +179,22 @@ static void ipv4ll_handler(sd_ipv4ll *ll, int event, void *userdata) {
|
||||
|
||||
switch(event) {
|
||||
case SD_IPV4LL_EVENT_STOP:
|
||||
r = ipv4ll_address_lost(link);
|
||||
if (r < 0) {
|
||||
link_enter_failed(link);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case SD_IPV4LL_EVENT_CONFLICT:
|
||||
r = ipv4ll_address_lost(link);
|
||||
if (r < 0) {
|
||||
link_enter_failed(link);
|
||||
return;
|
||||
}
|
||||
|
||||
r = sd_ipv4ll_restart(ll);
|
||||
if (r < 0)
|
||||
log_link_warning(link, "Could not acquire IPv4 link-local address");
|
||||
break;
|
||||
case SD_IPV4LL_EVENT_BIND:
|
||||
r = ipv4ll_address_claimed(ll, link);
|
||||
|
Loading…
Reference in New Issue
Block a user