Esempio n. 1
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    # Create a bridge
    sw_ports = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves=sw_ports, options={"vlan_filtering": 1,
                                                       "multicast_querier": 1})

    m1_if.set_addresses(test_ip(1,1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))
    sleep(30)

    tl = TestLib(ctl, aliases)

    tl.check_cpu_traffic(sw_ports, test=False)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()

    test_standard_mutlicast(tl, m1_if, [m2_if, m4_if], [m3_if], mcgrp(3))
    test_standard_mutlicast(tl, m1_if, [m4_if], [m2_if, m3_if], mcgrp(4))
    test_standard_mutlicast(tl, m2_if, [m3_if, m4_if, m1_if], [], mcgrp(5))
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.disable_multicast()
    tl.check_cpu_traffic(sw_ports)
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    # Create a bridge
    sw_ifaces = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves=sw_ifaces, options={"vlan_filtering": 1})

    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))
    sleep(15)

    tl = TestLib(ctl, aliases)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()
    tl.check_cpu_traffic(sw_ifaces, test=False)

    test_mcast_onoff(tl, sw_br, m1_if, [], [m3_if, m2_if, m4_if], mcgrp(1))
    test_mcast_onoff(tl, sw_br, m1_if, [m2_if], [m3_if, m4_if], mcgrp(2))
    test_mcast_onoff(tl, sw_br, m1_if, [m2_if, m4_if], [m3_if], mcgrp(3))
    test_mcast_onoff(tl, sw_br, m3_if, [m1_if, m4_if], [m2_if], mcgrp(4))

    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.disable_multicast()
    tl.check_cpu_traffic(sw_ifaces)
Esempio n. 3
0
def do_task(ctl, hosts, ifaces, bridges, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces
    peers = {m1_if: sw_if1, m2_if: sw_if2, m3_if: sw_if3, m4_if: sw_if4}

    for bridge in bridges:
        bridge.set_br_mcast_snooping(False)

    # Create a bridge
    sw_ports = peers.values()
    sw_br = sw.create_bridge(slaves=sw_ports, options={"vlan_filtering": 1,
                                                       "multicast_querier": 1})

    m1_if.set_addresses(test_ip(1,1))
    m2_if.set_addresses(test_ip(1,2))
    m3_if.set_addresses(test_ip(1,3))
    m4_if.set_addresses(test_ip(1,4))

    tl = TestLib(ctl, aliases)
    tl.wait_for_if(ifaces)
    tl.check_cpu_traffic(sw_ports, test=False)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()

    test_standard_multicast(tl, m1_if, [m2_if, m4_if], mcgrp(3), sw_br, peers)
    test_standard_multicast(tl, m1_if, [m4_if], mcgrp(4), sw_br, peers)
    test_standard_multicast(tl, m2_if, [m1_if, m2_if, m4_if], mcgrp(5), sw_br, peers)

    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.disable_multicast()
    tl.check_cpu_traffic(sw_ports)
Esempio n. 4
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    # Create a bridge
    sw_ports = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves=sw_ports,
                             options={
                                 "vlan_filtering": 1,
                                 "multicast_querier": 1
                             })

    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))

    tl = TestLib(ctl, aliases)
    tl.wait_for_if(ifaces)

    tl.check_cpu_traffic(sw_ports, test=False)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()

    test_standard_mutlicast(tl, m1_if, [m2_if, m4_if], [m3_if], mcgrp(3))
    test_standard_mutlicast(tl, m1_if, [m4_if], [m2_if, m3_if], mcgrp(4))
    test_standard_mutlicast(tl, m2_if, [m3_if, m4_if, m1_if], [], mcgrp(5))
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.disable_multicast()
    tl.check_cpu_traffic(sw_ports)
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    # Create a bridge
    sw_ports = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves=sw_ports, options={"vlan_filtering": 1})

    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))

    tl = TestLib(ctl, aliases)
    tl.wait_for_if(ifaces)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()

    tl._ctl.wait(2)
    tl.check_cpu_traffic(sw_ports, test=False)

    mcast_iface = [m2_if, m3_if, m4_if]
    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.FIXED_ON)
    sw_if2.set_mcast_flood(False)

    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, False, False])
    tl.check_cpu_traffic(sw_ports)

    sw_br.set_br_mcast_snooping(False)
    tl._ctl.wait(2)
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, True, True])
    tl.check_cpu_traffic(sw_ports)

    sw_if2.set_mcast_flood(True)
    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.FIXED_OFF)
    sw_if3.set_mcast_router(MCAST_ROUTER_PORT.FIXED_ON)
    sw_if3.set_mcast_flood(False)

    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, False, True])
    tl.check_cpu_traffic(sw_ports)

    sw_br.set_br_mcast_snooping()
    tl._ctl.wait(2)

    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, True, False])
    tl.check_cpu_traffic(sw_ports)

    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.LEARNING)
    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.LEARNING)
    sw_if3.set_mcast_flood(True)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.disable_multicast()
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    # Create a bridge
    sw_ports = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves = sw_ports, options={"vlan_filtering": 1})

    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))
    sleep(15)

    tl = TestLib(ctl, aliases)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()

    tl._ctl.wait(2)
    tl.check_cpu_traffic(sw_ports, test=False)

    mcast_iface = [m2_if, m3_if, m4_if]
    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.FIXED_ON)
    sw_if2.set_mcast_flood(False)

    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, False, False])
    tl.check_cpu_traffic(sw_ports)

    sw_br.set_br_mcast_snooping(False)
    tl._ctl.wait(2)
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, True, True])
    tl.check_cpu_traffic(sw_ports)

    sw_if2.set_mcast_flood(True)
    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.FIXED_OFF)
    sw_if3.set_mcast_router(MCAST_ROUTER_PORT.FIXED_ON)
    sw_if3.set_mcast_flood(False)

    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, False, True])
    tl.check_cpu_traffic(sw_ports)

    sw_br.set_br_mcast_snooping()
    tl._ctl.wait(2)

    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, True, False])
    tl.check_cpu_traffic(sw_ports)

    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.LEARNING)
    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.LEARNING)
    sw_if3.set_mcast_flood(True)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.disable_multicast()
