pyloxi: add padding as its own member type

Also remove it from pretty-printing.
diff --git a/py_gen/codegen.py b/py_gen/codegen.py
index 45adc5d..01dd782 100644
--- a/py_gen/codegen.py
+++ b/py_gen/codegen.py
@@ -26,6 +26,7 @@
 # under the EPL.
 
 from collections import namedtuple
+import struct
 import of_g
 import loxi_front_end.type_maps as type_maps
 import loxi_utils.loxi_utils as utils
@@ -37,6 +38,7 @@
 Member = namedtuple('Member', ['name', 'oftype', 'offset', 'skip'])
 LengthMember = namedtuple('LengthMember', ['name', 'oftype', 'offset'])
 TypeMember = namedtuple('TypeMember', ['name', 'oftype', 'offset', 'value'])
+PadMember = namedtuple('PadMember', ['offset', 'length'])
 
 def get_type_values(cls, version):
     """
@@ -116,16 +118,14 @@
                                           oftype=oftype.OFType(member['m_type'], version),
                                           value=type_values[member['name']]))
                 type_members.append(members[-1])
-            else: # HACK ensure member names are unique
-                if member['name'].startswith("pad"):
-                    if pad_count == 0:
-                        m_name = 'pad'
-                    else:
-                        m_name = "pad%d" % pad_count
-                    pad_count += 1
-                else:
-                    m_name = member['name']
-                members.append(Member(name=m_name,
+            elif member['name'].startswith("pad"):
+                # HACK this should be moved to the frontend
+                pad_oftype = oftype.OFType(member['m_type'], version)
+                length = struct.calcsize("!" + pad_oftype._pack_fmt())
+                if pad_oftype.is_array: length *= pad_oftype.array_length
+                members.append(PadMember(offset=member['offset'], length=length))
+            else:
+                members.append(Member(name=member['name'],
                                       oftype=oftype.OFType(member['m_type'], version),
                                       offset=member['offset'],
                                       skip=member['name'] in of_g.skip_members))
diff --git a/py_gen/templates/_pack.py b/py_gen/templates/_pack.py
index 15645ee..66ee763 100644
--- a/py_gen/templates/_pack.py
+++ b/py_gen/templates/_pack.py
@@ -26,7 +26,7 @@
 :: # under the EPL.
 ::
 :: # TODO coalesce format strings
-:: from py_gen.codegen import Member, LengthMember, TypeMember
+:: from py_gen.codegen import Member, LengthMember, TypeMember, PadMember
 :: length_member = None
 :: length_member_index = None
 :: index = 0
@@ -35,6 +35,8 @@
 ::         length_member = m
 ::         length_member_index = index
         packed.append(${m.oftype.gen_pack_expr('0')}) # placeholder for ${m.name} at index ${length_member_index}
+::     elif type(m) == PadMember:
+        packed.append('\x00' * ${m.length})
 ::     else:
         packed.append(${m.oftype.gen_pack_expr('self.' + m.name)})
 ::     #endif
diff --git a/py_gen/templates/_unpack.py b/py_gen/templates/_unpack.py
index 6003725..91186cc 100644
--- a/py_gen/templates/_unpack.py
+++ b/py_gen/templates/_unpack.py
@@ -26,8 +26,11 @@
 :: # under the EPL.
 ::
 :: # TODO coalesce format strings
-:: from py_gen.codegen import Member, LengthMember, TypeMember
+:: from py_gen.codegen import Member, LengthMember, TypeMember, PadMember
 :: for m in ofclass.members:
+::     if type(m) == PadMember:
+::         continue
+::     #endif
 ::     unpack_expr = m.oftype.gen_unpack_expr('buf', m.offset)
 ::     if type(m) == LengthMember:
         _length = ${unpack_expr}
diff --git a/py_gen/tests/of10.py b/py_gen/tests/of10.py
index faa3a3e..e636973 100644
--- a/py_gen/tests/of10.py
+++ b/py_gen/tests/of10.py
@@ -690,11 +690,9 @@
     eth_dst = cd:ef:01:23:45:67,
     vlan_vid = 0x0,
     vlan_pcp = 0x0,
-    pad = 0x0,
     eth_type = 0x0,
     ip_dscp = 0x0,
     ip_proto = 0x0,
-    pad1 = [ 0, 0 ],
     ipv4_src = 192.168.3.127,
     ipv4_dst = 255.255.255.255,
     tcp_src = 0x0,
@@ -709,7 +707,7 @@
   flags = 0x0,
   actions = [
     output { port = OFPP_FLOOD, max_len = 0x0 },
-    nicira_dec_ttl { pad = 0x0, pad1 = 0x0 },
+    nicira_dec_ttl {  },
     bsn_set_tunnel_dst { dst = 0x0 }
   ]
 }"""