0001
0002
0003
0004 ALL_TESTS="ping_ipv4 ping_ipv6 flooding"
0005 NUM_NETIFS=6
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 h3_create()
0030 {
0031 simple_if_init $h3 192.0.2.3/24 2001:db8:1::3/64
0032 }
0033
0034 h3_destroy()
0035 {
0036 simple_if_fini $h3 192.0.2.3/24 2001:db8:1::3/64
0037 }
0038
0039 switch_create()
0040 {
0041 ip link add dev br0 type bridge
0042
0043 ip link set dev $swp1 master br0
0044 ip link set dev $swp2 master br0
0045 ip link set dev $swp3 master br0
0046
0047 ip link set dev $swp1 type bridge_slave isolated on
0048 check_err $? "Can't set isolation on port $swp1"
0049 ip link set dev $swp2 type bridge_slave isolated on
0050 check_err $? "Can't set isolation on port $swp2"
0051 ip link set dev $swp3 type bridge_slave isolated off
0052 check_err $? "Can't disable isolation on port $swp3"
0053
0054 ip link set dev br0 up
0055 ip link set dev $swp1 up
0056 ip link set dev $swp2 up
0057 ip link set dev $swp3 up
0058 }
0059
0060 switch_destroy()
0061 {
0062 ip link set dev $swp3 down
0063 ip link set dev $swp2 down
0064 ip link set dev $swp1 down
0065
0066 ip link del dev br0
0067 }
0068
0069 setup_prepare()
0070 {
0071 h1=${NETIFS[p1]}
0072 swp1=${NETIFS[p2]}
0073
0074 swp2=${NETIFS[p3]}
0075 h2=${NETIFS[p4]}
0076
0077 swp3=${NETIFS[p5]}
0078 h3=${NETIFS[p6]}
0079
0080 vrf_prepare
0081
0082 h1_create
0083 h2_create
0084 h3_create
0085
0086 switch_create
0087 }
0088
0089 cleanup()
0090 {
0091 pre_cleanup
0092
0093 switch_destroy
0094
0095 h3_destroy
0096 h2_destroy
0097 h1_destroy
0098
0099 vrf_cleanup
0100 }
0101
0102 ping_ipv4()
0103 {
0104 RET=0
0105 ping_do $h1 192.0.2.2
0106 check_fail $? "Ping worked when it should not have"
0107
0108 RET=0
0109 ping_do $h3 192.0.2.2
0110 check_err $? "Ping didn't work when it should have"
0111
0112 log_test "Isolated port ping"
0113 }
0114
0115 ping_ipv6()
0116 {
0117 RET=0
0118 ping6_do $h1 2001:db8:1::2
0119 check_fail $? "Ping6 worked when it should not have"
0120
0121 RET=0
0122 ping6_do $h3 2001:db8:1::2
0123 check_err $? "Ping6 didn't work when it should have"
0124
0125 log_test "Isolated port ping6"
0126 }
0127
0128 flooding()
0129 {
0130 local mac=de:ad:be:ef:13:37
0131 local ip=192.0.2.100
0132
0133 RET=0
0134 flood_test_do false $mac $ip $h1 $h2
0135 check_err $? "Packet was flooded when it should not have been"
0136
0137 RET=0
0138 flood_test_do true $mac $ip $h3 $h2
0139 check_err $? "Packet was not flooded when it should have been"
0140
0141 log_test "Isolated port flooding"
0142 }
0143
0144 trap cleanup EXIT
0145
0146 setup_prepare
0147 setup_wait
0148
0149 tests_run
0150
0151 exit $EXIT_STATUS