implemented as a simple wrapper of netaddr.

Signed-off-by: YAMAMOTO Takashi <[email protected]>
---
 ryu/lib/addrconv.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)
 create mode 100644 ryu/lib/addrconv.py

diff --git a/ryu/lib/addrconv.py b/ryu/lib/addrconv.py
new file mode 100644
index 0000000..512c1e5
--- /dev/null
+++ b/ryu/lib/addrconv.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation.
+# Copyright (C) 2013 YAMAMOTO Takashi <yamamoto at valinux co jp>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import netaddr
+
+
+class AddressConverter(object):
+    def __init__(self, addr, strat, **kwargs):
+        self._addr = addr
+        self._strat = strat
+        self._addr_kwargs = kwargs
+
+    def text_to_bin(self, text):
+        return self._addr(text, **self._addr_kwargs).packed
+
+    def bin_to_text(self, bin):
+        return str(self._addr(self._strat.packed_to_int(bin),
+                              **self._addr_kwargs))
+
+ipv4 = AddressConverter(netaddr.IPAddress, netaddr.strategy.ipv4, version=4)
+ipv6 = AddressConverter(netaddr.IPAddress, netaddr.strategy.ipv6, version=6)
+
+
+class mac_mydialect(netaddr.mac_unix):
+    word_fmt = '%.2x'
+mac = AddressConverter(netaddr.EUI, netaddr.strategy.eui48, version=48,
+                       dialect=mac_mydialect)
+
+if __name__ == '__main__':
+        def eq_(a, b):
+            if a != b:
+                print a
+                print b
+
+        l = ['127.0.0.1', '255.255.0.0']
+        conv = ipv4
+        b2t = conv.bin_to_text
+        t2b = conv.text_to_bin
+        for a in l:
+            eq_(b2t(t2b(a)), a)
+
+        l = ['ff02::1', 'fe80::f00b:a4ff:fe7d:f8ea', '::']
+        conv = ipv6
+        b2t = conv.bin_to_text
+        t2b = conv.text_to_bin
+        for a in l:
+            eq_(b2t(t2b(a)), a)
+
+        l = ['f2:0b:a4:01:0a:23']
+        conv = mac
+        b2t = conv.bin_to_text
+        t2b = conv.text_to_bin
+        for a in l:
+            eq_(b2t(t2b(a)), a)
-- 
1.8.1.5


------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to