Esempio n. 1
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    bond_options = {"mode": "802.3ad", "miimon": "100"}
    m1_lag1 = m1.create_bond(slaves=[m1_if1, m1_if2],
                             options=bond_options,
                             ip=["192.168.101.10/24", "2002::1/64"])
    m2_lag1 = m2.create_bond(slaves=[m2_if1, m2_if2],
                             options=bond_options,
                             ip=["192.168.101.11/24", "2002::2/64"])

    sw_lag1 = sw.create_bond(slaves=[sw_if1, sw_if2], options=bond_options)
    sw_lag2 = sw.create_bond(slaves=[sw_if3, sw_if4], options=bond_options)

    sw.create_bridge(slaves=[sw_lag1, sw_lag2],
                     options={
                         "vlan_filtering": 1,
                         "multicast_snooping": 0
                     })
    test_ifaces = m1_lag1, m2_lag1, sw_lag1, sw_lag2

    tl = TestLib(ctl, aliases, test_ifaces)
    tl.wait_for_if(ifaces)
    tl.link_status_show()
    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)
Esempio n. 2
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, sw, m2 = hosts
    m1_if1, sw_if1, sw_if2, sw_if3, m2_if1, m2_if2, m2_if3, m3_if1 = ifaces

    ecmp_sw_ifaces = [sw_if2, sw_if3]
    ecmp_m_ifaces = [m2_if1, m2_if2]

    m2.config("/proc/sys/net/ipv4/ip_forward", "1")
    m2.config("/proc/sys/net/ipv6/conf/all/forwarding", "1")

    ecmp_common.create_topology(m1_if1,
                                sw_if1,
                                ecmp_sw_ifaces,
                                ecmp_m_ifaces,
                                m2_if3,
                                m3_if1,
                                num_nexthops=MAX_NEXTHOPS)

    tl = TestLib(ctl, aliases)
    tl.wait_for_if(ifaces)
    tl.ping_simple(m1_if1, m3_if1)
    tl.netperf_udp(m1_if1, m3_if1)
    ecmp_common.test_traffic(tl, m1_if1, m3_if1, sw_if1, ecmp_sw_ifaces)

    routes_filter = "to match %s" % m3_if1.get_ip()
    dc_routes, nh_routes = sw.get_routes(routes_filter=routes_filter)
    if len(nh_routes) != 1:
        tl.custom(sw, "route", "could not find the ecmp route")

    for nh in nh_routes[0]["nexthops"]:
        if "offload" not in nh["flags"]:
            tl.custom(sw, "route", "ecmp route is not offloaded")
Esempio n. 3
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m2_if1, sw_if1, sw_if2 = ifaces

    m1_if1.reset()
    m2_if1.reset()

    m1_if1_10 = m1.create_vlan(m1_if1, 10, ip=test_ip(1, 1))
    m2_if1_10 = m2.create_vlan(m2_if1, 10, ip=test_ip(2, 1))

    sw_if1_10 = sw.create_vlan(sw_if1, 10, ip=test_ip(1, 2))
    sw_if2_10 = sw.create_vlan(sw_if2, 10, ip=test_ip(2, 2))

    m1_if1_10.add_nhs_route(ipv4(test_ip(2, 0)), [ipv4(test_ip(1, 2, []))])
    m2_if1_10.add_nhs_route(ipv4(test_ip(1, 0)), [ipv4(test_ip(2, 2, []))])

    m1_if1.add_nhs_route(ipv6(test_ip(2, 0)), [ipv6(test_ip(1, 2, []))],
                         ipv6=True)
    m2_if1.add_nhs_route(ipv6(test_ip(1, 0)), [ipv6(test_ip(2, 2, []))],
                         ipv6=True)

    tl = TestLib(ctl, aliases)
    tl.wait_for_if(ifaces)
    tl.ping_simple(m1_if1_10, m2_if1_10)
    tl.netperf_tcp(m1_if1_10, m2_if1_10)
    tl.netperf_udp(m1_if1_10, m2_if1_10)
Esempio n. 4
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    team_config = '{"runner" : {"name" : "lacp"}}'
    m1_lag1 = m1.create_team(slaves=[m1_if1, m1_if2], config=team_config,
                             ip=test_ip(1,1))
    m2_lag1 = m2.create_team(slaves=[m2_if1, m2_if2], config=team_config,
                             ip=test_ip(2,1))

    m1_lag1.add_nhs_route(ipv4(test_ip(2,0)), [ipv4(test_ip(1,2,[]))]);
    m2_lag1.add_nhs_route(ipv4(test_ip(1,0)), [ipv4(test_ip(2,2,[]))]);

    m1_if1.add_nhs_route(ipv6(test_ip(2,0)), [ipv6(test_ip(1,2,[]))], ipv6=True);
    m2_if1.add_nhs_route(ipv6(test_ip(1,0)), [ipv6(test_ip(2,2,[]))], ipv6=True);

    sw_lag1 = sw.create_team(slaves=[sw_if1, sw_if2], config=team_config,
                             ip=test_ip(1,2))
    sw_lag2 = sw.create_team(slaves=[sw_if3, sw_if4], config=team_config,
                             ip=test_ip(2,2))

    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)
