1# 2# SPDX-License-Identifier: BSD-2-Clause 3# 4# Copyright (c) 2025-2026 Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25# SUCH DAMAGE. 26 27. $(atf_get_srcdir)/../common/vnet.subr 28 29atf_test_case "ether_ipv4" "cleanup" 30ether_ipv4_head() 31{ 32 atf_set descr 'Create a geneve(4) l2 tunnel over an ipv4 underlay using epair and pass traffic between jails' 33 atf_set require.user root 34 atf_set require.kmods if_geneve 35} 36 37ether_ipv4_body() 38{ 39 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 40 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 41 42 endpoint1=192.168.2.1 43 endpoint2=192.168.2.2 44 v4tunnel1=169.254.0.1 45 v4tunnel2=169.254.0.2 46 v6tunnel1=2001:db8::1 47 v6tunnel2=2001:db8::2 48 vni1=1 49 50 vnet_init 51 epair=$(vnet_mkepair) 52 vnet_mkjail genevetest1 ${epair}a 53 vnet_mkjail genevetest2 ${epair}b 54 55 ifconfig -j genevetest1 ${epair}a inet ${endpoint1}/24 up 56 ifconfig -j genevetest2 ${epair}b inet ${endpoint2}/24 up 57 58 atf_check -s exit:0 -o ignore \ 59 ifconfig -j genevetest1 geneve1 create genevemode l2 debug \ 60 geneveid $vni1 geneveremote ${endpoint2} genevelocal ${endpoint1} up 61 atf_check -s exit:0 -o ignore \ 62 ifconfig -j genevetest2 geneve1 create genevemode l2 debug \ 63 geneveid $vni1 geneveremote ${endpoint1} genevelocal ${endpoint2} up 64 65 atf_check -s exit:0 -o ignore \ 66 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/24 67 atf_check -s exit:0 -o ignore \ 68 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 69 atf_check -s exit:0 -o ignore \ 70 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/24 71 atf_check -s exit:0 -o ignore \ 72 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 73 74 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 75 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 76 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 77 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 78} 79 80ether_ipv4_cleanup() 81{ 82 vnet_cleanup 83} 84 85atf_test_case "ether_ipv6" "cleanup" 86ether_ipv6_head() 87{ 88 atf_set descr 'Create a geneve(4) l2 tunnel over an ipv6 underlay using epair and pass traffic between jails' 89 atf_set require.user root 90 atf_set require.kmods if_geneve 91} 92 93ether_ipv6_body() 94{ 95 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 96 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 97 98 endpoint1=3fff::1 99 endpoint2=3fff::2 100 v4tunnel1=169.254.0.1 101 v4tunnel2=169.254.0.2 102 v6tunnel1=2001:db8::1 103 v6tunnel2=2001:db8::2 104 vni1=1 105 106 vnet_init 107 epair=$(vnet_mkepair) 108 vnet_mkjail genevetest1 ${epair}a 109 vnet_mkjail genevetest2 ${epair}b 110 111 ifconfig -j genevetest1 ${epair}a inet6 ${endpoint1} up 112 ifconfig -j genevetest2 ${epair}b inet6 ${endpoint2} up 113 114 atf_check -s exit:0 -o ignore \ 115 ifconfig -j genevetest1 geneve1 create genevemode l2 debug \ 116 geneveid $vni1 geneveremote ${endpoint2} genevelocal ${endpoint1} up 117 atf_check -s exit:0 -o ignore \ 118 ifconfig -j genevetest2 geneve1 create genevemode l2 debug \ 119 geneveid $vni1 geneveremote ${endpoint1} genevelocal ${endpoint2} up 120 121 atf_check -s exit:0 -o ignore \ 122 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/24 123 atf_check -s exit:0 -o ignore \ 124 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 125 atf_check -s exit:0 -o ignore \ 126 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/24 127 atf_check -s exit:0 -o ignore \ 128 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 129 130 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 131 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 132 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 133 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 134} 135 136ether_ipv6_cleanup() 137{ 138 vnet_cleanup 139} 140 141atf_test_case "inherit_ipv4" "cleanup" 142inherit_ipv4_head() 143{ 144 atf_set descr 'Create a geneve(4) l3 tunnel over an ipv4 underlay using epair and pass traffic between jails' 145 atf_set require.user root 146 atf_set require.kmods if_geneve 147} 148 149inherit_ipv4_body() 150{ 151 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 152 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 153 154 endpoint1=192.168.2.1 155 endpoint2=192.168.2.2 156 v4tunnel1=169.254.0.1 157 v4tunnel2=169.254.0.2 158 v6tunnel1=2001:db8::1 159 v6tunnel2=2001:db8::2 160 vni1=2 161 162 vnet_init 163 epair=$(vnet_mkepair) 164 vnet_mkjail genevetest1 ${epair}a 165 vnet_mkjail genevetest2 ${epair}b 166 167 ifconfig -j genevetest1 ${epair}a inet ${endpoint1}/24 up 168 ifconfig -j genevetest2 ${epair}b inet ${endpoint2}/24 up 169 170 atf_check -s exit:0 -o ignore \ 171 ifconfig -j genevetest1 geneve1 create genevemode l3 debug \ 172 geneveid $vni1 geneveremote ${endpoint2} genevelocal ${endpoint1} up 173 atf_check -s exit:0 -o ignore \ 174 ifconfig -j genevetest2 geneve1 create genevemode l3 debug \ 175 geneveid $vni1 geneveremote ${endpoint1} genevelocal ${endpoint2} up 176 177 atf_check -s exit:0 -o ignore \ 178 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/24 179 atf_check -s exit:0 -o ignore \ 180 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 181 atf_check -s exit:0 -o ignore \ 182 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/24 183 atf_check -s exit:0 -o ignore \ 184 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 185 186 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 187 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 188 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 189 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 190} 191 192inherit_ipv4_cleanup() 193{ 194 vnet_cleanup 195} 196 197atf_test_case "inherit_ipv6" "cleanup" 198inherit_ipv6_head() 199{ 200 atf_set descr 'Create a geneve(4) l3 tunnel over an ipv6 underlay using epair and pass traffic between jails' 201 atf_set require.user root 202 atf_set require.kmods if_geneve 203} 204 205inherit_ipv6_body() 206{ 207 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 208 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 209 210 endpoint1=3fff::1 211 endpoint2=3fff::2 212 v4tunnel1=169.254.0.1 213 v4tunnel2=169.254.0.2 214 v6tunnel1=2001:db8::1 215 v6tunnel2=2001:db8::2 216 vni1=1 217 218 vnet_init 219 epair=$(vnet_mkepair) 220 vnet_mkjail genevetest1 ${epair}a 221 vnet_mkjail genevetest2 ${epair}b 222 223 ifconfig -j genevetest1 ${epair}a inet6 ${endpoint1} up 224 ifconfig -j genevetest2 ${epair}b inet6 ${endpoint2} up 225 226 atf_check -s exit:0 -o ignore \ 227 ifconfig -j genevetest1 geneve1 create genevemode l3 debug \ 228 geneveid $vni1 geneveremote ${endpoint2} genevelocal ${endpoint1} up 229 atf_check -s exit:0 -o ignore \ 230 ifconfig -j genevetest2 geneve1 create genevemode l3 debug \ 231 geneveid $vni1 geneveremote ${endpoint1} genevelocal ${endpoint2} up 232 233 atf_check -s exit:0 -o ignore \ 234 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/24 235 atf_check -s exit:0 -o ignore \ 236 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 237 atf_check -s exit:0 -o ignore \ 238 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/24 239 atf_check -s exit:0 -o ignore \ 240 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 241 242 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 243 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 244 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 245 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 246} 247 248inherit_ipv6_cleanup() 249{ 250 vnet_cleanup 251} 252 253atf_test_case "ether_ipv6_blind_options" "cleanup" 254ether_ipv6_blind_options_head() 255{ 256 atf_set descr 'Create a geneve(4) l2 ipv6 tunnel and test geneve options' 257 atf_set require.user root 258 atf_set require.kmods if_geneve 259} 260 261ether_ipv6_blind_options_body() 262{ 263 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 264 local v6tunnel1 v6tunnel2 265 266 endpoint1=3fff::1 267 endpoint2=3fff::2 268 v6tunnel1=2001:db8::1 269 v6tunnel2=2001:db8::2 270 vni1=1 271 272 vnet_init 273 epair=$(vnet_mkepair) 274 vnet_mkjail genevetest1 ${epair}a 275 vnet_mkjail genevetest2 ${epair}b 276 277 ifconfig -j genevetest1 ${epair}a inet6 ${endpoint1} up 278 ifconfig -j genevetest2 ${epair}b inet6 ${endpoint2} up 279 280 atf_check -s exit:0 -o ignore \ 281 ifconfig -j genevetest1 geneve1 create genevemode l2 debug \ 282 geneveid $vni1 geneveremote ${endpoint2} genevelocal ${endpoint1} up 283 atf_check -s exit:0 -o ignore \ 284 ifconfig -j genevetest2 geneve1 create genevemode l2 debug \ 285 geneveid $vni1 geneveremote ${endpoint1} genevelocal ${endpoint2} up 286 287 atf_check -s exit:0 -o ignore \ 288 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 289 atf_check -s exit:0 -o ignore \ 290 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 291 292 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 293 294 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 genevemaxaddr 1000 295 atf_check -s exit:0 -o match:"max: 1000" ifconfig -j genevetest1 -v geneve1 296 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 genevetimeout 1000 297 atf_check -s exit:0 -o match:"timeout: 1000" ifconfig -j genevetest1 -v geneve1 298 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 -genevelearn 299 atf_check -s exit:0 -o match:"mode: nolearning" ifconfig -j genevetest1 -v geneve1 300 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 genevelearn 301 atf_check -s exit:0 -o match:" learning" ifconfig -j genevetest1 -v geneve1 302 atf_check -s exit:0 -o match:"count: 1" ifconfig -j genevetest1 -v geneve1 303 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 geneveflush 304 atf_check -s exit:0 -o match:"count: 0" ifconfig -j genevetest1 -v geneve1 305 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 geneveflushall 306 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 genevettl inherit 307 atf_check -s exit:0 -o match:"ttl: inherit" ifconfig -j genevetest1 -v geneve1 308 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 genevettl 1 309 atf_check -s exit:0 -o match:"ttl: 1" ifconfig -j genevetest1 -v geneve1 310 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 down genevedf set up 311 atf_check -s exit:0 -o match:"df: set" ifconfig -j genevetest1 -v geneve1 312 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 down genevedf inherit up 313 atf_check -s exit:0 -o match:"df: inherit" ifconfig -j genevetest1 -v geneve1 314 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 down genevedf unset up 315 atf_check -s exit:0 -o match:"df: unset" ifconfig -j genevetest1 -v geneve1 316 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 genevedscpinherit 317 atf_check -s exit:0 -o match:"dscp: inherit" ifconfig -j genevetest1 -v geneve1 318 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 -genevedscpinherit 319 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 geneveexternal 320 atf_check -s exit:0 -o match:" external" ifconfig -j genevetest1 -v geneve1 321 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 -geneveexternal 322 atf_check -s exit:0 -o ignore \ 323 ifconfig -j genevetest1 geneve1 down geneveportrange 11000 62000 up 324 atf_check -s exit:0 -o match:"portrange: 11000-62000" ifconfig -j genevetest1 -v geneve1 325 326 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 327} 328 329ether_ipv6_blind_options_cleanup() 330{ 331 vnet_cleanup 332} 333 334atf_test_case "ether_ipv6_external" "cleanup" 335ether_ipv6_external_head() 336{ 337 atf_set descr 'Create a geneve(4) l2 ipv6 tunnel and test geneve collect metadata' 338 atf_set require.user root 339 atf_set require.kmods if_geneve 340} 341 342ether_ipv6_external_body() 343{ 344 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 345 local v6tunnel1 v6tunnel2 346 347 endpoint1=3fff::1 348 endpoint2=3fff::2 349 v6tunnel1=2001:db8::1 350 v6tunnel2=2001:db8::2 351 vni1=1 352 353 vnet_init 354 epair=$(vnet_mkepair) 355 vnet_mkjail genevetest1 ${epair}a 356 vnet_mkjail genevetest2 ${epair}b 357 358 ifconfig -j genevetest1 ${epair}a inet6 ${endpoint1} up 359 ifconfig -j genevetest2 ${epair}b inet6 ${endpoint2} up 360 361 atf_check -s exit:0 -o ignore \ 362 ifconfig -j genevetest1 geneve1 create genevemode l2 debug \ 363 geneveid $vni1 geneveremote ${endpoint2} genevelocal ${endpoint1} up 364 atf_check -s exit:0 -o ignore \ 365 ifconfig -j genevetest2 geneve1 create genevemode l2 debug \ 366 geneveid $vni1 geneveremote ${endpoint1} genevelocal ${endpoint2} up 367 368 atf_check -s exit:0 -o ignore \ 369 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 370 atf_check -s exit:0 -o ignore \ 371 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 372 373 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 374 375 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 geneveexternal 376 atf_check -s exit:16 -e ignore ifconfig -j genevetest1 geneve1 down geneveid 10 up 377 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 -geneveexternal 378 atf_check -s exit:0 -o ignore ifconfig -j genevetest1 geneve1 down geneveid 10 up 379 380} 381 382ether_ipv6_external_cleanup() 383{ 384 vnet_cleanup 385} 386 387atf_test_case "ether_ipv4_multicast" "cleanup" 388ether_ipv4_multicast_head() 389{ 390 atf_set descr 'Create a geneve(4) l2 ipv4 multicast tunnel using epair and pass traffic between jails' 391 atf_set require.user root 392 atf_set require.kmods if_geneve ip_mroute 393} 394 395ether_ipv4_multicast_body() 396{ 397 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 mc_group 398 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 399 400 endpoint1=192.168.2.1 401 endpoint2=192.168.2.2 402 mc_group=239.0.0.1 403 v4tunnel1=169.254.0.1 404 v4tunnel2=169.254.0.2 405 v6tunnel1=2001:db8::1 406 v6tunnel2=2001:db8::2 407 vni1=1 408 409 vnet_init 410 epair=$(vnet_mkepair) 411 vnet_mkjail genevetest1 ${epair}a 412 vnet_mkjail genevetest2 ${epair}b 413 414 ifconfig -j genevetest1 ${epair}a inet ${endpoint1}/24 up 415 ifconfig -j genevetest2 ${epair}b inet ${endpoint2}/24 up 416 417 # manually add the multicast routes to epairs 418 route -j genevetest1 add -net 239.0.0.0/8 -interface ${epair}a 419 route -j genevetest2 add -net 239.0.0.0/8 -interface ${epair}b 420 421 atf_check -s exit:0 -o ignore \ 422 ifconfig -j genevetest1 geneve1 create genevemode l2 debug \ 423 geneveid $vni1 genevelocal ${endpoint1} \ 424 genevegroup ${mc_group} genevedev ${epair}a up 425 atf_check -s exit:0 -o ignore \ 426 ifconfig -j genevetest2 geneve1 create genevemode l2 debug \ 427 geneveid $vni1 genevelocal ${endpoint2} \ 428 genevegroup ${mc_group} genevedev ${epair}b up 429 430 atf_check -s exit:0 -o ignore \ 431 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/24 432 atf_check -s exit:0 -o ignore \ 433 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 434 atf_check -s exit:0 -o ignore \ 435 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/24 436 atf_check -s exit:0 -o ignore \ 437 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 438 439 atf_check -s exit:0 -o match:"group 239.0.0.1" jexec genevetest1 ifmcstat -i ${epair}a -f inet 440 atf_check -s exit:0 -o match:"group 239.0.0.1" jexec genevetest2 ifmcstat -i ${epair}b -f inet 441 442 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 443 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 444 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 445 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 446} 447 448ether_ipv4_multicast_cleanup() 449{ 450 vnet_cleanup 451} 452 453atf_test_case "ether_ipv6_multicast" "cleanup" 454ether_ipv6_multicast_head() 455{ 456 atf_set descr 'Create a geneve(4) l2 ipv6 multicast tunnel using epair and pass traffic between jails' 457 atf_set require.user root 458 atf_set require.kmods if_geneve ip6_mroute 459} 460 461ether_ipv6_multicast_body() 462{ 463 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 mc_group 464 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 465 466 endpoint1=3fff::1 467 endpoint2=3fff::2 468 mc_group=ff08::db8:0:1 469 v4tunnel1=169.254.0.1 470 v4tunnel2=169.254.0.2 471 v6tunnel1=2001:db8::1 472 v6tunnel2=2001:db8::2 473 vni1=1 474 475 vnet_init 476 epair=$(vnet_mkepair) 477 vnet_mkjail genevetest1 ${epair}a 478 vnet_mkjail genevetest2 ${epair}b 479 480 ifconfig -j genevetest1 ${epair}a inet6 ${endpoint1} up 481 ifconfig -j genevetest2 ${epair}b inet6 ${endpoint2} up 482 483 # manually add the multicast routes to epairs 484 route -j genevetest1 -n6 add -net ff08::db8:0:1/96 -interface ${epair}a 485 route -j genevetest2 -n6 add -net ff08::db8:0:1/96 -interface ${epair}b 486 487 atf_check -s exit:0 -o ignore \ 488 ifconfig -j genevetest1 geneve1 create genevemode l2 debug \ 489 geneveid $vni1 genevelocal ${endpoint1} \ 490 genevegroup ${mc_group} genevedev ${epair}a up 491 atf_check -s exit:0 -o ignore \ 492 ifconfig -j genevetest2 geneve1 create genevemode l2 debug \ 493 geneveid $vni1 genevelocal ${endpoint2} \ 494 genevegroup ${mc_group} genevedev ${epair}b up 495 496 atf_check -s exit:0 -o ignore \ 497 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/24 498 atf_check -s exit:0 -o ignore \ 499 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 500 atf_check -s exit:0 -o ignore \ 501 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/24 502 atf_check -s exit:0 -o ignore \ 503 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 504 505 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 506 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 507 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 508 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 509} 510 511ether_ipv6_multicast_cleanup() 512{ 513 vnet_cleanup 514} 515 516atf_test_case "ether_ipv4_multicast_without_dev" "cleanup" 517ether_ipv4_multicast_without_dev_head() 518{ 519 atf_set descr 'Create a geneve(4) l2 ipv4 multicast tunnel without specifying genevedev using epair and pass traffic between jails' 520 atf_set require.user root 521 atf_set require.kmods if_geneve ip_mroute 522} 523 524ether_ipv4_multicast_without_dev_body() 525{ 526 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 mc_group 527 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 528 529 endpoint1=192.168.2.1 530 endpoint2=192.168.2.2 531 mc_group=239.0.0.1 532 v4tunnel1=169.254.0.1 533 v4tunnel2=169.254.0.2 534 v6tunnel1=2001:db8::1 535 v6tunnel2=2001:db8::2 536 vni1=1 537 538 vnet_init 539 epair=$(vnet_mkepair) 540 vnet_mkjail genevetest1 ${epair}a 541 vnet_mkjail genevetest2 ${epair}b 542 543 ifconfig -j genevetest1 ${epair}a inet ${endpoint1}/24 up 544 ifconfig -j genevetest2 ${epair}b inet ${endpoint2}/24 up 545 546 # manually add the multicast routes to epairs 547 route -j genevetest1 add -net 239.0.0.0/8 -interface ${epair}a 548 route -j genevetest2 add -net 239.0.0.0/8 -interface ${epair}b 549 550 atf_check -s exit:0 -o ignore \ 551 ifconfig -j genevetest1 geneve1 create genevemode l2 debug \ 552 geneveid $vni1 genevelocal ${endpoint1} genevegroup ${mc_group} up 553 atf_check -s exit:0 -o ignore \ 554 ifconfig -j genevetest2 geneve1 create genevemode l2 debug \ 555 geneveid $vni1 genevelocal ${endpoint2} genevegroup ${mc_group} up 556 557 atf_check -s exit:0 -o ignore \ 558 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/24 559 atf_check -s exit:0 -o ignore \ 560 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 561 atf_check -s exit:0 -o ignore \ 562 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/24 563 atf_check -s exit:0 -o ignore \ 564 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 565 566 atf_check -s exit:0 -o match:"group 239.0.0.1" jexec genevetest1 ifmcstat -i ${epair}a -f inet 567 atf_check -s exit:0 -o match:"group 239.0.0.1" jexec genevetest2 ifmcstat -i ${epair}b -f inet 568 569 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 570 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 571 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 572 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 573 574} 575 576ether_ipv4_multicast_without_dev_cleanup() 577{ 578 vnet_cleanup 579} 580 581 582atf_test_case "ether_ipv6_multicast_without_dev" "cleanup" 583ether_ipv6_multicast_without_dev_head() 584{ 585 atf_set descr 'Create a geneve(4) l2 ipv6 multicast tunnel without specifying genevedev using epair and pass traffic between jails' 586 atf_set require.user root 587 atf_set require.kmods if_geneve ip6_mroute 588} 589 590ether_ipv6_multicast_without_dev_body() 591{ 592 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 mc_group 593 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 594 595 endpoint1=3fff::1 596 endpoint2=3fff::2 597 mc_group=ff08::db8:0:1 598 v4tunnel1=169.254.0.1 599 v4tunnel2=169.254.0.2 600 v6tunnel1=2001:db8::1 601 v6tunnel2=2001:db8::2 602 vni1=1 603 604 vnet_init 605 epair=$(vnet_mkepair) 606 vnet_mkjail genevetest1 ${epair}a 607 vnet_mkjail genevetest2 ${epair}b 608 609 ifconfig -j genevetest1 ${epair}a inet6 ${endpoint1} up 610 ifconfig -j genevetest2 ${epair}b inet6 ${endpoint2} up 611 612 # manually add the multicast routes to epairs 613 route -j genevetest1 -n6 add -net ff08::db8:0:1/96 -interface ${epair}a 614 route -j genevetest2 -n6 add -net ff08::db8:0:1/96 -interface ${epair}b 615 616 atf_check -s exit:0 -o ignore \ 617 ifconfig -j genevetest1 geneve1 create genevemode l2 debug \ 618 geneveid $vni1 genevelocal ${endpoint1} genevegroup ${mc_group} up 619 atf_check -s exit:0 -o ignore \ 620 ifconfig -j genevetest2 geneve1 create genevemode l2 debug \ 621 geneveid $vni1 genevelocal ${endpoint2} genevegroup ${mc_group} up 622 623 atf_check -s exit:0 -o ignore \ 624 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/24 625 atf_check -s exit:0 -o ignore \ 626 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 627 atf_check -s exit:0 -o ignore \ 628 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/24 629 atf_check -s exit:0 -o ignore \ 630 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 631 632 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 633 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 634 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 635 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 636 637} 638 639ether_ipv6_multicast_without_dev_cleanup() 640{ 641 vnet_cleanup 642} 643 644atf_test_case "inherit_ipv4_multicast" "cleanup" 645inherit_ipv4_multicast_head() 646{ 647 atf_set descr 'Create a geneve(4) l3 ipv4 multicast tunnel using epair and pass traffic between jails' 648 atf_set require.user root 649 atf_set require.kmods if_geneve ip_mroute 650} 651 652inherit_ipv4_multicast_body() 653{ 654 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 mc_group 655 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 656 657 endpoint1=192.168.2.1 658 endpoint2=192.168.2.2 659 mc_group=239.0.0.1 660 v4tunnel1=169.254.0.1 661 v4tunnel2=169.254.0.2 662 v6tunnel1=2001:db8::1 663 v6tunnel2=2001:db8::2 664 vni1=1 665 666 vnet_init 667 epair=$(vnet_mkepair) 668 vnet_mkjail genevetest1 ${epair}a 669 vnet_mkjail genevetest2 ${epair}b 670 671 ifconfig -j genevetest1 ${epair}a inet ${endpoint1}/24 up 672 ifconfig -j genevetest2 ${epair}b inet ${endpoint2}/24 up 673 674 # manually add the multicast routes to epairs 675 route -j genevetest1 add -net 239.0.0.0/8 -interface ${epair}a 676 route -j genevetest2 add -net 239.0.0.0/8 -interface ${epair}b 677 678 atf_check -s exit:0 -o ignore \ 679 ifconfig -j genevetest1 geneve1 create genevemode l3 debug \ 680 geneveid $vni1 genevelocal ${endpoint1} \ 681 genevegroup ${mc_group} genevedev ${epair}a up 682 atf_check -s exit:0 -o ignore \ 683 ifconfig -j genevetest2 geneve1 create genevemode l3 debug \ 684 geneveid $vni1 genevelocal ${endpoint2} \ 685 genevegroup ${mc_group} genevedev ${epair}b up 686 687 atf_check -s exit:0 -o ignore \ 688 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/30 689 atf_check -s exit:0 -o ignore \ 690 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 691 atf_check -s exit:0 -o ignore \ 692 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/30 693 atf_check -s exit:0 -o ignore \ 694 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 695 696 atf_check -s exit:0 -o ignore sysctl -j genevetest1 net.inet.icmp.bmcastecho=1 697 atf_check -s exit:0 -o ignore sysctl -j genevetest2 net.inet.icmp.bmcastecho=1 698 699 atf_check -s exit:0 -o match:"group 239.0.0.1" jexec genevetest1 ifmcstat -i ${epair}a -f inet 700 atf_check -s exit:0 -o match:"group 239.0.0.1" jexec genevetest2 ifmcstat -i ${epair}b -f inet 701 702 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 703 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 704 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 705 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 706} 707 708inherit_ipv4_multicast_cleanup() 709{ 710 vnet_cleanup 711} 712 713atf_test_case "inherit_ipv6_multicast" "cleanup" 714inherit_ipv6_multicast_head() 715{ 716 atf_set descr 'Create a geneve(4) l3 ipv6 multicast tunnel using epair and pass traffic between jails' 717 atf_set require.user root 718 atf_set require.kmods if_geneve ip6_mroute 719} 720 721inherit_ipv6_multicast_body() 722{ 723 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 mc_group 724 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 725 726 endpoint1=3fff::1 727 endpoint2=3fff::2 728 mc_group=ff08::db8:0:1 729 v4tunnel1=169.254.0.1 730 v4tunnel2=169.254.0.2 731 v6tunnel1=2001:db8::1 732 v6tunnel2=2001:db8::2 733 vni1=1 734 735 vnet_init 736 epair=$(vnet_mkepair) 737 vnet_mkjail genevetest1 ${epair}a 738 vnet_mkjail genevetest2 ${epair}b 739 740 ifconfig -j genevetest1 ${epair}a inet6 ${endpoint1} up 741 ifconfig -j genevetest2 ${epair}b inet6 ${endpoint2} up 742 743 # manually add the multicast routes to epairs 744 route -j genevetest1 -n6 add -net ff08::db8:0:1/96 -interface ${epair}a 745 route -j genevetest2 -n6 add -net ff08::db8:0:1/96 -interface ${epair}b 746 747 atf_check -s exit:0 -o ignore \ 748 ifconfig -j genevetest1 geneve1 create genevemode l3 debug \ 749 geneveid $vni1 genevelocal ${endpoint1} \ 750 genevegroup ${mc_group} genevedev ${epair}a up 751 atf_check -s exit:0 -o ignore \ 752 ifconfig -j genevetest2 geneve1 create genevemode l3 debug \ 753 geneveid $vni1 genevelocal ${endpoint2} \ 754 genevegroup ${mc_group} genevedev ${epair}b up 755 756 atf_check -s exit:0 -o ignore \ 757 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/30 758 atf_check -s exit:0 -o ignore \ 759 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 760 atf_check -s exit:0 -o ignore \ 761 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/30 762 atf_check -s exit:0 -o ignore \ 763 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 764 765 atf_check -s exit:0 -o ignore sysctl -j genevetest1 net.inet.icmp.bmcastecho=1 766 atf_check -s exit:0 -o ignore sysctl -j genevetest2 net.inet.icmp.bmcastecho=1 767 768 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 769 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 770 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 771 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 772} 773 774inherit_ipv6_multicast_cleanup() 775{ 776 vnet_cleanup 777} 778 779atf_test_case "inherit_ipv4_multicast_without_dev" "cleanup" 780inherit_ipv4_multicast_without_dev_head() 781{ 782 atf_set descr 'Create a geneve(4) l3 ipv4 multicast tunnel without specifying genevedev using epair and pass traffic between jails' 783 atf_set require.user root 784 atf_set require.kmods if_geneve ip_mroute 785} 786 787inherit_ipv4_multicast_without_dev_body() 788{ 789 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 mc_group 790 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 791 792 endpoint1=192.168.2.1 793 endpoint2=192.168.2.2 794 mc_group=239.0.0.1 795 v4tunnel1=169.254.0.1 796 v4tunnel2=169.254.0.2 797 v6tunnel1=2001:db8::1 798 v6tunnel2=2001:db8::2 799 vni1=1 800 801 vnet_init 802 epair=$(vnet_mkepair) 803 vnet_mkjail genevetest1 ${epair}a 804 vnet_mkjail genevetest2 ${epair}b 805 806 ifconfig -j genevetest1 ${epair}a inet ${endpoint1}/24 up 807 ifconfig -j genevetest2 ${epair}b inet ${endpoint2}/24 up 808 809 # manually add the multicast routes to epairs 810 route -j genevetest1 add -net 239.0.0.0/8 -interface ${epair}a 811 route -j genevetest2 add -net 239.0.0.0/8 -interface ${epair}b 812 813 atf_check -s exit:0 -o ignore \ 814 ifconfig -j genevetest1 geneve1 create genevemode l3 debug \ 815 geneveid $vni1 genevelocal ${endpoint1} genevegroup ${mc_group} up 816 atf_check -s exit:0 -o ignore \ 817 ifconfig -j genevetest2 geneve1 create genevemode l3 debug \ 818 geneveid $vni1 genevelocal ${endpoint2} genevegroup ${mc_group} up 819 820 atf_check -s exit:0 -o ignore \ 821 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/30 822 atf_check -s exit:0 -o ignore \ 823 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 824 atf_check -s exit:0 -o ignore \ 825 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/30 826 atf_check -s exit:0 -o ignore \ 827 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 828 829 atf_check -s exit:0 -o ignore sysctl -j genevetest1 net.inet.icmp.bmcastecho=1 830 atf_check -s exit:0 -o ignore sysctl -j genevetest2 net.inet.icmp.bmcastecho=1 831 832 atf_check -s exit:0 -o match:"group 239.0.0.1" jexec genevetest1 ifmcstat -i ${epair}a -f inet 833 atf_check -s exit:0 -o match:"group 239.0.0.1" jexec genevetest2 ifmcstat -i ${epair}b -f inet 834 835 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 836 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 837 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 838 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 839 840} 841 842inherit_ipv4_multicast_without_dev_cleanup() 843{ 844 vnet_cleanup 845} 846 847 848atf_test_case "inherit_ipv6_multicast_without_dev" "cleanup" 849inherit_ipv6_multicast_without_dev_head() 850{ 851 atf_set descr 'Create a geneve(4) l3 ipv6 multicast tunnel without specifying genevedev using epair and pass traffic between jails' 852 atf_set require.user root 853 atf_set require.kmods if_geneve ip6_mroute 854} 855 856inherit_ipv6_multicast_without_dev_body() 857{ 858 local epair geneve1 geneve2 vni1 endpoint1 endpoint2 mc_group 859 local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2 860 861 endpoint1=3fff::1 862 endpoint2=3fff::2 863 mc_group=ff08::db8:0:1 864 v4tunnel1=169.254.0.1 865 v4tunnel2=169.254.0.2 866 v6tunnel1=2001:db8::1 867 v6tunnel2=2001:db8::2 868 vni1=1 869 870 vnet_init 871 epair=$(vnet_mkepair) 872 vnet_mkjail genevetest1 ${epair}a 873 vnet_mkjail genevetest2 ${epair}b 874 875 ifconfig -j genevetest1 ${epair}a inet6 ${endpoint1} up 876 ifconfig -j genevetest2 ${epair}b inet6 ${endpoint2} up 877 878 # manually add the multicast routes to epairs 879 route -j genevetest1 -n6 add -net ff08::db8:0:1/96 -interface ${epair}a 880 route -j genevetest2 -n6 add -net ff08::db8:0:1/96 -interface ${epair}b 881 882 atf_check -s exit:0 -o ignore \ 883 ifconfig -j genevetest1 geneve1 create genevemode l3 debug \ 884 geneveid $vni1 genevelocal ${endpoint1} genevegroup ${mc_group} up 885 atf_check -s exit:0 -o ignore \ 886 ifconfig -j genevetest2 geneve1 create genevemode l3 debug \ 887 geneveid $vni1 genevelocal ${endpoint2} genevegroup ${mc_group} up 888 889 atf_check -s exit:0 -o ignore \ 890 ifconfig -j genevetest1 geneve1 inet ${v4tunnel1}/30 891 atf_check -s exit:0 -o ignore \ 892 ifconfig -j genevetest1 geneve1 inet6 ${v6tunnel1} 893 atf_check -s exit:0 -o ignore \ 894 ifconfig -j genevetest2 geneve1 inet ${v4tunnel2}/30 895 atf_check -s exit:0 -o ignore \ 896 ifconfig -j genevetest2 geneve1 inet6 ${v6tunnel2} 897 898 atf_check -s exit:0 -o ignore sysctl -j genevetest1 net.inet.icmp.bmcastecho=1 899 atf_check -s exit:0 -o ignore sysctl -j genevetest2 net.inet.icmp.bmcastecho=1 900 901 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v6tunnel2 902 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v6tunnel1 903 atf_check -s exit:0 -o ignore jexec genevetest1 ping -nc 1 -t 1 $v4tunnel2 904 atf_check -s exit:0 -o ignore jexec genevetest2 ping -nc 1 -t 1 $v4tunnel1 905} 906 907inherit_ipv6_multicast_without_dev_cleanup() 908{ 909 vnet_cleanup 910} 911 912 913atf_init_test_cases() 914{ 915 atf_add_test_case "ether_ipv4" 916 atf_add_test_case "ether_ipv4_multicast" 917 atf_add_test_case "ether_ipv4_multicast_without_dev" 918 atf_add_test_case "ether_ipv6" 919 atf_add_test_case "ether_ipv6_blind_options" 920 atf_add_test_case "ether_ipv6_external" 921 atf_add_test_case "ether_ipv6_multicast" 922 atf_add_test_case "ether_ipv6_multicast_without_dev" 923 atf_add_test_case "inherit_ipv4" 924 atf_add_test_case "inherit_ipv4_multicast" 925 atf_add_test_case "inherit_ipv4_multicast_without_dev" 926 atf_add_test_case "inherit_ipv6" 927 atf_add_test_case "inherit_ipv6_multicast" 928 atf_add_test_case "inherit_ipv6_multicast_without_dev" 929} 930