Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 ALL_TESTS="ping_ipv4 ping_ipv6 learning flooding vlan_deletion extern_learn"
0005 NUM_NETIFS=4
0006 CHECK_TC="yes"
0007 source lib.sh
0008 
0009 h1_create()
0010 {
0011         simple_if_init $h1 192.0.2.1/24 2001:db8:1::1/64
0012 }
0013 
0014 h1_destroy()
0015 {
0016         simple_if_fini $h1 192.0.2.1/24 2001:db8:1::1/64
0017 }
0018 
0019 h2_create()
0020 {
0021         simple_if_init $h2 192.0.2.2/24 2001:db8:1::2/64
0022 }
0023 
0024 h2_destroy()
0025 {
0026         simple_if_fini $h2 192.0.2.2/24 2001:db8:1::2/64
0027 }
0028 
0029 switch_create()
0030 {
0031         ip link add dev br0 type bridge \
0032                 vlan_filtering 1 \
0033                 ageing_time $LOW_AGEING_TIME \
0034                 mcast_snooping 0
0035 
0036         ip link set dev $swp1 master br0
0037         ip link set dev $swp2 master br0
0038 
0039         ip link set dev br0 up
0040         ip link set dev $swp1 up
0041         ip link set dev $swp2 up
0042 }
0043 
0044 switch_destroy()
0045 {
0046         ip link set dev $swp2 down
0047         ip link set dev $swp1 down
0048 
0049         ip link del dev br0
0050 }
0051 
0052 setup_prepare()
0053 {
0054         h1=${NETIFS[p1]}
0055         swp1=${NETIFS[p2]}
0056 
0057         swp2=${NETIFS[p3]}
0058         h2=${NETIFS[p4]}
0059 
0060         vrf_prepare
0061 
0062         h1_create
0063         h2_create
0064 
0065         switch_create
0066 }
0067 
0068 cleanup()
0069 {
0070         pre_cleanup
0071 
0072         switch_destroy
0073 
0074         h2_destroy
0075         h1_destroy
0076 
0077         vrf_cleanup
0078 }
0079 
0080 ping_ipv4()
0081 {
0082         ping_test $h1 192.0.2.2
0083 }
0084 
0085 ping_ipv6()
0086 {
0087         ping6_test $h1 2001:db8:1::2
0088 }
0089 
0090 learning()
0091 {
0092         learning_test "br0" $swp1 $h1 $h2
0093 }
0094 
0095 flooding()
0096 {
0097         flood_test $swp2 $h1 $h2
0098 }
0099 
0100 vlan_deletion()
0101 {
0102         # Test that the deletion of a VLAN on a bridge port does not affect
0103         # the PVID VLAN
0104         log_info "Add and delete a VLAN on bridge port $swp1"
0105 
0106         bridge vlan add vid 10 dev $swp1
0107         bridge vlan del vid 10 dev $swp1
0108 
0109         ping_ipv4
0110         ping_ipv6
0111 }
0112 
0113 extern_learn()
0114 {
0115         local mac=de:ad:be:ef:13:37
0116         local ageing_time
0117 
0118         # Test that externally learned FDB entries can roam, but not age out
0119         RET=0
0120 
0121         bridge fdb add de:ad:be:ef:13:37 dev $swp1 master extern_learn vlan 1
0122 
0123         bridge fdb show brport $swp1 | grep -q de:ad:be:ef:13:37
0124         check_err $? "Did not find FDB entry when should"
0125 
0126         # Wait for 10 seconds after the ageing time to make sure the FDB entry
0127         # was not aged out
0128         ageing_time=$(bridge_ageing_time_get br0)
0129         sleep $((ageing_time + 10))
0130 
0131         bridge fdb show brport $swp1 | grep -q de:ad:be:ef:13:37
0132         check_err $? "FDB entry was aged out when should not"
0133 
0134         $MZ $h2 -c 1 -p 64 -a $mac -t ip -q
0135 
0136         bridge fdb show brport $swp2 | grep -q de:ad:be:ef:13:37
0137         check_err $? "FDB entry did not roam when should"
0138 
0139         log_test "Externally learned FDB entry - ageing & roaming"
0140 
0141         bridge fdb del de:ad:be:ef:13:37 dev $swp2 master vlan 1 &> /dev/null
0142         bridge fdb del de:ad:be:ef:13:37 dev $swp1 master vlan 1 &> /dev/null
0143 }
0144 
0145 trap cleanup EXIT
0146 
0147 setup_prepare
0148 setup_wait
0149 
0150 tests_run
0151 
0152 exit $EXIT_STATUS