-
Notifications
You must be signed in to change notification settings - Fork 1
/
test_bgp_set_local_preference_add_subtract.py
148 lines (131 loc) Β· 4.56 KB
/
test_bgp_set_local_preference_add_subtract.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2023 Nathan Mangar for NetDEF, Inc.
"""
bgp_set_local-preference_add_subtract.py:
Test if we can add/subtract the value to/from an existing
LOCAL_PREF in route-maps.
"""
__topotests_file__ = "bgp_set_local_preference_add_subtract/test_bgp_set_local-preference_add_subtract.py"
__topotests_gitrev__ = "4953ca977f3a5de8109ee6353ad07f816ca1774c"
# pylint: disable=invalid-name, missing-class-docstring, missing-function-docstring, line-too-long, consider-using-f-string, wildcard-import, unused-wildcard-import, f-string-without-interpolation, too-few-public-methods
from topotato import *
@topology_fixture()
def topology(topo):
"""
[ r1 ]
|
{ s1 }--[ r3 ]
|
[ r2 ]
{ unconnected }
"""
topo.router("r2").lo_ip4.append("172.16.255.254/32")
topo.router("r3").lo_ip4.append("172.16.255.254/32")
topo.router("r1").iface_to("s1").ip4.append("192.168.255.1/24")
topo.router("r2").iface_to("s1").ip4.append("192.168.255.2/24")
topo.router("r3").iface_to("s1").ip4.append("192.168.255.3/24")
class Configs(FRRConfigs):
routers = ["r1", "r2", "r3"]
zebra = """
#% extends "boilerplate.conf"
#% block main
#% for iface in router.ifaces
interface {{ iface.ifname }}
ip address {{ iface.ip4[0] }}
!
#% endfor
#% endblock
"""
bgpd = """
#% block main
#% if router.name == 'r1'
router bgp 65000
no bgp ebgp-requires-policy
neighbor {{ routers.r2.iface_to('s1').ip4[0].ip }} remote-as 65000
neighbor {{ routers.r2.iface_to('s1').ip4[0].ip }} timers 3 10
neighbor {{ routers.r3.iface_to('s1').ip4[0].ip }} remote-as 65000
neighbor {{ routers.r3.iface_to('s1').ip4[0].ip }} timers 3 10
!
#% elif router.name == 'r2'
router bgp 65000
no bgp ebgp-requires-policy
no bgp network import-check
network {{ topo.lans["unconnected"].ip4[0][2] }}/32 route-map l2
neighbor {{ routers.r1.iface_to('s1').ip4[0].ip }} remote-as 65000
neighbor {{ routers.r1.iface_to('s1').ip4[0].ip }} timers 3 10
address-family ipv4
redistribute connected
neighbor {{ routers.r1.iface_to('s1').ip4[0].ip }} route-map r1-out out
!
route-map r1-out permit 10
set local-preference +50
route-map l2 permit 10
set local-preference +10
!
#% elif router.name == 'r3'
router bgp 65000
no bgp ebgp-requires-policy
no bgp network import-check
neighbor {{ routers.r1.iface_to('s1').ip4[0].ip }} remote-as 65000
neighbor {{ routers.r1.iface_to('s1').ip4[0].ip }} timers 3 10
network {{ topo.lans["unconnected"].ip4[0][3] }}/32 route-map l3
address-family ipv4
redistribute connected
neighbor {{ routers.r1.iface_to('s1').ip4[0].ip }} route-map r1-out out
!
route-map r1-out permit 10
set local-preference -50
route-map l3 permit 10
set local-preference -10
!
#% endif
#% endblock
"""
class TestBGPSetLocalPreferenceAddSubtract(
TestBase, AutoFixture, topo=topology, configs=Configs
):
@topotatofunc
def bgp_converge(self, r1, r2, r3):
expected = {
str(r2.iface_to("s1").ip4[0].ip): {
"bgpState": "Established",
"addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 3}},
},
str(r3.iface_to("s1").ip4[0].ip): {
"bgpState": "Established",
"addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 3}},
},
}
yield from AssertVtysh.make(
r1,
"bgpd",
f"show ip bgp neighbor json",
maxwait=5.0,
compare=expected,
)
@topotatofunc
def bgp_check_local_preference(self, topo, r1, r2, r3):
expected = {
"routes": {
f"{topo.lans['unconnected'].ip4[0][2]}/32": [{"locPrf": 160}],
f"{topo.lans['unconnected'].ip4[0][3]}/32": [{"locPrf": 40}],
"172.16.255.254/32": [
{
"locPrf": 50,
"nexthops": [{"ip": str(r3.iface_to("s1").ip4[0].ip)}],
},
{
"locPrf": 150,
"nexthops": [{"ip": str(r2.iface_to("s1").ip4[0].ip)}],
},
],
}
}
yield from AssertVtysh.make(
r1,
"bgpd",
f"show bgp ipv4 unicast json",
maxwait=5.0,
compare=expected,
)