Add route generation number to route cache.
authorbluhm <bluhm@openbsd.org>
Wed, 31 Jan 2024 14:56:42 +0000 (14:56 +0000)
committerbluhm <bluhm@openbsd.org>
Wed, 31 Jan 2024 14:56:42 +0000 (14:56 +0000)
commit029c661593e4bba8652393dbb912eaf3b5031eec
tree78854fb6d396184e704374c771e97310fec8abd9
parent3dc61bc4bed21261969a6610a5769348be94854f
Add route generation number to route cache.

The outgoing route is cached at the inpcb.  This cache was only
invalidated when the socket closes or if the route gets invalid.
More specific routes were not detected.  Especially with dynamic
routing protocols, sockets must be closed and reopened to use the
correct route.  Running ping during a route change shows the problem.

To solve this, add a route generation number that is updated whenever
the routing table changes.  The lookup in struct route is put into
the route_cache() function.  If the generation number is too old,
the cached route gets discarded.

Implement route_cache() for ip_output() and ip_forward() first.
IPv6 and more places will follow.

OK claudio@
sys/net/route.c
sys/net/route.h
sys/netinet/ip_input.c
sys/netinet/ip_output.c
sys/netinet6/in6.h