]> git.proxmox.com Git - mirror_frr.git/blob - 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
1 #!/usr/bin/env python
2 # SPDX-License-Identifier: ISC
3
4 #
5 # Copyright (c) 2022 by
6 # Donatas Abraitis <donatas@opensourcerouting.org>
7 #
8
9 """
10 Check if we can override VPN underlay next-hop from PE1 to PE2.
11 """
12
13 import os
14 import sys
15 import json
16 import pytest
17 import functools
18
19 CWD = os.path.dirname(os.path.realpath(__file__))
20 sys.path.append(os.path.join(CWD, "../"))
21
22 # pylint: disable=C0413
23 from lib import topotest
24 from lib.topogen import Topogen, TopoRouter, get_topogen
25 from lib.common_config import step
26
27 pytestmark = [pytest.mark.bgpd]
28
29
30 def 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
49 def 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
87 def teardown_module(mod):
88 tgen = get_topogen()
89 tgen.stop_topology()
90
91
92 def 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
123 if __name__ == "__main__":
124 args = ["-s"] + sys.argv[1:]
125 sys.exit(pytest.main(args))