Commit e98e195d authored by Ido Schimmel's avatar Ido Schimmel Committed by Jakub Kicinski

selftests: forwarding: bridge_mdb: Fix failing test with old libnet

As explained in commit 8bcfb4ae ("selftests: forwarding: Fix failing
tests with old libnet"), old versions of libnet (used by mausezahn) do
not use the "SO_BINDTODEVICE" socket option. For IP unicast packets,
this can be solved by prefixing mausezahn invocations with "ip vrf
exec". However, IP multicast packets do not perform routing and simply
egress the bound device, which does not exist in this case.

Fix by specifying the source and destination MAC of the packet which
will cause mausezahn to use a packet socket instead of an IP socket.

Fixes: b6d00da0 ("selftests: forwarding: Add bridge MDB test")
Reported-by: default avatarMirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Closes: https://lore.kernel.org/netdev/adc5e40d-d040-a65e-eb26-edf47dac5b02@alu.unizg.hr/Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
Tested-by: default avatarMirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Reviewed-by: default avatarHangbin Liu <liuhangbin@gmail.com>
Acked-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20230808141503.4060661-16-idosch@nvidia.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 21a72166
...@@ -850,6 +850,7 @@ cfg_test() ...@@ -850,6 +850,7 @@ cfg_test()
__fwd_test_host_ip() __fwd_test_host_ip()
{ {
local grp=$1; shift local grp=$1; shift
local dmac=$1; shift
local src=$1; shift local src=$1; shift
local mode=$1; shift local mode=$1; shift
local name local name
...@@ -872,27 +873,27 @@ __fwd_test_host_ip() ...@@ -872,27 +873,27 @@ __fwd_test_host_ip()
# Packet should only be flooded to multicast router ports when there is # Packet should only be flooded to multicast router ports when there is
# no matching MDB entry. The bridge is not configured as a multicast # no matching MDB entry. The bridge is not configured as a multicast
# router port. # router port.
$MZ $mode $h1.10 -c 1 -p 128 -A $src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $src -B $grp -t udp -q
tc_check_packets "dev br0 ingress" 1 0 tc_check_packets "dev br0 ingress" 1 0
check_err $? "Packet locally received after flood" check_err $? "Packet locally received after flood"
# Install a regular port group entry and expect the packet to not be # Install a regular port group entry and expect the packet to not be
# locally received. # locally received.
bridge mdb add dev br0 port $swp2 grp $grp temp vid 10 bridge mdb add dev br0 port $swp2 grp $grp temp vid 10
$MZ $mode $h1.10 -c 1 -p 128 -A $src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $src -B $grp -t udp -q
tc_check_packets "dev br0 ingress" 1 0 tc_check_packets "dev br0 ingress" 1 0
check_err $? "Packet locally received after installing a regular entry" check_err $? "Packet locally received after installing a regular entry"
# Add a host entry and expect the packet to be locally received. # Add a host entry and expect the packet to be locally received.
bridge mdb add dev br0 port br0 grp $grp temp vid 10 bridge mdb add dev br0 port br0 grp $grp temp vid 10
$MZ $mode $h1.10 -c 1 -p 128 -A $src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $src -B $grp -t udp -q
tc_check_packets "dev br0 ingress" 1 1 tc_check_packets "dev br0 ingress" 1 1
check_err $? "Packet not locally received after adding a host entry" check_err $? "Packet not locally received after adding a host entry"
# Remove the host entry and expect the packet to not be locally # Remove the host entry and expect the packet to not be locally
# received. # received.
bridge mdb del dev br0 port br0 grp $grp vid 10 bridge mdb del dev br0 port br0 grp $grp vid 10
$MZ $mode $h1.10 -c 1 -p 128 -A $src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $src -B $grp -t udp -q
tc_check_packets "dev br0 ingress" 1 1 tc_check_packets "dev br0 ingress" 1 1
check_err $? "Packet locally received after removing a host entry" check_err $? "Packet locally received after removing a host entry"
...@@ -905,8 +906,8 @@ __fwd_test_host_ip() ...@@ -905,8 +906,8 @@ __fwd_test_host_ip()
fwd_test_host_ip() fwd_test_host_ip()
{ {
__fwd_test_host_ip "239.1.1.1" "192.0.2.1" "-4" __fwd_test_host_ip "239.1.1.1" "01:00:5e:01:01:01" "192.0.2.1" "-4"
__fwd_test_host_ip "ff0e::1" "2001:db8:1::1" "-6" __fwd_test_host_ip "ff0e::1" "33:33:00:00:00:01" "2001:db8:1::1" "-6"
} }
fwd_test_host_l2() fwd_test_host_l2()
...@@ -966,6 +967,7 @@ fwd_test_host() ...@@ -966,6 +967,7 @@ fwd_test_host()
__fwd_test_port_ip() __fwd_test_port_ip()
{ {
local grp=$1; shift local grp=$1; shift
local dmac=$1; shift
local valid_src=$1; shift local valid_src=$1; shift
local invalid_src=$1; shift local invalid_src=$1; shift
local mode=$1; shift local mode=$1; shift
...@@ -999,43 +1001,43 @@ __fwd_test_port_ip() ...@@ -999,43 +1001,43 @@ __fwd_test_port_ip()
vlan_ethtype $eth_type vlan_id 10 dst_ip $grp \ vlan_ethtype $eth_type vlan_id 10 dst_ip $grp \
src_ip $invalid_src action drop src_ip $invalid_src action drop
$MZ $mode $h1.10 -c 1 -p 128 -A $valid_src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $valid_src -B $grp -t udp -q
tc_check_packets "dev $h2 ingress" 1 0 tc_check_packets "dev $h2 ingress" 1 0
check_err $? "Packet from valid source received on H2 before adding entry" check_err $? "Packet from valid source received on H2 before adding entry"
$MZ $mode $h1.10 -c 1 -p 128 -A $invalid_src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
tc_check_packets "dev $h2 ingress" 2 0 tc_check_packets "dev $h2 ingress" 2 0
check_err $? "Packet from invalid source received on H2 before adding entry" check_err $? "Packet from invalid source received on H2 before adding entry"
bridge mdb add dev br0 port $swp2 grp $grp vid 10 \ bridge mdb add dev br0 port $swp2 grp $grp vid 10 \
filter_mode $filter_mode source_list $src_list filter_mode $filter_mode source_list $src_list
$MZ $mode $h1.10 -c 1 -p 128 -A $valid_src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $valid_src -B $grp -t udp -q
tc_check_packets "dev $h2 ingress" 1 1 tc_check_packets "dev $h2 ingress" 1 1
check_err $? "Packet from valid source not received on H2 after adding entry" check_err $? "Packet from valid source not received on H2 after adding entry"
$MZ $mode $h1.10 -c 1 -p 128 -A $invalid_src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
tc_check_packets "dev $h2 ingress" 2 0 tc_check_packets "dev $h2 ingress" 2 0
check_err $? "Packet from invalid source received on H2 after adding entry" check_err $? "Packet from invalid source received on H2 after adding entry"
bridge mdb replace dev br0 port $swp2 grp $grp vid 10 \ bridge mdb replace dev br0 port $swp2 grp $grp vid 10 \
filter_mode exclude filter_mode exclude
$MZ $mode $h1.10 -c 1 -p 128 -A $valid_src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $valid_src -B $grp -t udp -q
tc_check_packets "dev $h2 ingress" 1 2 tc_check_packets "dev $h2 ingress" 1 2
check_err $? "Packet from valid source not received on H2 after allowing all sources" check_err $? "Packet from valid source not received on H2 after allowing all sources"
$MZ $mode $h1.10 -c 1 -p 128 -A $invalid_src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
tc_check_packets "dev $h2 ingress" 2 1 tc_check_packets "dev $h2 ingress" 2 1
check_err $? "Packet from invalid source not received on H2 after allowing all sources" check_err $? "Packet from invalid source not received on H2 after allowing all sources"
bridge mdb del dev br0 port $swp2 grp $grp vid 10 bridge mdb del dev br0 port $swp2 grp $grp vid 10
$MZ $mode $h1.10 -c 1 -p 128 -A $valid_src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $valid_src -B $grp -t udp -q
tc_check_packets "dev $h2 ingress" 1 2 tc_check_packets "dev $h2 ingress" 1 2
check_err $? "Packet from valid source received on H2 after deleting entry" check_err $? "Packet from valid source received on H2 after deleting entry"
$MZ $mode $h1.10 -c 1 -p 128 -A $invalid_src -B $grp -t udp -q $MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
tc_check_packets "dev $h2 ingress" 2 1 tc_check_packets "dev $h2 ingress" 2 1
check_err $? "Packet from invalid source received on H2 after deleting entry" check_err $? "Packet from invalid source received on H2 after deleting entry"
...@@ -1047,11 +1049,11 @@ __fwd_test_port_ip() ...@@ -1047,11 +1049,11 @@ __fwd_test_port_ip()
fwd_test_port_ip() fwd_test_port_ip()
{ {
__fwd_test_port_ip "239.1.1.1" "192.0.2.1" "192.0.2.2" "-4" "exclude" __fwd_test_port_ip "239.1.1.1" "01:00:5e:01:01:01" "192.0.2.1" "192.0.2.2" "-4" "exclude"
__fwd_test_port_ip "ff0e::1" "2001:db8:1::1" "2001:db8:1::2" "-6" \ __fwd_test_port_ip "ff0e::1" "33:33:00:00:00:01" "2001:db8:1::1" "2001:db8:1::2" "-6" \
"exclude" "exclude"
__fwd_test_port_ip "239.1.1.1" "192.0.2.1" "192.0.2.2" "-4" "include" __fwd_test_port_ip "239.1.1.1" "01:00:5e:01:01:01" "192.0.2.1" "192.0.2.2" "-4" "include"
__fwd_test_port_ip "ff0e::1" "2001:db8:1::1" "2001:db8:1::2" "-6" \ __fwd_test_port_ip "ff0e::1" "33:33:00:00:00:01" "2001:db8:1::1" "2001:db8:1::2" "-6" \
"include" "include"
} }
...@@ -1127,7 +1129,7 @@ ctrl_igmpv3_is_in_test() ...@@ -1127,7 +1129,7 @@ ctrl_igmpv3_is_in_test()
filter_mode include source_list 192.0.2.1 filter_mode include source_list 192.0.2.1
# IS_IN ( 192.0.2.2 ) # IS_IN ( 192.0.2.2 )
$MZ $h1.10 -c 1 -A 192.0.2.1 -B 239.1.1.1 \ $MZ $h1.10 -c 1 -a own -b 01:00:5e:01:01:01 -A 192.0.2.1 -B 239.1.1.1 \
-t ip proto=2,p=$(igmpv3_is_in_get 239.1.1.1 192.0.2.2) -q -t ip proto=2,p=$(igmpv3_is_in_get 239.1.1.1 192.0.2.2) -q
bridge -d mdb show dev br0 vid 10 | grep 239.1.1.1 | grep -q 192.0.2.2 bridge -d mdb show dev br0 vid 10 | grep 239.1.1.1 | grep -q 192.0.2.2
...@@ -1140,7 +1142,7 @@ ctrl_igmpv3_is_in_test() ...@@ -1140,7 +1142,7 @@ ctrl_igmpv3_is_in_test()
filter_mode include source_list 192.0.2.1 filter_mode include source_list 192.0.2.1
# IS_IN ( 192.0.2.2 ) # IS_IN ( 192.0.2.2 )
$MZ $h1.10 -c 1 -A 192.0.2.1 -B 239.1.1.1 \ $MZ $h1.10 -a own -b 01:00:5e:01:01:01 -c 1 -A 192.0.2.1 -B 239.1.1.1 \
-t ip proto=2,p=$(igmpv3_is_in_get 239.1.1.1 192.0.2.2) -q -t ip proto=2,p=$(igmpv3_is_in_get 239.1.1.1 192.0.2.2) -q
bridge -d mdb show dev br0 vid 10 | grep 239.1.1.1 | grep -v "src" | \ bridge -d mdb show dev br0 vid 10 | grep 239.1.1.1 | grep -v "src" | \
...@@ -1167,7 +1169,7 @@ ctrl_mldv2_is_in_test() ...@@ -1167,7 +1169,7 @@ ctrl_mldv2_is_in_test()
# IS_IN ( 2001:db8:1::2 ) # IS_IN ( 2001:db8:1::2 )
local p=$(mldv2_is_in_get fe80::1 ff0e::1 2001:db8:1::2) local p=$(mldv2_is_in_get fe80::1 ff0e::1 2001:db8:1::2)
$MZ -6 $h1.10 -c 1 -A fe80::1 -B ff0e::1 \ $MZ -6 $h1.10 -a own -b 33:33:00:00:00:01 -c 1 -A fe80::1 -B ff0e::1 \
-t ip hop=1,next=0,p="$p" -q -t ip hop=1,next=0,p="$p" -q
bridge -d mdb show dev br0 vid 10 | grep ff0e::1 | \ bridge -d mdb show dev br0 vid 10 | grep ff0e::1 | \
...@@ -1181,7 +1183,7 @@ ctrl_mldv2_is_in_test() ...@@ -1181,7 +1183,7 @@ ctrl_mldv2_is_in_test()
filter_mode include source_list 2001:db8:1::1 filter_mode include source_list 2001:db8:1::1
# IS_IN ( 2001:db8:1::2 ) # IS_IN ( 2001:db8:1::2 )
$MZ -6 $h1.10 -c 1 -A fe80::1 -B ff0e::1 \ $MZ -6 $h1.10 -a own -b 33:33:00:00:00:01 -c 1 -A fe80::1 -B ff0e::1 \
-t ip hop=1,next=0,p="$p" -q -t ip hop=1,next=0,p="$p" -q
bridge -d mdb show dev br0 vid 10 | grep ff0e::1 | grep -v "src" | \ bridge -d mdb show dev br0 vid 10 | grep ff0e::1 | grep -v "src" | \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment