Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: net: bridge: factor out and rename sg state functions

Factor out S,G entry state checking functions for existence, forwarding,
blocking and timer to lib.sh so they can be later used by MLDv2 tests.
Add brmcast_ suffix to their name to make the relation to the bridge
explicit.

Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Nikolay Aleksandrov and committed by
Jakub Kicinski
95e6f430 450b0b84

+123 -123
+56 -123
tools/testing/selftests/net/forwarding/bridge_igmp.sh
··· 137 137 log_test "IGMPv2 leave $TEST_GROUP" 138 138 } 139 139 140 - check_sg_entries() 141 - { 142 - local report=$1; shift 143 - local slist=("$@") 144 - local sarg="" 145 - 146 - for src in "${slist[@]}"; do 147 - sarg="${sarg} and .source_list[].address == \"$src\"" 148 - done 149 - bridge -j -d -s mdb show dev br0 \ 150 - | jq -e ".[].mdb[] | \ 151 - select(.grp == \"$TEST_GROUP\" and .source_list != null $sarg)" &>/dev/null 152 - check_err $? "Wrong *,G entry source list after $report report" 153 - 154 - for sgent in "${slist[@]}"; do 155 - bridge -j -d -s mdb show dev br0 \ 156 - | jq -e ".[].mdb[] | \ 157 - select(.grp == \"$TEST_GROUP\" and .src == \"$sgent\")" &>/dev/null 158 - check_err $? "Missing S,G entry ($sgent, $TEST_GROUP)" 159 - done 160 - } 161 - 162 - check_sg_fwding() 163 - { 164 - local should_fwd=$1; shift 165 - local sources=("$@") 166 - 167 - for src in "${sources[@]}"; do 168 - local retval=0 169 - 170 - mcast_packet_test $TEST_GROUP_MAC $src $TEST_GROUP $h2 $h1 171 - retval=$? 172 - if [ $should_fwd -eq 1 ]; then 173 - check_fail $retval "Didn't forward traffic from S,G ($src, $TEST_GROUP)" 174 - else 175 - check_err $retval "Forwarded traffic for blocked S,G ($src, $TEST_GROUP)" 176 - fi 177 - done 178 - } 179 - 180 - check_sg_state() 181 - { 182 - local is_blocked=$1; shift 183 - local sources=("$@") 184 - local should_fail=1 185 - 186 - if [ $is_blocked -eq 1 ]; then 187 - should_fail=0 188 - fi 189 - 190 - for src in "${sources[@]}"; do 191 - bridge -j -d -s mdb show dev br0 \ 192 - | jq -e ".[].mdb[] | \ 193 - select(.grp == \"$TEST_GROUP\" and .source_list != null) | 194 - .source_list[] | 195 - select(.address == \"$src\") | 196 - select(.timer == \"0.00\")" &>/dev/null 197 - check_err_fail $should_fail $? "Entry $src has zero timer" 198 - 199 - bridge -j -d -s mdb show dev br0 \ 200 - | jq -e ".[].mdb[] | \ 201 - select(.grp == \"$TEST_GROUP\" and .src == \"$src\" and \ 202 - .flags[] == \"blocked\")" &>/dev/null 203 - check_err_fail $should_fail $? "Entry $src has blocked flag" 204 - done 205 - } 206 - 207 140 v3include_prepare() 208 141 { 209 142 local host1_if=$1 ··· 158 225 select(.grp == \"$TEST_GROUP\" and \ 159 226 .source_list != null and .filter_mode == \"include\")" &>/dev/null 160 227 check_err $? "Wrong *,G entry filter mode" 161 - check_sg_entries "is_include" "${X[@]}" 228 + brmcast_check_sg_entries "is_include" "${X[@]}" 162 229 } 163 230 164 231 v3exclude_prepare() ··· 180 247 .source_list != null and .filter_mode == \"exclude\")" &>/dev/null 181 248 check_err $? "Wrong *,G entry filter mode" 182 249 183 - check_sg_entries "is_exclude" "${X[@]}" "${Y[@]}" 250 + brmcast_check_sg_entries "is_exclude" "${X[@]}" "${Y[@]}" 184 251 185 - check_sg_state 0 "${X[@]}" 186 - check_sg_state 1 "${Y[@]}" 252 + brmcast_check_sg_state 0 "${X[@]}" 253 + brmcast_check_sg_state 1 "${Y[@]}" 187 254 188 255 bridge -j -d -s mdb show dev br0 \ 189 256 | jq -e ".[].mdb[] | \ ··· 209 276 210 277 v3include_prepare $h1 $ALL_MAC $ALL_GROUP 211 278 212 - check_sg_state 0 "${X[@]}" 279 + brmcast_check_sg_state 0 "${X[@]}" 213 280 214 - check_sg_fwding 1 "${X[@]}" 215 - check_sg_fwding 0 "192.0.2.100" 281 + brmcast_check_sg_fwding 1 "${X[@]}" 282 + brmcast_check_sg_fwding 0 "192.0.2.100" 216 283 217 284 log_test "IGMPv3 report $TEST_GROUP is_include" 218 285 ··· 228 295 229 296 $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_ALLOW" -q 230 297 sleep 1 231 - check_sg_entries "allow" "${X[@]}" 298 + brmcast_check_sg_entries "allow" "${X[@]}" 232 299 233 - check_sg_state 0 "${X[@]}" 300 + brmcast_check_sg_state 0 "${X[@]}" 234 301 235 - check_sg_fwding 1 "${X[@]}" 236 - check_sg_fwding 0 "192.0.2.100" 302 + brmcast_check_sg_fwding 1 "${X[@]}" 303 + brmcast_check_sg_fwding 0 "192.0.2.100" 237 304 238 305 log_test "IGMPv3 report $TEST_GROUP include -> allow" 239 306 ··· 249 316 250 317 $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_INC2" -q 251 318 sleep 1 252 - check_sg_entries "is_include" "${X[@]}" 319 + brmcast_check_sg_entries "is_include" "${X[@]}" 253 320 254 - check_sg_state 0 "${X[@]}" 321 + brmcast_check_sg_state 0 "${X[@]}" 255 322 256 - check_sg_fwding 1 "${X[@]}" 257 - check_sg_fwding 0 "192.0.2.100" 323 + brmcast_check_sg_fwding 1 "${X[@]}" 324 + brmcast_check_sg_fwding 0 "192.0.2.100" 258 325 259 326 log_test "IGMPv3 report $TEST_GROUP include -> is_include" 260 327 ··· 267 334 268 335 v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP 269 336 270 - check_sg_fwding 1 "${X[@]}" 192.0.2.100 271 - check_sg_fwding 0 "${Y[@]}" 337 + brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100 338 + brmcast_check_sg_fwding 0 "${Y[@]}" 272 339 273 340 log_test "IGMPv3 report $TEST_GROUP include -> is_exclude" 274 341 ··· 294 361 .source_list != null and .filter_mode == \"exclude\")" &>/dev/null 295 362 check_err $? "Wrong *,G entry filter mode" 296 363 297 - check_sg_entries "to_exclude" "${X[@]}" "${Y[@]}" 364 + brmcast_check_sg_entries "to_exclude" "${X[@]}" "${Y[@]}" 298 365 299 - check_sg_state 0 "${X[@]}" 300 - check_sg_state 1 "${Y[@]}" 366 + brmcast_check_sg_state 0 "${X[@]}" 367 + brmcast_check_sg_state 1 "${Y[@]}" 301 368 302 369 bridge -j -d -s mdb show dev br0 \ 303 370 | jq -e ".[].mdb[] | \ ··· 312 379 .source_list[].address == \"192.0.2.21\")" &>/dev/null 313 380 check_fail $? "Wrong *,G entry source list, 192.0.2.21 entry still exists" 314 381 315 - check_sg_fwding 1 "${X[@]}" 192.0.2.100 316 - check_sg_fwding 0 "${Y[@]}" 382 + brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100 383 + brmcast_check_sg_fwding 0 "${Y[@]}" 317 384 318 385 log_test "IGMPv3 report $TEST_GROUP include -> to_exclude" 319 386 ··· 332 399 333 400 $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_ALLOW2" -q 334 401 sleep 1 335 - check_sg_entries "allow" "${X[@]}" "${Y[@]}" 402 + brmcast_check_sg_entries "allow" "${X[@]}" "${Y[@]}" 336 403 337 - check_sg_state 0 "${X[@]}" 338 - check_sg_state 1 "${Y[@]}" 404 + brmcast_check_sg_state 0 "${X[@]}" 405 + brmcast_check_sg_state 1 "${Y[@]}" 339 406 340 - check_sg_fwding 1 "${X[@]}" 192.0.2.100 341 - check_sg_fwding 0 "${Y[@]}" 407 + brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100 408 + brmcast_check_sg_fwding 0 "${Y[@]}" 342 409 343 410 log_test "IGMPv3 report $TEST_GROUP exclude -> allow" 344 411 ··· 355 422 356 423 $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_INC3" -q 357 424 sleep 1 358 - check_sg_entries "is_include" "${X[@]}" "${Y[@]}" 425 + brmcast_check_sg_entries "is_include" "${X[@]}" "${Y[@]}" 359 426 360 - check_sg_state 0 "${X[@]}" 361 - check_sg_state 1 "${Y[@]}" 427 + brmcast_check_sg_state 0 "${X[@]}" 428 + brmcast_check_sg_state 1 "${Y[@]}" 362 429 363 - check_sg_fwding 1 "${X[@]}" 192.0.2.100 364 - check_sg_fwding 0 "${Y[@]}" 430 + brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100 431 + brmcast_check_sg_fwding 0 "${Y[@]}" 365 432 366 433 log_test "IGMPv3 report $TEST_GROUP exclude -> is_include" 367 434 ··· 378 445 379 446 $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_EXC2" -q 380 447 sleep 1 381 - check_sg_entries "is_exclude" "${X[@]}" "${Y[@]}" 448 + brmcast_check_sg_entries "is_exclude" "${X[@]}" "${Y[@]}" 382 449 383 - check_sg_state 0 "${X[@]}" 384 - check_sg_state 1 "${Y[@]}" 450 + brmcast_check_sg_state 0 "${X[@]}" 451 + brmcast_check_sg_state 1 "${Y[@]}" 385 452 386 - check_sg_fwding 1 "${X[@]}" 192.0.2.100 387 - check_sg_fwding 0 "${Y[@]}" 453 + brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100 454 + brmcast_check_sg_fwding 0 "${Y[@]}" 388 455 389 456 log_test "IGMPv3 report $TEST_GROUP exclude -> is_exclude" 390 457 ··· 404 471 405 472 $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_TO_EXC" -q 406 473 sleep 1 407 - check_sg_entries "to_exclude" "${X[@]}" "${Y[@]}" 474 + brmcast_check_sg_entries "to_exclude" "${X[@]}" "${Y[@]}" 408 475 409 - check_sg_state 0 "${X[@]}" 410 - check_sg_state 1 "${Y[@]}" 476 + brmcast_check_sg_state 0 "${X[@]}" 477 + brmcast_check_sg_state 1 "${Y[@]}" 411 478 412 - check_sg_fwding 1 "${X[@]}" 192.0.2.100 413 - check_sg_fwding 0 "${Y[@]}" 479 + brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100 480 + brmcast_check_sg_fwding 0 "${Y[@]}" 414 481 415 482 log_test "IGMPv3 report $TEST_GROUP exclude -> to_exclude" 416 483 ··· 429 496 $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_BLOCK" -q 430 497 # make sure the lowered timers have expired (by default 2 seconds) 431 498 sleep 3 432 - check_sg_entries "block" "${X[@]}" 499 + brmcast_check_sg_entries "block" "${X[@]}" 433 500 434 - check_sg_state 0 "${X[@]}" 501 + brmcast_check_sg_state 0 "${X[@]}" 435 502 436 503 bridge -j -d -s mdb show dev br0 \ 437 504 | jq -e ".[].mdb[] | \ ··· 440 507 .source_list[].address == \"192.0.2.1\")" &>/dev/null 441 508 check_fail $? "Wrong *,G entry source list, 192.0.2.1 entry still exists" 442 509 443 - check_sg_fwding 1 "${X[@]}" 444 - check_sg_fwding 0 "192.0.2.100" 510 + brmcast_check_sg_fwding 1 "${X[@]}" 511 + brmcast_check_sg_fwding 0 "192.0.2.100" 445 512 446 513 log_test "IGMPv3 report $TEST_GROUP include -> block" 447 514 ··· 461 528 462 529 $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_BLOCK" -q 463 530 sleep 1 464 - check_sg_entries "block" "${X[@]}" "${Y[@]}" 531 + brmcast_check_sg_entries "block" "${X[@]}" "${Y[@]}" 465 532 466 - check_sg_state 0 "${X[@]}" 467 - check_sg_state 1 "${Y[@]}" 533 + brmcast_check_sg_state 0 "${X[@]}" 534 + brmcast_check_sg_state 1 "${Y[@]}" 468 535 469 - check_sg_fwding 1 "${X[@]}" 192.0.2.100 470 - check_sg_fwding 0 "${Y[@]}" 536 + brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100 537 + brmcast_check_sg_fwding 0 "${Y[@]}" 471 538 472 539 log_test "IGMPv3 report $TEST_GROUP exclude -> block" 473 540 ··· 507 574 .source_list[].address == \"192.0.2.2\")" &>/dev/null 508 575 check_fail $? "Wrong *,G entry source list, 192.0.2.2 entry still exists" 509 576 510 - check_sg_entries "allow" "${X[@]}" 577 + brmcast_check_sg_entries "allow" "${X[@]}" 511 578 512 - check_sg_state 0 "${X[@]}" 579 + brmcast_check_sg_state 0 "${X[@]}" 513 580 514 - check_sg_fwding 1 "${X[@]}" 515 - check_sg_fwding 0 192.0.2.100 581 + brmcast_check_sg_fwding 1 "${X[@]}" 582 + brmcast_check_sg_fwding 0 192.0.2.100 516 583 517 584 log_test "IGMPv3 group $TEST_GROUP exclude timeout" 518 585 ··· 543 610 .flags[] == \"added_by_star_ex\")" &>/dev/null 544 611 check_err $? "Auto-added S,G entry doesn't have added_by_star_ex flag" 545 612 546 - check_sg_fwding 1 192.0.2.3 613 + brmcast_check_sg_fwding 1 192.0.2.3 547 614 548 615 log_test "IGMPv3 S,G port entry automatic add to a *,G port" 549 616
+67
tools/testing/selftests/net/forwarding/lib.sh
··· 1310 1310 1311 1311 return $seen 1312 1312 } 1313 + 1314 + brmcast_check_sg_entries() 1315 + { 1316 + local report=$1; shift 1317 + local slist=("$@") 1318 + local sarg="" 1319 + 1320 + for src in "${slist[@]}"; do 1321 + sarg="${sarg} and .source_list[].address == \"$src\"" 1322 + done 1323 + bridge -j -d -s mdb show dev br0 \ 1324 + | jq -e ".[].mdb[] | \ 1325 + select(.grp == \"$TEST_GROUP\" and .source_list != null $sarg)" &>/dev/null 1326 + check_err $? "Wrong *,G entry source list after $report report" 1327 + 1328 + for sgent in "${slist[@]}"; do 1329 + bridge -j -d -s mdb show dev br0 \ 1330 + | jq -e ".[].mdb[] | \ 1331 + select(.grp == \"$TEST_GROUP\" and .src == \"$sgent\")" &>/dev/null 1332 + check_err $? "Missing S,G entry ($sgent, $TEST_GROUP)" 1333 + done 1334 + } 1335 + 1336 + brmcast_check_sg_fwding() 1337 + { 1338 + local should_fwd=$1; shift 1339 + local sources=("$@") 1340 + 1341 + for src in "${sources[@]}"; do 1342 + local retval=0 1343 + 1344 + mcast_packet_test $TEST_GROUP_MAC $src $TEST_GROUP $h2 $h1 1345 + retval=$? 1346 + if [ $should_fwd -eq 1 ]; then 1347 + check_fail $retval "Didn't forward traffic from S,G ($src, $TEST_GROUP)" 1348 + else 1349 + check_err $retval "Forwarded traffic for blocked S,G ($src, $TEST_GROUP)" 1350 + fi 1351 + done 1352 + } 1353 + 1354 + brmcast_check_sg_state() 1355 + { 1356 + local is_blocked=$1; shift 1357 + local sources=("$@") 1358 + local should_fail=1 1359 + 1360 + if [ $is_blocked -eq 1 ]; then 1361 + should_fail=0 1362 + fi 1363 + 1364 + for src in "${sources[@]}"; do 1365 + bridge -j -d -s mdb show dev br0 \ 1366 + | jq -e ".[].mdb[] | \ 1367 + select(.grp == \"$TEST_GROUP\" and .source_list != null) | 1368 + .source_list[] | 1369 + select(.address == \"$src\") | 1370 + select(.timer == \"0.00\")" &>/dev/null 1371 + check_err_fail $should_fail $? "Entry $src has zero timer" 1372 + 1373 + bridge -j -d -s mdb show dev br0 \ 1374 + | jq -e ".[].mdb[] | \ 1375 + select(.grp == \"$TEST_GROUP\" and .src == \"$src\" and \ 1376 + .flags[] == \"blocked\")" &>/dev/null 1377 + check_err_fail $should_fail $? "Entry $src has blocked flag" 1378 + done 1379 + }