Esempio n. 7
0
def do_task(ctl, hosts, ifaces, host_br, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    sw_ports = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves=sw_ports, options={"vlan_filtering": 1})

    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))

    tl = TestLib(ctl, aliases)
    mcast_iface = [m1_if, m3_if, m4_if]
    m2_if.enable_multicast()
    for iface in mcast_iface:
        iface.enable_multicast()
    for iface in sw_ports:
        iface.set_mcast_router(MCAST_ROUTER_PORT.FIXED_OFF)

    sw_if1.set_mcast_router(MCAST_ROUTER_PORT.LEARNING)
    sleep(15)

    s_procs = tl.iperf_mc_listen(m3_if, mcgrp(1))
    tl._ctl.wait(2)

    tl.check_cpu_traffic(sw_ports, test=False)
    result = tl.iperf_mc(m2_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, True, False])
    tl.check_cpu_traffic(sw_ports)

    result = tl.iperf_mc(m2_if, mcast_iface, mcgrp(2))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, False, False])
    tl.check_cpu_traffic(sw_ports)

    host_br.set_br_mcast_snooping()
    host_br.set_br_mcast_querier(True)
    tl._ctl.wait(30)

    result = tl.iperf_mc(m2_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, True, False])
    tl.check_cpu_traffic(sw_ports)

    result = tl.iperf_mc(m2_if, mcast_iface, mcgrp(2))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, False, False])
    tl.check_cpu_traffic(sw_ports)

    for iface in sw_ports:
        iface.set_mcast_router(MCAST_ROUTER_PORT.LEARNING)
    s_procs.intr()

    for iface in mcast_iface:
        iface.disable_multicast()
    m2_if.disable_multicast()
