Hangbin Liu <[email protected]> wrote: >Unlike IPv4, IPv6 routing strictly requires the source address to be valid >on the outgoing interface. If the NS target is set to a remote VLAN interface, >and the source address is also configured on a VLAN over a bond interface, >setting the oif to the bond device will fail to retrieve the correct >destination route. > >Fix this by not setting the oif to the bond device when retrieving the NS >target destination. This allows the correct destination device (the VLAN >interface) to be determined, so that bond_verify_device_path can return the >proper VLAN tags for sending NS messages. > >Reported-by: David Wilder <[email protected]> >Closes: https://lore.kernel.org/netdev/aGOKggdfjv0cApTO@fedora/ >Suggested-by: Jay Vosburgh <[email protected]> >Fixes: 4e24be018eb9 ("bonding: add new parameter ns_targets") >Signed-off-by: Hangbin Liu <[email protected]>
Acked-by: Jay Vosburgh <[email protected]> >--- > >v2: split the patch into 2 parts, the kernel change and test update (Jay >Vosburgh) > >--- > drivers/net/bonding/bond_main.c | 1 - > 1 file changed, 1 deletion(-) > >diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c >index 257333c88710..30cf97f4e814 100644 >--- a/drivers/net/bonding/bond_main.c >+++ b/drivers/net/bonding/bond_main.c >@@ -3355,7 +3355,6 @@ static void bond_ns_send_all(struct bonding *bond, >struct slave *slave) > /* Find out through which dev should the packet go */ > memset(&fl6, 0, sizeof(struct flowi6)); > fl6.daddr = targets[i]; >- fl6.flowi6_oif = bond->dev->ifindex; > > dst = ip6_route_output(dev_net(bond->dev), NULL, &fl6); > if (dst->error) { >-- >2.50.1 >
