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
