~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/net/ioam6.sh

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/testing/selftests/net/ioam6.sh (Architecture i386) and /tools/testing/selftests/net/ioam6.sh (Architecture sparc64)


  1 #!/bin/bash                                         1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0+                 2 # SPDX-License-Identifier: GPL-2.0+
  3 #                                                   3 #
  4 # Author: Justin Iurman <justin.iurman@uliege.b      4 # Author: Justin Iurman <justin.iurman@uliege.be>
  5 #                                                   5 #
  6 # This script evaluates the IOAM insertion for      6 # This script evaluates the IOAM insertion for IPv6 by checking the IOAM data
  7 # consistency directly inside packets on the r      7 # consistency directly inside packets on the receiver side. Tests are divided
  8 # into three categories: OUTPUT (evaluates the      8 # into three categories: OUTPUT (evaluates the IOAM processing by the sender),
  9 # INPUT (evaluates the IOAM processing by a re      9 # INPUT (evaluates the IOAM processing by a receiver) and GLOBAL (evaluates
 10 # wider use cases that do not fall into the ot     10 # wider use cases that do not fall into the other two categories). Both OUTPUT
 11 # and INPUT tests only use a two-node topology     11 # and INPUT tests only use a two-node topology (alpha and beta), while GLOBAL
 12 # tests use the entire three-node topology (al     12 # tests use the entire three-node topology (alpha, beta, gamma). Each test is
 13 # documented inside its own handler in the cod     13 # documented inside its own handler in the code below.
 14 #                                                  14 #
 15 # An IOAM domain is configured from Alpha to G     15 # An IOAM domain is configured from Alpha to Gamma but not on the reverse path.
 16 # When either Beta or Gamma is the destination     16 # When either Beta or Gamma is the destination (depending on the test category),
 17 # Alpha adds an IOAM option (Pre-allocated Tra     17 # Alpha adds an IOAM option (Pre-allocated Trace) inside a Hop-by-hop.
 18 #                                                  18 #
 19 #                                                  19 #
 20 #            +-------------------+                 20 #            +-------------------+            +-------------------+
 21 #            |                   |                 21 #            |                   |            |                   |
 22 #            |    Alpha netns    |                 22 #            |    Alpha netns    |            |    Gamma netns    |
 23 #            |                   |                 23 #            |                   |            |                   |
 24 #            |  +-------------+  |                 24 #            |  +-------------+  |            |  +-------------+  |
 25 #            |  |    veth0    |  |                 25 #            |  |    veth0    |  |            |  |    veth0    |  |
 26 #            |  |  db01::2/64 |  |                 26 #            |  |  db01::2/64 |  |            |  |  db02::2/64 |  |
 27 #            |  +-------------+  |                 27 #            |  +-------------+  |            |  +-------------+  |
 28 #            |         .         |                 28 #            |         .         |            |         .         |
 29 #            +-------------------+                 29 #            +-------------------+            +-------------------+
 30 #                      .                           30 #                      .                                .
 31 #                      .                           31 #                      .                                .
 32 #                      .                           32 #                      .                                .
 33 #            +--------------------------------     33 #            +----------------------------------------------------+
 34 #            |         .                           34 #            |         .                                .         |
 35 #            |  +-------------+                    35 #            |  +-------------+                  +-------------+  |
 36 #            |  |    veth0    |                    36 #            |  |    veth0    |                  |    veth1    |  |
 37 #            |  |  db01::1/64 | ..............     37 #            |  |  db01::1/64 | ................ |  db02::1/64 |  |
 38 #            |  +-------------+                    38 #            |  +-------------+                  +-------------+  |
 39 #            |                                     39 #            |                                                    |
 40 #            |                      Beta netns     40 #            |                      Beta netns                    |
 41 #            |                                     41 #            |                                                    |
 42 #            +--------------------------------     42 #            +----------------------------------------------------+
 43 #                                                  43 #
 44 #                                                  44 #
 45 #                                                  45 #
 46 #        =====================================     46 #        =============================================================
 47 #        |                Alpha - IOAM configu     47 #        |                Alpha - IOAM configuration                 |
 48 #        +====================================     48 #        +===========================================================+
 49 #        | Node ID             | 1                 49 #        | Node ID             | 1                                   |
 50 #        +------------------------------------     50 #        +-----------------------------------------------------------+
 51 #        | Node Wide ID        | 11111111          51 #        | Node Wide ID        | 11111111                            |
 52 #        +------------------------------------     52 #        +-----------------------------------------------------------+
 53 #        | Ingress ID          | 0xffff (defau     53 #        | Ingress ID          | 0xffff (default value)              |
 54 #        +------------------------------------     54 #        +-----------------------------------------------------------+
 55 #        | Ingress Wide ID     | 0xffffffff (d     55 #        | Ingress Wide ID     | 0xffffffff (default value)          |
 56 #        +------------------------------------     56 #        +-----------------------------------------------------------+
 57 #        | Egress ID           | 101               57 #        | Egress ID           | 101                                 |
 58 #        +------------------------------------     58 #        +-----------------------------------------------------------+
 59 #        | Egress Wide ID      | 101101            59 #        | Egress Wide ID      | 101101                              |
 60 #        +------------------------------------     60 #        +-----------------------------------------------------------+
 61 #        | Namespace Data      | 0xdeadbee0        61 #        | Namespace Data      | 0xdeadbee0                          |
 62 #        +------------------------------------     62 #        +-----------------------------------------------------------+
 63 #        | Namespace Wide Data | 0xcafec0caf00     63 #        | Namespace Wide Data | 0xcafec0caf00dc0de                  |
 64 #        +------------------------------------     64 #        +-----------------------------------------------------------+
 65 #        | Schema ID           | 777               65 #        | Schema ID           | 777                                 |
 66 #        +------------------------------------     66 #        +-----------------------------------------------------------+
 67 #        | Schema Data         | something tha     67 #        | Schema Data         | something that will be 4n-aligned   |
 68 #        +------------------------------------     68 #        +-----------------------------------------------------------+
 69 #                                                  69 #
 70 #                                                  70 #
 71 #        =====================================     71 #        =============================================================
 72 #        |                 Beta - IOAM configu     72 #        |                 Beta - IOAM configuration                 |
 73 #        +====================================     73 #        +===========================================================+
 74 #        | Node ID             | 2                 74 #        | Node ID             | 2                                   |
 75 #        +------------------------------------     75 #        +-----------------------------------------------------------+
 76 #        | Node Wide ID        | 22222222          76 #        | Node Wide ID        | 22222222                            |
 77 #        +------------------------------------     77 #        +-----------------------------------------------------------+
 78 #        | Ingress ID          | 201               78 #        | Ingress ID          | 201                                 |
 79 #        +------------------------------------     79 #        +-----------------------------------------------------------+
 80 #        | Ingress Wide ID     | 201201            80 #        | Ingress Wide ID     | 201201                              |
 81 #        +------------------------------------     81 #        +-----------------------------------------------------------+
 82 #        | Egress ID           | 202               82 #        | Egress ID           | 202                                 |
 83 #        +------------------------------------     83 #        +-----------------------------------------------------------+
 84 #        | Egress Wide ID      | 202202            84 #        | Egress Wide ID      | 202202                              |
 85 #        +------------------------------------     85 #        +-----------------------------------------------------------+
 86 #        | Namespace Data      | 0xdeadbee1        86 #        | Namespace Data      | 0xdeadbee1                          |
 87 #        +------------------------------------     87 #        +-----------------------------------------------------------+
 88 #        | Namespace Wide Data | 0xcafec0caf11     88 #        | Namespace Wide Data | 0xcafec0caf11dc0de                  |
 89 #        +------------------------------------     89 #        +-----------------------------------------------------------+
 90 #        | Schema ID           | 666               90 #        | Schema ID           | 666                                 |
 91 #        +------------------------------------     91 #        +-----------------------------------------------------------+
 92 #        | Schema Data         | Hello there -     92 #        | Schema Data         | Hello there -Obi                    |
 93 #        +------------------------------------     93 #        +-----------------------------------------------------------+
 94 #                                                  94 #
 95 #                                                  95 #
 96 #        =====================================     96 #        =============================================================
 97 #        |                Gamma - IOAM configu     97 #        |                Gamma - IOAM configuration                 |
 98 #        +====================================     98 #        +===========================================================+
 99 #        | Node ID             | 3                 99 #        | Node ID             | 3                                   |
