test_mld_basic.py::MLDBasic

::startup
::prepare:#73:dut/pim6d/log
::prepare:#80:h1_dut/packet
::test_ssm:#89:h1/h1-dut/multicast-join[fdbc:1::fc02:ff:febc:100,ff05::2345]
::test_ssm:#91:dut/pim6d/log
::test_ssm:#92:dut/pim6d/vtysh[debug show mld interface dut-h1]
::test_ssm:#96:src/scapy[src-lan/IPv6/UDP]
::test_ssm:#106:h1_dut/packet
::test_asm:#110:h1/h1-dut/multicast-join[*,ff05::1234]
::test_asm:#112:dut/pim6d/log
::test_asm:#113:dut/pim6d/vtysh[debug show mld interface dut-h1]
::test_no_rtralert:#123:h1/scapy[h1-dut/IPv6/ICMPv6MLReport2]
::test_no_rtralert:#128:dut/pim6d/log
::test_invalid_group:#139:h1/scapy[h1-dut/IPv6/IPv6ExtHdrHopByHop/ICMPv6MLReport2]
::test_invalid_group:#144:dut/pim6d/log
::shutdown

::startup

passed after 1.19s
('test_mld_basic.py', -inf, 'startup')

::prepare

::prepare:#73:dut/pim6d/log

passed after 0.00s
('test_mld_basic.py', 73, '#73:dut/pim6d/log')

::prepare:#80:h1_dut/packet

passed after 2.63s
('test_mld_basic.py', 80, '#80:h1_dut/packet')

::test_ssm

Join a (S,G) on MLD and try forwarding a packet on it.

::test_ssm:#89:h1/h1-dut/multicast-join[fdbc:1::fc02:ff:febc:100,ff05::2345]

passed after 0.00s
('test_mld_basic.py', 89, '#89:h1/h1-dut/multicast-join[fdbc:1::fc02:ff:febc:100,ff05::2345]')

::test_ssm:#91:dut/pim6d/log

passed after 0.01s
('test_mld_basic.py', 91, '#91:dut/pim6d/log')

::test_ssm:#92:dut/pim6d/vtysh[debug show mld interface dut-h1]

passed after 0.00s, CLI command: debug show mld interface dut-h1
('test_mld_basic.py', 92, '#92:dut/pim6d/vtysh[debug show mld interface dut-h1]')

::test_ssm:#96:src/scapy[src-lan/IPv6/UDP]

passed after 0.07s, packet: Ether / IPv6 / UDP IPv6Address('fdbc:1::fc02:ff:febc:100'):9999 > ff05::2345:9999
###[ Ethernet ]### 
  dst       = 33:33:00:00:23:45
  src       = None
  type      = IPv6
###[ IPv6 ]### 
     version   = 6
     tc        = 0
     fl        = 0
     plen      = None
     nh        = UDP
     hlim      = 255
     src       = IPv6Address('fdbc:1::fc02:ff:febc:100')
     dst       = ff05::2345
###[ UDP ]### 
        sport     = 9999
        dport     = 9999
        len       = None
        chksum    = None

::test_ssm:#106:h1_dut/packet

passed after 0.00s
('test_mld_basic.py', 106, '#106:h1_dut/packet')

::test_asm

::test_asm:#110:h1/h1-dut/multicast-join[*,ff05::1234]

passed after 0.00s
('test_mld_basic.py', 110, '#110:h1/h1-dut/multicast-join[*,ff05::1234]')

::test_asm:#112:dut/pim6d/log

passed after 0.01s
('test_mld_basic.py', 112, '#112:dut/pim6d/log')

::test_asm:#113:dut/pim6d/vtysh[debug show mld interface dut-h1]

passed after 0.00s, CLI command: debug show mld interface dut-h1
('test_mld_basic.py', 113, '#113:dut/pim6d/vtysh[debug show mld interface dut-h1]')

::test_no_rtralert

MLD code should be ignoring MLD reports without router alert option.

::test_no_rtralert:#123:h1/scapy[h1-dut/IPv6/ICMPv6MLReport2]

passed after 0.06s, packet: Ether / fe80::fc03:ff:fefe:100 > ff02::16 (58) / ICMPv6MLReport2
###[ Ethernet ]### 
  dst       = 33:33:00:00:00:16
  src       = None
  type      = IPv6
###[ IPv6 ]### 
     version   = 6
     tc        = 0
     fl        = 0
     plen      = None
     nh        = ICMPv6
     hlim      = 1
     src       = IPv6Address('fe80::fc03:ff:fefe:100')
     dst       = ff02::16
###[ MLDv2 - Multicast Listener Report ]### 
        type      = MLD Report Version 2
        res       = 0
        cksum     = None
        reserved  = 0
        records_number= None
        \records   \
         |###[ ICMPv6 MLDv2 - Multicast Address Record ]### 
         |  rtype     = 4
         |  auxdata_len= None
         |  sources_number= None
         |  dst       = ff0e::1234
         |  sources   = [  ]
         |  auxdata   = ''