Esempio n. 5
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    team_config = '{"runner" : {"name" : "lacp"}}'
    m1_lag1 = m1.create_team(slaves=[m1_if1, m1_if2],
                             config=team_config,
                             ip=test_ip(1, 1))
    m2_lag1 = m2.create_team(slaves=[m2_if1, m2_if2],
                             config=team_config,
                             ip=test_ip(2, 1))

    m1_lag1.add_nhs_route(ipv4(test_ip(2, 0)), [ipv4(test_ip(1, 2, []))])
    m2_lag1.add_nhs_route(ipv4(test_ip(1, 0)), [ipv4(test_ip(2, 2, []))])

    m1_if1.add_nhs_route(ipv6(test_ip(2, 0)), [ipv6(test_ip(1, 2, []))],
                         ipv6=True)
    m2_if1.add_nhs_route(ipv6(test_ip(1, 0)), [ipv6(test_ip(2, 2, []))],
                         ipv6=True)

    sw_lag1 = sw.create_team(slaves=[sw_if1, sw_if2],
                             config=team_config,
                             ip=test_ip(1, 2))
    sw_lag2 = sw.create_team(slaves=[sw_if3, sw_if4],
                             config=team_config,
                             ip=test_ip(2, 2))

    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)
Esempio n. 6
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    bond_options = {"mode": "802.3ad", "miimon": "100"}
    m1_lag1 = m1.create_bond(slaves=[m1_if1, m1_if2],
                             options=bond_options,
                             ip=test_ip(1, 1))
    m2_lag1 = m2.create_bond(slaves=[m2_if1, m2_if2],
                             options=bond_options,
                             ip=test_ip(2, 1))

    m1_lag1.add_nhs_route(ipv4(test_ip(2, 0)), [ipv4(test_ip(1, 2, []))])
    m2_lag1.add_nhs_route(ipv4(test_ip(1, 0)), [ipv4(test_ip(2, 2, []))])

    m1_if1.add_nhs_route(ipv6(test_ip(2, 0)), [ipv6(test_ip(1, 2, []))],
                         ipv6=True)
    m2_if1.add_nhs_route(ipv6(test_ip(1, 0)), [ipv6(test_ip(2, 2, []))],
                         ipv6=True)

    sw_lag1 = sw.create_bond(slaves=[sw_if1, sw_if2],
                             options=bond_options,
                             ip=test_ip(1, 2))
    sw_lag2 = sw.create_bond(slaves=[sw_if3, sw_if4],
                             options=bond_options,
                             ip=test_ip(2, 2))

    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)
Esempio n. 7
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    bond_options = {"mode": "802.3ad", "miimon": "100"}
    m1_lag1 = m1.create_bond(slaves=[m1_if1, m1_if2], options=bond_options,
                             ip=test_ip(1,1))
    m2_lag1 = m2.create_bond(slaves=[m2_if1, m2_if2], options=bond_options,
                             ip=test_ip(2,1))

    m1_lag1.add_nhs_route(ipv4(test_ip(2,0)), [ipv4(test_ip(1,2,[]))]);
    m2_lag1.add_nhs_route(ipv4(test_ip(1,0)), [ipv4(test_ip(2,2,[]))]);

    m1_if1.add_nhs_route(ipv6(test_ip(2,0)), [ipv6(test_ip(1,2,[]))], ipv6=True);
    m2_if1.add_nhs_route(ipv6(test_ip(1,0)), [ipv6(test_ip(2,2,[]))], ipv6=True);

    sw_lag1 = sw.create_bond(slaves=[sw_if1, sw_if2], options=bond_options,
                             ip=test_ip(1,2))
    sw_lag2 = sw.create_bond(slaves=[sw_if3, sw_if4], options=bond_options,
                             ip=test_ip(2,2))

    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)
Esempio n. 8
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    team_config = '{"runner" : {"name" : "lacp"}}'
    m1_lag1 = m1.create_team(slaves=[m1_if1, m1_if2],
                             config=team_config,
                             ip=["192.168.101.10/24", "2002::1/64"])

    m2_lag1 = m2.create_team(slaves=[m2_if1, m2_if2],
                             config=team_config,
                             ip=["192.168.101.11/24", "2002::2/64"])

    sw_lag1 = sw.create_team(slaves=[sw_if1, sw_if2],
                             config=team_config)

    sw_lag2 = sw.create_team(slaves=[sw_if3, sw_if4],
                             config=team_config)

    sw_br = sw.create_bridge(slaves=[sw_lag1, sw_lag2],
                             options={"vlan_filtering": 1,
                                      "multicast_querier": 1})

    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)

    sw_lag1.slave_del(sw_if1.get_id())
    sw_lag1.slave_del(sw_if2.get_id())

    m1_lag1.slave_del(m1_if1.get_id())

    # Make sure slowpath is working.
    sw_if1.reset(ip=["192.168.102.10/24", "2003::1/64"])
    m1_if1.reset(ip=["192.168.102.11/24", "2003::2/64"])

    sleep(30)

    tl.ping_simple(sw_if1, m1_if1)

    # Repopulate the LAGs and make sure fastpath is OK.
    sw_if1.set_addresses([])    # LAG port can't have IP address.
    sw_lag3 = sw.create_team(slaves=[sw_if1, sw_if2],
                             config=team_config)
    sw_br.slave_add(sw_lag3.get_id())
    m1_lag1.slave_add(m1_if1.get_id())

    sleep(30)

    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)
