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
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.