--- openflow-2012-12-11.h	2015-07-23 09:54:17.208479364 -0700
+++ openflow-2012-12-11-2.h	2015-07-23 09:54:17.212479365 -0700
@@ -198,7 +198,7 @@
     struct ofp_header header;
 
     /* Hello element list */
-    struct ofp_hello_elem_header elements[0];
+    struct ofp_hello_elem_header elements[0]; /* List of elements - 0 or more */
 };
 OFP_ASSERT(sizeof(struct ofp_hello) == 8);
 
@@ -1096,7 +1096,7 @@
     uint16_t type;              /* One of OFPIT_*_ACTIONS */
     uint16_t len;               /* Length of this struct in bytes. */
     uint8_t pad[4];             /* Align to 64-bits */
-    struct ofp_action_header actions[0];  /* Actions associated with
+    struct ofp_action_header actions[0];  /* 0 or more actions associated with
                                              OFPIT_WRITE_ACTIONS and
                                              OFPIT_APPLY_ACTIONS */
 };
@@ -1182,7 +1182,8 @@
     uint16_t flags;               /* One of OFPFF_*. */
     uint8_t pad[2];
     struct ofp_match match;       /* Fields to match. Variable size. */
-    //struct ofp_instruction instructions[0]; /* Instruction set */
+    /* The variable size and padded match is always followed by instructions. */
+    //struct ofp_instruction instructions[0]; /* Instruction set - 0 or more. */
 };
 OFP_ASSERT(sizeof(struct ofp_flow_mod) == 56);
 
@@ -1221,9 +1222,10 @@
                                        bucket is live.  Only required for fast
                                        failover groups. */
     uint8_t pad[4];
-    struct ofp_action_header actions[0]; /* The action length is inferred
-                                           from the length field in the
-                                           header. */
+    struct ofp_action_header actions[0]; /* 0 or more actions associated with
+                                            the bucket - The action list length
+                                            is inferred from the length field
+                                            in the header. */
 };
 OFP_ASSERT(sizeof(struct ofp_bucket) == 16);
 
@@ -1259,10 +1261,11 @@
     uint32_t in_port;             /* Packet's input port or OFPP_CONTROLLER. */
     uint16_t actions_len;         /* Size of action array in bytes. */
     uint8_t pad[6];
-    struct ofp_action_header actions[0]; /* Action list. */
+    struct ofp_action_header actions[0]; /* Action list - 0 or more. */
+    /* The variable size action list is optionally followed by packet data.
+     * This data is only present and meaningful if buffer_id == -1.
     /* uint8_t data[0]; */        /* Packet data.  The length is inferred
-                                     from the length field in the header.
-                                     (Only meaningful if buffer_id == -1.) */
+                                     from the length field in the header. */
 };
 OFP_ASSERT(sizeof(struct ofp_packet_out) == 24);
 
@@ -1282,7 +1285,7 @@
     uint8_t table_id;       /* ID of the table that was looked up */
     uint64_t cookie;        /* Cookie of the flow entry that was looked up. */
     struct ofp_match match; /* Packet metadata. Variable size. */
-    /* Followed by:
+    /* The variable size and padded match is always followed by:
      *   - Exactly 2 all-zero padding bytes, then
      *   - An Ethernet frame whose length is inferred from header.length.
      * The padding bytes preceding the Ethernet frame ensure that the IP
@@ -1403,7 +1406,7 @@
     uint16_t            command;        /* One of OFPMC_*. */
     uint16_t            flags;          /* One of OFPMF_*. */
     uint32_t            meter_id;       /* Meter instance. */
-    struct ofp_meter_band_header bands[0]; /* The bands length is
+    struct ofp_meter_band_header bands[0]; /* The band list length is
                                            inferred from the length field
                                            in the header. */
 };
@@ -1760,7 +1763,7 @@
     uint16_t type;              /* One of the OFPMP_* constants. */
     uint16_t flags;             /* OFPMPF_REQ_* flags. */
     uint8_t pad[4];
-    uint8_t body[0];            /* Body of the request. */
+    uint8_t body[0];            /* Body of the request. 0 or more bytes. */
 };
 OFP_ASSERT(sizeof(struct ofp_multipart_request) == 16);
 
@@ -1773,7 +1776,7 @@
     uint16_t type;              /* One of the OFPMP_* constants. */
     uint16_t flags;             /* OFPMPF_REPLY_* flags. */
     uint8_t pad[4];
-    uint8_t body[0];            /* Body of the reply. */
+    uint8_t body[0];            /* Body of the reply. 0 or more bytes. */
 };
 OFP_ASSERT(sizeof(struct ofp_multipart_reply) == 16);
 
@@ -1828,7 +1831,8 @@
     uint64_t packet_count;    /* Number of packets in flow. */
     uint64_t byte_count;      /* Number of bytes in flow. */
     struct ofp_match match;   /* Description of fields. Variable size. */
-    //struct ofp_instruction instructions[0]; /* Instruction set. */
+    /* The variable size and padded match is always followed by instructions. */
+    //struct ofp_instruction instructions[0]; /* Instruction set - 0 or more. */
 };
 OFP_ASSERT(sizeof(struct ofp_flow_stats) == 56);
 
@@ -1914,7 +1918,7 @@
      *   - Exactly (length - 4) bytes containing the table_ids, then
      *   - Exactly (length + 7)/8*8 - (length) (between 0 and 7)
      *     bytes of all-zero bytes */
-    uint8_t          next_table_ids[0];
+    uint8_t          next_table_ids[0];        /* List of table ids. */
 };
 OFP_ASSERT(sizeof(struct ofp_table_feature_prop_next_tables) == 4);
 
@@ -1981,7 +1985,7 @@
     uint32_t max_entries;    /* Max number of entries supported. */
 
     /* Table Feature Property list */
-    struct ofp_table_feature_prop_header properties[0];
+    struct ofp_table_feature_prop_header properties[0]; /* List of properties */
 };
 OFP_ASSERT(sizeof(struct ofp_table_features) == 64);
 
@@ -2062,7 +2066,7 @@
     uint32_t duration_sec;   /* Time group has been alive in seconds. */
     uint32_t duration_nsec;  /* Time group has been alive in nanoseconds beyond
                                 duration_sec. */
-    struct ofp_bucket_counter bucket_stats[0];
+    struct ofp_bucket_counter bucket_stats[0]; /* One counter set per bucket. */
 };
 OFP_ASSERT(sizeof(struct ofp_group_stats) == 40);
 
@@ -2072,7 +2076,7 @@
     uint8_t type;                 /* One of OFPGT_*. */
     uint8_t pad;                  /* Pad to 64 bits. */
     uint32_t group_id;            /* Group identifier. */
-    struct ofp_bucket buckets[0];
+    struct ofp_bucket buckets[0];   /* List of buckets - 0 or more. */
 };
 OFP_ASSERT(sizeof(struct ofp_group_desc_stats) == 8);
 
