[PATCH v2 09/11] NetUtils: Adding AddressPool class
rpazdera at redhat.com
rpazdera at redhat.com
Mon Aug 13 10:01:50 UTC 2012
From: Radek Pazdera <rpazdera at redhat.com>
This commit introduces AddressPool class (and its two children -
MacPool and IpPool). This class can be used to generate (and keep
a track of) different types of network addresses within a defined
range.
Signed-off-by: Radek Pazdera <rpazdera at redhat.com>
---
Common/NetUtils.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/Common/NetUtils.py b/Common/NetUtils.py
index 42ee6f0..8594a23 100644
--- a/Common/NetUtils.py
+++ b/Common/NetUtils.py
@@ -53,3 +53,56 @@ def get_corespond_local_ip(query_ip):
if ip is None:
return ip
return ip.group(1)
+
+class AddressPool:
+ def __init__(self, start, end):
+ self._next = self._addr_to_byte_string(start)
+ self._final = self._addr_to_byte_string(end)
+
+ def _inc_byte_string(self, byte_string):
+ if len(byte_string):
+ byte_string[-1] += 1
+ if byte_string[-1] > 255:
+ del byte_string[-1]
+ self._inc_byte_string(byte_string)
+ byte_string.append(0)
+
+ def _addr_to_byte_string(self, addr):
+ pass
+
+ def _byte_string_to_addr(self, byte_string):
+ pass
+
+ def get_addr(self):
+ if self._next > self._final:
+ msg = "Pool exhausted, no free addresses available"
+ raise Exception(msg)
+
+ addr_str = self._byte_string_to_addr(self._next)
+ self._inc_byte_string(self._next)
+
+ return addr_str
+
+class MacPool(AddressPool):
+ def _addr_to_byte_string(self, addr):
+ bs = [int(byte, 16) for byte in addr.split(":")]
+
+ if len(bs) != 6:
+ raise Exception("Malformed MAC address")
+
+ return bs
+
+ def _byte_string_to_addr(self, byte_string):
+ return ':'.join(map(lambda x: "%02x" % x, byte_string))
+
+class IpPool(AddressPool):
+ def _addr_to_byte_string(self, addr):
+ bs = [int(byte) for byte in addr.split(".")]
+
+ if len(bs) != 4:
+ raise Exception("Malformed IP address")
+
+ return bs
+
+ def _byte_string_to_addr(self, byte_string):
+ return '.'.join(map(str, byte_string))
--
1.7.7.6
More information about the LNST-developers
mailing list