hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
 
ALL_TESTS="ping_ipv4 ping_ipv6 learning flooding vlan_deletion extern_learn"
NUM_NETIFS=4
CHECK_TC="yes"
source lib.sh
 
h1_create()
{
   simple_if_init $h1 192.0.2.1/24 2001:db8:1::1/64
}
 
h1_destroy()
{
   simple_if_fini $h1 192.0.2.1/24 2001:db8:1::1/64
}
 
h2_create()
{
   simple_if_init $h2 192.0.2.2/24 2001:db8:1::2/64
}
 
h2_destroy()
{
   simple_if_fini $h2 192.0.2.2/24 2001:db8:1::2/64
}
 
switch_create()
{
   # 10 Seconds ageing time.
   ip link add dev br0 type bridge vlan_filtering 1 ageing_time 1000 \
       mcast_snooping 0
 
   ip link set dev $swp1 master br0
   ip link set dev $swp2 master br0
 
   ip link set dev br0 up
   ip link set dev $swp1 up
   ip link set dev $swp2 up
}
 
switch_destroy()
{
   ip link set dev $swp2 down
   ip link set dev $swp1 down
 
   ip link del dev br0
}
 
setup_prepare()
{
   h1=${NETIFS[p1]}
   swp1=${NETIFS[p2]}
 
   swp2=${NETIFS[p3]}
   h2=${NETIFS[p4]}
 
   vrf_prepare
 
   h1_create
   h2_create
 
   switch_create
}
 
cleanup()
{
   pre_cleanup
 
   switch_destroy
 
   h2_destroy
   h1_destroy
 
   vrf_cleanup
}
 
ping_ipv4()
{
   ping_test $h1 192.0.2.2
}
 
ping_ipv6()
{
   ping6_test $h1 2001:db8:1::2
}
 
learning()
{
   learning_test "br0" $swp1 $h1 $h2
}
 
flooding()
{
   flood_test $swp2 $h1 $h2
}
 
vlan_deletion()
{
   # Test that the deletion of a VLAN on a bridge port does not affect
   # the PVID VLAN
   log_info "Add and delete a VLAN on bridge port $swp1"
 
   bridge vlan add vid 10 dev $swp1
   bridge vlan del vid 10 dev $swp1
 
   ping_ipv4
   ping_ipv6
}
 
extern_learn()
{
   local mac=de:ad:be:ef:13:37
   local ageing_time
 
   # Test that externally learned FDB entries can roam, but not age out
   RET=0
 
   bridge fdb add de:ad:be:ef:13:37 dev $swp1 master extern_learn vlan 1
 
   bridge fdb show brport $swp1 | grep -q de:ad:be:ef:13:37
   check_err $? "Did not find FDB entry when should"
 
   # Wait for 10 seconds after the ageing time to make sure the FDB entry
   # was not aged out
   ageing_time=$(bridge_ageing_time_get br0)
   sleep $((ageing_time + 10))
 
   bridge fdb show brport $swp1 | grep -q de:ad:be:ef:13:37
   check_err $? "FDB entry was aged out when should not"
 
   $MZ $h2 -c 1 -p 64 -a $mac -t ip -q
 
   bridge fdb show brport $swp2 | grep -q de:ad:be:ef:13:37
   check_err $? "FDB entry did not roam when should"
 
   log_test "Externally learned FDB entry - ageing & roaming"
 
   bridge fdb del de:ad:be:ef:13:37 dev $swp2 master vlan 1 &> /dev/null
   bridge fdb del de:ad:be:ef:13:37 dev $swp1 master vlan 1 &> /dev/null
}
 
trap cleanup EXIT
 
setup_prepare
setup_wait
 
tests_run
 
exit $EXIT_STATUS