diff options
author | Hiroshi Yokoi <yokoi.hiroshi@po.ntts.co.jp> | 2014-08-19 16:42:05 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-08-20 05:01:54 -0700 |
commit | 7cc538a01afc696b19bcbf4cf6bc059a72c068bd (patch) | |
tree | d33a2010239d7f19712e915391454b30bdfabe0a | |
parent | 06a38cf2a899cc9e026744fd597e8da284f34ae0 (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.py | 50 |
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 |