0001
0002
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
0103
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
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
0127
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