BGPOpen that is set to sent_open_msg and recv_open_msg doesn't have
caps and BGP capabilities are stored in opt_param as List.
I changed the way of checking BGP capabilities.

Signed-off-by: Hiroshi Yokoi <yokoi.hiro...@po.ntts.co.jp>
---
 ryu/services/protocols/bgp/speaker.py | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/ryu/services/protocols/bgp/speaker.py 
b/ryu/services/protocols/bgp/speaker.py
index fc7ae9d..7884f2e 100644
--- a/ryu/services/protocols/bgp/speaker.py
+++ b/ryu/services/protocols/bgp/speaker.py
@@ -173,12 +173,17 @@ class BgpProtocol(Protocol, Activity):
             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
+        local_caps = self.sent_open_msg.opt_param
+        peer_caps = self.recv_open_msg.opt_param
+
+        local_cap = [cap for cap in local_caps
+                     if cap.cap_code == BGP_CAP_ENHANCED_ROUTE_REFRESH]
+        peer_cap = [cap for cap in peer_caps
+                    if cap.cap_code == BGP_CAP_ENHANCED_ROUTE_REFRESH]
+
         # 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)):
+        if local_cap and peer_cap:
             err_cap_enabled = True
 
         return err_cap_enabled
@@ -217,19 +222,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
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to