openflow_input: add discriminator fields
diff --git a/openflow_input/bsn b/openflow_input/bsn
index 16f3323..0aa674b 100644
--- a/openflow_input/bsn
+++ b/openflow_input/bsn
@@ -34,7 +34,7 @@
     uint16_t length;
     uint32_t xid;
     uint32_t experimenter == 0x5c16c7;
-    uint32_t subtype;
+    uint32_t subtype == ?;
 };
 
 // BSN extension action
@@ -42,7 +42,7 @@
     uint16_t type == 65535;
     uint16_t len;
     uint32_t experimenter == 0x5c16c7;
-    uint32_t subtype;
+    uint32_t subtype == ?;
     pad(4);
 };
 
diff --git a/openflow_input/nicira b/openflow_input/nicira
index f76be27..ba2048d 100644
--- a/openflow_input/nicira
+++ b/openflow_input/nicira
@@ -34,7 +34,7 @@
     uint16_t length;
     uint32_t xid;
     uint32_t experimenter == 0x2320;
-    uint32_t subtype;
+    uint32_t subtype == ?;
 };
 
 // Nicira extension action
@@ -42,7 +42,7 @@
     uint16_t type == 65535;
     uint16_t len;
     uint32_t experimenter == 0x2320;
-    uint16_t subtype;
+    uint16_t subtype == ?;
     pad(2);
     pad(4);
 };
diff --git a/openflow_input/oxm-1.2 b/openflow_input/oxm-1.2
index e75d218..5006cff 100644
--- a/openflow_input/oxm-1.2
+++ b/openflow_input/oxm-1.2
@@ -33,7 +33,7 @@
 #version 4
 
 struct of_oxm {
-    uint32_t type_len;
+    uint32_t type_len == ?;
 };
 
 struct of_oxm_arp_op : of_oxm {
diff --git a/openflow_input/standard-1.0 b/openflow_input/standard-1.0
index 6382759..d78d5bd 100644
--- a/openflow_input/standard-1.0
+++ b/openflow_input/standard-1.0
@@ -302,7 +302,7 @@
 /* XXX rename to of_message */
 struct of_header {
     uint8_t version;
-    uint8_t type;
+    uint8_t type == ?;
     uint16_t length;
     uint32_t xid;
 };
@@ -538,7 +538,7 @@
 };
 
 struct of_action {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
     pad(4);
 };
@@ -580,7 +580,7 @@
     uint32_t xid;
     of_match_t match;
     uint64_t cookie;
-    of_fm_cmd_t _command;
+    of_fm_cmd_t _command == ?;
     uint16_t idle_timeout;
     uint16_t hard_timeout;
     uint16_t priority;
@@ -765,7 +765,7 @@
     uint8_t type == 16;
     uint16_t length;
     uint32_t xid;
-    uint16_t stats_type;
+    uint16_t stats_type == ?;
     uint16_t flags;
 };
 
@@ -774,7 +774,7 @@
     uint8_t type == 17;
     uint16_t length;
     uint32_t xid;
-    uint16_t stats_type;
+    uint16_t stats_type == ?;
     uint16_t flags;
 };
 
@@ -937,7 +937,7 @@
 // END OF STATS OBJECTS
 
 struct of_queue_prop {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
     pad(4);
 };
diff --git a/openflow_input/standard-1.1 b/openflow_input/standard-1.1
index 222071a..9bf46bd 100644
--- a/openflow_input/standard-1.1
+++ b/openflow_input/standard-1.1
@@ -410,7 +410,7 @@
 /* XXX rename to of_message */
 struct of_header {
     uint8_t version;
-    uint8_t type;
+    uint8_t type == ?;
     uint16_t length;
     uint32_t xid;
 };
@@ -747,7 +747,7 @@
 };
 
 struct of_action {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
     pad(4);
 };
@@ -794,7 +794,7 @@
 };
 
 struct of_instruction {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
     pad(4);
 };
@@ -849,7 +849,7 @@
     uint64_t cookie;
     uint64_t cookie_mask;
     uint8_t table_id;