def do_task(ctl, hosts, ifaces, host_br, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    sw_ports = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves=sw_ports, options={"vlan_filtering": 1})

    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))

    tl = TestLib(ctl, aliases)
    mcast_iface = [m1_if, m3_if, m4_if]
    m2_if.enable_multicast()
    for iface in mcast_iface:
        iface.enable_multicast()
    for iface in sw_ports:
        iface.set_mcast_router(MCAST_ROUTER_PORT.FIXED_OFF)

    sw_if1.set_mcast_router(MCAST_ROUTER_PORT.LEARNING)
    sleep(15)

    s_procs = tl.iperf_mc_listen(m3_if, mcgrp(1))
    tl._ctl.wait(2)

    tl.check_cpu_traffic(sw_ports, test=False)
    result = tl.iperf_mc(m2_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, True, False])
    tl.check_cpu_traffic(sw_ports)

    result = tl.iperf_mc(m2_if, mcast_iface, mcgrp(2))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, False, False])
    tl.check_cpu_traffic(sw_ports)

    host_br.set_br_mcast_snooping()
    host_br.set_br_mcast_querier(True)
    tl._ctl.wait(30)

    result = tl.iperf_mc(m2_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, True, False])
    tl.check_cpu_traffic(sw_ports)

    result = tl.iperf_mc(m2_if, mcast_iface, mcgrp(2))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, False, False])
    tl.check_cpu_traffic(sw_ports)

    for iface in sw_ports:
        iface.set_mcast_router(MCAST_ROUTER_PORT.LEARNING)
    s_procs.intr()

    for iface in mcast_iface:
        iface.disable_multicast()
    m2_if.disable_multicast()
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    # Create a bridge
    sw_ports = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves=sw_ports, options={"vlan_filtering": 1})

    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))
    sleep(15)

    tl = TestLib(ctl, aliases)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()

    logging.info("%s  join %s" % (m3_if.get_devname(), mcgrp(1)))
    s_procs_1 = [tl.iperf_mc_listen(m3_if, mcgrp(1))]
    logging.info("%s and %s  join %s" % (m2_if.get_devname(),
                                         m3_if.get_devname(), mcgrp(2)))
    s_procs_2 = [tl.iperf_mc_listen(listener, mcgrp(2))
                 for listener in [m2_if, m3_if]]
    tl._ctl.wait(2)

    logging.info("set mrouter on")
    mcast_iface = [m2_if, m3_if, m4_if]
    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.FIXED_ON)

    logging.info("check registered mid flood")
    tl.check_cpu_traffic(sw_ports, test=False)
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, True, False])
    tl.check_cpu_traffic(sw_ports)

    logging.info("check registered mid with mrouter flood")
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(2))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, True, False])
    tl.check_cpu_traffic(sw_ports)

    logging.info("check unregistered mc flood")
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(3))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, False, False])
    tl.check_cpu_traffic(sw_ports)

    logging.info("set mrouter off")
    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.FIXED_OFF)
    tl._ctl.wait(2)

    logging.info("check registered mid flood")
    result = tl.iperf_mc(m1_if,  mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, True, False])
    tl.check_cpu_traffic(sw_ports)

    logging.info("check registered mid with mrouter flood")
    result = tl.iperf_mc(m1_if,  mcast_iface, mcgrp(2))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, True, False])
    tl.check_cpu_traffic(sw_ports)

    logging.info("check unregistered mc flood")
    result = tl.iperf_mc(m1_if,  mcast_iface, mcgrp(3))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, False, False])
    tl.check_cpu_traffic(sw_ports)

    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.LEARNING)

    for proc in s_procs_1 + s_procs_2:
        proc.intr()

    for iface in mcast_iface:
        iface.disable_multicast()
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces
    dev_map = {m1_if: sw_if1, m2_if: sw_if2, m3_if: sw_if3, m4_if: sw_if4}

    # Create a bridge
    sw_ifaces = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves=sw_ifaces, options={"vlan_filtering": 1})

    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))

    tl = TestLib(ctl, aliases)
    tl.wait_for_if(ifaces)

    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()

    tl.check_cpu_traffic(sw_ifaces, test=False)
    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [],                     \
            bridged = [m3_if, m2_if, m4_if],    \
            mc_routers = [m4_if],               \
            group = mcgrp(1))

    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [m2_if],                \
            bridged = [m4_if, m3_if],           \
            mc_routers = [m3_if],               \
            group = mcgrp(2))

    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [m2_if, m4_if],         \
            bridged = [m3_if],                  \
            mc_routers = [m3_if],               \
            group = mcgrp(3))

    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [m2_if],                \
            bridged = [m3_if, m4_if],           \
            mc_routers = [m3_if, m4_if],        \
            group = mcgrp(4))

    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [m2_if, m4_if],         \
            bridged = [m3_if],                  \
            mc_routers = [m2_if],               \
            group = mcgrp(5))

    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [m2_if, m4_if],         \
            bridged = [m3_if],                  \
            mc_routers = [m2_if, m3_if],        \
            group = mcgrp(6))

    tl.check_cpu_traffic(sw_ifaces)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.disable_multicast()
