Commit f23cddc7 authored by Vladimir Oltean's avatar Vladimir Oltean Committed by David S. Miller

selftests: forwarding: add helpers for IP multicast group joins/leaves

Extend the forwarding library with calls to some small C programs which
join an IP multicast group and send some packets to it. Both IPv4 and
IPv6 groups are supported. Use cases range from testing IGMP/MLD
snooping, to RX filtering, to multicast routing.

Testing multicast traffic using msend/mreceive is intended to be done
using tcpdump.
Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6182c5c5
...@@ -27,6 +27,7 @@ INTERFACE_TIMEOUT=${INTERFACE_TIMEOUT:=600} ...@@ -27,6 +27,7 @@ INTERFACE_TIMEOUT=${INTERFACE_TIMEOUT:=600}
LOW_AGEING_TIME=${LOW_AGEING_TIME:=1000} LOW_AGEING_TIME=${LOW_AGEING_TIME:=1000}
REQUIRE_JQ=${REQUIRE_JQ:=yes} REQUIRE_JQ=${REQUIRE_JQ:=yes}
REQUIRE_MZ=${REQUIRE_MZ:=yes} REQUIRE_MZ=${REQUIRE_MZ:=yes}
REQUIRE_MTOOLS=${REQUIRE_MTOOLS:=no}
STABLE_MAC_ADDRS=${STABLE_MAC_ADDRS:=no} STABLE_MAC_ADDRS=${STABLE_MAC_ADDRS:=no}
TCPDUMP_EXTRA_FLAGS=${TCPDUMP_EXTRA_FLAGS:=} TCPDUMP_EXTRA_FLAGS=${TCPDUMP_EXTRA_FLAGS:=}
...@@ -161,6 +162,12 @@ fi ...@@ -161,6 +162,12 @@ fi
if [[ "$REQUIRE_MZ" = "yes" ]]; then if [[ "$REQUIRE_MZ" = "yes" ]]; then
require_command $MZ require_command $MZ
fi fi
if [[ "$REQUIRE_MTOOLS" = "yes" ]]; then
# https://github.com/vladimiroltean/mtools/
# patched for IPv6 support
require_command msend
require_command mreceive
fi
if [[ ! -v NUM_NETIFS ]]; then if [[ ! -v NUM_NETIFS ]]; then
echo "SKIP: importer does not define \"NUM_NETIFS\"" echo "SKIP: importer does not define \"NUM_NETIFS\""
...@@ -1548,6 +1555,37 @@ brmcast_check_sg_state() ...@@ -1548,6 +1555,37 @@ brmcast_check_sg_state()
done done
} }
mc_join()
{
local if_name=$1
local group=$2
local vrf_name=$(master_name_get $if_name)
# We don't care about actual reception, just about joining the
# IP multicast group and adding the L2 address to the device's
# MAC filtering table
ip vrf exec $vrf_name \
mreceive -g $group -I $if_name > /dev/null 2>&1 &
mreceive_pid=$!
sleep 1
}
mc_leave()
{
kill "$mreceive_pid" && wait "$mreceive_pid"
}
mc_send()
{
local if_name=$1
local groups=$2
local vrf_name=$(master_name_get $if_name)
ip vrf exec $vrf_name \
msend -g $groups -I $if_name -c 1 > /dev/null 2>&1
}
start_ip_monitor() start_ip_monitor()
{ {
local mtype=$1; shift local mtype=$1; shift
......
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