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

Reply via email to