Esempio n. 11
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    # Create a bridge
    sw_ports = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves=sw_ports, options={"vlan_filtering": 1})

    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))
    sleep(15)

    tl = TestLib(ctl, aliases)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()

    logging.info("%s  join %s" % (m3_if.get_devname(), mcgrp(1)))
    s_procs_1 = [tl.iperf_mc_listen(m3_if, mcgrp(1))]
    logging.info("%s and %s  join %s" %
                 (m2_if.get_devname(), m3_if.get_devname(), mcgrp(2)))
    s_procs_2 = [
        tl.iperf_mc_listen(listener, mcgrp(2)) for listener in [m2_if, m3_if]
    ]
    tl._ctl.wait(2)

    logging.info("set mrouter on")
    mcast_iface = [m2_if, m3_if, m4_if]
    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.FIXED_ON)

    logging.info("check registered mid flood")
    tl.check_cpu_traffic(sw_ports, test=False)
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, True, False])
    tl.check_cpu_traffic(sw_ports)

    logging.info("check registered mid with mrouter flood")
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(2))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, True, False])
    tl.check_cpu_traffic(sw_ports)

    logging.info("check unregistered mc flood")
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(3))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, False, False])
    tl.check_cpu_traffic(sw_ports)

    logging.info("set mrouter off")
    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.FIXED_OFF)
    tl._ctl.wait(2)

    logging.info("check registered mid flood")
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(1))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, True, False])
    tl.check_cpu_traffic(sw_ports)

    logging.info("check registered mid with mrouter flood")
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(2))
    tl.mc_ipref_compare_result(mcast_iface, result, [True, True, False])
    tl.check_cpu_traffic(sw_ports)

    logging.info("check unregistered mc flood")
    result = tl.iperf_mc(m1_if, mcast_iface, mcgrp(3))
    tl.mc_ipref_compare_result(mcast_iface, result, [False, False, False])
    tl.check_cpu_traffic(sw_ports)

    sw_if2.set_mcast_router(MCAST_ROUTER_PORT.LEARNING)

    for proc in s_procs_1 + s_procs_2:
        proc.intr()

    for iface in mcast_iface:
        iface.disable_multicast()
