]> git.proxmox.com Git - mirror_frr.git/blame - tests/topotests/bgp_vpn_5549_route_map/test_bgp_vpn_5549_route_map.py
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / topotests / bgp_vpn_5549_route_map / test_bgp_vpn_5549_route_map.py
CommitLineData
9a84cb61 1#!/usr/bin/env python
acddc0ed 2# SPDX-License-Identifier: ISC
9a84cb61
DA
3
4#
5# Copyright (c) 2022 by
6# Donatas Abraitis <donatas@opensourcerouting.org>
7#
9a84cb61
DA
8
9"""
10Check if we can override VPN underlay next-hop from PE1 to PE2.
11"""
12
13import os
14import sys
15import json
16import pytest
17import functools
18
19CWD = os.path.dirname(os.path.realpath(__file__))
20sys.path.append(os.path.join(CWD, "../"))
21
22# pylint: disable=C0413
23from lib import topotest
24from lib.topogen import Topogen, TopoRouter, get_topogen
25from lib.common_config import step
26
27pytestmark = [pytest.mark.bgpd]
28
29
30def build_topo(tgen):
31 tgen.add_router("cpe1")
32 tgen.add_router("cpe2")
33 tgen.add_router("pe1")
34 tgen.add_router("pe2")
35
36 switch = tgen.add_switch("s1")
37 switch.add_link(tgen.gears["cpe1"])
38 switch.add_link(tgen.gears["pe1"])
39
40 switch = tgen.add_switch("s2")
41 switch.add_link(tgen.gears["pe1"])
42 switch.add_link(tgen.gears["pe2"])
43
44 switch = tgen.add_switch("s3")
45 switch.add_link(tgen.gears["pe2"])
46 switch.add_link(tgen.gears["cpe2"])
47
48
49def setup_module(mod):
50 tgen = Topogen(build_topo, mod.__name__)
51 tgen.start_topology()
52
53 pe1 = tgen.gears["pe1"]
54 pe2 = tgen.gears["pe2"]
55
56 pe1.run("ip link add RED type vrf table 1001")
57 pe1.run("ip link set up dev RED")
58 pe2.run("ip link add RED type vrf table 1001")
59 pe2.run("ip link set up dev RED")
60 pe1.run("ip link set pe1-eth0 master RED")
61 pe2.run("ip link set pe2-eth1 master RED")
62
63 pe1.run("sysctl -w net.ipv4.ip_forward=1")
64 pe2.run("sysctl -w net.ipv4.ip_forward=1")
65 pe1.run("sysctl -w net.mpls.conf.pe1-eth0.input=1")
66 pe2.run("sysctl -w net.mpls.conf.pe2-eth1.input=1")
67
68 router_list = tgen.routers()
69
70 for i, (rname, router) in enumerate(router_list.items(), 1):
71 router.load_config(
72 TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
73 )
74 router.load_config(
75 TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
76 )
77 router.load_config(
78 TopoRouter.RD_OSPF6, os.path.join(CWD, "{}/ospf6d.conf".format(rname))
79 )
80 router.load_config(
81 TopoRouter.RD_LDP, os.path.join(CWD, "{}/ldpd.conf".format(rname))
82 )
83
84 tgen.start_router()
85
86
87def teardown_module(mod):
88 tgen = get_topogen()
89 tgen.stop_topology()
90
91
92def test_bgp_vpn_5549():
93 tgen = get_topogen()
94
95 pe2 = tgen.gears["pe2"]
96
97 if tgen.routers_have_failure():
98 pytest.skip(tgen.errors)
99
100 def _bgp_vpn_nexthop_changed():
101 output = json.loads(pe2.vtysh_cmd("show bgp ipv4 vpn json"))
102 expected = {
103 "routes": {
104 "routeDistinguishers": {
105 "192.168.1.2:2": {
106 "172.16.255.1/32": [
107 {"valid": True, "nexthops": [{"ip": "2001:db8::1"}]}
108 ],
109 "192.168.1.0/24": [
110 {"valid": True, "nexthops": [{"ip": "2001:db8:1::1"}]}
111 ],
112 }
113 }
114 }
115 }
116 return topotest.json_cmp(output, expected)
117
118 test_func = functools.partial(_bgp_vpn_nexthop_changed)
119 _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
120 assert result is None, "Failed overriding IPv6 next-hop for VPN underlay"
121
122
123if __name__ == "__main__":
124 args = ["-s"] + sys.argv[1:]
125 sys.exit(pytest.main(args))