Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

As explained in commit 8bcfb4ae4d97 ("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: 8c33266ae26a ("selftests: forwarding: Add layer 2 miss test cases")
Reported-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Closes: https://lore.kernel.org/netdev/adc5e40d-d040-a65e-eb26-edf47dac5b02@alu.unizg.hr/
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Tested-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20230808141503.4060661-15-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Ido Schimmel and committed by
Jakub Kicinski
21a72166 11604178

+8 -5
+8 -5
tools/testing/selftests/net/forwarding/tc_flower_l2_miss.sh
··· 127 127 local proto=$1; shift 128 128 local sip=$1; shift 129 129 local dip=$1; shift 130 + local dmac=$1; shift 130 131 local mode=$1; shift 131 132 local name=$1; shift 132 133 ··· 143 142 action pass 144 143 145 144 # Before adding MDB entry. 146 - $MZ $mode $h1 -t ip -A $sip -B $dip -c 1 -p 100 -q 145 + $MZ $mode $h1 -a own -b $dmac -t ip -A $sip -B $dip -c 1 -p 100 -q 147 146 148 147 tc_check_packets "dev $swp2 egress" 101 1 149 148 check_err $? "Unregistered multicast filter was not hit before adding MDB entry" ··· 154 153 # Adding MDB entry. 155 154 bridge mdb replace dev br1 port $swp2 grp $dip permanent 156 155 157 - $MZ $mode $h1 -t ip -A $sip -B $dip -c 1 -p 100 -q 156 + $MZ $mode $h1 -a own -b $dmac -t ip -A $sip -B $dip -c 1 -p 100 -q 158 157 159 158 tc_check_packets "dev $swp2 egress" 101 1 160 159 check_err $? "Unregistered multicast filter was hit after adding MDB entry" ··· 165 164 # Deleting MDB entry. 166 165 bridge mdb del dev br1 port $swp2 grp $dip 167 166 168 - $MZ $mode $h1 -t ip -A $sip -B $dip -c 1 -p 100 -q 167 + $MZ $mode $h1 -a own -b $dmac -t ip -A $sip -B $dip -c 1 -p 100 -q 169 168 170 169 tc_check_packets "dev $swp2 egress" 101 2 171 170 check_err $? "Unregistered multicast filter was not hit after deleting MDB entry" ··· 184 183 local proto="ipv4" 185 184 local sip=192.0.2.1 186 185 local dip=239.1.1.1 186 + local dmac=01:00:5e:01:01:01 187 187 local mode="-4" 188 188 local name="IPv4" 189 189 190 - test_l2_miss_multicast_common $proto $sip $dip $mode $name 190 + test_l2_miss_multicast_common $proto $sip $dip $dmac $mode $name 191 191 } 192 192 193 193 test_l2_miss_multicast_ipv6() ··· 196 194 local proto="ipv6" 197 195 local sip=2001:db8:1::1 198 196 local dip=ff0e::1 197 + local dmac=33:33:00:00:00:01 199 198 local mode="-6" 200 199 local name="IPv6" 201 200 202 - test_l2_miss_multicast_common $proto $sip $dip $mode $name 201 + test_l2_miss_multicast_common $proto $sip $dip $dmac $mode $name 203 202 } 204 203 205 204 test_l2_miss_multicast()