def do_task(ctl, hosts, ifaces, bridges, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces
    peers = {m1_if: sw_if1, m2_if: sw_if2, m3_if: sw_if3, m4_if: sw_if4}

    for bridge in bridges:
        bridge.set_br_mcast_snooping(False)

    # Create a bridge
    sw_ports = peers.values()
    sw_br = sw.create_bridge(slaves=sw_ports,
                             options={
                                 "vlan_filtering": 1,
                                 "multicast_querier": 1
                             })

    sw_br.set_br_mcast_hash_max(8192)
    sw_br.set_br_mcast_hash_elasticity(16)
    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()

    tl = TestLib(ctl, aliases)
    tl.wait_for_if(ifaces)
    tl.check_cpu_traffic(sw_ports, test=False)

    used_mdb = max(8, sw_br.show_br_mdb().count("offload") + 2)
    max_mdb = int(aliases["max_mdb"]) - used_mdb
    bridged = [m2_if, m3_if, m4_if]
    logging.info("Add %d mdb entries" % max_mdb)
    for i in range(max_mdb):
        group = mcgrp(i)
        listeners = get_listeners(i, bridged)
        for l in listeners:
            sw_br.add_br_mdb(str(peers[l].get_devname()),
                             group,
                             permanent=True)

    mdb_str = sw_br.show_br_mdb()

    msg = ""
    logging.info("Check mdb entries are offloaded")
    pattern = "(?:dev)?\s*?%s (?:port)?\s*? (\S+)\s+(?:grp)?\s*?(\S+) \s*permanent\s* offload" % (
        str(sw_br.get_devname()))
    p = re.compile(pattern)
    mdb_pairs = p.findall(mdb_str)
    for i in range(max_mdb):
        group = mcgrp(i)
        listeners = get_listeners(i, bridged)
        for l in listeners:
            if not (str(peers[l].get_devname()), group) in mdb_pairs:
                msg = "mdb entry %d: group %s port %s was not offloaded" % (
                    i, group, str(peers[l].get_devname()))
                break
        if msg:
            break

    tl.custom(sw, "Check mdb was offloaded", msg)

    for _ in range(5):
        logging.info("Check random group %s" % group)
        i = random.randint(0, max_mdb - 1)
        group = mcgrp(i)
        listeners = get_listeners(i, bridged)
        res = tl.iperf_mc(m1_if, bridged, group)
        expected = [i in listeners for i in bridged]
        tl.mc_ipref_compare_result(bridged, res, expected)

    logging.info("Del mdb entries")
    for i in range(max_mdb):
        group = mcgrp(i)
        listeners = get_listeners(i, bridged)
        for l in listeners:
            sw_br.del_br_mdb(str(peers[l].get_devname()),
                             group,
                             permanent=True)

    for _ in range(5):
        i = random.randint(0, max_mdb - 1)
        group = mcgrp(i)
        logging.info("Check random group %s" % group)
        res = tl.iperf_mc(m1_if, bridged, group)
        expected = [False for i in bridged]
        tl.mc_ipref_compare_result(bridged, res, expected)

    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.disable_multicast()
    tl.check_cpu_traffic(sw_ports)
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if, m2_if, m3_if, m4_if, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces
    dev_map = { m1_if : sw_if1, m2_if : sw_if2, m3_if : sw_if3, m4_if : sw_if4 }

    # Create a bridge
    sw_ifaces = [sw_if1, sw_if2, sw_if3, sw_if4]
    sw_br = sw.create_bridge(slaves=sw_ifaces, options={"vlan_filtering": 1})

    m1_if.set_addresses(test_ip(1, 1))
    m2_if.set_addresses(test_ip(1, 2))
    m3_if.set_addresses(test_ip(1, 3))
    m4_if.set_addresses(test_ip(1, 4))
    sleep(15)

    tl = TestLib(ctl, aliases)

    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.enable_multicast()

    tl.check_cpu_traffic(sw_ifaces, test=False)
    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [],                     \
            bridged = [m3_if, m2_if, m4_if],    \
            mc_routers = [m4_if],               \
            group = mcgrp(1))

    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [m2_if],                \
            bridged = [m4_if, m3_if],           \
            mc_routers = [m3_if],               \
            group = mcgrp(2))

    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [m2_if, m4_if],         \
            bridged = [m3_if],                  \
            mc_routers = [m3_if],               \
            group = mcgrp(3))

    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [m2_if],                \
            bridged = [m3_if, m4_if],           \
            mc_routers = [m3_if, m4_if],        \
            group = mcgrp(4))

    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [m2_if, m4_if],         \
            bridged = [m3_if],                  \
            mc_routers = [m2_if],               \
            group = mcgrp(5))

    test_mrouter(tl, dev_map,                   \
            sender = m1_if,                     \
            listeners = [m2_if, m4_if],         \
            bridged = [m3_if],                  \
            mc_routers = [m2_if, m3_if],        \
            group = mcgrp(6))

    tl.check_cpu_traffic(sw_ifaces)
    for iface in [m1_if, m2_if, m3_if, m4_if]:
        iface.disable_multicast()