summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHiroshi Yokoi <yokoi.hiroshi@po.ntts.co.jp>2014-08-19 16:42:05 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2014-08-20 05:01:54 -0700
commit7cc538a01afc696b19bcbf4cf6bc059a72c068bd (patch)
treed33a2010239d7f19712e915391454b30bdfabe0a
parent06a38cf2a899cc9e026744fd597e8da284f34ae0 (diff)
bgp: reduce duplicate codes with helper_function.
reduced duplicate codes and put together to a static function. Signed-off-by: Hiroshi Yokoi <yokoi.hiroshi@po.ntts.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/services/protocols/bgp/bgpspeaker.py50
1 files changed, 27 insertions, 23 deletions
diff --git a/ryu/services/protocols/bgp/bgpspeaker.py b/ryu/services/protocols/bgp/bgpspeaker.py
index 73899aa2..c88a972d 100644
--- a/ryu/services/protocols/bgp/bgpspeaker.py
+++ b/ryu/services/protocols/bgp/bgpspeaker.py
@@ -312,21 +312,14 @@ class BGPSpeaker(object):
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
+ rf, p = self._check_rf_and_normalize(prefix)
+ networks[ROUTE_FAMILY] = rf
+ networks[PREFIX] = p
+
+ if rf == vrfs.VRF_RF_IPV6 and netaddr.valid_ipv4(next_hop):
+ # convert the next_hop to IPv4-Mapped IPv6 Address
+ networks[NEXT_HOP] = \
+ str(netaddr.IPAddress(next_hop).ipv6())
call(func_name, **networks)
@@ -348,14 +341,9 @@ class BGPSpeaker(object):
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
+ rf, p = self._check_rf_and_normalize(prefix)
+ networks[ROUTE_FAMILY] = rf
+ networks[PREFIX] = p
call(func_name, **networks)
@@ -535,3 +523,19 @@ class BGPSpeaker(object):
param['host'] = address
param['port'] = port
call(func_name, **param)
+
+ @staticmethod
+ def _check_rf_and_normalize(prefix):
+ """ check prefix's route_family and if the address is
+ IPv6 address, return IPv6 route_family and normalized IPv6 address.
+ If the address is IPv4 address, return IPv4 route_family
+ and the prefix itself.
+
+ """
+ ip, masklen = prefix.split('/')
+ if netaddr.valid_ipv6(ip):
+ # normalize IPv6 address
+ ipv6_prefix = str(netaddr.IPAddress(ip)) + '/' + masklen
+ return vrfs.VRF_RF_IPV6, ipv6_prefix
+ else:
+ return vrfs.VRF_RF_IPV4, prefix