hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
 
# Test for port-default priority. Non-IP packets ingress $swp1 and are
# prioritized according to the default priority specified at the port.
# rx_octets_prio_* counters are used to verify the prioritization.
#
# +-----------------------+
# | H1                    |
# |    + $h1              |
# |    | 192.0.2.1/28     |
# +----|------------------+
#      |
# +----|------------------+
# | SW |                  |
# |    + $swp1            |
# |      192.0.2.2/28     |
# |      APP=<prio>,1,0   |
# +-----------------------+
 
ALL_TESTS="
   ping_ipv4
   test_defprio
"
 
lib_dir=$(dirname $0)/../../../net/forwarding
 
NUM_NETIFS=2
: ${HIT_TIMEOUT:=1000} # ms
source $lib_dir/lib.sh
 
declare -a APP
 
defprio_install()
{
   local dev=$1; shift
   local prio=$1; shift
   local app="app=$prio,1,0"
 
   lldptool -T -i $dev -V APP $app >/dev/null
   lldpad_app_wait_set $dev
   APP[$prio]=$app
}
 
defprio_uninstall()
{
   local dev=$1; shift
   local prio=$1; shift
   local app=${APP[$prio]}
 
   lldptool -T -i $dev -V APP -d $app >/dev/null
   lldpad_app_wait_del
   unset APP[$prio]
}
 
defprio_flush()
{
   local dev=$1; shift
   local prio
 
   if ((${#APP[@]})); then
       lldptool -T -i $dev -V APP -d ${APP[@]} >/dev/null
   fi
   lldpad_app_wait_del
   APP=()
}
 
h1_create()
{
   simple_if_init $h1 192.0.2.1/28
}
 
h1_destroy()
{
   simple_if_fini $h1 192.0.2.1/28
}
 
switch_create()
{
   ip link set dev $swp1 up
   ip addr add dev $swp1 192.0.2.2/28
}
 
switch_destroy()
{
   defprio_flush $swp1
   ip addr del dev $swp1 192.0.2.2/28
   ip link set dev $swp1 down
}
 
setup_prepare()
{
   h1=${NETIFS[p1]}
   swp1=${NETIFS[p2]}
 
   vrf_prepare
 
   h1_create
   switch_create
}
 
cleanup()
{
   pre_cleanup
 
   switch_destroy
   h1_destroy
 
   vrf_cleanup
}
 
ping_ipv4()
{
   ping_test $h1 192.0.2.2
}
 
__test_defprio()
{
   local prio_install=$1; shift
   local prio_observe=$1; shift
   local key
   local t1
   local i
 
   RET=0
 
   defprio_install $swp1 $prio_install
 
   local t0=$(ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
   mausezahn -q $h1 -d 100m -c 10 -t arp reply
   t1=$(busywait "$HIT_TIMEOUT" until_counter_is ">= $((t0 + 10))" \
       ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
 
   check_err $? "Default priority $prio_install/$prio_observe: Expected to capture 10 packets, got $((t1 - t0))."
   log_test "Default priority $prio_install/$prio_observe"
 
   defprio_uninstall $swp1 $prio_install
}
 
test_defprio()
{
   local prio
 
   for prio in {0..7}; do
       __test_defprio $prio $prio
   done
 
   defprio_install $swp1 3
   __test_defprio 0 3
   __test_defprio 1 3
   __test_defprio 2 3
   __test_defprio 4 4
   __test_defprio 5 5
   __test_defprio 6 6
   __test_defprio 7 7
   defprio_uninstall $swp1 3
}
 
trap cleanup EXIT
 
setup_prepare
setup_wait
 
tests_run
 
exit $EXIT_STATUS