Esempio n. 9
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    team_config = '{"runner" : {"name" : "lacp"}}'
    m1_lag1 = m1.create_team(slaves=[m1_if1, m1_if2],
                             config=team_config,
                             ip=["192.168.101.10/24", "2002::1/64"])

    m2_lag1 = m2.create_team(slaves=[m2_if1, m2_if2],
                             config=team_config,
                             ip=["192.168.101.11/24", "2002::2/64"])

    sw_lag1 = sw.create_team(slaves=[sw_if1, sw_if2], config=team_config)

    sw_lag2 = sw.create_team(slaves=[sw_if3, sw_if4], config=team_config)

    sw_br = sw.create_bridge(slaves=[sw_lag1, sw_lag2],
                             options={
                                 "vlan_filtering": 1,
                                 "multicast_querier": 1
                             })

    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)

    sw_lag1.slave_del(sw_if1.get_id())
    sw_lag1.slave_del(sw_if2.get_id())

    m1_lag1.slave_del(m1_if1.get_id())

    # Make sure slowpath is working.
    sw_if1.reset(ip=["192.168.102.10/24", "2003::1/64"])
    m1_if1.reset(ip=["192.168.102.11/24", "2003::2/64"])

    sleep(30)

    tl.ping_simple(sw_if1, m1_if1)

    # Repopulate the LAGs and make sure fastpath is OK.
    sw_if1.set_addresses([])  # LAG port can't have IP address.
    sw_lag3 = sw.create_team(slaves=[sw_if1, sw_if2], config=team_config)
    sw_br.slave_add(sw_lag3.get_id())
    m1_lag1.slave_add(m1_if1.get_id())

    sleep(30)

    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)
Esempio n. 10
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, sw = hosts
    m1_if1, sw_if1 = ifaces

    m1_if1.reset(ip=["192.168.101.10/24", "2002::1/64"])
    sw_if1.reset(ip=["192.168.101.11/24", "2002::2/64"])

    tl = TestLib(ctl, aliases)
    tl.wait_for_if(ifaces)
    tl.ping_simple(m1_if1, sw_if1)
    tl.netperf_tcp(m1_if1, sw_if1)
    tl.netperf_udp(m1_if1, sw_if1)
Esempio n. 11
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, sw = hosts
    m1_if1, sw_if1 = ifaces

    m1_if1.reset(ip=["192.168.101.10/24", "2002::1/64"])
    sw_if1.reset(ip=["192.168.101.11/24", "2002::2/64"])

    sleep(15)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_if1, sw_if1)
    tl.netperf_tcp(m1_if1, sw_if1)
    tl.netperf_udp(m1_if1, sw_if1)
Esempio n. 12
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m2_if1, sw_if1, sw_if2 = ifaces

    m1_if1.reset(ip=["192.168.101.10/24", "2002::1/64"])
    m2_if1.reset(ip=["192.168.101.11/24", "2002::2/64"])

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

    sleep(15)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_if1, m2_if1)
    tl.netperf_tcp(m1_if1, m2_if1)
    tl.netperf_udp(m1_if1, m2_if1)
Esempio n. 13
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m2_if1, sw_if1, sw_if2 = ifaces

    m1_if1.reset(ip=["192.168.101.10/24", "2002::1/64"])
    m2_if1.reset(ip=["192.168.101.11/24", "2002::2/64"])

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

    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_if1, m2_if1)
    tl.netperf_tcp(m1_if1, m2_if1)
    tl.netperf_udp(m1_if1, m2_if1)
Esempio n. 14
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, sw = hosts
    m1_if1, sw_if1 = ifaces

    m1_if1_10 = m1.create_vlan(m1_if1, 10, ip=["192.168.101.10/24",
                                               "2002::1/64"])
    sw_if1_10 = sw.create_vlan(sw_if1, 10, ip=["192.168.101.11/24",
                                               "2002::2/64"])

    sleep(15)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_if1_10, sw_if1_10)
    tl.netperf_tcp(m1_if1_10, sw_if1_10)
    tl.netperf_udp(m1_if1_10, sw_if1_10)
Esempio n. 15
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, sw, m2 = hosts
    m1_if1, sw_if1, sw_if2, sw_if3, m2_if1, m2_if2, m2_if3, m3_if1 = ifaces

    ecmp_sw_ifaces = [sw_if2, sw_if3]
    ecmp_m_ifaces = [m2_if1, m2_if2]

    m2.config("/proc/sys/net/ipv4/ip_forward", "1")
    m2.config("/proc/sys/net/ipv6/conf/all/forwarding", "1")

    ecmp_common.create_topology(m1_if1, sw_if1, ecmp_sw_ifaces, ecmp_m_ifaces,
                                m2_if3, m3_if1)
    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_if1, m3_if1)
    tl.netperf_udp(m1_if1, m3_if1)
    ecmp_common.test_traffic(tl, m1_if1, m3_if1, sw_if1, ecmp_sw_ifaces)
Esempio n. 16
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, sw, m2 = hosts
    m1_if1, sw_if1, sw_if2, sw_if3, m2_if1, m2_if2, m2_if3, m3_if1 = ifaces

    ecmp_sw_ifaces = [sw_if2, sw_if3]
    ecmp_m_ifaces = [m2_if1, m2_if2]

    m2.config("/proc/sys/net/ipv4/ip_forward", "1")
    m2.config("/proc/sys/net/ipv6/conf/all/forwarding", "1")

    ecmp_common.create_topology(m1_if1, sw_if1, ecmp_sw_ifaces, ecmp_m_ifaces,
                                m2_if3, m3_if1)

    tl = TestLib(ctl, aliases)
    tl.wait_for_if(ifaces)
    tl.ping_simple(m1_if1, m3_if1)
    tl.netperf_udp(m1_if1, m3_if1)
    ecmp_common.test_traffic(tl, m1_if1, m3_if1, sw_if1, ecmp_sw_ifaces)
