Skip to content

Commit bc4d22b

Browse files
aroulinkuba-moo
authored andcommitted
selftests: add regression test for br_netfilter panic
Add a new netfilter selftests to test against br_netfilter panics when VxLAN single-device is used together with untagged traffic and high MTU. Reviewed-by: Petr Machata <[email protected]> Signed-off-by: Andy Roulin <[email protected]> Acked-by: Nikolay Aleksandrov <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent f9ff766 commit bc4d22b

File tree

3 files changed

+124
-0
lines changed

3 files changed

+124
-0
lines changed

tools/testing/selftests/net/netfilter/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ TEST_PROGS += nft_tproxy_tcp.sh
3131
TEST_PROGS += nft_tproxy_udp.sh
3232
TEST_PROGS += nft_zones_many.sh
3333
TEST_PROGS += rpath.sh
34+
TEST_PROGS += vxlan_mtu_frag.sh
3435
TEST_PROGS += xt_string.sh
3536

3637
TEST_PROGS_EXTENDED = nft_concat_range_perf.sh

tools/testing/selftests/net/netfilter/config

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ CONFIG_BRIDGE_EBT_REDIRECT=m
77
CONFIG_BRIDGE_EBT_T_FILTER=m
88
CONFIG_BRIDGE_NETFILTER=m
99
CONFIG_BRIDGE_NF_EBTABLES=m
10+
CONFIG_BRIDGE_VLAN_FILTERING=y
1011
CONFIG_CGROUP_BPF=y
1112
CONFIG_DUMMY=m
1213
CONFIG_INET_ESP=m
@@ -84,6 +85,7 @@ CONFIG_NFT_SYNPROXY=m
8485
CONFIG_NFT_TPROXY=m
8586
CONFIG_VETH=m
8687
CONFIG_VLAN_8021Q=m
88+
CONFIG_VXLAN=m
8789
CONFIG_XFRM_USER=m
8890
CONFIG_XFRM_STATISTICS=y
8991
CONFIG_NET_PKTGEN=m
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
#!/bin/bash
2+
# SPDX-License-Identifier: GPL-2.0
3+
4+
source lib.sh
5+
6+
if ! modprobe -q -n br_netfilter 2>&1; then
7+
echo "SKIP: Test needs br_netfilter kernel module"
8+
exit $ksft_skip
9+
fi
10+
11+
cleanup()
12+
{
13+
cleanup_all_ns
14+
}
15+
16+
trap cleanup EXIT
17+
18+
setup_ns host vtep router
19+
20+
create_topology()
21+
{
22+
ip link add host-eth0 netns "$host" type veth peer name vtep-host netns "$vtep"
23+
ip link add vtep-router netns "$vtep" type veth peer name router-vtep netns "$router"
24+
}
25+
26+
setup_host()
27+
{
28+
# bring ports up
29+
ip -n "$host" addr add 10.0.0.1/24 dev host-eth0
30+
ip -n "$host" link set host-eth0 up
31+
32+
# Add VLAN 10,20
33+
for vid in 10 20; do
34+
ip -n "$host" link add link host-eth0 name host-eth0.$vid type vlan id $vid
35+
ip -n "$host" addr add 10.0.$vid.1/24 dev host-eth0.$vid
36+
ip -n "$host" link set host-eth0.$vid up
37+
done
38+
}
39+
40+
setup_vtep()
41+
{
42+
# create bridge on vtep
43+
ip -n "$vtep" link add name br0 type bridge
44+
ip -n "$vtep" link set br0 type bridge vlan_filtering 1
45+
46+
# VLAN 10 is untagged PVID
47+
ip -n "$vtep" link set dev vtep-host master br0
48+
bridge -n "$vtep" vlan add dev vtep-host vid 10 pvid untagged
49+
50+
# VLAN 20 as other VID
51+
ip -n "$vtep" link set dev vtep-host master br0
52+
bridge -n "$vtep" vlan add dev vtep-host vid 20
53+
54+
# single-vxlan device on vtep
55+
ip -n "$vtep" address add dev vtep-router 60.0.0.1/24
56+
ip -n "$vtep" link add dev vxd type vxlan external \
57+
vnifilter local 60.0.0.1 remote 60.0.0.2 dstport 4789 ttl 64
58+
ip -n "$vtep" link set vxd master br0
59+
60+
# Add VLAN-VNI 1-1 mappings
61+
bridge -n "$vtep" link set dev vxd vlan_tunnel on
62+
for vid in 10 20; do
63+
bridge -n "$vtep" vlan add dev vxd vid $vid
64+
bridge -n "$vtep" vlan add dev vxd vid $vid tunnel_info id $vid
65+
bridge -n "$vtep" vni add dev vxd vni $vid
66+
done
67+
68+
# bring ports up
69+
ip -n "$vtep" link set vxd up
70+
ip -n "$vtep" link set vtep-router up
71+
ip -n "$vtep" link set vtep-host up
72+
ip -n "$vtep" link set dev br0 up
73+
}
74+
75+
setup_router()
76+
{
77+
# bring ports up
78+
ip -n "$router" link set router-vtep up
79+
}
80+
81+
setup()
82+
{
83+
modprobe -q br_netfilter
84+
create_topology
85+
setup_host
86+
setup_vtep
87+
setup_router
88+
}
89+
90+
test_large_mtu_untagged_traffic()
91+
{
92+
ip -n "$vtep" link set vxd mtu 1000
93+
ip -n "$host" neigh add 10.0.0.2 lladdr ca:fe:ba:be:00:01 dev host-eth0
94+
ip netns exec "$host" \
95+
ping -q 10.0.0.2 -I host-eth0 -c 1 -W 0.5 -s2000 > /dev/null 2>&1
96+
return 0
97+
}
98+
99+
test_large_mtu_tagged_traffic()
100+
{
101+
for vid in 10 20; do
102+
ip -n "$vtep" link set vxd mtu 1000
103+
ip -n "$host" neigh add 10.0.$vid.2 lladdr ca:fe:ba:be:00:01 dev host-eth0.$vid
104+
ip netns exec "$host" \
105+
ping -q 10.0.$vid.2 -I host-eth0.$vid -c 1 -W 0.5 -s2000 > /dev/null 2>&1
106+
done
107+
return 0
108+
}
109+
110+
do_test()
111+
{
112+
# Frames will be dropped so ping will not succeed
113+
# If it doesn't panic, it passes
114+
test_large_mtu_tagged_traffic
115+
test_large_mtu_untagged_traffic
116+
}
117+
118+
setup && \
119+
echo "Test for VxLAN fragmentation with large MTU in br_netfilter:" && \
120+
do_test && echo "PASS!"
121+
exit $?

0 commit comments

Comments
 (0)