100 #        +------------------------------------    100 #        +-----------------------------------------------------------+
101 #        | Node Wide ID        | 33333333         101 #        | Node Wide ID        | 33333333                            |
102 #        +------------------------------------    102 #        +-----------------------------------------------------------+
103 #        | Ingress ID          | 301              103 #        | Ingress ID          | 301                                 |
104 #        +------------------------------------    104 #        +-----------------------------------------------------------+
105 #        | Ingress Wide ID     | 301301           105 #        | Ingress Wide ID     | 301301                              |
106 #        +------------------------------------    106 #        +-----------------------------------------------------------+
107 #        | Egress ID           | 0xffff (defau    107 #        | Egress ID           | 0xffff (default value)              |
108 #        +------------------------------------    108 #        +-----------------------------------------------------------+
109 #        | Egress Wide ID      | 0xffffffff (d    109 #        | Egress Wide ID      | 0xffffffff (default value)          |
110 #        +------------------------------------    110 #        +-----------------------------------------------------------+
111 #        | Namespace Data      | 0xdeadbee2       111 #        | Namespace Data      | 0xdeadbee2                          |
112 #        +------------------------------------    112 #        +-----------------------------------------------------------+
113 #        | Namespace Wide Data | 0xcafec0caf22    113 #        | Namespace Wide Data | 0xcafec0caf22dc0de                  |
114 #        +------------------------------------    114 #        +-----------------------------------------------------------+
115 #        | Schema ID           | 0xffffff (= N    115 #        | Schema ID           | 0xffffff (= None)                   |
116 #        +------------------------------------    116 #        +-----------------------------------------------------------+
117 #        | Schema Data         |                  117 #        | Schema Data         |                                     |
118 #        +------------------------------------    118 #        +-----------------------------------------------------------+
119                                                   119 
120 source lib.sh                                     120 source lib.sh
121                                                   121 
122 ##############################################    122 ################################################################################
123 #                                                 123 #                                                                              #
124 # WARNING: Be careful if you modify the block     124 # WARNING: Be careful if you modify the block below - it MUST be kept          #
125 #          synchronized with configurations in    125 #          synchronized with configurations inside ioam6_parser.c and always   #
126 #          reflect the same.                      126 #          reflect the same.                                                   #
127 #                                                 127 #                                                                              #
128 ##############################################    128 ################################################################################
129                                                   129 
130 ALPHA=(                                           130 ALPHA=(
131         1                                         131         1                                       # ID
132         11111111                                  132         11111111                                # Wide ID
133         0xffff                                    133         0xffff                                  # Ingress ID
134         0xffffffff                                134         0xffffffff                              # Ingress Wide ID
135         101                                       135         101                                     # Egress ID
136         101101                                    136         101101                                  # Egress Wide ID
137         0xdeadbee0                                137         0xdeadbee0                              # Namespace Data
138         0xcafec0caf00dc0de                        138         0xcafec0caf00dc0de                      # Namespace Wide Data
139         777                                       139         777                                     # Schema ID (0xffffff = None)
140         "something that will be 4n-aligned"       140         "something that will be 4n-aligned"     # Schema Data
141 )                                                 141 )
142                                                   142 
143 BETA=(                                            143 BETA=(
144         2                                         144         2
145         22222222                                  145         22222222
146         201                                       146         201
147         201201                                    147         201201
148         202                                       148         202
149         202202                                    149         202202
150         0xdeadbee1                                150         0xdeadbee1
151         0xcafec0caf11dc0de                        151         0xcafec0caf11dc0de
152         666                                       152         666
153         "Hello there -Obi"                        153         "Hello there -Obi"
154 )                                                 154 )
155                                                   155 
156 GAMMA=(                                           156 GAMMA=(
157         3                                         157         3
158         33333333                                  158         33333333
159         301                                       159         301
160         301301                                    160         301301
161         0xffff                                    161         0xffff
162         0xffffffff                                162         0xffffffff
163         0xdeadbee2                                163         0xdeadbee2
164         0xcafec0caf22dc0de                        164         0xcafec0caf22dc0de
165         0xffffff                                  165         0xffffff
166         ""                                        166         ""
167 )                                                 167 )
168                                                   168 
169 TESTS_OUTPUT="                                    169 TESTS_OUTPUT="
170         out_undef_ns                              170         out_undef_ns
171         out_no_room                               171         out_no_room
172         out_bits                                  172         out_bits
173         out_full_supp_trace                       173         out_full_supp_trace
174 "                                                 174 "
175                                                   175 
176 TESTS_INPUT="                                     176 TESTS_INPUT="
177         in_undef_ns                               177         in_undef_ns
178         in_no_room                                178         in_no_room
179         in_oflag                                  179         in_oflag
180         in_bits                                   180         in_bits
181         in_full_supp_trace                        181         in_full_supp_trace
182 "                                                 182 "
183                                                   183 
184 TESTS_GLOBAL="                                    184 TESTS_GLOBAL="
185         fwd_full_supp_trace                       185         fwd_full_supp_trace
186 "                                                 186 "
187                                                   187 
188                                                   188 
189 ##############################################    189 ################################################################################
190 #                                                 190 #                                                                              #
191 #                                   LIBRARY       191 #                                   LIBRARY                                    #
192 #                                                 192 #                                                                              #
193 ##############################################    193 ################################################################################
194                                                   194 
195 check_kernel_compatibility()                      195 check_kernel_compatibility()
196 {                                                 196 {
197   setup_ns ioam_tmp_node                          197   setup_ns ioam_tmp_node
198   ip link add name veth0 netns $ioam_tmp_node     198   ip link add name veth0 netns $ioam_tmp_node type veth \
199          peer name veth1 netns $ioam_tmp_node     199          peer name veth1 netns $ioam_tmp_node
200                                                   200 
201   ip -netns $ioam_tmp_node link set veth0 up      201   ip -netns $ioam_tmp_node link set veth0 up
202   ip -netns $ioam_tmp_node link set veth1 up      202   ip -netns $ioam_tmp_node link set veth1 up
203                                                   203 
204   ip -netns $ioam_tmp_node ioam namespace add     204   ip -netns $ioam_tmp_node ioam namespace add 0
205   ns_ad=$?                                        205   ns_ad=$?
206                                                   206 
207   ip -netns $ioam_tmp_node ioam namespace show    207   ip -netns $ioam_tmp_node ioam namespace show | grep -q "namespace 0"
208   ns_sh=$?                                        208   ns_sh=$?
209                                                   209 
210   if [[ $ns_ad != 0 || $ns_sh != 0 ]]             210   if [[ $ns_ad != 0 || $ns_sh != 0 ]]
211   then                                            211   then
212     echo "SKIP: kernel version probably too ol    212     echo "SKIP: kernel version probably too old, missing ioam support"
213     ip link del veth0 2>/dev/null || true         213     ip link del veth0 2>/dev/null || true
214     cleanup_ns $ioam_tmp_node || true             214     cleanup_ns $ioam_tmp_node || true
215     exit $ksft_skip                               215     exit $ksft_skip
216   fi                                              216   fi
217                                                   217 
218   ip -netns $ioam_tmp_node route add db02::/64    218   ip -netns $ioam_tmp_node route add db02::/64 encap ioam6 mode inline \
219          trace prealloc type 0x800000 ns 0 siz    219          trace prealloc type 0x800000 ns 0 size 4 dev veth0
220   tr_ad=$?                                        220   tr_ad=$?
221                                                   221 
222   ip -netns $ioam_tmp_node -6 route | grep -q     222   ip -netns $ioam_tmp_node -6 route | grep -q "encap ioam6"
223   tr_sh=$?                                        223   tr_sh=$?
224                                                   224 
225   if [[ $tr_ad != 0 || $tr_sh != 0 ]]             225   if [[ $tr_ad != 0 || $tr_sh != 0 ]]
226   then                                            226   then
227     echo "SKIP: cannot attach an ioam trace to    227     echo "SKIP: cannot attach an ioam trace to a route, did you compile" \
228          "without CONFIG_IPV6_IOAM6_LWTUNNEL?"    228          "without CONFIG_IPV6_IOAM6_LWTUNNEL?"
229     ip link del veth0 2>/dev/null || true         229     ip link del veth0 2>/dev/null || true
230     cleanup_ns $ioam_tmp_node || true             230     cleanup_ns $ioam_tmp_node || true
231     exit $ksft_skip                               231     exit $ksft_skip
232   fi                                              232   fi
233                                                   233 
234   ip link del veth0 2>/dev/null || true           234   ip link del veth0 2>/dev/null || true
235   cleanup_ns $ioam_tmp_node || true               235   cleanup_ns $ioam_tmp_node || true
236                                                   236 
237   lsmod | grep -q "ip6_tunnel"                    237   lsmod | grep -q "ip6_tunnel"
238   ip6tnl_loaded=$?                                238   ip6tnl_loaded=$?
239                                                   239 
240   if [ $ip6tnl_loaded = 0 ]                       240   if [ $ip6tnl_loaded = 0 ]
241   then                                            241   then
242     encap_tests=0                                 242     encap_tests=0
243   else                                            243   else
244     modprobe ip6_tunnel &>/dev/null               244     modprobe ip6_tunnel &>/dev/null
245     lsmod | grep -q "ip6_tunnel"                  245     lsmod | grep -q "ip6_tunnel"
246     encap_tests=$?                                246     encap_tests=$?
247                                                   247 
248     if [ $encap_tests != 0 ]                      248     if [ $encap_tests != 0 ]
249     then                                          249     then
250       ip a | grep -q "ip6tnl0"                    250       ip a | grep -q "ip6tnl0"
251       encap_tests=$?                              251       encap_tests=$?
252                                                   252 
253       if [ $encap_tests != 0 ]                    253       if [ $encap_tests != 0 ]
254       then                                        254       then
255         echo "Note: ip6_tunnel not found neith    255         echo "Note: ip6_tunnel not found neither as a module nor inside the" \
256              "kernel, tests that require it (e    256              "kernel, tests that require it (encap mode) will be omitted"
257       fi                                          257       fi
258     fi                                            258     fi
259   fi                                              259   fi
260 }                                                 260 }
261                                                   261 
262 cleanup()                                         262 cleanup()
263 {                                                 263 {
264   ip link del ioam-veth-alpha 2>/dev/null || t    264   ip link del ioam-veth-alpha 2>/dev/null || true
265   ip link del ioam-veth-gamma 2>/dev/null || t    265   ip link del ioam-veth-gamma 2>/dev/null || true
266                                                   266 
267   cleanup_ns $ioam_node_alpha $ioam_node_beta     267   cleanup_ns $ioam_node_alpha $ioam_node_beta $ioam_node_gamma || true
268                                                   268 
269   if [ $ip6tnl_loaded != 0 ]                      269   if [ $ip6tnl_loaded != 0 ]
270   then                                            270   then
271     modprobe -r ip6_tunnel 2>/dev/null || true    271     modprobe -r ip6_tunnel 2>/dev/null || true
272   fi                                              272   fi
273 }                                                 273 }
274                                                   274 
275 setup()                                           275 setup()
276 {                                                 276 {
277   setup_ns ioam_node_alpha ioam_node_beta ioam    277   setup_ns ioam_node_alpha ioam_node_beta ioam_node_gamma
278                                                   278 
279   ip link add name ioam-veth-alpha netns $ioam    279   ip link add name ioam-veth-alpha netns $ioam_node_alpha type veth \
280          peer name ioam-veth-betaL netns $ioam    280          peer name ioam-veth-betaL netns $ioam_node_beta
281   ip link add name ioam-veth-betaR netns $ioam    281   ip link add name ioam-veth-betaR netns $ioam_node_beta type veth \
282          peer name ioam-veth-gamma netns $ioam    282          peer name ioam-veth-gamma netns $ioam_node_gamma
283                                                   283 
284   ip -netns $ioam_node_alpha link set ioam-vet    284   ip -netns $ioam_node_alpha link set ioam-veth-alpha name veth0
285   ip -netns $ioam_node_beta link set ioam-veth    285   ip -netns $ioam_node_beta link set ioam-veth-betaL name veth0
286   ip -netns $ioam_node_beta link set ioam-veth    286   ip -netns $ioam_node_beta link set ioam-veth-betaR name veth1
287   ip -netns $ioam_node_gamma link set ioam-vet    287   ip -netns $ioam_node_gamma link set ioam-veth-gamma name veth0
288                                                   288 
289   ip -netns $ioam_node_alpha addr add db01::2/    289   ip -netns $ioam_node_alpha addr add db01::2/64 dev veth0
290   ip -netns $ioam_node_alpha link set veth0 up    290   ip -netns $ioam_node_alpha link set veth0 up
291   ip -netns $ioam_node_alpha link set lo up       291   ip -netns $ioam_node_alpha link set lo up
292   ip -netns $ioam_node_alpha route add db02::/    292   ip -netns $ioam_node_alpha route add db02::/64 via db01::1 dev veth0
293   ip -netns $ioam_node_alpha route del db01::/    293   ip -netns $ioam_node_alpha route del db01::/64
294   ip -netns $ioam_node_alpha route add db01::/    294   ip -netns $ioam_node_alpha route add db01::/64 dev veth0
295                                                   295 
296   ip -netns $ioam_node_beta addr add db01::1/6    296   ip -netns $ioam_node_beta addr add db01::1/64 dev veth0
297   ip -netns $ioam_node_beta addr add db02::1/6    297   ip -netns $ioam_node_beta addr add db02::1/64 dev veth1
298   ip -netns $ioam_node_beta link set veth0 up     298   ip -netns $ioam_node_beta link set veth0 up
299   ip -netns $ioam_node_beta link set veth1 up     299   ip -netns $ioam_node_beta link set veth1 up
300   ip -netns $ioam_node_beta link set lo up        300   ip -netns $ioam_node_beta link set lo up
301                                                   301 
302   ip -netns $ioam_node_gamma addr add db02::2/    302   ip -netns $ioam_node_gamma addr add db02::2/64 dev veth0
303   ip -netns $ioam_node_gamma link set veth0 up    303   ip -netns $ioam_node_gamma link set veth0 up
304   ip -netns $ioam_node_gamma link set lo up       304   ip -netns $ioam_node_gamma link set lo up
305   ip -netns $ioam_node_gamma route add db01::/    305   ip -netns $ioam_node_gamma route add db01::/64 via db02::1 dev veth0
306                                                   306 
307   # - IOAM config -                               307   # - IOAM config -
308   ip netns exec $ioam_node_alpha sysctl -wq ne    308   ip netns exec $ioam_node_alpha sysctl -wq net.ipv6.ioam6_id=${ALPHA[0]}
309   ip netns exec $ioam_node_alpha sysctl -wq ne    309   ip netns exec $ioam_node_alpha sysctl -wq net.ipv6.ioam6_id_wide=${ALPHA[1]}
310   ip netns exec $ioam_node_alpha sysctl -wq ne    310   ip netns exec $ioam_node_alpha sysctl -wq net.ipv6.conf.veth0.ioam6_id=${ALPHA[4]}
311   ip netns exec $ioam_node_alpha sysctl -wq ne    311   ip netns exec $ioam_node_alpha sysctl -wq net.ipv6.conf.veth0.ioam6_id_wide=${ALPHA[5]}
312   ip -netns $ioam_node_alpha ioam namespace ad    312   ip -netns $ioam_node_alpha ioam namespace add 123 data ${ALPHA[6]} wide ${ALPHA[7]}
313   ip -netns $ioam_node_alpha ioam schema add $    313   ip -netns $ioam_node_alpha ioam schema add ${ALPHA[8]} "${ALPHA[9]}"
314   ip -netns $ioam_node_alpha ioam namespace se    314   ip -netns $ioam_node_alpha ioam namespace set 123 schema ${ALPHA[8]}
315                                                   315 
316   ip netns exec $ioam_node_beta sysctl -wq net    316   ip netns exec $ioam_node_beta sysctl -wq net.ipv6.conf.all.forwarding=1
317   ip netns exec $ioam_node_beta sysctl -wq net    317   ip netns exec $ioam_node_beta sysctl -wq net.ipv6.ioam6_id=${BETA[0]}
318   ip netns exec $ioam_node_beta sysctl -wq net    318   ip netns exec $ioam_node_beta sysctl -wq net.ipv6.ioam6_id_wide=${BETA[1]}
319   ip netns exec $ioam_node_beta sysctl -wq net    319   ip netns exec $ioam_node_beta sysctl -wq net.ipv6.conf.veth0.ioam6_enabled=1
320   ip netns exec $ioam_node_beta sysctl -wq net    320   ip netns exec $ioam_node_beta sysctl -wq net.ipv6.conf.veth0.ioam6_id=${BETA[2]}
321   ip netns exec $ioam_node_beta sysctl -wq net    321   ip netns exec $ioam_node_beta sysctl -wq net.ipv6.conf.veth0.ioam6_id_wide=${BETA[3]}
322   ip netns exec $ioam_node_beta sysctl -wq net    322   ip netns exec $ioam_node_beta sysctl -wq net.ipv6.conf.veth1.ioam6_id=${BETA[4]}
323   ip netns exec $ioam_node_beta sysctl -wq net    323   ip netns exec $ioam_node_beta sysctl -wq net.ipv6.conf.veth1.ioam6_id_wide=${BETA[5]}
324   ip -netns $ioam_node_beta ioam namespace add    324   ip -netns $ioam_node_beta ioam namespace add 123 data ${BETA[6]} wide ${BETA[7]}
325   ip -netns $ioam_node_beta ioam schema add ${    325   ip -netns $ioam_node_beta ioam schema add ${BETA[8]} "${BETA[9]}"
326   ip -netns $ioam_node_beta ioam namespace set    326   ip -netns $ioam_node_beta ioam namespace set 123 schema ${BETA[8]}
327                                                   327 
328   ip netns exec $ioam_node_gamma sysctl -wq ne    328   ip netns exec $ioam_node_gamma sysctl -wq net.ipv6.ioam6_id=${GAMMA[0]}
329   ip netns exec $ioam_node_gamma sysctl -wq ne    329   ip netns exec $ioam_node_gamma sysctl -wq net.ipv6.ioam6_id_wide=${GAMMA[1]}
330   ip netns exec $ioam_node_gamma sysctl -wq ne    330   ip netns exec $ioam_node_gamma sysctl -wq net.ipv6.conf.veth0.ioam6_enabled=1
331   ip netns exec $ioam_node_gamma sysctl -wq ne    331   ip netns exec $ioam_node_gamma sysctl -wq net.ipv6.conf.veth0.ioam6_id=${GAMMA[2]}
332   ip netns exec $ioam_node_gamma sysctl -wq ne    332   ip netns exec $ioam_node_gamma sysctl -wq net.ipv6.conf.veth0.ioam6_id_wide=${GAMMA[3]}
333   ip -netns $ioam_node_gamma ioam namespace ad    333   ip -netns $ioam_node_gamma ioam namespace add 123 data ${GAMMA[6]} wide ${GAMMA[7]}
334                                                   334 
335   sleep 1                                         335   sleep 1
336                                                   336 
337   ip netns exec $ioam_node_alpha ping6 -c 5 -W    337   ip netns exec $ioam_node_alpha ping6 -c 5 -W 1 db02::2 &>/dev/null
338   if [ $? != 0 ]                                  338   if [ $? != 0 ]
339   then                                            339   then
340     echo "Setup FAILED"                           340     echo "Setup FAILED"
341     cleanup &>/dev/null                           341     cleanup &>/dev/null
342     exit 0                                        342     exit 0
343   fi                                              343   fi
344 }                                                 344 }
345                                                   345 
346 log_test_passed()                                 346 log_test_passed()
347 {                                                 347 {
348   local desc=$1                                   348   local desc=$1
349   printf "TEST: %-60s  [ OK ]\n" "${desc}"        349   printf "TEST: %-60s  [ OK ]\n" "${desc}"
350 }                                                 350 }
351                                                   351 
352 log_test_failed()                                 352 log_test_failed()
353 {                                                 353 {
354   local desc=$1                                   354   local desc=$1
355   printf "TEST: %-60s  [FAIL]\n" "${desc}"        355   printf "TEST: %-60s  [FAIL]\n" "${desc}"
356 }                                                 356 }
357                                                   357 
358 log_results()                                     358 log_results()
359 {                                                 359 {
360   echo "- Tests passed: ${npassed}"               360   echo "- Tests passed: ${npassed}"
361   echo "- Tests failed: ${nfailed}"               361   echo "- Tests failed: ${nfailed}"
362 }                                                 362 }
363                                                   363 
364 run_test()                                        364 run_test()
365 {                                                 365 {
366   local name=$1                                   366   local name=$1
367   local desc=$2                                   367   local desc=$2
368   local node_src=$3                               368   local node_src=$3
369   local node_dst=$4                               369   local node_dst=$4
370   local ip6_dst=$5                                370   local ip6_dst=$5
371   local trace_type=$6                             371   local trace_type=$6
372   local ioam_ns=$7                                372   local ioam_ns=$7
373   local type=$8                                   373   local type=$8
374                                                   374 
375   ip netns exec $node_dst ./ioam6_parser $name    375   ip netns exec $node_dst ./ioam6_parser $name $trace_type $ioam_ns $type &
376   local spid=$!                                   376   local spid=$!
377   sleep 0.1                                       377   sleep 0.1
378                                                   378 
379   ip netns exec $node_src ping6 -t 64 -c 1 -W     379   ip netns exec $node_src ping6 -t 64 -c 1 -W 1 $ip6_dst &>/dev/null
380   if [ $? != 0 ]                                  380   if [ $? != 0 ]
381   then                                            381   then
382     nfailed=$((nfailed+1))                        382     nfailed=$((nfailed+1))
383     log_test_failed "${desc}"                     383     log_test_failed "${desc}"
384     kill -2 $spid &>/dev/null                     384     kill -2 $spid &>/dev/null
385   else                                            385   else
386     wait $spid                                    386     wait $spid
387     if [ $? = 0 ]                                 387     if [ $? = 0 ]
388     then                                          388     then
389       npassed=$((npassed+1))                      389       npassed=$((npassed+1))
390       log_test_passed "${desc}"                   390       log_test_passed "${desc}"
391     else                                          391     else
392       nfailed=$((nfailed+1))                      392       nfailed=$((nfailed+1))
393       log_test_failed "${desc}"                   393       log_test_failed "${desc}"
394     fi                                            394     fi
395   fi                                              395   fi
396 }                                                 396 }
397                                                   397 
398 run()                                             398 run()
399 {                                                 399 {
400   echo                                            400   echo
401   printf "%0.s-" {1..74}                          401   printf "%0.s-" {1..74}
402   echo                                            402   echo
403   echo "OUTPUT tests"                             403   echo "OUTPUT tests"
404   printf "%0.s-" {1..74}                          404   printf "%0.s-" {1..74}
405   echo                                            405   echo
406                                                   406 
407   # set OUTPUT settings                           407   # set OUTPUT settings
408   ip netns exec $ioam_node_beta sysctl -wq net    408   ip netns exec $ioam_node_beta sysctl -wq net.ipv6.conf.veth0.ioam6_enabled=0
409                                                   409 
410   for t in $TESTS_OUTPUT                          410   for t in $TESTS_OUTPUT
411   do                                              411   do
412     $t "inline"                                   412     $t "inline"
413     [ $encap_tests = 0 ] && $t "encap"            413     [ $encap_tests = 0 ] && $t "encap"
414   done                                            414   done
415                                                   415 
416   # clean OUTPUT settings                         416   # clean OUTPUT settings
417   ip netns exec $ioam_node_beta sysctl -wq net    417   ip netns exec $ioam_node_beta sysctl -wq net.ipv6.conf.veth0.ioam6_enabled=1
418   ip -netns $ioam_node_alpha route change db01    418   ip -netns $ioam_node_alpha route change db01::/64 dev veth0
419                                                   419 
420                                                   420 
421   echo                                            421   echo
422   printf "%0.s-" {1..74}                          422   printf "%0.s-" {1..74}
423   echo                                            423   echo
424   echo "INPUT tests"                              424   echo "INPUT tests"
425   printf "%0.s-" {1..74}                          425   printf "%0.s-" {1..74}
426   echo                                            426   echo
427                                                   427 
428   # set INPUT settings                            428   # set INPUT settings
429   ip -netns $ioam_node_alpha ioam namespace de    429   ip -netns $ioam_node_alpha ioam namespace del 123
430                                                   430 
431   for t in $TESTS_INPUT                           431   for t in $TESTS_INPUT
432   do                                              432   do
433     $t "inline"                                   433     $t "inline"
434     [ $encap_tests = 0 ] && $t "encap"            434     [ $encap_tests = 0 ] && $t "encap"
435   done                                            435   done
436                                                   436 
437   # clean INPUT settings                          437   # clean INPUT settings
438   ip -netns $ioam_node_alpha ioam namespace ad    438   ip -netns $ioam_node_alpha ioam namespace add 123 \
439          data ${ALPHA[6]} wide ${ALPHA[7]}        439          data ${ALPHA[6]} wide ${ALPHA[7]}
440   ip -netns $ioam_node_alpha ioam namespace se    440   ip -netns $ioam_node_alpha ioam namespace set 123 schema ${ALPHA[8]}
441   ip -netns $ioam_node_alpha route change db01    441   ip -netns $ioam_node_alpha route change db01::/64 dev veth0
442                                                   442 
443   echo                                            443   echo
444   printf "%0.s-" {1..74}                          444   printf "%0.s-" {1..74}
445   echo                                            445   echo
446   echo "GLOBAL tests"                             446   echo "GLOBAL tests"
447   printf "%0.s-" {1..74}                          447   printf "%0.s-" {1..74}
448   echo                                            448   echo
449                                                   449 
450   for t in $TESTS_GLOBAL                          450   for t in $TESTS_GLOBAL
451   do                                              451   do
452     $t "inline"                                   452     $t "inline"
453     [ $encap_tests = 0 ] && $t "encap"            453     [ $encap_tests = 0 ] && $t "encap"
454   done                                            454   done
455                                                   455 
456   echo                                            456   echo
457   log_results                                     457   log_results
458 }                                                 458 }
459                                                   459 
460 bit2type=(                                        460 bit2type=(
461   0x800000 0x400000 0x200000 0x100000 0x080000    461   0x800000 0x400000 0x200000 0x100000 0x080000 0x040000 0x020000 0x010000
462   0x008000 0x004000 0x002000 0x001000 0x000800    462   0x008000 0x004000 0x002000 0x001000 0x000800 0x000400 0x000200 0x000100
463   0x000080 0x000040 0x000020 0x000010 0x000008    463   0x000080 0x000040 0x000020 0x000010 0x000008 0x000004 0x000002
464 )                                                 464 )
465 bit2size=( 4 4 4 4 4 4 4 4 8 8 8 4 4 4 4 4 4 4    465 bit2size=( 4 4 4 4 4 4 4 4 8 8 8 4 4 4 4 4 4 4 4 4 4 4 4 )
466                                                   466 
467                                                   467 
468 ##############################################    468 ################################################################################
469 #                                                 469 #                                                                              #
470 #                              OUTPUT tests       470 #                              OUTPUT tests                                    #
471 #                                                 471 #                                                                              #
472 #   Two nodes (sender/receiver), IOAM disabled    472 #   Two nodes (sender/receiver), IOAM disabled on ingress for the receiver.    #
473 ##############################################    473 ################################################################################
474                                                   474 
475 out_undef_ns()                                    475 out_undef_ns()
476 {                                                 476 {
477   ############################################    477   ##############################################################################
478   # Make sure that the encap node won't fill t    478   # Make sure that the encap node won't fill the trace if the chosen IOAM      #
479   # namespace is not configured locally.          479   # namespace is not configured locally.                                       #
480   ############################################    480   ##############################################################################
481   local desc="Unknown IOAM namespace"             481   local desc="Unknown IOAM namespace"
482                                                   482 
483   [ "$1" = "encap" ] && mode="$1 tundst db01::    483   [ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
484   [ "$1" = "encap" ] && ip -netns $ioam_node_b    484   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 up
485                                                   485 
486   ip -netns $ioam_node_alpha route change db01    486   ip -netns $ioam_node_alpha route change db01::/64 encap ioam6 mode $mode \
487          trace prealloc type 0x800000 ns 0 siz    487          trace prealloc type 0x800000 ns 0 size 4 dev veth0
488                                                   488 
489   run_test ${FUNCNAME[0]} "${desc} ($1 mode)"     489   run_test ${FUNCNAME[0]} "${desc} ($1 mode)" $ioam_node_alpha $ioam_node_beta \
490          db01::1 0x800000 0 $1                    490          db01::1 0x800000 0 $1
491                                                   491 
492   [ "$1" = "encap" ] && ip -netns $ioam_node_b    492   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 down
493 }                                                 493 }
494                                                   494 
495 out_no_room()                                     495 out_no_room()
496 {                                                 496 {
497   ############################################    497   ##############################################################################
498   # Make sure that the encap node won't fill t    498   # Make sure that the encap node won't fill the trace and will set the        #
499   # Overflow flag since there is no room enoug    499   # Overflow flag since there is no room enough for its data.                  #
500   ############################################    500   ##############################################################################
501   local desc="Missing trace room"                 501   local desc="Missing trace room"
502                                                   502 
503   [ "$1" = "encap" ] && mode="$1 tundst db01::    503   [ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
504   [ "$1" = "encap" ] && ip -netns $ioam_node_b    504   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 up
505                                                   505 
506   ip -netns $ioam_node_alpha route change db01    506   ip -netns $ioam_node_alpha route change db01::/64 encap ioam6 mode $mode \
507          trace prealloc type 0xc00000 ns 123 s    507          trace prealloc type 0xc00000 ns 123 size 4 dev veth0
508                                                   508 
509   run_test ${FUNCNAME[0]} "${desc} ($1 mode)"     509   run_test ${FUNCNAME[0]} "${desc} ($1 mode)" $ioam_node_alpha $ioam_node_beta \
510          db01::1 0xc00000 123 $1                  510          db01::1 0xc00000 123 $1
511                                                   511 
512   [ "$1" = "encap" ] && ip -netns $ioam_node_b    512   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 down
513 }                                                 513 }
514                                                   514 
515 out_bits()                                        515 out_bits()
516 {                                                 516 {
517   ############################################    517   ##############################################################################
518   # Make sure that, for each trace type bit, t    518   # Make sure that, for each trace type bit, the encap node will either:       #
519   #  (i)  fill the trace with its data when it    519   #  (i)  fill the trace with its data when it is a supported bit              #
520   #  (ii) not fill the trace with its data whe    520   #  (ii) not fill the trace with its data when it is an unsupported bit       #
521   ############################################    521   ##############################################################################
522   local desc="Trace type with bit <n> only"       522   local desc="Trace type with bit <n> only"
523                                                   523 
524   local tmp=${bit2size[22]}                       524   local tmp=${bit2size[22]}
525   bit2size[22]=$(( $tmp + ${#ALPHA[9]} + ((4 -    525   bit2size[22]=$(( $tmp + ${#ALPHA[9]} + ((4 - (${#ALPHA[9]} % 4)) % 4) ))
526                                                   526 
527   [ "$1" = "encap" ] && mode="$1 tundst db01::    527   [ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
528   [ "$1" = "encap" ] && ip -netns $ioam_node_b    528   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 up
529                                                   529 
530   for i in {0..22}                                530   for i in {0..22}
531   do                                              531   do
532     ip -netns $ioam_node_alpha route change db    532     ip -netns $ioam_node_alpha route change db01::/64 encap ioam6 mode $mode \
533            trace prealloc type ${bit2type[$i]}    533            trace prealloc type ${bit2type[$i]} ns 123 size ${bit2size[$i]} \
534            dev veth0 &>/dev/null                  534            dev veth0 &>/dev/null
535                                                   535 
536     local cmd_res=$?                              536     local cmd_res=$?
537     local descr="${desc/<n>/$i}"                  537     local descr="${desc/<n>/$i}"
538                                                   538 
539     if [[ $i -ge 12 && $i -le 21 ]]               539     if [[ $i -ge 12 && $i -le 21 ]]
540     then                                          540     then
541       if [ $cmd_res != 0 ]                        541       if [ $cmd_res != 0 ]
542       then                                        542       then
543         npassed=$((npassed+1))                    543         npassed=$((npassed+1))
544         log_test_passed "$descr ($1 mode)"        544         log_test_passed "$descr ($1 mode)"
545       else                                        545       else
546         nfailed=$((nfailed+1))                    546         nfailed=$((nfailed+1))
547         log_test_failed "$descr ($1 mode)"        547         log_test_failed "$descr ($1 mode)"
548       fi                                          548       fi
549     else                                          549     else
550         run_test "out_bit$i" "$descr ($1 mode)    550         run_test "out_bit$i" "$descr ($1 mode)" $ioam_node_alpha \
551            $ioam_node_beta db01::1 ${bit2type[    551            $ioam_node_beta db01::1 ${bit2type[$i]} 123 $1
552     fi                                            552     fi
553   done                                            553   done
554                                                   554 
555   [ "$1" = "encap" ] && ip -netns $ioam_node_b    555   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 down
556                                                   556 
557   bit2size[22]=$tmp                               557   bit2size[22]=$tmp
558 }                                                 558 }
559                                                   559 
560 out_full_supp_trace()                             560 out_full_supp_trace()
561 {                                                 561 {
562   ############################################    562   ##############################################################################
563   # Make sure that the encap node will correct    563   # Make sure that the encap node will correctly fill a full trace. Be careful,#
564   # "full trace" here does NOT mean all bits (    564   # "full trace" here does NOT mean all bits (only supported ones).            #
565   ############################################    565   ##############################################################################
566   local desc="Full supported trace"               566   local desc="Full supported trace"
567                                                   567 
568   [ "$1" = "encap" ] && mode="$1 tundst db01::    568   [ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
569   [ "$1" = "encap" ] && ip -netns $ioam_node_b    569   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 up
570                                                   570 
571   ip -netns $ioam_node_alpha route change db01    571   ip -netns $ioam_node_alpha route change db01::/64 encap ioam6 mode $mode \
572          trace prealloc type 0xfff002 ns 123 s    572          trace prealloc type 0xfff002 ns 123 size 100 dev veth0
573                                                   573 
574   run_test ${FUNCNAME[0]} "${desc} ($1 mode)"     574   run_test ${FUNCNAME[0]} "${desc} ($1 mode)" $ioam_node_alpha $ioam_node_beta \
575          db01::1 0xfff002 123 $1                  575          db01::1 0xfff002 123 $1
576                                                   576 
577   [ "$1" = "encap" ] && ip -netns $ioam_node_b    577   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 down
578 }                                                 578 }
579                                                   579 
580                                                   580 
581 ##############################################    581 ################################################################################
582 #                                                 582 #                                                                              #
583 #                               INPUT tests       583 #                               INPUT tests                                    #
584 #                                                 584 #                                                                              #
585 #     Two nodes (sender/receiver), the sender     585 #     Two nodes (sender/receiver), the sender MUST NOT fill the trace upon     #
586 #     insertion -> the IOAM namespace configur    586 #     insertion -> the IOAM namespace configured on the sender is removed      #
587 #     and is used in the inserted trace to for    587 #     and is used in the inserted trace to force the sender not to fill it.    #
588 ##############################################    588 ################################################################################
589                                                   589 
590 in_undef_ns()                                     590 in_undef_ns()
591 {                                                 591 {
592   ############################################    592   ##############################################################################
593   # Make sure that the receiving node won't fi    593   # Make sure that the receiving node won't fill the trace if the related IOAM #
594   # namespace is not configured locally.          594   # namespace is not configured locally.                                       #
595   ############################################    595   ##############################################################################
596   local desc="Unknown IOAM namespace"             596   local desc="Unknown IOAM namespace"
597                                                   597 
598   [ "$1" = "encap" ] && mode="$1 tundst db01::    598   [ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
599   [ "$1" = "encap" ] && ip -netns $ioam_node_b    599   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 up
600                                                   600 
601   ip -netns $ioam_node_alpha route change db01    601   ip -netns $ioam_node_alpha route change db01::/64 encap ioam6 mode $mode \
602          trace prealloc type 0x800000 ns 0 siz    602          trace prealloc type 0x800000 ns 0 size 4 dev veth0
603                                                   603 
604   run_test ${FUNCNAME[0]} "${desc} ($1 mode)"     604   run_test ${FUNCNAME[0]} "${desc} ($1 mode)" $ioam_node_alpha $ioam_node_beta \
605          db01::1 0x800000 0 $1                    605          db01::1 0x800000 0 $1
606                                                   606 
607   [ "$1" = "encap" ] && ip -netns $ioam_node_b    607   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 down
608 }                                                 608 }
609                                                   609 
610 in_no_room()                                      610 in_no_room()
611 {                                                 611 {
612   ############################################    612   ##############################################################################
613   # Make sure that the receiving node won't fi    613   # Make sure that the receiving node won't fill the trace and will set the    #
614   # Overflow flag if there is no room enough f    614   # Overflow flag if there is no room enough for its data.                     #
615   ############################################    615   ##############################################################################
616   local desc="Missing trace room"                 616   local desc="Missing trace room"
617                                                   617 
618   [ "$1" = "encap" ] && mode="$1 tundst db01::    618   [ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
619   [ "$1" = "encap" ] && ip -netns $ioam_node_b    619   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 up
620                                                   620 
621   ip -netns $ioam_node_alpha route change db01    621   ip -netns $ioam_node_alpha route change db01::/64 encap ioam6 mode $mode \
622          trace prealloc type 0xc00000 ns 123 s    622          trace prealloc type 0xc00000 ns 123 size 4 dev veth0
623                                                   623 
624   run_test ${FUNCNAME[0]} "${desc} ($1 mode)"     624   run_test ${FUNCNAME[0]} "${desc} ($1 mode)" $ioam_node_alpha $ioam_node_beta \
625          db01::1 0xc00000 123 $1                  625          db01::1 0xc00000 123 $1
626                                                   626 
627   [ "$1" = "encap" ] && ip -netns $ioam_node_b    627   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 down
628 }                                                 628 }
629                                                   629 
630 in_bits()                                         630 in_bits()
631 {                                                 631 {
632   ############################################    632   ##############################################################################
633   # Make sure that, for each trace type bit, t    633   # Make sure that, for each trace type bit, the receiving node will either:   #
634   #  (i)  fill the trace with its data when it    634   #  (i)  fill the trace with its data when it is a supported bit              #
635   #  (ii) not fill the trace with its data whe    635   #  (ii) not fill the trace with its data when it is an unsupported bit       #
636   ############################################    636   ##############################################################################
637   local desc="Trace type with bit <n> only"       637   local desc="Trace type with bit <n> only"
638                                                   638 
639   local tmp=${bit2size[22]}                       639   local tmp=${bit2size[22]}
640   bit2size[22]=$(( $tmp + ${#BETA[9]} + ((4 -     640   bit2size[22]=$(( $tmp + ${#BETA[9]} + ((4 - (${#BETA[9]} % 4)) % 4) ))
641                                                   641 
642   [ "$1" = "encap" ] && mode="$1 tundst db01::    642   [ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
643   [ "$1" = "encap" ] && ip -netns $ioam_node_b    643   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 up
644                                                   644 
645   for i in {0..11} {22..22}                       645   for i in {0..11} {22..22}
646   do                                              646   do
647     ip -netns $ioam_node_alpha route change db    647     ip -netns $ioam_node_alpha route change db01::/64 encap ioam6 mode $mode \
648            trace prealloc type ${bit2type[$i]}    648            trace prealloc type ${bit2type[$i]} ns 123 size ${bit2size[$i]} \
649            dev veth0                              649            dev veth0
650                                                   650 
651     run_test "in_bit$i" "${desc/<n>/$i} ($1 mo    651     run_test "in_bit$i" "${desc/<n>/$i} ($1 mode)" $ioam_node_alpha \
652            $ioam_node_beta db01::1 ${bit2type[    652            $ioam_node_beta db01::1 ${bit2type[$i]} 123 $1
653   done                                            653   done
654                                                   654 
655   [ "$1" = "encap" ] && ip -netns $ioam_node_b    655   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 down
656                                                   656 
657   bit2size[22]=$tmp                               657   bit2size[22]=$tmp
658 }                                                 658 }
659                                                   659 
660 in_oflag()                                        660 in_oflag()
661 {                                                 661 {
662   ############################################    662   ##############################################################################
663   # Make sure that the receiving node won't fi    663   # Make sure that the receiving node won't fill the trace since the Overflow  #
664   # flag is set.                                  664   # flag is set.                                                               #
665   ############################################    665   ##############################################################################
666   local desc="Overflow flag is set"               666   local desc="Overflow flag is set"
667                                                   667 
668   # Exception:                                    668   # Exception:
669   #   Here, we need the sender to set the Over    669   #   Here, we need the sender to set the Overflow flag. For that, we will add
670   #   back the IOAM namespace that was previou    670   #   back the IOAM namespace that was previously configured on the sender.
671   ip -netns $ioam_node_alpha ioam namespace ad    671   ip -netns $ioam_node_alpha ioam namespace add 123
672                                                   672 
673   [ "$1" = "encap" ] && mode="$1 tundst db01::    673   [ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
674   [ "$1" = "encap" ] && ip -netns $ioam_node_b    674   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 up
675                                                   675 
676   ip -netns $ioam_node_alpha route change db01    676   ip -netns $ioam_node_alpha route change db01::/64 encap ioam6 mode $mode \
677          trace prealloc type 0xc00000 ns 123 s    677          trace prealloc type 0xc00000 ns 123 size 4 dev veth0
678                                                   678 
679   run_test ${FUNCNAME[0]} "${desc} ($1 mode)"     679   run_test ${FUNCNAME[0]} "${desc} ($1 mode)" $ioam_node_alpha $ioam_node_beta \
680          db01::1 0xc00000 123 $1                  680          db01::1 0xc00000 123 $1
681                                                   681 
682   [ "$1" = "encap" ] && ip -netns $ioam_node_b    682   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 down
683                                                   683 
684   # And we clean the exception for this test t    684   # And we clean the exception for this test to get things back to normal for
685   # other INPUT tests                             685   # other INPUT tests
686   ip -netns $ioam_node_alpha ioam namespace de    686   ip -netns $ioam_node_alpha ioam namespace del 123
687 }                                                 687 }
688                                                   688 
689 in_full_supp_trace()                              689 in_full_supp_trace()
690 {                                                 690 {
691   ############################################    691   ##############################################################################
692   # Make sure that the receiving node will cor    692   # Make sure that the receiving node will correctly fill a full trace. Be     #
693   # careful, "full trace" here does NOT mean a    693   # careful, "full trace" here does NOT mean all bits (only supported ones).   #
694   ############################################    694   ##############################################################################
695   local desc="Full supported trace"               695   local desc="Full supported trace"
696                                                   696 
697   [ "$1" = "encap" ] && mode="$1 tundst db01::    697   [ "$1" = "encap" ] && mode="$1 tundst db01::1" || mode="$1"
698   [ "$1" = "encap" ] && ip -netns $ioam_node_b    698   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 up
699                                                   699 
700   ip -netns $ioam_node_alpha route change db01    700   ip -netns $ioam_node_alpha route change db01::/64 encap ioam6 mode $mode \
701          trace prealloc type 0xfff002 ns 123 s    701          trace prealloc type 0xfff002 ns 123 size 80 dev veth0
702                                                   702 
703   run_test ${FUNCNAME[0]} "${desc} ($1 mode)"     703   run_test ${FUNCNAME[0]} "${desc} ($1 mode)" $ioam_node_alpha $ioam_node_beta \
704          db01::1 0xfff002 123 $1                  704          db01::1 0xfff002 123 $1
705                                                   705 
706   [ "$1" = "encap" ] && ip -netns $ioam_node_b    706   [ "$1" = "encap" ] && ip -netns $ioam_node_beta link set ip6tnl0 down
707 }                                                 707 }
708                                                   708 
709                                                   709 
710 ##############################################    710 ################################################################################
711 #                                                 711 #                                                                              #
712 #                              GLOBAL tests       712 #                              GLOBAL tests                                    #
713 #                                                 713 #                                                                              #
714 #   Three nodes (sender/router/receiver), IOAM    714 #   Three nodes (sender/router/receiver), IOAM fully enabled on every node.    #
715 ##############################################    715 ################################################################################
716                                                   716 
717 fwd_full_supp_trace()                             717 fwd_full_supp_trace()
718 {                                                 718 {
719   ############################################    719   ##############################################################################
720   # Make sure that all three nodes correctly f    720   # Make sure that all three nodes correctly filled the full supported trace   #
721   # by checking that the trace data is consist    721   # by checking that the trace data is consistent with the predefined config.  #
722   ############################################    722   ##############################################################################
723   local desc="Forward - Full supported trace"     723   local desc="Forward - Full supported trace"
724                                                   724 
725   [ "$1" = "encap" ] && mode="$1 tundst db02::    725   [ "$1" = "encap" ] && mode="$1 tundst db02::2" || mode="$1"
726   [ "$1" = "encap" ] && ip -netns $ioam_node_g    726   [ "$1" = "encap" ] && ip -netns $ioam_node_gamma link set ip6tnl0 up
727                                                   727 
728   ip -netns $ioam_node_alpha route change db02    728   ip -netns $ioam_node_alpha route change db02::/64 encap ioam6 mode $mode \
729          trace prealloc type 0xfff002 ns 123 s    729          trace prealloc type 0xfff002 ns 123 size 244 via db01::1 dev veth0
730                                                   730 
731   run_test ${FUNCNAME[0]} "${desc} ($1 mode)"     731   run_test ${FUNCNAME[0]} "${desc} ($1 mode)" $ioam_node_alpha $ioam_node_gamma \
732          db02::2 0xfff002 123 $1                  732          db02::2 0xfff002 123 $1
733                                                   733 
734   [ "$1" = "encap" ] && ip -netns $ioam_node_g    734   [ "$1" = "encap" ] && ip -netns $ioam_node_gamma link set ip6tnl0 down
735 }                                                 735 }
736                                                   736 
737                                                   737 
738 ##############################################    738 ################################################################################
739 #                                                 739 #                                                                              #
740 #                                     MAIN        740 #                                     MAIN                                     #
741 #                                                 741 #                                                                              #
742 ##############################################    742 ################################################################################
743                                                   743 
744 npassed=0                                         744 npassed=0
745 nfailed=0                                         745 nfailed=0
746                                                   746 
747 if [ "$(id -u)" -ne 0 ]                           747 if [ "$(id -u)" -ne 0 ]
748 then                                              748 then
749   echo "SKIP: Need root privileges"               749   echo "SKIP: Need root privileges"
750   exit $ksft_skip                                 750   exit $ksft_skip
751 fi                                                751 fi
752                                                   752 
753 if [ ! -x "$(command -v ip)" ]                    753 if [ ! -x "$(command -v ip)" ]
754 then                                              754 then
755   echo "SKIP: Could not run test without ip to    755   echo "SKIP: Could not run test without ip tool"
756   exit $ksft_skip                                 756   exit $ksft_skip
757 fi                                                757 fi
758                                                   758 
759 ip ioam &>/dev/null                               759 ip ioam &>/dev/null
760 if [ $? = 1 ]                                     760 if [ $? = 1 ]
761 then                                              761 then
762   echo "SKIP: iproute2 too old, missing ioam c    762   echo "SKIP: iproute2 too old, missing ioam command"
763   exit $ksft_skip                                 763   exit $ksft_skip
764 fi                                                764 fi
765                                                   765 
766 check_kernel_compatibility                        766 check_kernel_compatibility
767                                                   767 
768 cleanup &>/dev/null                               768 cleanup &>/dev/null
769 setup                                             769 setup
770 run                                               770 run
771 cleanup &>/dev/null                               771 cleanup &>/dev/null
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php