Esempio n. 17
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, sw, m2 = hosts
    m1_if1, sw_if1, sw_if2, sw_if3, sw_if4, sw_if5, m2_if1, m2_if2, m2_if3, \
        m2_if4, m2_if5, m3_if1 = ifaces

    ecmp_sw_ifaces = [sw_if2, sw_if3, sw_if4, sw_if5]
    ecmp_m_ifaces = [m2_if1, m2_if2, m2_if3, m2_if4]

    m2.config("/proc/sys/net/ipv4/ip_forward", "1")

    ecmp_common.create_topology(m1_if1, sw_if1, ecmp_sw_ifaces, ecmp_m_ifaces,
                                m2_if5, m3_if1)
    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_if1, m3_if1)
    tl.netperf_udp(m1_if1, m3_if1)
    ecmp_common.test_traffic(tl, m1_if1, m3_if1, sw_if1, ecmp_sw_ifaces)
Esempio n. 18
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m2_if1, sw_if1, sw_if2 = ifaces

    m1_if1.reset(ip=test_ip(1,1))
    m2_if1.reset(ip=test_ip(2,1))

    sw_if1.reset(ip=test_ip(1,2))
    sw_if2.reset(ip=test_ip(2,2))

    m1_if1.add_nhs_route(ipv4(test_ip(2,0)), [ipv4(test_ip(1,2,[]))]);
    m2_if1.add_nhs_route(ipv4(test_ip(1,0)), [ipv4(test_ip(2,2,[]))]);

    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_if1, m2_if1)
    tl.netperf_tcp(m1_if1, m2_if1)
    tl.netperf_udp(m1_if1, m2_if1)
Esempio n. 19
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    bond_options = {"mode": "802.3ad", "miimon": "100"}
    m1_lag1 = m1.create_bond(slaves=[m1_if1, m1_if2], options=bond_options,
                             ip=["192.168.101.10/24", "2002::1/64"])
    m2_lag1 = m2.create_bond(slaves=[m2_if1, m2_if2], options=bond_options,
                             ip=["192.168.101.11/24", "2002::2/64"])

    sw_lag1 = sw.create_bond(slaves=[sw_if1, sw_if2], options=bond_options)
    sw_lag2 = sw.create_bond(slaves=[sw_if3, sw_if4], options=bond_options)

    sw.create_bridge(slaves=[sw_lag1, sw_lag2], options={"vlan_filtering": 1})

    sleep(15)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)
Esempio n. 20
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m2_if1, sw_if1, sw_if2 = ifaces

    m1_if1.reset()
    m2_if1.reset()

    m1_if1_10 = m1.create_vlan(m1_if1, 10, ip=test_ip(1, 1))
    m2_if1_10 = m2.create_vlan(m2_if1, 10, ip=test_ip(2, 1))

    sw_if1_10 = sw.create_vlan(sw_if1, 10, ip=test_ip(1, 2))
    sw_if2_10 = sw.create_vlan(sw_if2, 10, ip=test_ip(2, 2))

    m1_if1_10.add_nhs_route(ipv4(test_ip(2, 0)), [ipv4(test_ip(1, 2, []))])
    m2_if1_10.add_nhs_route(ipv4(test_ip(1, 0)), [ipv4(test_ip(2, 2, []))])

    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_if1_10, m2_if1_10)
    tl.netperf_tcp(m1_if1_10, m2_if1_10)
    tl.netperf_udp(m1_if1_10, m2_if1_10)
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    bond_options = {"mode": "802.3ad", "miimon": "100"}
    m1_lag1 = m1.create_bond(slaves=[m1_if1, m1_if2],
                             options=bond_options,
                             ip=["192.168.101.10/24", "2002::1/64"])
    m2_lag1 = m2.create_bond(slaves=[m2_if1, m2_if2],
                             options=bond_options,
                             ip=["192.168.101.11/24", "2002::2/64"])

    sw_lag1 = sw.create_bond(slaves=[sw_if1, sw_if2], options=bond_options)
    sw_lag2 = sw.create_bond(slaves=[sw_if3, sw_if4], options=bond_options)

    sw.create_bridge(slaves=[sw_lag1, sw_lag2], options={"vlan_filtering": 1})

    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)
