Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 #
0004 # Verify that permanent mdb entries can be added to and deleted from bridge
0005 # interfaces that are down, and works correctly when done so.
0006 
0007 ALL_TESTS="add_del_to_port_down"
0008 NUM_NETIFS=4
0009 
0010 TEST_GROUP="239.10.10.10"
0011 TEST_GROUP_MAC="01:00:5e:0a:0a:0a"
0012 
0013 source lib.sh
0014 
0015 
0016 add_del_to_port_down() {
0017         RET=0
0018 
0019         ip link set dev $swp2 down
0020         bridge mdb add dev br0 port "$swp2" grp $TEST_GROUP permanent 2>/dev/null
0021         check_err $? "Failed adding mdb entry"
0022 
0023         ip link set dev $swp2 up
0024         setup_wait_dev $swp2
0025         mcast_packet_test $TEST_GROUP_MAC 192.0.2.1 $TEST_GROUP $h1 $h2
0026         check_fail $? "Traffic to $TEST_GROUP wasn't forwarded"
0027 
0028         ip link set dev $swp2 down
0029         bridge mdb show dev br0 | grep -q "$TEST_GROUP permanent" 2>/dev/null
0030         check_err $? "MDB entry did not persist after link up/down"
0031 
0032         bridge mdb del dev br0 port "$swp2" grp $TEST_GROUP 2>/dev/null
0033         check_err $? "Failed deleting mdb entry"
0034 
0035         ip link set dev $swp2 up
0036         setup_wait_dev $swp2
0037         mcast_packet_test $TEST_GROUP_MAC 192.0.2.1 $TEST_GROUP $h1 $h2
0038         check_err $? "Traffic to $TEST_GROUP was forwarded after entry removed"
0039 
0040         log_test "MDB add/del entry to port with state down "
0041 }
0042 
0043 h1_create()
0044 {
0045         simple_if_init $h1 192.0.2.1/24 2001:db8:1::1/64
0046 }
0047 
0048 h1_destroy()
0049 {
0050         simple_if_fini $h1 192.0.2.1/24 2001:db8:1::1/64
0051 }
0052 
0053 h2_create()
0054 {
0055         simple_if_init $h2 192.0.2.2/24 2001:db8:1::2/64
0056 }
0057 
0058 h2_destroy()
0059 {
0060         simple_if_fini $h2 192.0.2.2/24 2001:db8:1::2/64
0061 }
0062 
0063 switch_create()
0064 {
0065         # Enable multicast filtering
0066         ip link add dev br0 type bridge mcast_snooping 1 mcast_querier 1
0067 
0068         ip link set dev $swp1 master br0
0069         ip link set dev $swp2 master br0
0070 
0071         ip link set dev br0 up
0072         ip link set dev $swp1 up
0073 
0074         bridge link set dev $swp2 mcast_flood off
0075         # Bridge currently has a "grace time" at creation time before it
0076         # forwards multicast according to the mdb. Since we disable the
0077         # mcast_flood setting per port
0078         sleep 10
0079 }
0080 
0081 switch_destroy()
0082 {
0083         ip link set dev $swp1 down
0084         ip link set dev $swp2 down
0085         ip link del dev br0
0086 }
0087 
0088 setup_prepare()
0089 {
0090         h1=${NETIFS[p1]}
0091         swp1=${NETIFS[p2]}
0092 
0093         swp2=${NETIFS[p3]}
0094         h2=${NETIFS[p4]}
0095 
0096         vrf_prepare
0097 
0098         h1_create
0099         h2_create
0100         switch_create
0101 }
0102 
0103 cleanup()
0104 {
0105         pre_cleanup
0106 
0107         switch_destroy
0108         h1_destroy
0109         h2_destroy
0110 
0111         vrf_cleanup
0112 }
0113 
0114 trap cleanup EXIT
0115 
0116 setup_prepare
0117 tests_run
0118 exit $EXIT_STATUS