def test_evpn_gateway_ip_basic_topo(request):
    """
    Tets EVPN overlay index gateway IP functionality. VErify show O/Ps on PE1 and PE2
    """

    tgen = get_topogen()
    tc_name = request.node.name
    write_test_header(tc_name)

    kernelv = platform.release()
    if topotest.version_cmp(kernelv, "4.15") < 0:
        logger.info("For EVPN, kernel version should be minimum 4.15")
        write_test_footer(tc_name)
        return

    if tgen.routers_have_failure():
        pytest.skip(tgen.errors)

    step(
        "Check O/Ps for EVPN gateway IP overlay Index functionality at PE1 and PE2"
    )

    result, assertmsg = evpn_gateway_ip_show_op_check("base")

    if result is not None:
        generate_support_bundle()
    assert result is None, assertmsg

    write_test_footer(tc_name)
def test_evpn_gateway_ip_flap_rt5(request):
    """
    Withdraw EVPN type-5 routes and check O/Ps at PE1 and PE2
    """
    tgen = get_topogen()
    tc_name = request.node.name
    write_test_header(tc_name)

    kernelv = platform.release()
    if topotest.version_cmp(kernelv, "4.15") < 0:
        logger.info("For EVPN, kernel version should be minimum 4.15")
        write_test_footer(tc_name)
        return

    if tgen.routers_have_failure():
        pytest.skip(tgen.errors)

    h1 = tgen.gears['host1']

    step("Withdraw type-5 routes")

    h1.run('vtysh  -c "config t" \
                   -c "router bgp 111" \
                   -c "address-family ipv4" \
                   -c "no network 100.0.0.21/32"')
    h1.run('vtysh  -c "config t" \
                   -c "router bgp 111" \
                   -c "address-family ipv6" \
                   -c "no network 100::21/128"')

    result, assertmsg = evpn_gateway_ip_show_op_check("no_rt5")
    if result is not None:
        generate_support_bundle()
    assert result is None, assertmsg

    step("Advertise type-5 routes again")

    h1.run('vtysh  -c "config t" \
                   -c "router bgp 111" \
                   -c "address-family ipv4" \
                   -c "network 100.0.0.21/32"')
    h1.run('vtysh  -c "config t" \
                   -c "router bgp 111" \
                   -c "address-family ipv6" \
                   -c "network 100::21/128"')

    result, assertmsg = evpn_gateway_ip_show_op_check("base")
    if result is not None:
        generate_support_bundle()

    assert result is None, assertmsg

    write_test_footer(tc_name)
def test_evpn_gateway_ip_flap_rt2(request):
    """
     Withdraw EVPN type-2 routes and check O/Ps at PE1 and PE2
     """
    tgen = get_topogen()
    tc_name = request.node.name
    write_test_header(tc_name)

    kernelv = platform.release()
    if topotest.version_cmp(kernelv, "4.15") < 0:
        logger.info("For EVPN, kernel version should be minimum 4.15")
        write_test_footer(tc_name)
        return

    if tgen.routers_have_failure():
        pytest.skip(tgen.errors)

    step(
        "Shut down VxLAN interface at PE1 which results in withdraw of type-2 routes"
    )

    pe1 = tgen.gears['PE1']

    pe1.run('ip link set dev vxlan100 down')

    result, assertmsg = evpn_gateway_ip_show_op_check("no_rt2")
    if result is not None:
        generate_support_bundle()
    assert result is None, assertmsg

    step("Bring up VxLAN interface at PE1 and advertise type-2 routes again")

    pe1.run('ip link set dev vxlan100 up')

    result, assertmsg = evpn_gateway_ip_show_op_check("base")
    if result is not None:
        generate_support_bundle()
    assert result is None, assertmsg

    write_test_footer(tc_name)