diff options
author | Hiroshi Yokoi <yokoi.hiroshi@po.ntts.co.jp> | 2014-07-17 14:25:22 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-07-18 20:40:51 +0900 |
commit | bd9ae63bcab023e02e37bacddc0512a04199f1e2 (patch) | |
tree | db3c20bc38ad96ce0a3c0f6404d63a790d625156 | |
parent | 86192caf0709fdeae2101f5384ab4d6b682408df (diff) |
bgp: fix logic for checking BGP capability
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.hiroshi@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/services/protocols/bgp/speaker.py | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/ryu/services/protocols/bgp/speaker.py b/ryu/services/protocols/bgp/speaker.py index d079d6fd..2c823f5d 100644 --- a/ryu/services/protocols/bgp/speaker.py +++ b/ryu/services/protocols/bgp/speaker.py @@ -174,12 +174,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 @@ -218,19 +223,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) |