pyloxi: move OFType logic out of code and into a table

This is easier to understand, but results in duplication which will be fixed in
the next commit.

Support for arrays was removed because apparently we don't use them anymore.
diff --git a/py_gen/templates/util.py b/py_gen/templates/util.py
index 397c184..c4de5a3 100644
--- a/py_gen/templates/util.py
+++ b/py_gen/templates/util.py
@@ -69,3 +69,76 @@
         if v == v2:
             return k
     return v
+
+def pack_port_no(value):
+:: if version == 1:
+    return struct.pack("!H", value)
+:: else:
+    return struct.pack("!L", value)
+:: #endif
+
+def unpack_port_no(reader):
+:: if version == 1:
+    return reader.read("!H")[0]
+:: else:
+    return reader.read("!L")[0]
+:: #endif
+
+def pack_fm_cmd(value):
+:: if version == 1:
+    return struct.pack("!H", value)
+:: else:
+    return struct.pack("!B", value)
+:: #endif
+
+def unpack_fm_cmd(reader):
+:: if version == 1:
+    return reader.read("!H")[0]
+:: else:
+    return reader.read("!B")[0]
+:: #endif
+
+def init_wc_bmap():
+:: if version <= 2:
+    return const.OFPFW_ALL
+:: else:
+    return 0
+:: #endif
+
+def pack_wc_bmap(value):
+:: if version <= 2:
+    return struct.pack("!L", value)
+:: else:
+    return struct.pack("!Q", value)
+:: #endif
+
+def unpack_wc_bmap(reader):
+:: if version <= 2:
+    return reader.read("!L")[0]
+:: else:
+    return reader.read("!Q")[0]
+:: #endif
+
+def init_match_bmap():
+:: if version <= 2:
+    return const.OFPFW_ALL
+:: else:
+    return 0
+:: #endif
+
+def pack_match_bmap(value):
+:: if version <= 2:
+    return struct.pack("!L", value)
+:: else:
+    return struct.pack("!Q", value)
+:: #endif
+
+def unpack_match_bmap(reader):
+:: if version <= 2:
+    return reader.read("!L")[0]
+:: else:
+    return reader.read("!Q")[0]
+:: #endif
+
+def pack_list(values):
+    return "".join([x.pack() for x in values])