dhcpcd-discuss

IPV4LL and EXPIRE

David Hauck

Fri Oct 17 02:28:51 2014

Hi Roy,

I wanted to run through a quick search of the mailing list but your domain seems to be down (??). I wonder if you might be able to comment on a new DHCPCD test I've been trying to run/configure. It's pretty basic ;).

I've configured a 20s timeout along with ipv4ll and am testing various scenarios where the connected DHCP server is offline/online. I simulate this online/offline behaviour by plugging in one of two interface cables to the configured DHCP interface. One cable (C1) connects directly to a standalone node (Windows PC - no DHCP server running) and the other cable (C2) connects to a LAN ( where a DHCP server is reachable).

When C1 is connected and I bring up the interface I see an expected timeout and fallback via IPV4LL:

# ifup eth1
dhcpcd[30900]: version 6.1.0 starting
dhcpcd[30900]: eth1: waiting for carrier
dhcpcd[30900]: eth1: carrier acquired
dhcpcd[30900]: eth1: soliciting a DHCP lease
dhcpcd[30900]: timed out
dhcpcd[30900]: allowing 8 seconds for IPv4LL timeout
dhcpcd[30900]: eth1: probing for an IPv4LL address
dhcpcd[30900]: eth1: using IPv4LL address 169.254.37.21
dhcpcd[30900]: eth1: adding host route to 169.254.37.21 via 127.0.0.1
dhcpcd[30900]: eth1: adding route to 169.254.0.0/16
dhcpcd[30900]: forked to background, child pid 30969

When I disconnect C1 and then connect C2 I see the following in the system log:

