--- openflow-2012-02-22-2.h	2015-07-23 09:54:17.080479359 -0700
+++ openflow-2012-02-29-3.h	2015-07-23 09:54:17.084479359 -0700
@@ -1831,28 +1831,45 @@
                                         next_tables. */
     uint8_t pad2[1];
     uint16_t match_length;           /* Length (bytes) of
-                                        supported_match_hdrs. */
+                                        supported_match_hdrs */
     uint16_t write_setfields_length; /* Length (bytes) of
-                                        supported_write_setfield_hdrs. */
+                                        supported_write_setfield_hdrs */
     uint16_t apply_setfields_length; /* Length (bytes) of
-                                        supported_apply_setfields_hdrs. */ 
+                                        supported_apply_setfields_hdrs */ 
     uint16_t instructions_length;    /* Length (bytes) of
-                                        supported_instruction_hdrs. */
+                                        supported_instruction_hdrs */
     uint16_t write_actions_length;   /* Length (bytes) of
-                                        supported_write_action_hdrs. */
+                                        supported_write_action_hdrs */
     uint16_t apply_actions_length;   /* Length (bytes) of
-                                        supported_apply_action_hdrs. */
-    uint8_t pad3[2];
+                                        supported_apply_action_hdrs */
+    uint16_t write_setfields_miss_length; /* Length (bytes) of
+                                             supported_write_setfield_hdrs_miss
+                                             */
+    uint16_t apply_setfields_miss_length; /* Length (bytes) of
+                                             supported_apply_setfields_hdrs_miss
+                                             */ 
+    uint16_t instructions_miss_length;    /* Length (bytes) of
+                                             supported_instruction_hdrs_miss */
+    uint16_t write_actions_miss_length;   /* Length (bytes) of
+                                             supported_write_action_hdrs_miss */
+    uint16_t apply_actions_miss_length;   /* Length (bytes) of
+                                             supported_apply_action_hdrs_miss */
 
     /***
-     *  ofp_table_features includes seven variable length lists of headers.
+     *  ofp_table_features includes twelve variable length lists of headers.
      *  The names and types here are provided for intuition and cannot
-     *  be referenced directly from the C structure.  The actual offsets
+     *  be referenced directly from the C structure. After each array there
+     *  is an implicit array containing padding if the array's length is not
+     *  a multiple of 8 bytes.  The actual offsets to each array
      *  must be calculated from the XXX_length fields, e.g., the offset
      *  for supported_apply_setfields[] is:
+     *    let:
+     *      next_tables = 3
+     *      match_length = 2
+     *      write_setfields_length = 1
      *
-     *  sizeof(ofp_table_features) + next_tables_length + match_length +
-     *      write_setfields_length
+     *  sizeof(ofp_table_features) + next_tables_length + 5 + match_length +
+     *      0 + write_setfields_length + 4
      *
      *  OXM lists includes both 4 byte standard OXM headers and
      *  8 byte OXM experimental headers
@@ -1866,9 +1883,19 @@
      *      struct ofp_instruction   supported_instruction_hdrs[];
      *      struct ofp_action_header supported_write_action_hdrs[];
      *      struct ofp_action_header supported_apply_action_hdrs[];
+     *
+     *  The table-miss flow entry may support different set fields,
+     *  instructions, and actions than the rest of the table. Those that
+     *  it supports are contained in the following arrays.
+     *
+     *      uint32_t                 supported_write_setfields_hdrs_miss[];
+     *      uint32_t                 supported_apply_setfields_hdrs_miss[];
+     *      struct ofp_instruction   supported_instruction_hdrs_miss[];
+     *      struct ofp_action_header supported_write_action_hdrs_miss[];
+     *      struct ofp_action_header supported_apply_action_hdrs_miss[];
      */
 };
-OFP_ASSERT(sizeof(struct ofp_table_features) == 80);
+OFP_ASSERT(sizeof(struct ofp_table_features) == 88);
 
 /* Body of reply to OFPST_TABLE request. */
 struct ofp_table_stats {
