On Fri,  8 Aug 2014 16:07:47 +0900
Hiroshi Yokoi <[email protected]> wrote:

> added VPNv6 prefix support.
> This patch enables addition and deletion of VPNv6 prefix.
> 
> Signed-off-by: Hiroshi Yokoi <[email protected]>
> ---
>  ryu/services/protocols/bgp/api/base.py             |  1 +
>  ryu/services/protocols/bgp/bgpspeaker.py           | 33 
> ++++++++++++++++++++--
>  .../protocols/bgp/core_managers/table_manager.py   |  2 +-
>  3 files changed, 32 insertions(+), 4 deletions(-)

Applied both, thanks a lot! I have one comment.

> diff --git a/ryu/services/protocols/bgp/api/base.py 
> b/ryu/services/protocols/bgp/api/base.py
> index e43f074..eee243b 100644
> --- a/ryu/services/protocols/bgp/api/base.py
> +++ b/ryu/services/protocols/bgp/api/base.py
> @@ -40,6 +40,7 @@ NEXT_HOP = 'next_hop'
>  VPN_LABEL = 'label'
>  API_SYM = 'name'
>  ORIGIN_RD = 'origin_rd'
> +ROUTE_FAMILY = 'route_family'
>  
>  # API call registry
>  _CALL_REGISTRY = {}
> diff --git a/ryu/services/protocols/bgp/bgpspeaker.py 
> b/ryu/services/protocols/bgp/bgpspeaker.py
> index fdd38dd..615bf75 100644
> --- a/ryu/services/protocols/bgp/bgpspeaker.py
> +++ b/ryu/services/protocols/bgp/bgpspeaker.py
> @@ -27,6 +27,7 @@ from ryu.services.protocols.bgp.api.base import call
>  from ryu.services.protocols.bgp.api.base import PREFIX
>  from ryu.services.protocols.bgp.api.base import NEXT_HOP
>  from ryu.services.protocols.bgp.api.base import ROUTE_DISTINGUISHER
> +from ryu.services.protocols.bgp.api.base import ROUTE_FAMILY
>  from ryu.services.protocols.bgp.rtconf.common import LOCAL_AS
>  from ryu.services.protocols.bgp.rtconf.common import ROUTER_ID
>  from ryu.services.protocols.bgp.rtconf.common import BGP_SERVER_PORT
> @@ -286,8 +287,7 @@ class BGPSpeaker(object):
>                   neighbors.CHANGES: attribute_param}
>          call(func_name, **param)
>  
> -    def prefix_add(self, prefix, next_hop=None, route_dist=None,
> -                   route_family=None):
> +    def prefix_add(self, prefix, next_hop=None, route_dist=None):
>          """ This method adds a new prefix to be advertized.
>  
>          ``prefix`` must be the string representation of an IP network
> @@ -310,9 +310,26 @@ class BGPSpeaker(object):
>          if route_dist:
>              func_name = 'prefix.add_local'
>              networks[ROUTE_DISTINGUISHER] = route_dist
> +
> +            # check if the prefix address is IPv6 address
> +            ip, masklen = prefix.split('/')
> +            if netaddr.valid_ipv6(ip):
> +                networks[ROUTE_FAMILY] = vrfs.VRF_RF_IPV6
> +                # convert the next_hop address to IPv4-Mapped IPv6 Address
> +                # if it is IPv4 address
> +                if netaddr.valid_ipv4(next_hop):
> +                    networks[NEXT_HOP] = \
> +                        str(netaddr.IPAddress(next_hop).ipv6())
> +
> +                # normalize IPv6 address expression
> +                networks[PREFIX] = \
> +                    str(netaddr.IPAddress(ip)) + '/' + masklen
> +            else:
> +                networks[ROUTE_FAMILY] = vrfs.VRF_RF_IPV4
> +
>          call(func_name, **networks)
>  
> -    def prefix_del(self, prefix, route_dist=None, route_family=None):
> +    def prefix_del(self, prefix, route_dist=None):
>          """ This method deletes a advertized prefix.
>  
>          ``prefix`` must be the string representation of an IP network
> @@ -329,6 +346,16 @@ class BGPSpeaker(object):
>          if route_dist:
>              func_name = 'prefix.delete_local'
>              networks[ROUTE_DISTINGUISHER] = route_dist
> +
> +            ip, masklen = prefix.split('/')
> +            if netaddr.valid_ipv6(ip):
> +                networks[ROUTE_FAMILY] = vrfs.VRF_RF_IPV6
> +                # normalize IPv6 address expression
> +                networks[PREFIX] = \
> +                    str(netaddr.IPAddress(ip)) + '/' + masklen
> +            else:
> +                networks[ROUTE_FAMILY] = vrfs.VRF_RF_IPV4

A helper function to remove the duplicated code?


------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to