pyloxi: implement of_meter_features_t
diff --git a/py_gen/oftype.py b/py_gen/oftype.py
index 0bf99f9..7719432 100644
--- a/py_gen/oftype.py
+++ b/py_gen/oftype.py
@@ -63,6 +63,8 @@
             v = 'common.match()'
         elif self.base == 'of_port_desc_t':
             v = 'common.port_desc()'
+        elif self.base == 'of_meter_features_t':
+            v = 'common.meter_features()'
         else:
             v = "None"
 
@@ -85,7 +87,7 @@
             return 'struct.pack("!6B", *%s)' % expr_expr
         elif self.base == 'of_ipv6_t':
             return 'struct.pack("!16s", %s)' % expr_expr
-        elif self.base in ['of_match_t', 'of_port_desc_t']:
+        elif self.base in ['of_match_t', 'of_port_desc_t', 'of_meter_features_t']:
             return '%s.pack()' % expr_expr
         elif self.base == 'of_port_name_t':
             return self._gen_string_pack_expr(16, expr_expr)
@@ -144,6 +146,8 @@
             return self._gen_string_unpack_expr(reader_expr, 32)
         elif self.base == 'of_desc_str_t':
             return self._gen_string_unpack_expr(reader_expr, 256)
+        elif self.base == 'of_meter_features_t':
+            return 'common.meter_features.unpack(%s)' % (reader_expr)
         elif utils.class_is_list(self.base):
             element_cls = utils.list_to_entry_type(self.base)[:-2]
             if ((element_cls, self.version) in of_g.is_fixed_length) \
diff --git a/py_gen/tests/of13.py b/py_gen/tests/of13.py
index ff1a858..9b8bceb 100644
--- a/py_gen/tests/of13.py
+++ b/py_gen/tests/of13.py
@@ -765,8 +765,30 @@
         pass
 
     def test_meter_features_stats_reply(self):
-        # TODO
-        pass
+        obj = ofp.message.meter_features_stats_reply(
+            xid=0x12345678,
+            flags=0,
+            features=ofp.meter_features(
+                max_meter=5,
+                band_types=ofp.OFPMBT_DROP|ofp.OFPMBT_DSCP_REMARK,
+                capabilities=ofp.OFPMF_KBPS|ofp.OFPMF_STATS,
+                max_bands=10,
+                max_color=7))
+        buf = ''.join([
+            '\x04', '\x13', # version, type
+            '\x00\x20', # length
+            '\x12\x34\x56\x78', # xid
+            '\x00\x0b', # stats_type
+            '\x00\x00', # flags
+            '\x00' * 4, # pad
+            '\x00\x00\x00\x05', # max_meter
+            '\x00\x00\x00\x03', # band_types
+            '\x00\x00\x00\x09', # capabilities
+            '\x0a', # max_bands
+            '\x07', # max_color
+            '\x00' * 2, # pad
+        ])
+        test_serialization(obj, buf)
 
     def test_table_features_stats_request(self):
         # TODO
@@ -892,7 +914,6 @@
             ofp.message.flow_delete_strict,
             ofp.message.flow_modify,
             ofp.message.flow_modify_strict,
-            ofp.message.meter_features_stats_reply,
             ofp.message.table_features_stats_reply,
             ofp.message.table_features_stats_request,
         ]