Combine route_cache() and rtalloc_mpath() in new route_mpath().
authorbluhm <bluhm@openbsd.org>
Sun, 31 Mar 2024 15:53:12 +0000 (15:53 +0000)
committerbluhm <bluhm@openbsd.org>
Sun, 31 Mar 2024 15:53:12 +0000 (15:53 +0000)
commiteb7afff9ce312cc3b3f1002a5506045f6bdbf5dc
tree59bd18c62d86a595c1be7b8d1d9436cf87f8765e
parente679c1f37540f33b0f453b541fa1dec5a197c14a
Combine route_cache() and rtalloc_mpath() in new route_mpath().

Fill and check the cache and call rtalloc_mpath() together.  Then
the caller of route_mpath() does not have to care about the uint32_t
*src pointer and just pass struct in_addr.  All the conversions are
done inside the functions.

A previous version of this diff was backed out.  There was an
additional rtisvalid() in rtalloc_mpath() that prevented packet
output via interfaces that were not up.  Now the route in the cache
has to be valid, but after new lookup, rtalloc_mpath() may return
invalid routes.  This generates less errors in userland an preserves
existing behavior.

OK sashan@
sys/net/route.c
sys/net/route.h
sys/netinet/in_pcb.c
sys/netinet6/in6_pcb.c
sys/netinet6/in6_src.c