I changed codes to check ENHANCED_ROUTE_REFRESH capability for simplicity.
Signed-off-by: Hiroshi Yokoi <[email protected]>
---
ryu/services/protocols/bgp/speaker.py | 29 ++++++++++++++---------------
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/ryu/services/protocols/bgp/speaker.py
b/ryu/services/protocols/bgp/speaker.py
index d079d6f..faaf8e4 100644
--- a/ryu/services/protocols/bgp/speaker.py
+++ b/ryu/services/protocols/bgp/speaker.py
@@ -173,16 +173,12 @@ class BgpProtocol(Protocol, Activity):
if not self.recv_open_msg:
raise ValueError('Did not yet receive peers open message.')
- err_cap_enabled = False
- local_cap = self.sent_open_msg.caps
- peer_cap = self.recv_open_msg.caps
- # Both local and peer should advertise ERR capability for it to be
- # enabled.
- if (local_cap.get(BGP_CAP_ENHANCED_ROUTE_REFRESH) and
- peer_cap.get(BGP_CAP_ENHANCED_ROUTE_REFRESH)):
- err_cap_enabled = True
+ for cap in set(self.sent_open_msg.opt_param) \
+ & set(self.recv_open_msg.opt_param):
+ if cap.cap_code == BGP_CAP_ENHANCED_ROUTE_REFRESH:
+ return True
- return err_cap_enabled
+ return False
def _check_route_fmly_adv(self, open_msg, route_family):
match_found = False
@@ -218,19 +214,22 @@ class BgpProtocol(Protocol, Activity):
@property
def negotiated_afs(self):
- local_caps = self.sent_open_msg.caps
- remote_caps = self.recv_open_msg.caps
+ local_caps = self.sent_open_msg.opt_param
+ remote_caps = self.recv_open_msg.opt_param
+
+ local_mbgp_cap = [cap for cap in local_caps
+ if cap.cap_code == BGP_CAP_MULTIPROTOCOL]
+ remote_mbgp_cap = [cap for cap in remote_caps
+ if cap.cap_code == BGP_CAP_MULTIPROTOCOL]
- local_mbgp_cap = local_caps.get(BGP_CAP_MULTIPROTOCOL)
- remote_mbgp_cap = remote_caps.get(BGP_CAP_MULTIPROTOCOL)
# Check MP_BGP capabilities were advertised.
if local_mbgp_cap and remote_mbgp_cap:
local_families = {
- (peer_cap.route_family.afi, peer_cap.route_family.safi)
+ (peer_cap.afi, peer_cap.safi)
for peer_cap in local_mbgp_cap
}
remote_families = {
- (peer_cap.route_family.afi, peer_cap.route_family.safi)
+ (peer_cap.afi, peer_cap.safi)
for peer_cap in remote_mbgp_cap
}
afi_safi = local_families.intersection(remote_families)
--
1.8.5.2 (Apple Git-48)
------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel