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

Reply via email to