Esempio n. 22
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m2_if1, sw_if1, sw_if2 = ifaces

    m1_if1.reset(ip=test_ip(1, 1))

    m1_if1_10 = m1.create_vlan(m1_if1, 10, ip=test_ip(2, 1))
    m1_if1_20 = m1.create_vlan(m1_if1, 20, ip=test_ip(3, 1))

    m2_if1.reset(ip=test_ip(1, 2))
    m2_if1_10 = m2.create_vlan(m2_if1, 10, ip=test_ip(2, 2))
    m2_if1_20 = m2.create_vlan(m2_if1, 20, ip=test_ip(3, 2))

    br_options = {"vlan_filtering": 1, "multicast_snooping": 0}
    sw.create_bridge(slaves=[sw_if1, sw_if2], options=br_options)

    sw_if1.add_br_vlan(10)
    sw_if2.add_br_vlan(10)
    sw_if1.add_br_vlan(20)
    sw_if2.add_br_vlan(20)

    sleep(30)

    tl = TestLib(ctl, aliases)

    tl.ping_simple(m1_if1, m2_if1)
    tl.netperf_tcp(m1_if1, m2_if1)
    tl.netperf_udp(m1_if1, m2_if1)

    tl.ping_simple(m1_if1_10, m2_if1_10)
    tl.netperf_tcp(m1_if1_10, m2_if1_10)
    tl.netperf_udp(m1_if1_10, m2_if1_10)

    tl.ping_simple(m1_if1_20, m2_if1_20)
    tl.netperf_tcp(m1_if1_20, m2_if1_20)
    tl.netperf_udp(m1_if1_20, m2_if1_20)

    sw_if1.add_br_vlan(500, pvid=True, untagged=True)
    sw_if2.add_br_vlan(500, pvid=True, untagged=True)
    sleep(1)
    tl.ping_simple(m1_if1, m2_if1)
    tl.netperf_tcp(m1_if1, m2_if1)
    tl.netperf_udp(m1_if1, m2_if1)
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m2_if1, sw_if1, sw_if2 = ifaces

    m1_if1.reset(ip=test_ip(1, 1))

    m1_if1_10 = m1.create_vlan(m1_if1, 10, ip=test_ip(2, 1))
    m1_if1_20 = m1.create_vlan(m1_if1, 20, ip=test_ip(3, 1))

    m2_if1.reset(ip=test_ip(1, 2))
    m2_if1_10 = m2.create_vlan(m2_if1, 10, ip=test_ip(2, 2))
    m2_if1_20 = m2.create_vlan(m2_if1, 20, ip=test_ip(3, 2))

    br_options = {"vlan_filtering": 1}
    sw.create_bridge(slaves=[sw_if1, sw_if2], options=br_options)

    sw_if1.add_br_vlan(10)
    sw_if2.add_br_vlan(10)
    sw_if1.add_br_vlan(20)
    sw_if2.add_br_vlan(20)

    sleep(15)

    tl = TestLib(ctl, aliases)

    tl.ping_simple(m1_if1, m2_if1)
    tl.netperf_tcp(m1_if1, m2_if1)
    tl.netperf_udp(m1_if1, m2_if1)

    tl.ping_simple(m1_if1_10, m2_if1_10)
    tl.netperf_tcp(m1_if1_10, m2_if1_10)
    tl.netperf_udp(m1_if1_10, m2_if1_10)

    tl.ping_simple(m1_if1_20, m2_if1_20)
    tl.netperf_tcp(m1_if1_20, m2_if1_20)
    tl.netperf_udp(m1_if1_20, m2_if1_20)

    sw_if1.add_br_vlan(500, pvid=True, untagged=True)
    sw_if2.add_br_vlan(500, pvid=True, untagged=True)
    sleep(1)
    tl.ping_simple(m1_if1, m2_if1)
    tl.netperf_tcp(m1_if1, m2_if1)
    tl.netperf_udp(m1_if1, m2_if1)
Esempio n. 24
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    bond_options = {"mode": "802.3ad", "miimon": "100"}
    m1_lag1 = m1.create_bond(slaves=[m1_if1, m1_if2],
                             options=bond_options,
                             ip=test_ip(1, 1))
    m1_lag1_10 = m1.create_vlan(m1_lag1, 10, ip=test_ip(2, 1))
    m1_lag1_20 = m1.create_vlan(m1_lag1, 20, ip=test_ip(3, 1))

    m2_lag1 = m2.create_bond(slaves=[m2_if1, m2_if2],
                             options=bond_options,
                             ip=test_ip(1, 2))
    m2_lag1_10 = m2.create_vlan(m2_lag1, 10, ip=test_ip(2, 2))
    m2_lag1_21 = m2.create_vlan(m2_lag1, 21, ip=test_ip(3, 2))

    sw_lag1 = sw.create_bond(slaves=[sw_if1, sw_if2], options=bond_options)
    sw_lag2 = sw.create_bond(slaves=[sw_if3, sw_if4], options=bond_options)
    br_options = {"vlan_filtering": 1, "multicast_snooping": 0}
    sw.create_bridge(slaves=[sw_lag1, sw_lag2], options=br_options)

    sw_lag1_10 = sw.create_vlan(sw_lag1, 10)
    sw_lag2_10 = sw.create_vlan(sw_lag2, 10)
    sw.create_bridge(slaves=[sw_lag1_10, sw_lag2_10],
                     options={"multicast_snooping": 0})

    sw_lag1_20 = sw.create_vlan(sw_lag1, 20)
    sw_lag2_21 = sw.create_vlan(sw_lag2, 21)
    sw.create_bridge(slaves=[sw_lag1_20, sw_lag2_21],
                     options={"multicast_snooping": 0})

    sleep(30)

    tl = TestLib(ctl, aliases)

    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)

    tl.ping_simple(m1_lag1_10, m2_lag1_10)
    tl.netperf_tcp(m1_lag1_10, m2_lag1_10)
    tl.netperf_udp(m1_lag1_10, m2_lag1_10)

    tl.ping_simple(m1_lag1_20, m2_lag1_21)
    tl.netperf_tcp(m1_lag1_20, m2_lag1_21)
    tl.netperf_udp(m1_lag1_20, m2_lag1_21)
