1# 2# Copyright (c) 2026 Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> 3# 4# SPDX-License-Identifier: BSD-2-Clause 5# 6 7. $(atf_get_srcdir)/../common/vnet.subr 8 9atf_test_case "gre4_basic" "cleanup" 10gre4_basic_head() 11{ 12 atf_set descr 'Create a gre(4) tunnel over ipv4 underlay' 13 atf_set require.user root 14 atf_set require.kmods if_gre 15} 16gre4_basic_body() 17{ 18 local epair endpoint1 endpoint2 19 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 20 21 endpoint1=192.168.2.1 22 endpoint2=192.168.2.2 23 v4tunnel1=169.254.0.1 24 v4tunnel2=169.254.0.2 25 v6tunnel1=2001:db8::1 26 v6tunnel2=2001:db8::2 27 28 vnet_init 29 epair=$(vnet_mkepair) 30 vnet_mkjail gretest1 ${epair}a 31 vnet_mkjail gretest2 ${epair}b 32 33 ifconfig -j gretest1 ${epair}a inet ${endpoint1}/30 up 34 ifconfig -j gretest2 ${epair}b inet ${endpoint2}/30 up 35 36 # Sanity check 37 atf_check -o ignore \ 38 jexec gretest1 ping -c 1 -t 3 ${endpoint2} 39 atf_check -o ignore \ 40 jexec gretest2 ping -c 1 -t 3 ${endpoint1} 41 42 atf_check ifconfig -j gretest1 gre1 create \ 43 inet tunnel ${endpoint1} ${endpoint2} up 44 atf_check ifconfig -j gretest2 gre1 create \ 45 inet tunnel ${endpoint2} ${endpoint1} up 46 47 atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2} 48 atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1} 49 atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1} 50 atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2} 51 52 # Tunnel test 53 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2 54 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1 55 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2 56 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1 57} 58gre4_basic_cleanup() 59{ 60 vnet_cleanup 61} 62 63atf_test_case "gre6_basic" "cleanup" 64gre6_basic_head() 65{ 66 atf_set descr 'Create a gre(4) tunnel over ipv6 underlay' 67 atf_set require.user root 68 atf_set require.kmods if_gre 69} 70gre6_basic_body() 71{ 72 local epair endpoint1 endpoint2 73 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 74 75 endpoint1=3fff::1 76 endpoint2=3fff::2 77 v4tunnel1=169.254.0.1 78 v4tunnel2=169.254.0.2 79 v6tunnel1=2001:db8::1 80 v6tunnel2=2001:db8::2 81 82 vnet_init 83 epair=$(vnet_mkepair) 84 vnet_mkjail gretest1 ${epair}a 85 vnet_mkjail gretest2 ${epair}b 86 87 ifconfig -j gretest1 ${epair}a inet6 ${endpoint1} up 88 ifconfig -j gretest2 ${epair}b inet6 ${endpoint2} up 89 90 # Sanity check 91 atf_check -o ignore \ 92 jexec gretest1 ping -c 1 -t 3 ${endpoint2} 93 atf_check -o ignore \ 94 jexec gretest2 ping -c 1 -t 3 ${endpoint1} 95 96 atf_check ifconfig -j gretest1 gre1 create \ 97 inet6 tunnel ${endpoint1} ${endpoint2} up 98 atf_check ifconfig -j gretest2 gre1 create \ 99 inet6 tunnel ${endpoint2} ${endpoint1} up 100 101 atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2} 102 atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1} 103 atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1} 104 atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2} 105 106 # Tunnel test 107 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2 108 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1 109 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2 110 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1 111} 112gre6_basic_cleanup() 113{ 114 vnet_cleanup 115} 116 117atf_test_case "gre6_csum" "cleanup" 118gre6_csum_head() 119{ 120 atf_set descr 'Create a gre(4) tunnel over ipv6 underlay with checksum option' 121 atf_set require.user root 122 atf_set require.kmods if_gre 123} 124gre6_csum_body() 125{ 126 local epair endpoint1 endpoint2 127 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 128 129 endpoint1=3fff::1 130 endpoint2=3fff::2 131 v4tunnel1=169.254.0.1 132 v4tunnel2=169.254.0.2 133 v6tunnel1=2001:db8::1 134 v6tunnel2=2001:db8::2 135 136 vnet_init 137 epair=$(vnet_mkepair) 138 vnet_mkjail gretest1 ${epair}a 139 vnet_mkjail gretest2 ${epair}b 140 141 ifconfig -j gretest1 ${epair}a inet6 ${endpoint1} up 142 ifconfig -j gretest2 ${epair}b inet6 ${endpoint2} up 143 144 # Sanity check 145 atf_check -o ignore \ 146 jexec gretest1 ping -c 1 -t 3 ${endpoint2} 147 atf_check -o ignore \ 148 jexec gretest2 ping -c 1 -t 3 ${endpoint1} 149 150 atf_check ifconfig -j gretest1 gre1 create \ 151 inet6 tunnel ${endpoint1} ${endpoint2} enable_csum up 152 atf_check ifconfig -j gretest2 gre1 create \ 153 inet6 tunnel ${endpoint2} ${endpoint1} enable_csum up 154 155 atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2} 156 atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1} 157 atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1} 158 atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2} 159 160 # ifconfig test 161 atf_check -o match:"ENABLE_CSUM" ifconfig -j gretest1 gre1 162 atf_check -o match:"ENABLE_CSUM" ifconfig -j gretest2 gre1 163 164 # Tunnel test 165 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2 166 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1 167 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2 168 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1 169} 170gre6_csum_cleanup() 171{ 172 vnet_cleanup 173} 174 175atf_test_case "gre6_key" "cleanup" 176gre6_key_head() 177{ 178 atf_set descr 'Create a gre(4) tunnel over ipv6 underlay with gre key option' 179 atf_set require.user root 180 atf_set require.kmods if_gre 181} 182gre6_key_body() 183{ 184 local epair endpoint1 endpoint2 185 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 186 187 endpoint1=3fff::1 188 endpoint2=3fff::2 189 v4tunnel1=169.254.0.1 190 v4tunnel2=169.254.0.2 191 v6tunnel1=2001:db8::1 192 v6tunnel2=2001:db8::2 193 194 vnet_init 195 epair=$(vnet_mkepair) 196 vnet_mkjail gretest1 ${epair}a 197 vnet_mkjail gretest2 ${epair}b 198 199 ifconfig -j gretest1 ${epair}a inet6 ${endpoint1} up 200 ifconfig -j gretest2 ${epair}b inet6 ${endpoint2} up 201 202 # Sanity check 203 atf_check -o ignore \ 204 jexec gretest1 ping -c 1 -t 3 ${endpoint2} 205 atf_check -o ignore \ 206 jexec gretest2 ping -c 1 -t 3 ${endpoint1} 207 208 atf_check ifconfig -j gretest1 gre1 create \ 209 inet6 tunnel ${endpoint1} ${endpoint2} grekey 10 up 210 atf_check ifconfig -j gretest2 gre1 create \ 211 inet6 tunnel ${endpoint2} ${endpoint1} grekey 10 up 212 213 atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2} 214 atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1} 215 atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1} 216 atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2} 217 218 # ifconfig test 219 atf_check -o match:"grekey: 0xa \(10\)" ifconfig -j gretest1 gre1 220 atf_check -o match:"grekey: 0xa \(10\)" ifconfig -j gretest2 gre1 221 222 # Tunnel test 223 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2 224 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1 225 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2 226 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1 227} 228gre6_key_cleanup() 229{ 230 vnet_cleanup 231} 232 233atf_test_case "gre6_seq" "cleanup" 234gre6_seq_head() 235{ 236 atf_set descr 'Create a sequenced gre(4) tunnel over ipv6 underlay' 237 atf_set require.user root 238 atf_set require.kmods if_gre 239} 240gre6_seq_body() 241{ 242 local epair endpoint1 endpoint2 243 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 244 245 endpoint1=3fff::1 246 endpoint2=3fff::2 247 v4tunnel1=169.254.0.1 248 v4tunnel2=169.254.0.2 249 v6tunnel1=2001:db8::1 250 v6tunnel2=2001:db8::2 251 252 vnet_init 253 epair=$(vnet_mkepair) 254 vnet_mkjail gretest1 ${epair}a 255 vnet_mkjail gretest2 ${epair}b 256 257 ifconfig -j gretest1 ${epair}a inet6 ${endpoint1} up 258 ifconfig -j gretest2 ${epair}b inet6 ${endpoint2} up 259 260 # Sanity check 261 atf_check -o ignore \ 262 jexec gretest1 ping -c 1 -t 3 ${endpoint2} 263 atf_check -o ignore \ 264 jexec gretest2 ping -c 1 -t 3 ${endpoint1} 265 266 atf_check ifconfig -j gretest1 gre1 create \ 267 inet6 tunnel ${endpoint1} ${endpoint2} enable_seq up 268 atf_check ifconfig -j gretest2 gre1 create \ 269 inet6 tunnel ${endpoint2} ${endpoint1} enable_seq up 270 271 atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2} 272 atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1} 273 atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1} 274 atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2} 275 276 # ifconfig test 277 atf_check -o match:"ENABLE_SEQ" ifconfig -j gretest1 gre1 278 atf_check -o match:"ENABLE_SEQ" ifconfig -j gretest2 gre1 279 280 # Tunnel test 281 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2 282 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1 283 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2 284 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1 285} 286gre6_seq_cleanup() 287{ 288 vnet_cleanup 289} 290 291atf_test_case "gre6_udpencap" "cleanup" 292gre6_udpencap_head() 293{ 294 atf_set descr 'Create a gre(4) over UDP tunnel with ipv6 underlay' 295 atf_set require.user root 296 atf_set require.kmods if_gre 297} 298gre6_udpencap_body() 299{ 300 local epair endpoint1 endpoint2 301 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 302 303 endpoint1=3fff::1 304 endpoint2=3fff::2 305 v4tunnel1=169.254.0.1 306 v4tunnel2=169.254.0.2 307 v6tunnel1=2001:db8::1 308 v6tunnel2=2001:db8::2 309 310 vnet_init 311 epair=$(vnet_mkepair) 312 vnet_mkjail gretest1 ${epair}a 313 vnet_mkjail gretest2 ${epair}b 314 315 ifconfig -j gretest1 ${epair}a inet6 ${endpoint1} up 316 ifconfig -j gretest2 ${epair}b inet6 ${endpoint2} up 317 318 # Sanity check 319 atf_check -o ignore \ 320 jexec gretest1 ping -c 1 -t 3 ${endpoint2} 321 atf_check -o ignore \ 322 jexec gretest2 ping -c 1 -t 3 ${endpoint1} 323 324 atf_check ifconfig -j gretest1 gre1 create \ 325 inet6 tunnel ${endpoint1} ${endpoint2} udpencap up 326 atf_check ifconfig -j gretest2 gre1 create \ 327 inet6 tunnel ${endpoint2} ${endpoint1} udpencap udpport 55555 up 328 329 atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2} 330 atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1} 331 atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1} 332 atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2} 333 334 # ifconfig test 335 atf_check -o match:"UDPENCAP" ifconfig -j gretest1 gre1 336 atf_check -o match:"udpport: 55555" ifconfig -j gretest2 gre1 337 338 # Tunnel test 339 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2 340 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1 341 atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2 342 atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1 343} 344gre6_udpencap_cleanup() 345{ 346 vnet_cleanup 347} 348 349atf_test_case "gre_blind_options" "cleanup" 350gre_blind_options_head() 351{ 352 atf_set descr 'Test gre(4) tunnel options without verifying its effect on dataplane.' 353 atf_set require.user root 354 atf_set require.kmods if_gre 355} 356gre_blind_options_body() 357{ 358 local gre 359 360 v4tunnel1=169.254.0.1 361 v4tunnel2=169.254.0.2 362 v6tunnel1=2001:db8::1 363 v6tunnel2=2001:db8::2 364 365 vnet_init 366 vnet_mkjail gretest 367 368 gre=$(ifconfig -j gretest gre create \ 369 enable_seq grekey 10 enable_csum udpencap udpport 55555 up) 370 371 atf_check ifconfig -j gretest $gre inet ${v4tunnel1} ${v4tunnel2} 372 atf_check ifconfig -j gretest $gre inet6 ${v6tunnel1} 373 374 # ifconfig test 375 atf_check -o match:"grekey: 0xa \(10\)" ifconfig -j gretest $gre 376 atf_check -o match:"ENABLE_CSUM" ifconfig -j gretest $gre 377 atf_check -o match:"ENABLE_SEQ" ifconfig -j gretest $gre 378 atf_check -o match:"UDPENCAP" ifconfig -j gretest $gre 379 atf_check -o match:"udpport: 55555" ifconfig -j gretest $gre 380} 381gre_blind_options_cleanup() 382{ 383 vnet_cleanup 384} 385 386 387atf_init_test_cases() 388{ 389 atf_add_test_case "gre4_basic" 390 atf_add_test_case "gre6_basic" 391 atf_add_test_case "gre6_csum" 392 atf_add_test_case "gre6_key" 393 atf_add_test_case "gre6_seq" 394 atf_add_test_case "gre6_udpencap" 395 atf_add_test_case "gre_blind_options" 396} 397