tech-net archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Applying the inet6 ND state engine to inet4
On 12/07/2020 09:57, Roy Marples wrote:
One of the really nice things about INET6 is Neighbour Discovery. Not really the
on-wire protocol itself, but the state engine it has. The equivalent in ARP is
not quite so nice.
I think it would be a good win to split the ND state engine out of netinet6 and
into net to make it protocol agnostic (which it already is to some extent thanks
the the LLE work done prior).
Why is this a good win? Well, the ARP state relies on the net.inet.arp.keep
timer of 20 minutes where it thinks that once resolved the host *will* be up for
20 minutes. ND on the other hand sets short timers based on the flow of data so
we can readily detect hosts becoming unreachable a lot faster.
$ obj.amd64/arp -an
? (10.73.1.2) at 40:8d:5c:f4:71:34 on re0 1s D
? (10.73.1.1) at 04:18:d6:f0:02:cc on re0 2s R
? (10.73.1.230) at (incomplete) on re0 6s I
? (10.73.1.71) at f8:ad:cb:18:5a:88 on re0 23h56m28s S
? (10.73.1.30) at b4:2e:99:e0:33:f4 on re0 28s R
$
Patch here: https://www.netbsd.org/~roy/netbsd-nd.diff
Passing a named union as an argument unusual, but needed because the llentry has
an anonymous union we need to pass as an argument.
The ugly ARP output is even uglier - but it supplies the new state data.
Some ARP timer settings have been dropped from sysctl as they no longer make
sense. I'm in 2 minds about moving the nd6 ones to a more generic nd and getting
ARP to use them as well, or having ones for ARP as well. The current patch is
sort of the latter but my mind says the former is probably better. Comments
welcome for this.
Whilst going over the code I'm pretty sure that rt_rmx.rmx_expire no longer
needs to be set as it stands without my work, but that may warrant a little more
investigation.
I had a few ups and downs getting the psref stuff to work, so extra eyes on that
would be nice. I think I also plugged an existing hole here we have the ifp of
the llentry, unlock the llentry and then use the ifp without it being locked in
any way or form and then passed to the output functions.
Roy
Home |
Main Index |
Thread Index |
Old Index