Esempio n. 25
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    bond_options = {"mode": "802.3ad", "miimon": "100"}
    m1_lag1 = m1.create_bond(slaves=[m1_if1, m1_if2],
                             options=bond_options, ip=test_ip(1, 1))
    m1_lag1_10 = m1.create_vlan(m1_lag1, 10, ip=test_ip(2, 1))
    m1_lag1_20 = m1.create_vlan(m1_lag1, 20, ip=test_ip(3, 1))

    m2_lag1 = m2.create_bond(slaves=[m2_if1, m2_if2],
                             options=bond_options, ip=test_ip(1, 2))
    m2_lag1_10 = m2.create_vlan(m2_lag1, 10, ip=test_ip(2, 2))
    m2_lag1_21 = m2.create_vlan(m2_lag1, 21, ip=test_ip(3, 2))

    sw_lag1 = sw.create_bond(slaves=[sw_if1, sw_if2], options=bond_options)
    sw_lag2 = sw.create_bond(slaves=[sw_if3, sw_if4], options=bond_options)
    br_options = {"vlan_filtering": 1, "multicast_querier": 1}
    sw.create_bridge(slaves=[sw_lag1, sw_lag2], options=br_options)

    sw_lag1_10 = sw.create_vlan(sw_lag1, 10)
    sw_lag2_10 = sw.create_vlan(sw_lag2, 10)
    sw.create_bridge(slaves=[sw_lag1_10, sw_lag2_10],
                     options={"multicast_querier": 1})

    sw_lag1_20 = sw.create_vlan(sw_lag1, 20)
    sw_lag2_21 = sw.create_vlan(sw_lag2, 21)
    sw.create_bridge(slaves=[sw_lag1_20, sw_lag2_21],
                     options={"multicast_querier": 1})

    sleep(30)

    tl = TestLib(ctl, aliases)

    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)

    tl.ping_simple(m1_lag1_10, m2_lag1_10)
    tl.netperf_tcp(m1_lag1_10, m2_lag1_10)
    tl.netperf_udp(m1_lag1_10, m2_lag1_10)

    tl.ping_simple(m1_lag1_20, m2_lag1_21)
    tl.netperf_tcp(m1_lag1_20, m2_lag1_21)
    tl.netperf_udp(m1_lag1_20, m2_lag1_21)
Esempio n. 26
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m2_if1, sw_if1, sw_if2 = ifaces

    m1_if1.reset(ip=test_ip(1, 1))

    m1_if1_10 = m1.create_vlan(m1_if1, 10, ip=test_ip(2, 1))
    m1_if1_20 = m1.create_vlan(m1_if1, 20, ip=test_ip(3, 1))

    m2_if1.reset(ip=test_ip(1, 2))
    m2_if1_10 = m2.create_vlan(m2_if1, 10, ip=test_ip(2, 2))
    m2_if1_21 = m2.create_vlan(m2_if1, 21, ip=test_ip(3, 2))

    br_options = {"vlan_filtering": 1, "multicast_querier": 1}
    sw.create_bridge(slaves=[sw_if1, sw_if2], options=br_options)

    sw_if1_10 = sw.create_vlan(sw_if1, 10)
    sw_if2_10 = sw.create_vlan(sw_if2, 10)
    sw.create_bridge(slaves=[sw_if1_10, sw_if2_10],
                     options={"multicast_querier": 1})

    sw_if1_20 = sw.create_vlan(sw_if1, 20)
    sw_if2_21 = sw.create_vlan(sw_if2, 21)
    sw.create_bridge(slaves=[sw_if1_20, sw_if2_21],
                     options={"multicast_querier": 1})

    sleep(30)

    tl = TestLib(ctl, aliases)

    tl.ping_simple(m1_if1, m2_if1)
    tl.netperf_tcp(m1_if1, m2_if1)
    tl.netperf_udp(m1_if1, m2_if1)

    tl.ping_simple(m1_if1_10, m2_if1_10)
    tl.netperf_tcp(m1_if1_10, m2_if1_10)
    tl.netperf_udp(m1_if1_10, m2_if1_10)

    tl.ping_simple(m1_if1_20, m2_if1_21)
    tl.netperf_tcp(m1_if1_20, m2_if1_21)
    tl.netperf_udp(m1_if1_20, m2_if1_21)
Esempio n. 27
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m2_if1, sw_if1, sw_if2 = ifaces

    m1_if1.reset(ip=test_ip(1, 1))

    m1_if1_10 = m1.create_vlan(m1_if1, 10, ip=test_ip(2, 1))
    m1_if1_20 = m1.create_vlan(m1_if1, 20, ip=test_ip(3, 1))

    m2_if1.reset(ip=test_ip(1, 2))
    m2_if1_10 = m2.create_vlan(m2_if1, 10, ip=test_ip(2, 2))
    m2_if1_21 = m2.create_vlan(m2_if1, 21, ip=test_ip(3, 2))

    br_options = {"vlan_filtering": 1, "multicast_snooping": 0}
    sw.create_bridge(slaves=[sw_if1, sw_if2], options=br_options)

    sw_if1_10 = sw.create_vlan(sw_if1, 10)
    sw_if2_10 = sw.create_vlan(sw_if2, 10)
    sw.create_bridge(slaves=[sw_if1_10, sw_if2_10],
                     options={"multicast_snooping": 0})

    sw_if1_20 = sw.create_vlan(sw_if1, 20)
    sw_if2_21 = sw.create_vlan(sw_if2, 21)
    sw.create_bridge(slaves=[sw_if1_20, sw_if2_21],
                     options={"multicast_snooping": 0})

    sleep(30)

    tl = TestLib(ctl, aliases)

    tl.ping_simple(m1_if1, m2_if1)
    tl.netperf_tcp(m1_if1, m2_if1)
    tl.netperf_udp(m1_if1, m2_if1)

    tl.ping_simple(m1_if1_10, m2_if1_10)
    tl.netperf_tcp(m1_if1_10, m2_if1_10)
    tl.netperf_udp(m1_if1_10, m2_if1_10)

    tl.ping_simple(m1_if1_20, m2_if1_21)
    tl.netperf_tcp(m1_if1_20, m2_if1_21)
    tl.netperf_udp(m1_if1_20, m2_if1_21)
