]> git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/bgp_default_afi_safi/test_bgp-default-afi-safi.py
doc: Add `show ipv6 rpf X:X::X:X` command to docs
[mirror_frr.git] / tests / topotests / bgp_default_afi_safi / test_bgp-default-afi-safi.py
1 #!/usr/bin/env python
2
3 #
4 # Copyright (c) 2021 by
5 # Donatas Abraitis <donatas.abraitis@gmail.com>
6 #
7 # Permission to use, copy, modify, and/or distribute this software
8 # for any purpose with or without fee is hereby granted, provided
9 # that the above copyright notice and this permission notice appear
10 # in all copies.
11 #
12 # THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES
13 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR
15 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
16 # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
17 # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
18 # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
19 # OF THIS SOFTWARE.
20 #
21
22 """
23 Test if `bgp default ipv4-unicast`, `bgp default ipv6-unicast`
24 and `bgp default l2vpn-evpn` commands work as expected.
25
26 STEP 1: 'Check if neighbor 192.168.255.254 is enabled for ipv4 address-family only'
27 STEP 2: 'Check if neighbor 192.168.255.254 is enabled for ipv6 address-family only'
28 STEP 3: 'Check if neighbor 192.168.255.254 is enabled for l2vpn evpn address-family only'
29 STEP 4: 'Check if neighbor 192.168.255.254 is enabled for ipv4/ipv6 unicast and l2vpn evpn address-families'
30 """
31
32 import os
33 import sys
34 import json
35 import pytest
36
37 pytestmark = [pytest.mark.bgpd]
38
39 CWD = os.path.dirname(os.path.realpath(__file__))
40 sys.path.append(os.path.join(CWD, "../"))
41
42 # pylint: disable=C0413
43 from lib.topogen import Topogen, TopoRouter, get_topogen
44 from lib.common_config import step
45
46 pytestmark = [pytest.mark.bgpd]
47
48
49 def build_topo(tgen):
50 for routern in range(1, 5):
51 tgen.add_router("r{}".format(routern))
52
53 switch = tgen.add_switch("s1")
54 switch.add_link(tgen.gears["r1"])
55 switch.add_link(tgen.gears["r2"])
56 switch.add_link(tgen.gears["r3"])
57 switch.add_link(tgen.gears["r4"])
58
59
60 def setup_module(mod):
61 tgen = Topogen(build_topo, mod.__name__)
62 tgen.start_topology()
63
64 router_list = tgen.routers()
65
66 for i, (rname, router) in enumerate(router_list.items(), 1):
67 router.load_config(
68 TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
69 )
70 router.load_config(
71 TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
72 )
73
74 tgen.start_router()
75
76
77 def teardown_module(mod):
78 tgen = get_topogen()
79 tgen.stop_topology()
80
81
82 def test_bgp_default_ipv4_ipv6_unicast():
83 tgen = get_topogen()
84
85 if tgen.routers_have_failure():
86 pytest.skip(tgen.errors)
87
88 step("Check if neighbor 192.168.255.254 is enabled for ipv4 address-family only")
89
90 def _bgp_neighbor_ipv4_af_only():
91 tgen.gears["r1"].vtysh_cmd(
92 "conf t\nrouter bgp\nneighbor 192.168.255.254 remote-as external"
93 )
94
95 output = json.loads(tgen.gears["r1"].vtysh_cmd("show bgp summary json"))
96
97 if len(output.keys()) == 1 and "ipv4Unicast" in output:
98 return True
99 return False
100
101 assert _bgp_neighbor_ipv4_af_only() == True
102
103 step("Check if neighbor 192.168.255.254 is enabled for ipv6 address-family only")
104
105 def _bgp_neighbor_ipv6_af_only():
106 tgen.gears["r2"].vtysh_cmd(
107 "conf t\nrouter bgp\nneighbor 192.168.255.254 remote-as external"
108 )
109
110 output = json.loads(tgen.gears["r2"].vtysh_cmd("show bgp summary json"))
111
112 if len(output.keys()) == 1 and "ipv6Unicast" in output:
113 return True
114 return False
115
116 assert _bgp_neighbor_ipv6_af_only() == True
117
118 step("Check if neighbor 192.168.255.254 is enabled for evpn address-family only")
119
120 def _bgp_neighbor_evpn_af_only():
121 tgen.gears["r3"].vtysh_cmd(
122 "conf t\nrouter bgp\nneighbor 192.168.255.254 remote-as external"
123 )
124
125 output = json.loads(tgen.gears["r3"].vtysh_cmd("show bgp summary json"))
126
127 if len(output.keys()) == 1 and "l2VpnEvpn" in output:
128 return True
129 return False
130
131 assert _bgp_neighbor_evpn_af_only() == True
132
133 step(
134 "Check if neighbor 192.168.255.254 is enabled for ipv4/ipv6 unicast and evpn address-families"
135 )
136
137 def _bgp_neighbor_ipv4_ipv6_and_evpn_af():
138 tgen.gears["r4"].vtysh_cmd(
139 "conf t\nrouter bgp\nneighbor 192.168.255.254 remote-as external"
140 )
141
142 output = json.loads(tgen.gears["r4"].vtysh_cmd("show bgp summary json"))
143
144 if (
145 len(output.keys()) == 3
146 and "ipv4Unicast" in output
147 and "ipv6Unicast" in output
148 and "l2VpnEvpn" in output
149 ):
150 return True
151 return False
152
153 assert _bgp_neighbor_ipv4_ipv6_and_evpn_af() == True
154
155
156 if __name__ == "__main__":
157 args = ["-s"] + sys.argv[1:]
158 sys.exit(pytest.main(args))