::test_no_rtralert:#128:dut/pim6d/log

passed after 0.00s
('test_mld_basic.py', 128, '#128:dut/pim6d/log')

::test_invalid_group

An unicast address is not a valid group address.

::test_invalid_group:#139:h1/scapy[h1-dut/IPv6/IPv6ExtHdrHopByHop/ICMPv6MLReport2]

passed after 0.06s, packet: Ether / fe80::fc03:ff:fefe:100 > ff02::16 (0) / IPv6ExtHdrHopByHop / ICMPv6MLReport2
###[ Ethernet ]### 
  dst       = 33:33:00:00:00:16
  src       = None
  type      = IPv6
###[ IPv6 ]### 
     version   = 6
     tc        = 0
     fl        = 0
     plen      = None
     nh        = Hop-by-Hop Option Header
     hlim      = 1
     src       = IPv6Address('fe80::fc03:ff:fefe:100')
     dst       = ff02::16
###[ IPv6 Extension Header - Hop-by-Hop Options Header ]### 
        nh        = ICMPv6
        len       = None
        autopad   = On
        \options   \
         |###[ Router Alert ]### 
         |  otype     = Router Alert [00: skip, 0: Don't change en-route]
         |  optlen    = 2
         |  value     = None
###[ MLDv2 - Multicast Listener Report ]### 
           type      = MLD Report Version 2
           res       = 0
           cksum     = None
           reserved  = 0
           records_number= None
           \records   \
            |###[ ICMPv6 MLDv2 - Multicast Address Record ]### 
            |  rtype     = 4
            |  auxdata_len= None
            |  sources_number= None
            |  dst       = fe80::1234
            |  sources   = [  ]
            |  auxdata   = ''

::test_invalid_group:#144:dut/pim6d/log

failed after 1.94s
('test_mld_basic.py', 144, '#144:dut/pim6d/log')
self = <test_mld_basic.MLDBasic object at 0x7f7765958550>, topo = <topotato.toponom.Network object at 0x7f77659ace90>, dut = <Router 1 "dut">, h1 = <Router 3 "h1">, h2 = <Router 4 "h2">
src = <Router 2 "src">

    @topotatofunc
    def test_invalid_group(self, topo, dut, h1, h2, src):
        """
        An unicast address is not a valid group address.
        """
        ip = IPv6(hlim=1, src=h1.iface_to("dut").ll6, dst="ff02::16")
        hbh = IPv6ExtHdrHopByHop(options = RouterAlert())
        mfrec0 = ICMPv6MLDMultAddrRec(dst="fe80::1234")
    
        yield from ScapySend.make(
            h1,
            "h1-dut",
            pkt = ip/hbh/ICMPv6MLReport2(records = [mfrec0]),
        )
>       yield from AssertLog.make(dut, 'pim6d', '[MLD default:dut-h1 fe80::fc02:ff:fefe:100] malformed MLDv2 report (invalid group fe80::1234)', maxwait=2.0)
E       topotato.exceptions.TopotatoLogFail: [MLD default:dut-h1 fe80::fc02:ff:fefe:100] malformed MLDv2 report (invalid group fe80::1234)

/home/equinox/python/topotato/test_mld_basic.py:144: TopotatoLogFail

::shutdown

passed after 1.14s
('test_mld_basic.py', inf, 'shutdown')
net router-h1 h1 10.255.0.3/32 fd00::3/128 h1-dut fe:03:00:fe:01:00 10.0.3.1/16 router-h1_router-dut_0 p2p#0 router-h1:h1-dut--router-h1_router-dut_0 router-dut dut 10.255.0.1/32 fd00::1/128 dut-h1 fe:01:00:fe:03:00 10.0.1.3/16 dut-h2 fe:01:00:fe:04:00 10.1.1.4/16 dut-lan fe:01:00:bc:01:00 10.101.0.1/16 fdbc:1::fc01:ff:febc:100/64 lan-lan lan 10.101.0.0/16 fdbc:1::/64 router-dut:dut-lan--lan-lan router-dut:dut-h1--router-h1_router-dut_0 router-dut_router-h2_0 p2p#1 router-dut:dut-h2--router-dut_router-h2_0 router-h2 h2 10.255.0.4/32 fd00::4/128 h2-dut fe:04:00:fe:01:00 10.1.4.1/16 router-h2:h2-dut--router-dut_router-h2_0 router-src src 10.255.0.2/32 fd00::2/128 src-lan fe:02:00:bc:01:00 10.101.0.2/16 fdbc:1::fc02:ff:febc:100/64 router-src:src-lan--lan-lan