1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4source lib.sh 5 6if ! modprobe -q -n br_netfilter 2>&1; then 7 echo "SKIP: Test needs br_netfilter kernel module" 8 exit $ksft_skip 9fi 10 11cleanup() 12{ 13 cleanup_all_ns 14} 15 16trap cleanup EXIT 17 18setup_ns host vtep router 19 20create_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 26setup_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 40setup_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 75setup_router() 76{ 77 # bring ports up 78 ip -n "$router" link set router-vtep up 79} 80 81setup() 82{ 83 modprobe -q br_netfilter 84 create_topology 85 setup_host 86 setup_vtep 87 setup_router 88} 89 90test_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 99test_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 110do_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 118setup && \ 119echo "Test for VxLAN fragmentation with large MTU in br_netfilter:" && \ 120do_test && echo "PASS!" 121exit $? 122