-    of_fm_cmd_t _command;
+    of_fm_cmd_t _command == ?;
     uint16_t idle_timeout;
     uint16_t hard_timeout;
     uint16_t priority;
@@ -1107,7 +1107,7 @@
     uint8_t type == 18;
     uint16_t length;
     uint32_t xid;
-    uint16_t stats_type;
+    uint16_t stats_type == ?;
     uint16_t flags;
     pad(4);
 };
@@ -1117,7 +1117,7 @@
     uint8_t type == 19;
     uint16_t length;
     uint32_t xid;
-    uint16_t stats_type;
+    uint16_t stats_type == ?;
     uint16_t flags;
     pad(4);
 };
@@ -1348,7 +1348,7 @@
 // END OF STATS OBJECTS
 
 struct of_queue_prop {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
     pad(4);
 };
diff --git a/openflow_input/standard-1.2 b/openflow_input/standard-1.2
index 6bcebdc..440efe6 100644
--- a/openflow_input/standard-1.2
+++ b/openflow_input/standard-1.2
@@ -450,7 +450,7 @@
 /* XXX rename to of_message */
 struct of_header {
     uint8_t version;
-    uint8_t type;
+    uint8_t type == ?;
     uint16_t length;
     uint32_t xid;
 };
@@ -704,13 +704,13 @@
 };
 
 struct of_action {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
     pad(4);
 };
 
 struct of_instruction {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
     pad(4);
 };
@@ -765,7 +765,7 @@
     uint64_t cookie;
     uint64_t cookie_mask;
     uint8_t table_id;
-    of_fm_cmd_t _command;
+    of_fm_cmd_t _command == ?;
     uint16_t idle_timeout;
     uint16_t hard_timeout;
     uint16_t priority;
@@ -1067,7 +1067,7 @@
     uint8_t type == 18;
     uint16_t length;
     uint32_t xid;
-    uint16_t stats_type;
+    uint16_t stats_type == ?;
     uint16_t flags;
     pad(4);
 };
@@ -1077,7 +1077,7 @@
     uint8_t type == 19;
     uint16_t length;
     uint32_t xid;
-    uint16_t stats_type;
+    uint16_t stats_type == ?;
     uint16_t flags;
     pad(4);
 };
@@ -1338,7 +1338,7 @@
 // END OF STATS OBJECTS
 
 struct of_queue_prop {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
     pad(4);
 };
diff --git a/openflow_input/standard-1.3 b/openflow_input/standard-1.3
index 0a56793..87f0494 100644
--- a/openflow_input/standard-1.3
+++ b/openflow_input/standard-1.3
@@ -553,7 +553,7 @@
 /* XXX rename to of_message */
 struct of_header {
     uint8_t version;
-    uint8_t type;
+    uint8_t type == ?;
     uint16_t length;
     uint32_t xid;
 };
@@ -851,13 +851,13 @@
 };
 
 struct of_action {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
     pad(4);
 };
 
 struct of_instruction {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
 };
 
@@ -917,7 +917,7 @@
     uint64_t cookie;
     uint64_t cookie_mask;
     uint8_t table_id;
-    of_fm_cmd_t _command;
+    of_fm_cmd_t _command == ?;
     uint16_t idle_timeout;
     uint16_t hard_timeout;
     uint16_t priority;
@@ -1257,7 +1257,7 @@
     uint8_t type == 18;
     uint16_t length;
     uint32_t xid;
-    uint16_t stats_type;
+    uint16_t stats_type == ?;
     uint16_t flags;
     pad(4);
 };
@@ -1267,7 +1267,7 @@
     uint8_t type == 19;
     uint16_t length;
     uint32_t xid;
-    uint16_t stats_type;
+    uint16_t stats_type == ?;
     uint16_t flags;
     pad(4);
 };
@@ -1777,7 +1777,7 @@
 // END OF STATS OBJECTS
 
 struct of_queue_prop {
-    uint16_t type;
+    uint16_t type == ?;
     uint16_t len;
     pad(4);
 };