Skip to content

Commit aba3a12

Browse files
committed
split part of the neighbor configuration coming from the config file into a dict
1 parent df9f1ac commit aba3a12

File tree

15 files changed

+358
-329
lines changed

15 files changed

+358
-329
lines changed

src/exabgp/bgp/message/open/capability/capabilities.py

+12-12
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,13 @@ def _protocol(self, neighbor):
8787
self[Capability.CODE.MULTIPROTOCOL] = mp
8888

8989
def _asn4(self, neighbor):
90-
if not neighbor.asn4:
90+
if not neighbor['capability']['asn4']:
9191
return
9292

93-
self[Capability.CODE.FOUR_BYTES_ASN] = ASN4(neighbor.local_as)
93+
self[Capability.CODE.FOUR_BYTES_ASN] = ASN4(neighbor['local-as'])
9494

9595
def _nexthop(self, neighbor):
96-
if not neighbor.nexthop:
96+
if not neighbor['capability']['nexthop']:
9797
return
9898

9999
nexthops = neighbor.nexthops()
@@ -105,48 +105,48 @@ def _nexthop(self, neighbor):
105105
self[Capability.CODE.NEXTHOP] = NextHop(nh_pairs)
106106

107107
def _addpath(self, neighbor):
108-
if not neighbor.add_path:
108+
if not neighbor['capability']['add-path']:
109109
return
110110

111111
families = neighbor.addpaths()
112112
ap_families = []
113113
for allowed in self._ADD_PATH:
114114
if allowed in families:
115115
ap_families.append(allowed)
116-
self[Capability.CODE.ADD_PATH] = AddPath(ap_families, neighbor.add_path)
116+
self[Capability.CODE.ADD_PATH] = AddPath(ap_families, neighbor['capability']['add-path'])
117117

118118
def _graceful(self, neighbor, restarted):
119-
if not neighbor.graceful_restart:
119+
if not neighbor['capability']['graceful-restart']:
120120
return
121121

122122
self[Capability.CODE.GRACEFUL_RESTART] = Graceful().set(
123123
Graceful.RESTART_STATE if restarted else 0x0,
124-
neighbor.graceful_restart,
124+
neighbor['capability']['graceful-restart'],
125125
[(afi, safi, Graceful.FORWARDING_STATE) for (afi, safi) in neighbor.families()],
126126
)
127127

128128
def _refresh(self, neighbor):
129-
if not neighbor.route_refresh:
129+
if not neighbor['capability']['route-refresh']:
130130
return
131131
self[Capability.CODE.ROUTE_REFRESH] = RouteRefresh()
132132
self[Capability.CODE.ENHANCED_ROUTE_REFRESH] = EnhancedRouteRefresh()
133133

134134
def _extended_message(self, neighbor):
135-
if not neighbor.extended_message:
135+
if not neighbor['capability']['extended-message']:
136136
return
137137

138138
self[Capability.CODE.EXTENDED_MESSAGE] = ExtendedMessage()
139139

140140
def _hostname(self, neighbor):
141-
self[Capability.CODE.HOSTNAME] = HostName(neighbor.host_name, neighbor.domain_name)
141+
self[Capability.CODE.HOSTNAME] = HostName(neighbor['host-name'], neighbor['domain-name'])
142142

143143
def _operational(self, neighbor):
144-
if not neighbor.operational:
144+
if not neighbor['capability']['operational']:
145145
return
146146
self[Capability.CODE.OPERATIONAL] = Operational()
147147

148148
def _session(self, neighbor):
149-
if not neighbor.multisession:
149+
if not neighbor['capability']['multi-session']:
150150
return
151151
# XXX: FIXME: should it not be the RFC version ?
152152
self[Capability.CODE.MULTISESSION] = MultiSession().set([Capability.CODE.MULTIPROTOCOL])

src/exabgp/bgp/message/open/capability/negotiated.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def __init__(self, neighbor):
3737
self.msg_size = ExtendedMessage.INITIAL_SIZE
3838
self.operational = False
3939
self.refresh = REFRESH.ABSENT # pylint: disable=E1101
40-
self.aigp = None
40+
self.aigp = neighbor['capability']['aigp']
4141
self.mismatch = []
4242

4343
def sent(self, sent_open):
@@ -132,21 +132,21 @@ def _negotiate(self):
132132
# self.received_open_size = self.peer.bgp.received_open_size - 19
133133

134134
def validate(self, neighbor):
135-
if neighbor.peer_as is not None and self.peer_as != neighbor.peer_as:
135+
if neighbor['peer-as'] is not None and self.peer_as != neighbor['peer-as']:
136136
return (
137137
2,
138138
2,
139-
'ASN in OPEN (%d) did not match ASN expected (%d)' % (self.received_open.asn, neighbor.peer_as),
139+
'ASN in OPEN (%d) did not match ASN expected (%d)' % (self.received_open.asn, neighbor['peer-as']),
140140
)
141141

142142
# RFC 6286 : https://tools.ietf.org/html/rfc6286
143143
# XXX: FIXME: check that router id is not self
144144
if self.received_open.router_id == RouterID('0.0.0.0'):
145145
return (2, 3, '0.0.0.0 is an invalid router_id')
146146

147-
if self.received_open.asn == neighbor.local_as:
147+
if self.received_open.asn == neighbor['local-as']:
148148
# router-id must be unique within an ASN
149-
if self.received_open.router_id == neighbor.router_id:
149+
if self.received_open.router_id == neighbor['router-id']:
150150
return (
151151
2,
152152
3,
@@ -172,16 +172,16 @@ def validate(self, neighbor):
172172
return None
173173

174174
def nexthopself(self, afi):
175-
if afi == self.neighbor.local_address.afi:
176-
return self.neighbor.local_address
175+
if afi == self.neighbor['local-address'].afi:
176+
return self.neighbor['local-address']
177177

178178
# attempting to not barf for next-hop self when the peer is IPv6
179179
if afi == AFI.ipv4:
180-
return self.neighbor.router_id
180+
return self.neighbor['router-id']
181181

182182
raise TypeError(
183183
'use of "next-hop self": the route (%s) does not have the same family as the BGP tcp session (%s)'
184-
% (afi, self.neighbor.local_address.afi)
184+
% (afi, self.neighbor['local-address'].afi)
185185
)
186186

187187

src/exabgp/bgp/message/update/attribute/aigp.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def __ne__(self, other):
7878
return not self.__eq__(other)
7979

8080
def pack(self, negotiated):
81-
if negotiated.neighbor.aigp:
81+
if negotiated.aigp:
8282
return self._packed
8383
if negotiated.local_as == negotiated.peer_as:
8484
return self._packed
@@ -89,7 +89,7 @@ def __repr__(self):
8989

9090
@classmethod
9191
def unpack(cls, data, negotiated):
92-
if not negotiated.neighbor.aigp:
92+
if not negotiated.aigp:
9393
# AIGP must only be accepted on configured sessions
9494
return None
9595
return cls(unpack('!Q', data[:8] & 0x000000FFFFFFFFFF), data[:8])

0 commit comments

Comments
 (0)