20141016 16:24:48.215 info daemon(dhcpcd):eth1: carrier lost
20141016 16:24:48.224 info daemon(dhcpcd):eth1: deleting host route to 169.254.37.21 via 127.0.0.1
20141016 16:24:48.224 info daemon(dhcpcd):eth1: deleting route to 169.254.0.0/16
20141016 16:24:48.236 info daemon(dhcpcd):eth1: 60-netacquire: received reason=NOCARRIER, beeppid=0, ip=, sn=, gw=, dns=, options=, hn=
20141016 16:24:53.488 info daemon(dhcpcd):eth1: carrier acquired
20141016 16:24:53.504 info daemon(dhcpcd):eth1: 60-netacquire: received reason=CARRIER, beeppid=30986, ip=, sn=, gw=, dns=, options=, hn=
20141016 16:24:58.628 info daemon(dhcpcd):eth1: using IPv4LL address 169.254.37.21
20141016 16:24:58.628 info daemon(dhcpcd):eth1: adding host route to 169.254.37.21 via 127.0.0.1
20141016 16:24:58.628 info daemon(dhcpcd):eth1: adding route to 169.254.0.0/16
20141016 16:24:58.644 info daemon(dhcpcd):eth1: 60-netacquire: received reason=IPV4LL, beeppid=30986, ip=169.254.37.21, sn=255.255.0.0, gw=, dns=, options=, hn=
20141016 16:25:00.655 info daemon(dhcpcd):eth1: deleting host route to 169.254.37.21 via 127.0.0.1
20141016 16:25:00.655 info daemon(dhcpcd):eth1: deleting route to 169.254.0.0/16
20141016 16:25:00.667 info daemon(dhcpcd):eth1: 60-netacquire: received reason=EXPIRE, beeppid=0, ip=, sn=, gw=, dns=, options=, hn=
20141016 16:25:01.673 info daemon(dhcpcd):eth1: probing for an IPv4LL address
20141016 16:25:06.529 info daemon(dhcpcd):eth1: using IPv4LL address 169.254.183.168
20141016 16:25:06.529 info daemon(dhcpcd):eth1: adding host route to 169.254.183.168 via 127.0.0.1
20141016 16:25:06.529 info daemon(dhcpcd):eth1: adding route to 169.254.0.0/16
20141016 16:25:06.544 info daemon(dhcpcd):eth1: 60-netacquire: received reason=IPV4LL, beeppid=31033, ip=169.254.183.168, sn=255.255.0.0, gw=, dns=, options=, hn=
20141016 16:25:06.554 info daemon(dhcpcd):eth1: deleting host route to 169.254.183.168 via 127.0.0.1
20141016 16:25:06.554 info daemon(dhcpcd):eth1: deleting route to 169.254.0.0/16
20141016 16:25:06.566 info daemon(dhcpcd):eth1: 60-netacquire: received reason=EXPIRE, beeppid=0, ip=, sn=, gw=, dns=, options=, hn=
20141016 16:25:07.572 info daemon(dhcpcd):eth1: probing for an IPv4LL address
20141016 16:25:12.335 info daemon(dhcpcd):eth1: using IPv4LL address 169.254.141.18
20141016 16:25:12.335 info daemon(dhcpcd):eth1: adding host route to 169.254.141.18 via 127.0.0.1
20141016 16:25:12.348 info daemon(dhcpcd):eth1: adding route to 169.254.0.0/16
20141016 16:25:12.365 info daemon(dhcpcd):eth1: 60-netacquire: received reason=IPV4LL, beeppid=31068, ip=169.254.141.18, sn=255.255.0.0, gw=, dns=, options=, hn=
20141016 16:25:14.376 info daemon(dhcpcd):eth1: deleting host route to 169.254.1
41.18 via 127.0.0.1
20141016 16:25:14.376 info daemon(dhcpcd):eth1: deleting route to 169.254.0.0/16
20141016 16:25:14.388 info daemon(dhcpcd):eth1: 60-netacquire: received reason=EXPIRE, beeppid=0, ip=, sn=, gw=, dns=, options=, hn=
20141016 16:25:15.394 info daemon(dhcpcd):eth1: probing for an IPv4LL address
20141016 16:25:20.411 info daemon(dhcpcd):eth1: using IPv4LL address 169.254.10.96
20141016 16:25:20.411 info daemon(dhcpcd):eth1: adding host route to 169.254.10.96 via 127.0.0.1
20141016 16:25:20.411 info daemon(dhcpcd):eth1: adding route to 169.254.0.0/16
20141016 16:25:20.426 info daemon(dhcpcd):eth1: 60-netacquire: received reason=IPV4LL, beeppid=31105, ip=169.254.10.96, sn=255.255.0.0, gw=, dns=, options=, hn=

The '60-netacquire' lines are simple echoes I've done from a custom hook script. The key thing to note here is that the DHCPCD state machine seems to be cycling between EXPIRE and IPV4LL (and each IPV4LL has a new address).

I believe there is ample (intricate?) guidance on several aspects of this (RFC 3927 and RFC 4436) but I'm not familiar enough with these and DHCPCD to know how to interpret these results. At a high level it seems that the DHCP state machine should revert to attempting to contact the DHCP server after C1 is disconnected and then C2 is connected (since the DHCP server is reachable once C2 is connected). Why isn't this happening?

If I bring down the interface (with C2 connected) and then bring it up again a proper lease is provided:

dhcpcd[6119]: version 6.1.0 starting
dhcpcd[6119]: eth1: waiting for carrier
dhcpcd[6119]: eth1: carrier acquired
dhcpcd[6119]: eth1: soliciting a DHCP lease
dhcpcd[6119]: eth1: offered 205.159.216.180 from 205.159.216.146
dhcpcd[6119]: eth1: leased 205.159.216.180 for 28800 seconds
dhcpcd[6119]: eth1: adding host route to 205.159.216.180 via 127.0.0.1
dhcpcd[6119]: eth1: adding route to 205.159.216.128/25
dhcpcd[6119]: eth1: adding default route via 205.159.216.130
dhcpcd[6119]: forked to background, child pid 6191

Thanks,
-David

Follow-Ups:
Re: IPV4LL and EXPIRERoy Marples
Archive administrator: postmaster@marples.name