Esempio n. 28
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    team_config = '{"runner" : {"name" : "lacp"}}'
    m1_lag1 = m1.create_team(slaves=[m1_if1, m1_if2],
                             config=team_config, ip=test_ip(1, 1))
    m1_lag1_10 = m1.create_vlan(m1_lag1, 10, ip=test_ip(2, 1))
    m1_lag1_20 = m1.create_vlan(m1_lag1, 20, ip=test_ip(3, 1))

    m2_lag1 = m2.create_team(slaves=[m2_if1, m2_if2],
                             config=team_config, ip=test_ip(1, 2))
    m2_lag1_10 = m2.create_vlan(m2_lag1, 10, ip=test_ip(2, 2))
    m2_lag1_21 = m2.create_vlan(m2_lag1, 21, ip=test_ip(3, 2))

    sw_lag1 = sw.create_team(slaves=[sw_if1, sw_if2], config=team_config)
    sw_lag2 = sw.create_team(slaves=[sw_if3, sw_if4], config=team_config)
    br_options = {"vlan_filtering": 1}
    sw_br1 = sw.create_bridge(slaves=[sw_lag1, sw_lag2], options=br_options)

    sw_lag1_10 = sw.create_vlan(sw_lag1, 10)
    sw_lag2_10 = sw.create_vlan(sw_lag2, 10)
    sw_br2 = sw.create_bridge(slaves=[sw_lag1_10, sw_lag2_10],
                              options=br_options)

    sw_lag1_20 = sw.create_vlan(sw_lag1, 20)
    sw_lag2_21 = sw.create_vlan(sw_lag2, 21)
    sw_br3 = sw.create_bridge(slaves=[sw_lag1_20, sw_lag2_21],
                              options=br_options)

    sleep(15)

    tl = TestLib(ctl, aliases)

    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)

    tl.ping_simple(m1_lag1_10, m2_lag1_10)
    tl.netperf_tcp(m1_lag1_10, m2_lag1_10)
    tl.netperf_udp(m1_lag1_10, m2_lag1_10)

    tl.ping_simple(m1_lag1_20, m2_lag1_21)
    tl.netperf_tcp(m1_lag1_20, m2_lag1_21)
    tl.netperf_udp(m1_lag1_20, m2_lag1_21)

    sw_lag1.slave_del(sw_if1.get_id())
    sw_lag1.slave_del(sw_if2.get_id())

    m1_lag1.slave_del(m1_if1.get_id())

    # Make sure slowpath is working.
    sw_if1.reset(ip=test_ip(4, 1))
    m1_if1.reset(ip=test_ip(4, 2))

    sleep(15)

    tl.ping_simple(sw_if1, m1_if1)

    # Repopulate the LAGs and make sure fastpath is OK.
    sw_lag3 = sw.create_team(slaves=[sw_if1, sw_if2],
                             config=team_config)
    sw_br1.slave_add(sw_lag3.get_id())

    sw_lag3_10 = sw.create_vlan(sw_lag3, 10)
    sw_br2.slave_add(sw_lag3_10.get_id())

    sw_lag3_20 = sw.create_vlan(sw_lag3, 20)
    sw_br3.slave_add(sw_lag3_20.get_id())

    m1_lag1.slave_add(m1_if1.get_id())

    sleep(15)

    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)

    tl.ping_simple(m1_lag1_10, m2_lag1_10)
    tl.netperf_tcp(m1_lag1_10, m2_lag1_10)
    tl.netperf_udp(m1_lag1_10, m2_lag1_10)

    tl.ping_simple(m1_lag1_20, m2_lag1_21)
    tl.netperf_tcp(m1_lag1_20, m2_lag1_21)
    tl.netperf_udp(m1_lag1_20, m2_lag1_21)
