On Thu, 17 Jul 2014 14:25:22 +0900 Hiroshi Yokoi <yokoi.hiro...@po.ntts.co.jp> wrote:
> 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 The code could be simpler like? 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 False > 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 ------------------------------------------------------------------------------ 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