Hangbin Liu <liuhang...@gmail.com> 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 <wil...@us.ibm.com> >Closes: https://lore.kernel.org/netdev/aGOKggdfjv0cApTO@fedora/ >Suggested-by: Jay Vosburgh <j...@jvosburgh.net> >Fixes: 4e24be018eb9 ("bonding: add new parameter ns_targets")
Does the test update part of this patch apply all the way back to the oldest longterm kernel after 4e24be018eb9? I think that's 6.1 right now. Generically, I'm wondering if test updates should be separate patches from the functional changes as a general policy. -J >Signed-off-by: Hangbin Liu <liuhang...@gmail.com> >--- > drivers/net/bonding/bond_main.c | 1 - > .../drivers/net/bonding/bond_options.sh | 59 +++++++++++++++++++ > 2 files changed, 59 insertions(+), 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) { >diff --git a/tools/testing/selftests/drivers/net/bonding/bond_options.sh >b/tools/testing/selftests/drivers/net/bonding/bond_options.sh >index 7bc148889ca7..b3eb8a919c71 100755 >--- a/tools/testing/selftests/drivers/net/bonding/bond_options.sh >+++ b/tools/testing/selftests/drivers/net/bonding/bond_options.sh >@@ -7,6 +7,7 @@ ALL_TESTS=" > prio > arp_validate > num_grat_arp >+ vlan_over_bond > " > > lib_dir=$(dirname "$0") >@@ -376,6 +377,64 @@ num_grat_arp() > done > } > >+vlan_over_bond_arp() >+{ >+ local mode="$1" >+ RET=0 >+ >+ bond_reset "mode $mode arp_interval 100 arp_ip_target 192.0.3.10" >+ ip -n "${s_ns}" link add bond0.3 link bond0 type vlan id 3 >+ ip -n "${s_ns}" link set bond0.3 up >+ ip -n "${s_ns}" addr add 192.0.3.1/24 dev bond0.3 >+ ip -n "${s_ns}" addr add 2001:db8::3:1/64 dev bond0.3 >+ >+ slowwait_for_counter 5 5 tc_rule_handle_stats_get \ >+ "dev eth0.3 ingress" 101 ".packets" "-n ${c_ns}" || RET=1 >+ log_test "vlan over bond arp" "$mode" >+} >+ >+vlan_over_bond_ns() >+{ >+ local mode="$1" >+ RET=0 >+ >+ if skip_ns; then >+ log_test_skip "vlan_over_bond ns" "$mode" >+ return 0 >+ fi >+ >+ bond_reset "mode $mode arp_interval 100 ns_ip6_target 2001:db8::3:10" >+ ip -n "${s_ns}" link add bond0.3 link bond0 type vlan id 3 >+ ip -n "${s_ns}" link set bond0.3 up >+ ip -n "${s_ns}" addr add 192.0.3.1/24 dev bond0.3 >+ ip -n "${s_ns}" addr add 2001:db8::3:1/64 dev bond0.3 >+ >+ slowwait_for_counter 5 5 tc_rule_handle_stats_get \ >+ "dev eth0.3 ingress" 102 ".packets" "-n ${c_ns}" || RET=1 >+ log_test "vlan over bond ns" "$mode" >+} >+ >+vlan_over_bond() >+{ >+ # add vlan 3 for client >+ ip -n "${c_ns}" link add eth0.3 link eth0 type vlan id 3 >+ ip -n "${c_ns}" link set eth0.3 up >+ ip -n "${c_ns}" addr add 192.0.3.10/24 dev eth0.3 >+ ip -n "${c_ns}" addr add 2001:db8::3:10/64 dev eth0.3 >+ >+ # Add tc rule to check the vlan pkts >+ tc -n "${c_ns}" qdisc add dev eth0.3 clsact >+ tc -n "${c_ns}" filter add dev eth0.3 ingress protocol arp \ >+ handle 101 flower skip_hw arp_op request \ >+ arp_sip 192.0.3.1 arp_tip 192.0.3.10 action pass >+ tc -n "${c_ns}" filter add dev eth0.3 ingress protocol ipv6 \ >+ handle 102 flower skip_hw ip_proto icmpv6 \ >+ type 135 src_ip 2001:db8::3:1 action pass >+ >+ vlan_over_bond_arp "active-backup" >+ vlan_over_bond_ns "active-backup" >+} >+ > trap cleanup EXIT > > setup_prepare >-- >2.50.1 > --- -Jay Vosburgh, j...@jvosburgh.net