Esempio n. 29
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, m2, sw = hosts
    m1_if1, m1_if2, m2_if1, m2_if2, sw_if1, sw_if2, sw_if3, sw_if4 = ifaces

    team_config = '{"runner" : {"name" : "lacp"}}'
    m1_lag1 = m1.create_team(slaves=[m1_if1, m1_if2],
                             config=team_config, ip=test_ip(1, 1))
    m1_lag1_10 = m1.create_vlan(m1_lag1, 10, ip=test_ip(2, 1))
    m1_lag1_20 = m1.create_vlan(m1_lag1, 20, ip=test_ip(3, 1))

    m2_lag1 = m2.create_team(slaves=[m2_if1, m2_if2],
                             config=team_config, ip=test_ip(1, 2))
    m2_lag1_10 = m2.create_vlan(m2_lag1, 10, ip=test_ip(2, 2))
    m2_lag1_21 = m2.create_vlan(m2_lag1, 21, ip=test_ip(3, 2))

    sw_lag1 = sw.create_team(slaves=[sw_if1, sw_if2], config=team_config)
    sw_lag2 = sw.create_team(slaves=[sw_if3, sw_if4], config=team_config)
    br_options = {"vlan_filtering": 1}
    sw_br1 = sw.create_bridge(slaves=[sw_lag1, sw_lag2], options=br_options)

    sw_lag1_10 = sw.create_vlan(sw_lag1, 10)
    sw_lag2_10 = sw.create_vlan(sw_lag2, 10)
    sw_br2 = sw.create_bridge(slaves=[sw_lag1_10, sw_lag2_10])

    sw_lag1_20 = sw.create_vlan(sw_lag1, 20)
    sw_lag2_21 = sw.create_vlan(sw_lag2, 21)
    sw_br3 = sw.create_bridge(slaves=[sw_lag1_20, sw_lag2_21])

    sleep(30)

    tl = TestLib(ctl, aliases)

    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)

    tl.ping_simple(m1_lag1_10, m2_lag1_10)
    tl.netperf_tcp(m1_lag1_10, m2_lag1_10)
    tl.netperf_udp(m1_lag1_10, m2_lag1_10)

    tl.ping_simple(m1_lag1_20, m2_lag1_21)
    tl.netperf_tcp(m1_lag1_20, m2_lag1_21)
    tl.netperf_udp(m1_lag1_20, m2_lag1_21)

    sw_lag1.slave_del(sw_if1.get_id())
    sw_lag1.slave_del(sw_if2.get_id())

    m1_lag1.slave_del(m1_if1.get_id())

    # Make sure slowpath is working.
    sw_if1.reset(ip=test_ip(4, 1))
    m1_if1.reset(ip=test_ip(4, 2))

    sleep(30)

    tl.ping_simple(sw_if1, m1_if1)

    # Repopulate the LAGs and make sure fastpath is OK.
    sw_if1.set_addresses([])    # LAG port can't have IP address.
    sw_lag3 = sw.create_team(slaves=[sw_if1, sw_if2],
                             config=team_config)
    sw_br1.slave_add(sw_lag3.get_id())

    sw_lag3_10 = sw.create_vlan(sw_lag3, 10)
    sw_br2.slave_add(sw_lag3_10.get_id())

    sw_lag3_20 = sw.create_vlan(sw_lag3, 20)
    sw_br3.slave_add(sw_lag3_20.get_id())

    m1_lag1.slave_add(m1_if1.get_id())

    sleep(30)

    tl.ping_simple(m1_lag1, m2_lag1)
    tl.netperf_tcp(m1_lag1, m2_lag1)
    tl.netperf_udp(m1_lag1, m2_lag1)

    tl.ping_simple(m1_lag1_10, m2_lag1_10)
    tl.netperf_tcp(m1_lag1_10, m2_lag1_10)
    tl.netperf_udp(m1_lag1_10, m2_lag1_10)

    tl.ping_simple(m1_lag1_20, m2_lag1_21)
    tl.netperf_tcp(m1_lag1_20, m2_lag1_21)
    tl.netperf_udp(m1_lag1_20, m2_lag1_21)
Esempio n. 30
0
def do_task(ctl, hosts, ifaces, aliases):
    m1, sw, m2 = hosts
    m1_if1, sw_if1, sw_if2, sw_if3, m2_if1, m2_if2, m2_if3, m3_if1 = ifaces

    ecmp_sw_ifaces = [sw_if2, sw_if3]
    ecmp_m_ifaces = [m2_if1, m2_if2]

    m2.config("/proc/sys/net/ipv4/ip_forward", "1")

    ecmp_common.create_topology(m1_if1, sw_if1, ecmp_sw_ifaces, ecmp_m_ifaces,
                                m2_if3, m3_if1)
    sleep(30)

    tl = TestLib(ctl, aliases)
    tl.ping_simple(m1_if1, m3_if1)
    tl.netperf_udp(m1_if1, m3_if1)

    msg = "Running with all nexthops active"
    ecmp_common.test_traffic(tl,
                             m1_if1,
                             m3_if1,
                             sw_if1,
                             ecmp_sw_ifaces,
                             expected=1.,
                             errmsg=msg)

    # run once with ignore_routes_with_linkdown and expect no traffic loss
    for iface in ecmp_sw_ifaces:
        sw.config(
            "/proc/sys/net/ipv4/conf/%s/ignore_routes_with_linkdown" %
            iface.get_devname(), "1")

    curr_ecmp_m_ifaces = copy.copy(ecmp_m_ifaces)
    curr_ecmp_sw_ifaces = copy.copy(ecmp_sw_ifaces)
    while len(curr_ecmp_m_ifaces) > 1:
        sw_iface, m_iface = curr_ecmp_sw_ifaces.pop(), curr_ecmp_m_ifaces.pop()
        m_iface.set_link_down()

        msg = "Running with %d failed nexthops" % (len(ecmp_sw_ifaces) -
                                                   len(curr_ecmp_sw_ifaces))
        ecmp_common.test_traffic(tl,
                                 m1_if1,
                                 m3_if1,
                                 sw_if1,
                                 curr_ecmp_sw_ifaces,
                                 expected=1.0,
                                 errmsg=msg)
    for iface in ecmp_m_ifaces:
        iface.set_link_up()
    sleep(30)

    # run once without ignore_routes_with_linkdown and expect traffic loss
    for iface in ecmp_sw_ifaces:
        sw.config(
            "/proc/sys/net/ipv4/conf/%s/ignore_routes_with_linkdown" %
            iface.get_devname(), "0")

    curr_ecmp_m_ifaces = copy.copy(ecmp_m_ifaces)
    curr_ecmp_sw_ifaces = copy.copy(ecmp_sw_ifaces)
    while len(curr_ecmp_m_ifaces) > 1:
        sw_iface, m_iface = curr_ecmp_sw_ifaces.pop(), curr_ecmp_m_ifaces.pop()
        m_iface.set_link_down()

        msg = "Running with %d failed nexthops" % (len(ecmp_sw_ifaces) -
                                                   len(curr_ecmp_sw_ifaces))
        expected = float(len(curr_ecmp_m_ifaces)) / len(ecmp_m_ifaces)
        ecmp_common.test_traffic(tl,
                                 m1_if1,
                                 m3_if1,
                                 sw_if1,
                                 curr_ecmp_sw_ifaces,
                                 expected=expected,
                                 errmsg=msg)