summaryrefslogtreecommitdiff
path: root/src/python/m5/util
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2010-11-23 15:54:43 -0500
committerGabe Black <gblack@eecs.umich.edu>2010-11-23 15:54:43 -0500
commitb3de4855c3dba9df80cca4540c4ee6625c26f9e1 (patch)
tree28f1876bd2d31904d1f3d4bdbde4ac6def7207a1 /src/python/m5/util
parent40d434d5516affffe9ded9365e0d2da060aa7c78 (diff)
downloadgem5-b3de4855c3dba9df80cca4540c4ee6625c26f9e1.tar.xz
Params: Add parameter types for IP addresses in various forms.
New parameter forms are: IP address in the format "a.b.c.d" where a-d are from decimal 0 to 255. IP address with netmask which is an IP followed by "/n" where n is a netmask length in bits from decimal 0 to 32 or by "/e.f.g.h" where e-h are from decimal 0 to 255 and which is all 1 bits followed by all 0 bits when represented in binary. These can also be specified as an integral IP and netmask passed in separately. IP address with port which is an IP followed by ":p" where p is a port index from decimal 0 to 65535. These can also be specified as an integral IP and port value passed in separately.
Diffstat (limited to 'src/python/m5/util')
-rw-r--r--src/python/m5/util/convert.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/python/m5/util/convert.py b/src/python/m5/util/convert.py
index bb9e3e1f1..5d4ae92b9 100644
--- a/src/python/m5/util/convert.py
+++ b/src/python/m5/util/convert.py
@@ -248,3 +248,52 @@ def toMemorySize(value):
return long(value[:-1])
raise ValueError, "cannot convert '%s' to memory size" % value
+
+def toIpAddress(value):
+ if not isinstance(value, str):
+ raise TypeError, "wrong type '%s' should be str" % type(value)
+
+ bytes = value.split('.')
+ if len(bytes) != 4:
+ raise ValueError, 'invalid ip address %s' % value
+
+ for byte in bytes:
+ if not 0 <= int(byte) <= 0xff:
+ raise ValueError, 'invalid ip address %s' % value
+
+ return (int(bytes[0]) << 24) | (int(bytes[1]) << 16) | \
+ (int(bytes[2]) << 8) | (int(bytes[3]) << 0)
+
+def toIpNetmask(value):
+ if not isinstance(value, str):
+ raise TypeError, "wrong type '%s' should be str" % type(value)
+
+ (ip, netmask) = value.split('/')
+ ip = toIpAddress(ip)
+ netmaskParts = netmask.split('.')
+ if len(netmaskParts) == 1:
+ if not 0 <= int(netmask) <= 32:
+ raise ValueError, 'invalid netmask %s' % netmask
+ return (ip, int(netmask))
+ elif len(netmaskParts) == 4:
+ netmaskNum = toIpAddress(netmask)
+ if netmaskNum == 0:
+ return (ip, 0)
+ testVal = 0
+ for i in range(32):
+ testVal |= (1 << (31 - i))
+ if testVal == netmaskNum:
+ return (ip, i + 1)
+ raise ValueError, 'invalid netmask %s' % netmask
+ else:
+ raise ValueError, 'invalid netmask %s' % netmask
+
+def toIpWithPort(value):
+ if not isinstance(value, str):
+ raise TypeError, "wrong type '%s' should be str" % type(value)
+
+ (ip, port) = value.split(':')
+ ip = toIpAddress(ip)
+ if not 0 <= int(port) <= 0xffff:
+ raise ValueError, 'invalid port %s' % port
+ return (ip, int(port))