IPv6 address selection is currently messed up for several use cases such as unnumbered deployments with global addresses on the VRF device and none on the enslaved devices.
Update the source address selection to consider the real output route as opposed to the VRF route that sends packets to the VRF device first (ie., implement get_saddr6 similar to the IPv4 method) and update the IPv6 address selection to consider L3 domains and preference for addresses on the VRF device). David Ahern (3): net: ipv6: Move ip6_route_get_saddr to inline net: vrf: Implement get_saddr for IPv6 net: ipv6: Address selection needs to consider L3 domains drivers/net/vrf.c | 41 +++++++++++++++++++++++++++++++++++++++++ include/net/ip6_route.h | 21 ++++++++++++++++++--- include/net/l3mdev.h | 42 ++++++++++++++++++++++++++++++++++++++++++ net/ipv6/addrconf.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ net/ipv6/ip6_output.c | 12 ++++++++++-- net/ipv6/route.c | 17 ----------------- net/l3mdev/l3mdev.c | 24 ++++++++++++++++++++++++ 7 files changed, 183 insertions(+), 22 deletions(-) -- 2.1.4