Commit 95e6f430 authored by Nikolay Aleksandrov's avatar Nikolay Aleksandrov Committed by Jakub Kicinski

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: default avatarNikolay Aleksandrov <nikolay@nvidia.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 450b0b84
...@@ -137,73 +137,6 @@ v2reportleave_test() ...@@ -137,73 +137,6 @@ v2reportleave_test()
log_test "IGMPv2 leave $TEST_GROUP" log_test "IGMPv2 leave $TEST_GROUP"
} }
check_sg_entries()
{
local report=$1; shift
local slist=("$@")
local sarg=""
for src in "${slist[@]}"; do
sarg="${sarg} and .source_list[].address == \"$src\""
done
bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \
select(.grp == \"$TEST_GROUP\" and .source_list != null $sarg)" &>/dev/null
check_err $? "Wrong *,G entry source list after $report report"
for sgent in "${slist[@]}"; do
bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \
select(.grp == \"$TEST_GROUP\" and .src == \"$sgent\")" &>/dev/null
check_err $? "Missing S,G entry ($sgent, $TEST_GROUP)"
done
}
check_sg_fwding()
{
local should_fwd=$1; shift
local sources=("$@")
for src in "${sources[@]}"; do
local retval=0
mcast_packet_test $TEST_GROUP_MAC $src $TEST_GROUP $h2 $h1
retval=$?
if [ $should_fwd -eq 1 ]; then
check_fail $retval "Didn't forward traffic from S,G ($src, $TEST_GROUP)"
else
check_err $retval "Forwarded traffic for blocked S,G ($src, $TEST_GROUP)"
fi
done
}
check_sg_state()
{
local is_blocked=$1; shift
local sources=("$@")
local should_fail=1
if [ $is_blocked -eq 1 ]; then
should_fail=0
fi
for src in "${sources[@]}"; do
bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \
select(.grp == \"$TEST_GROUP\" and .source_list != null) |
.source_list[] |
select(.address == \"$src\") |
select(.timer == \"0.00\")" &>/dev/null
check_err_fail $should_fail $? "Entry $src has zero timer"
bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \
select(.grp == \"$TEST_GROUP\" and .src == \"$src\" and \
.flags[] == \"blocked\")" &>/dev/null
check_err_fail $should_fail $? "Entry $src has blocked flag"
done
}
v3include_prepare() v3include_prepare()
{ {
local host1_if=$1 local host1_if=$1
...@@ -225,7 +158,7 @@ v3include_prepare() ...@@ -225,7 +158,7 @@ v3include_prepare()
select(.grp == \"$TEST_GROUP\" and \ select(.grp == \"$TEST_GROUP\" and \
.source_list != null and .filter_mode == \"include\")" &>/dev/null .source_list != null and .filter_mode == \"include\")" &>/dev/null
check_err $? "Wrong *,G entry filter mode" check_err $? "Wrong *,G entry filter mode"
check_sg_entries "is_include" "${X[@]}" brmcast_check_sg_entries "is_include" "${X[@]}"
} }
v3exclude_prepare() v3exclude_prepare()
...@@ -247,10 +180,10 @@ v3exclude_prepare() ...@@ -247,10 +180,10 @@ v3exclude_prepare()
.source_list != null and .filter_mode == \"exclude\")" &>/dev/null .source_list != null and .filter_mode == \"exclude\")" &>/dev/null
check_err $? "Wrong *,G entry filter mode" check_err $? "Wrong *,G entry filter mode"
check_sg_entries "is_exclude" "${X[@]}" "${Y[@]}" brmcast_check_sg_entries "is_exclude" "${X[@]}" "${Y[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_state 1 "${Y[@]}" brmcast_check_sg_state 1 "${Y[@]}"
bridge -j -d -s mdb show dev br0 \ bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \ | jq -e ".[].mdb[] | \
...@@ -276,10 +209,10 @@ v3include_test() ...@@ -276,10 +209,10 @@ v3include_test()
v3include_prepare $h1 $ALL_MAC $ALL_GROUP v3include_prepare $h1 $ALL_MAC $ALL_GROUP
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_fwding 1 "${X[@]}" brmcast_check_sg_fwding 1 "${X[@]}"
check_sg_fwding 0 "192.0.2.100" brmcast_check_sg_fwding 0 "192.0.2.100"
log_test "IGMPv3 report $TEST_GROUP is_include" log_test "IGMPv3 report $TEST_GROUP is_include"
...@@ -295,12 +228,12 @@ v3inc_allow_test() ...@@ -295,12 +228,12 @@ v3inc_allow_test()
$MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_ALLOW" -q $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_ALLOW" -q
sleep 1 sleep 1
check_sg_entries "allow" "${X[@]}" brmcast_check_sg_entries "allow" "${X[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_fwding 1 "${X[@]}" brmcast_check_sg_fwding 1 "${X[@]}"
check_sg_fwding 0 "192.0.2.100" brmcast_check_sg_fwding 0 "192.0.2.100"
log_test "IGMPv3 report $TEST_GROUP include -> allow" log_test "IGMPv3 report $TEST_GROUP include -> allow"
...@@ -316,12 +249,12 @@ v3inc_is_include_test() ...@@ -316,12 +249,12 @@ v3inc_is_include_test()
$MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_INC2" -q $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_INC2" -q
sleep 1 sleep 1
check_sg_entries "is_include" "${X[@]}" brmcast_check_sg_entries "is_include" "${X[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_fwding 1 "${X[@]}" brmcast_check_sg_fwding 1 "${X[@]}"
check_sg_fwding 0 "192.0.2.100" brmcast_check_sg_fwding 0 "192.0.2.100"
log_test "IGMPv3 report $TEST_GROUP include -> is_include" log_test "IGMPv3 report $TEST_GROUP include -> is_include"
...@@ -334,8 +267,8 @@ v3inc_is_exclude_test() ...@@ -334,8 +267,8 @@ v3inc_is_exclude_test()
v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP
check_sg_fwding 1 "${X[@]}" 192.0.2.100 brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
check_sg_fwding 0 "${Y[@]}" brmcast_check_sg_fwding 0 "${Y[@]}"
log_test "IGMPv3 report $TEST_GROUP include -> is_exclude" log_test "IGMPv3 report $TEST_GROUP include -> is_exclude"
...@@ -361,10 +294,10 @@ v3inc_to_exclude_test() ...@@ -361,10 +294,10 @@ v3inc_to_exclude_test()
.source_list != null and .filter_mode == \"exclude\")" &>/dev/null .source_list != null and .filter_mode == \"exclude\")" &>/dev/null
check_err $? "Wrong *,G entry filter mode" check_err $? "Wrong *,G entry filter mode"
check_sg_entries "to_exclude" "${X[@]}" "${Y[@]}" brmcast_check_sg_entries "to_exclude" "${X[@]}" "${Y[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_state 1 "${Y[@]}" brmcast_check_sg_state 1 "${Y[@]}"
bridge -j -d -s mdb show dev br0 \ bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \ | jq -e ".[].mdb[] | \
...@@ -379,8 +312,8 @@ v3inc_to_exclude_test() ...@@ -379,8 +312,8 @@ v3inc_to_exclude_test()
.source_list[].address == \"192.0.2.21\")" &>/dev/null .source_list[].address == \"192.0.2.21\")" &>/dev/null
check_fail $? "Wrong *,G entry source list, 192.0.2.21 entry still exists" check_fail $? "Wrong *,G entry source list, 192.0.2.21 entry still exists"
check_sg_fwding 1 "${X[@]}" 192.0.2.100 brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
check_sg_fwding 0 "${Y[@]}" brmcast_check_sg_fwding 0 "${Y[@]}"
log_test "IGMPv3 report $TEST_GROUP include -> to_exclude" log_test "IGMPv3 report $TEST_GROUP include -> to_exclude"
...@@ -399,13 +332,13 @@ v3exc_allow_test() ...@@ -399,13 +332,13 @@ v3exc_allow_test()
$MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_ALLOW2" -q $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_ALLOW2" -q
sleep 1 sleep 1
check_sg_entries "allow" "${X[@]}" "${Y[@]}" brmcast_check_sg_entries "allow" "${X[@]}" "${Y[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_state 1 "${Y[@]}" brmcast_check_sg_state 1 "${Y[@]}"
check_sg_fwding 1 "${X[@]}" 192.0.2.100 brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
check_sg_fwding 0 "${Y[@]}" brmcast_check_sg_fwding 0 "${Y[@]}"
log_test "IGMPv3 report $TEST_GROUP exclude -> allow" log_test "IGMPv3 report $TEST_GROUP exclude -> allow"
...@@ -422,13 +355,13 @@ v3exc_is_include_test() ...@@ -422,13 +355,13 @@ v3exc_is_include_test()
$MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_INC3" -q $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_INC3" -q
sleep 1 sleep 1
check_sg_entries "is_include" "${X[@]}" "${Y[@]}" brmcast_check_sg_entries "is_include" "${X[@]}" "${Y[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_state 1 "${Y[@]}" brmcast_check_sg_state 1 "${Y[@]}"
check_sg_fwding 1 "${X[@]}" 192.0.2.100 brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
check_sg_fwding 0 "${Y[@]}" brmcast_check_sg_fwding 0 "${Y[@]}"
log_test "IGMPv3 report $TEST_GROUP exclude -> is_include" log_test "IGMPv3 report $TEST_GROUP exclude -> is_include"
...@@ -445,13 +378,13 @@ v3exc_is_exclude_test() ...@@ -445,13 +378,13 @@ v3exc_is_exclude_test()
$MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_EXC2" -q $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_EXC2" -q
sleep 1 sleep 1
check_sg_entries "is_exclude" "${X[@]}" "${Y[@]}" brmcast_check_sg_entries "is_exclude" "${X[@]}" "${Y[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_state 1 "${Y[@]}" brmcast_check_sg_state 1 "${Y[@]}"
check_sg_fwding 1 "${X[@]}" 192.0.2.100 brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
check_sg_fwding 0 "${Y[@]}" brmcast_check_sg_fwding 0 "${Y[@]}"
log_test "IGMPv3 report $TEST_GROUP exclude -> is_exclude" log_test "IGMPv3 report $TEST_GROUP exclude -> is_exclude"
...@@ -471,13 +404,13 @@ v3exc_to_exclude_test() ...@@ -471,13 +404,13 @@ v3exc_to_exclude_test()
$MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_TO_EXC" -q $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_TO_EXC" -q
sleep 1 sleep 1
check_sg_entries "to_exclude" "${X[@]}" "${Y[@]}" brmcast_check_sg_entries "to_exclude" "${X[@]}" "${Y[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_state 1 "${Y[@]}" brmcast_check_sg_state 1 "${Y[@]}"
check_sg_fwding 1 "${X[@]}" 192.0.2.100 brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
check_sg_fwding 0 "${Y[@]}" brmcast_check_sg_fwding 0 "${Y[@]}"
log_test "IGMPv3 report $TEST_GROUP exclude -> to_exclude" log_test "IGMPv3 report $TEST_GROUP exclude -> to_exclude"
...@@ -496,9 +429,9 @@ v3inc_block_test() ...@@ -496,9 +429,9 @@ v3inc_block_test()
$MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_BLOCK" -q $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_BLOCK" -q
# make sure the lowered timers have expired (by default 2 seconds) # make sure the lowered timers have expired (by default 2 seconds)
sleep 3 sleep 3
check_sg_entries "block" "${X[@]}" brmcast_check_sg_entries "block" "${X[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
bridge -j -d -s mdb show dev br0 \ bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \ | jq -e ".[].mdb[] | \
...@@ -507,8 +440,8 @@ v3inc_block_test() ...@@ -507,8 +440,8 @@ v3inc_block_test()
.source_list[].address == \"192.0.2.1\")" &>/dev/null .source_list[].address == \"192.0.2.1\")" &>/dev/null
check_fail $? "Wrong *,G entry source list, 192.0.2.1 entry still exists" check_fail $? "Wrong *,G entry source list, 192.0.2.1 entry still exists"
check_sg_fwding 1 "${X[@]}" brmcast_check_sg_fwding 1 "${X[@]}"
check_sg_fwding 0 "192.0.2.100" brmcast_check_sg_fwding 0 "192.0.2.100"
log_test "IGMPv3 report $TEST_GROUP include -> block" log_test "IGMPv3 report $TEST_GROUP include -> block"
...@@ -528,13 +461,13 @@ v3exc_block_test() ...@@ -528,13 +461,13 @@ v3exc_block_test()
$MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_BLOCK" -q $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_BLOCK" -q
sleep 1 sleep 1
check_sg_entries "block" "${X[@]}" "${Y[@]}" brmcast_check_sg_entries "block" "${X[@]}" "${Y[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_state 1 "${Y[@]}" brmcast_check_sg_state 1 "${Y[@]}"
check_sg_fwding 1 "${X[@]}" 192.0.2.100 brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
check_sg_fwding 0 "${Y[@]}" brmcast_check_sg_fwding 0 "${Y[@]}"
log_test "IGMPv3 report $TEST_GROUP exclude -> block" log_test "IGMPv3 report $TEST_GROUP exclude -> block"
...@@ -574,12 +507,12 @@ v3exc_timeout_test() ...@@ -574,12 +507,12 @@ v3exc_timeout_test()
.source_list[].address == \"192.0.2.2\")" &>/dev/null .source_list[].address == \"192.0.2.2\")" &>/dev/null
check_fail $? "Wrong *,G entry source list, 192.0.2.2 entry still exists" check_fail $? "Wrong *,G entry source list, 192.0.2.2 entry still exists"
check_sg_entries "allow" "${X[@]}" brmcast_check_sg_entries "allow" "${X[@]}"
check_sg_state 0 "${X[@]}" brmcast_check_sg_state 0 "${X[@]}"
check_sg_fwding 1 "${X[@]}" brmcast_check_sg_fwding 1 "${X[@]}"
check_sg_fwding 0 192.0.2.100 brmcast_check_sg_fwding 0 192.0.2.100
log_test "IGMPv3 group $TEST_GROUP exclude timeout" log_test "IGMPv3 group $TEST_GROUP exclude timeout"
...@@ -610,7 +543,7 @@ v3star_ex_auto_add_test() ...@@ -610,7 +543,7 @@ v3star_ex_auto_add_test()
.flags[] == \"added_by_star_ex\")" &>/dev/null .flags[] == \"added_by_star_ex\")" &>/dev/null
check_err $? "Auto-added S,G entry doesn't have added_by_star_ex flag" check_err $? "Auto-added S,G entry doesn't have added_by_star_ex flag"
check_sg_fwding 1 192.0.2.3 brmcast_check_sg_fwding 1 192.0.2.3
log_test "IGMPv3 S,G port entry automatic add to a *,G port" log_test "IGMPv3 S,G port entry automatic add to a *,G port"
......
...@@ -1310,3 +1310,70 @@ mcast_packet_test() ...@@ -1310,3 +1310,70 @@ mcast_packet_test()
return $seen return $seen
} }
brmcast_check_sg_entries()
{
local report=$1; shift
local slist=("$@")
local sarg=""
for src in "${slist[@]}"; do
sarg="${sarg} and .source_list[].address == \"$src\""
done
bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \
select(.grp == \"$TEST_GROUP\" and .source_list != null $sarg)" &>/dev/null
check_err $? "Wrong *,G entry source list after $report report"
for sgent in "${slist[@]}"; do
bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \
select(.grp == \"$TEST_GROUP\" and .src == \"$sgent\")" &>/dev/null
check_err $? "Missing S,G entry ($sgent, $TEST_GROUP)"
done
}
brmcast_check_sg_fwding()
{
local should_fwd=$1; shift
local sources=("$@")
for src in "${sources[@]}"; do
local retval=0
mcast_packet_test $TEST_GROUP_MAC $src $TEST_GROUP $h2 $h1
retval=$?
if [ $should_fwd -eq 1 ]; then
check_fail $retval "Didn't forward traffic from S,G ($src, $TEST_GROUP)"
else
check_err $retval "Forwarded traffic for blocked S,G ($src, $TEST_GROUP)"
fi
done
}
brmcast_check_sg_state()
{
local is_blocked=$1; shift
local sources=("$@")
local should_fail=1
if [ $is_blocked -eq 1 ]; then
should_fail=0
fi
for src in "${sources[@]}"; do
bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \
select(.grp == \"$TEST_GROUP\" and .source_list != null) |
.source_list[] |
select(.address == \"$src\") |
select(.timer == \"0.00\")" &>/dev/null
check_err_fail $should_fail $? "Entry $src has zero timer"
bridge -j -d -s mdb show dev br0 \
| jq -e ".[].mdb[] | \
select(.grp == \"$TEST_GROUP\" and .src == \"$src\" and \
.flags[] == \"blocked\")" &>/dev/null
check_err_fail $should_fail $? "Entry $src has blocked flag"
done
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment