(2014/07/18 12:53), FUJITA Tomonori wrote: > 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 >
Thank you for your comment. I will change my code and send the patch later. >> 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 > -- ------------------------------------------------ Hiroshi Yokoi <yokoi.hiro...@po.ntts.co.jp> Cloud Computing Business Department NTT Software Corporation Tel: +81-45-212-7393 Fax: +81-45-662-7856 ------------------------------------------------------------------------------ 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