The testsuite that checks for mcast_max_groups functionality will need to
wipe the added groups as well. Add helpers to build an IGMP or MLD packets
announcing that host is leaving a given group.

Signed-off-by: Petr Machata <pe...@nvidia.com>
Acked-by: Nikolay Aleksandrov <ra...@blackwall.org>
---
 tools/testing/selftests/net/forwarding/lib.sh | 50 +++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/tools/testing/selftests/net/forwarding/lib.sh 
b/tools/testing/selftests/net/forwarding/lib.sh
index 12ef34ebcbbf..969e570f609e 100755
--- a/tools/testing/selftests/net/forwarding/lib.sh
+++ b/tools/testing/selftests/net/forwarding/lib.sh
@@ -1815,6 +1815,21 @@ igmpv3_is_in_get()
        payload_template_expand_checksum "$igmpv3" $checksum
 }
 
+igmpv2_leave_get()
+{
+       local GRP=$1; shift
+
+       local payload=$(:
+               )"17:"$(                        : Type - Leave Group
+               )"00:"$(                        : Max Resp Time - not meaningful
+               )"CHECKSUM:"$(                  : Checksum
+               )"$(ipv4_to_bytes $GRP)"$(      : Group Address
+               )
+       local checksum=$(payload_template_calc_checksum "$payload")
+
+       payload_template_expand_checksum "$payload" $checksum
+}
+
 mldv2_is_in_get()
 {
        local SIP=$1; shift
@@ -1858,3 +1873,38 @@ mldv2_is_in_get()
 
        payload_template_expand_checksum "$hbh$icmpv6" $checksum
 }
+
+mldv1_done_get()
+{
+       local SIP=$1; shift
+       local GRP=$1; shift
+
+       local hbh
+       local icmpv6
+
+       hbh=$(:
+               )"3a:"$(                        : Next Header - ICMPv6
+               )"00:"$(                        : Hdr Ext Len
+               )"00:00:00:00:00:00:"$(         : Options and Padding
+               )
+
+       icmpv6=$(:
+               )"84:"$(                        : Type - MLDv1 Done
+               )"00:"$(                        : Code
+               )"CHECKSUM:"$(                  : Checksum
+               )"00:00:"$(                     : Max Resp Delay - not 
meaningful
+               )"00:00:"$(                     : Reserved
+               )"$(ipv6_to_bytes $GRP):"$(     : Multicast address
+               )
+
+       local len=$(u16_to_bytes $(payload_template_nbytes $icmpv6))
+       local sudohdr=$(:
+               )"$(ipv6_to_bytes $SIP):"$(     : SIP
+               )"$(ipv6_to_bytes $GRP):"$(     : DIP is multicast address
+               )"${len}:"$(                    : Upper-layer length
+               )"00:3a:"$(                     : Zero and next-header
+               )
+       local checksum=$(payload_template_calc_checksum ${sudohdr}${icmpv6})
+
+       payload_template_expand_checksum "$hbh$icmpv6" $checksum
+}
-- 
2.39.0

Reply via email to