Welcome to 2018 :)
dhcpcd-7.0.0 has been released!
Here's the list of changes from rc4:
- dhcp: when unicasting on L3, unicast on L2 as well
- dhcp: when rebooting, don't set cidaddr
- dhcp6: don't listen on IPv6 addresses when not using DHCPv6
- dhcp: only set probe state when probing (fixes REBOOT reason)
- linux: use IFA_F_NOPREFIXROUTE for IPv4 addresses
- ipv6: disable kernel RA if interface is active
- hooks: set protocol to link for link layer events
dhcpcd-7.0.0-rc4 has been released with the following changes:
- Mark routes as set by RA/DHCP in Linux
- Don't flush prefix routes/routers if kernel does not support RA
- Remove OpenBSD route labels
- dhcp: improve errors around UDP checksum failure
- dhcp: announce existing addresses before rebooting
- bpf: rework loop so that we can close/reopen fd inside and abort
- ipv6nd: don't handle NA/RA for non active interfaces
- dhcp6: listen on all addresses in non master mode
- dhcpcd-run-hooks: set protocol in dhcpcd, don't guess
- Ensure that xid is unique across all interfaces
- dhcp6: redirect message to interface which uses the xid
- bsd: strip scope from LL addresses when detecting their addition
- ipv6nd: fix address lifetime overflow on carrier up
- dhcp6: fix confirmation of lease on carrier up
- eloop: fix signal catching before eloop is started on Linux
I was hoping this would be the final 7.0.0 release, but two of the above fixes were quite invasive. Maybe there will be zero issues at Christmas!
dhcpcd-7.0.0-rc3 has been released with the following noteable changes:
- Fixed handling RA's from multiple routers
- Fixed changing to a better route based on gateway
- IPv6 default route is now deleted when config is not persistent
- Use hmac(3) if available in libc to reduce binary size
Here's the changelog:
- dhcp: fixed classless static routes
- prefix delegation: build routes after assigning addresses
- dhcp: on lease expiration, discover only when carrier
- ip6: fix potential segfault when lifetime overflows
- bsd: compile on recent OpenBSD platforms
- dhcp: fix reporting of DNS encoded SIP servers
- dhcp6: fix unicast in non master mode
All the critical issues people have highighted have now been resolved, so hopefully this is the last rc before release :)
So one of the main features of dhcpcd was the ability to add and remove addresses and subnets in accordance with interface preference and state. This worked very well in Linux, both for IPv4 and IPv6.
When I discovered FreeBSD and then NetBSD making dhcpcd work with the same features provided troublesome. For the IPv4 case, we needed to patch the kernel so that IFA_ROUTE remained sane. For the IPv6 case it was a lot more complicated as parts of the IPv6 stack rely on the kernel processing Router Advertisements instead of a 3rd party tool. Working this out was a lot more time consuming and complicated, but we got there with minimal fuss!
So as of now, dhcpcd can fully replace the NetBSD and Linux in kernel Router Advertisement handling code.
But why was I right after all these years? Because quite a few knowledgeable NetBSD folk assured me that the kernel was fine and it was likely dhcpcd at fault. As it turned out, it really was the kernels fault.