selftests: forwarding: lib: Allow list of IPs for IGMPv3/MLDv2
authorPetr Machata <petrm@nvidia.com>
Thu, 2 Feb 2023 17:59:32 +0000 (18:59 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 Feb 2023 08:48:27 +0000 (08:48 +0000)
The testsuite that checks for mcast_max_groups functionality will need
to generate IGMP and MLD packets with configurable number of (S,G)
addresses. To that end, further extend igmpv3_is_in_get() and
mldv2_is_in_get() to allow a list of IP addresses instead of one
address.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/forwarding/lib.sh

index 4896f21493c860acae687118249e0c71ddd864d7..df6b3208e236440581e60929082d4e243a0d0c91 100755 (executable)
@@ -1768,11 +1768,12 @@ payload_template_nbytes()
 igmpv3_is_in_get()
 {
        local GRP=$1; shift
-       local IP=$1; shift
+       local sources=("$@")
 
        local igmpv3
+       local nsources=$(u16_to_bytes ${#sources[@]})
 
-       # IS_IN ( $IP )
+       # IS_IN ( $sources )
        igmpv3=$(:
                )"22:"$(                        : Type - Membership Report
                )"00:"$(                        : Reserved
@@ -1781,9 +1782,12 @@ igmpv3_is_in_get()
                )"00:01:"$(                     : Number of Group Records
                )"01:"$(                        : Record Type - IS_IN
                )"00:"$(                        : Aux Data Len
-               )"00:01:"$(                     : Number of Sources
+               )"${nsources}:"$(               : Number of Sources
                )"$(ipv4_to_bytes $GRP):"$(     : Multicast Address
-               )"$(ipv4_to_bytes $IP)"$(       : Source Address
+               )"$(for src in "${sources[@]}"; do
+                       ipv4_to_bytes $src
+                       echo -n :
+                   done)"$(                    : Source Addresses
                )
        local checksum=$(payload_template_calc_checksum "$igmpv3")
 
@@ -1794,10 +1798,11 @@ mldv2_is_in_get()
 {
        local SIP=$1; shift
        local GRP=$1; shift
-       local IP=$1; shift
+       local sources=("$@")
 
        local hbh
        local icmpv6
+       local nsources=$(u16_to_bytes ${#sources[@]})
 
        hbh=$(:
                )"3a:"$(                        : Next Header - ICMPv6
@@ -1813,9 +1818,12 @@ mldv2_is_in_get()
                )"00:01:"$(                     : Number of Group Records
                )"01:"$(                        : Record Type - IS_IN
                )"00:"$(                        : Aux Data Len
-               )"00:01:"$(                     : Number of Sources
+               )"${nsources}:"$(               : Number of Sources
                )"$(ipv6_to_bytes $GRP):"$(     : Multicast address
-               )"$(ipv6_to_bytes $IP):"$(      : Source Address
+               )"$(for src in "${sources[@]}"; do
+                       ipv6_to_bytes $src
+                       echo -n :
+                   done)"$(                    : Source Addresses
                )
 
        local len=$(u16_to_bytes $(payload_template_nbytes $icmpv6))