summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ryu/lib/ofctl_v1_2.py18
-rw-r--r--ryu/lib/ofctl_v1_3.py18
2 files changed, 28 insertions, 8 deletions
diff --git a/ryu/lib/ofctl_v1_2.py b/ryu/lib/ofctl_v1_2.py
index 335709db..e6023ed2 100644
--- a/ryu/lib/ofctl_v1_2.py
+++ b/ryu/lib/ofctl_v1_2.py
@@ -380,8 +380,11 @@ def match_ip_to_str(value, mask):
ip = socket.inet_ntoa(struct.pack('!I', value))
if mask is not None and mask != 0:
- binary_str = bin(mask)[2:].zfill(8)
- netmask = '/%d' % len(binary_str.rstrip('0'))
+ binary_str = bin(mask)[2:].zfill(32).rstrip('0')
+ if binary_str.find('0') >= 0:
+ netmask = '/%s' % socket.inet_ntoa(struct.pack('!I', mask))
+ else:
+ netmask = '/%d' % len(binary_str)
else:
netmask = ''
@@ -395,14 +398,21 @@ def match_ipv6_to_str(value, mask):
ip = netaddr.IPNetwork(':'.join(ip_list))
netmask = 128
+ netmask_str = None
if mask is not None:
mask_list = []
for word in mask:
mask_list.append('%04x' % word)
mask_v = netaddr.IPNetwork(':'.join(mask_list))
- netmask = len(mask_v.ip.bits().replace(':', '').rstrip('0'))
+ binary_str = mask_v.ip.bits().replace(':', '').zfill(128).rstrip('0')
+ if binary_str.find('0') >= 0:
+ netmask_str = str(mask_v.ip)
+ else:
+ netmask = len(binary_str)
- if netmask == 128:
+ if netmask_str is not None:
+ ip_str = str(ip.ip) + '/' + netmask_str
+ elif netmask == 128:
ip_str = str(ip.ip)
else:
ip.prefixlen = netmask
diff --git a/ryu/lib/ofctl_v1_3.py b/ryu/lib/ofctl_v1_3.py
index 1f0fd30a..748f3898 100644
--- a/ryu/lib/ofctl_v1_3.py
+++ b/ryu/lib/ofctl_v1_3.py
@@ -460,8 +460,11 @@ def match_ip_to_str(value, mask):
ip = socket.inet_ntoa(struct.pack('!I', value))
if mask is not None and mask != 0:
- binary_str = bin(mask)[2:].zfill(8)
- netmask = '/%d' % len(binary_str.rstrip('0'))
+ binary_str = bin(mask)[2:].zfill(32).rstrip('0')
+ if binary_str.find('0') >= 0:
+ netmask = '/%s' % socket.inet_ntoa(struct.pack('!I', mask))
+ else:
+ netmask = '/%d' % len(binary_str)
else:
netmask = ''
@@ -475,14 +478,21 @@ def match_ipv6_to_str(value, mask):
ip = netaddr.IPNetwork(':'.join(ip_list))
netmask = 128
+ netmask_str = None
if mask is not None:
mask_list = []
for word in mask:
mask_list.append('%04x' % word)
mask_v = netaddr.IPNetwork(':'.join(mask_list))
- netmask = len(mask_v.ip.bits().replace(':', '').rstrip('0'))
+ binary_str = mask_v.ip.bits().replace(':', '').zfill(128).rstrip('0')
+ if binary_str.find('0') >= 0:
+ netmask_str = str(mask_v.ip)
+ else:
+ netmask = len(binary_str)
- if netmask == 128:
+ if netmask_str is not None:
+ ip_str = str(ip.ip) + '/' + netmask_str
+ elif netmask == 128:
ip_str = str(ip.ip)
else:
ip.prefixlen = netmask