On Fri, 18 Jul 2014 15:09:12 +0900 Hiroshi Yokoi <[email protected]> wrote:
> 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 Let's avoid a virtual long line. > + 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] Could we do like the above? > - 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) > -- How about this? diff --git a/ryu/services/protocols/bgp/speaker.py b/ryu/services/protocols/bgp/speaker.py index d079d6f..4471909 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 - - return err_cap_enabled + local_caps = self.sent_open_msg.caps + remote_caps = self.recv_open_msg.caps + for cap in set(local_caps) & set(remote_caps): + if cap.cap_code == BGP_CAP_ENHANCED_ROUTE_REFRESH: + return True + return False def _check_route_fmly_adv(self, open_msg, route_family): match_found = False @@ -218,19 +214,20 @@ 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 + + mbgp_cap = [cap for cap in set(local_caps) & set(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: + if 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) ------------------------------------------------------------------------------ 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
