Merge into master from pull request #228:
bsn_debug_counter extension (https://github.com/floodlight/loxigen/pull/228)
diff --git a/c_gen/templates/loci_show.h b/c_gen/templates/loci_show.h
index ad33d5b..b210570 100644
--- a/c_gen/templates/loci_show.h
+++ b/c_gen/templates/loci_show.h
@@ -395,5 +395,8 @@
 #define LOCI_SHOW_u32_bsn_udf5(writer, cookie, val) LOCI_SHOW_u32(writer, cookie, val)
 #define LOCI_SHOW_u32_bsn_udf6(writer, cookie, val) LOCI_SHOW_u32(writer, cookie, val)
 #define LOCI_SHOW_u32_bsn_udf7(writer, cookie, val) LOCI_SHOW_u32(writer, cookie, val)
+#define LOCI_SHOW_u64_counter_id(writer, cookie, val) LOCI_SHOW_u64(writer, cookie, val)
+#define LOCI_SHOW_desc_str_description(writer, cookie, val) LOCI_SHOW_desc_str(writer, cookie, val)
+#define LOCI_SHOW_str64_name(writer, cookie, val) LOCI_SHOW_str64(writer, cookie, val)
 
 #endif /* _LOCI_SHOW_H_ */
diff --git a/c_gen/templates/of_type_maps.c b/c_gen/templates/of_type_maps.c
index 3b70f57..0b0bf15 100644
--- a/c_gen/templates/of_type_maps.c
+++ b/c_gen/templates/of_type_maps.c
@@ -326,6 +326,8 @@
         case 9: return OF_BSN_VLAN_COUNTER_STATS_REQUEST;
         case 10: return OF_BSN_FLOW_CHECKSUM_BUCKET_STATS_REQUEST;
         case 11: return OF_BSN_TABLE_CHECKSUM_STATS_REQUEST;
+        case 12: return OF_BSN_DEBUG_COUNTER_STATS_REQUEST;
+        case 13: return OF_BSN_DEBUG_COUNTER_DESC_STATS_REQUEST;
         }
     }
     return OF_OBJECT_INVALID;
@@ -348,6 +350,8 @@
         case 9: return OF_BSN_VLAN_COUNTER_STATS_REPLY;
         case 10: return OF_BSN_FLOW_CHECKSUM_BUCKET_STATS_REPLY;
         case 11: return OF_BSN_TABLE_CHECKSUM_STATS_REPLY;
+        case 12: return OF_BSN_DEBUG_COUNTER_STATS_REPLY;
+        case 13: return OF_BSN_DEBUG_COUNTER_DESC_STATS_REPLY;
         }
     }
     return OF_OBJECT_INVALID;
diff --git a/openflow_input/bsn_debug_counter b/openflow_input/bsn_debug_counter
new file mode 100644
index 0000000..75cafcc
--- /dev/null
+++ b/openflow_input/bsn_debug_counter
@@ -0,0 +1,97 @@
+// Copyright 2014, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License,
+// version 1.0 (EPL), with the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may
+// distribute libraries generated by LoxiGen (LoxiGen Libraries)
+// under the terms of your choice, provided that copyright and
+// licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i)
+// included in the LoxiGen Libraries, if distributed in source code
+// form and (ii) included in any documentation for the LoxiGen
+// Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2014, Big Switch Networks, Inc.
+// This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or
+// LOXI Exception. You may obtain a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an "AS
+// IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+// express or implied. See the EPL for the specific language
+// governing permissions and limitations under the EPL.
+
+#version 4
+
+// Switches have many non-dataplane counters that are mainly useful for
+// debugging. An example is the number of packet-ins dropped due to
+// queueing inside the switch. This extension allows the controller to
+// query these counters.
+
+struct of_bsn_debug_counter_stats_request : of_bsn_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 0xffff;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t subtype == 12;
+};
+
+struct of_bsn_debug_counter_stats_entry {
+    uint64_t counter_id;
+    uint64_t value;
+};
+
+struct of_bsn_debug_counter_stats_reply : of_bsn_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 0xffff;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t subtype == 12;
+    list(of_bsn_debug_counter_stats_entry_t) entries;
+};
+
+struct of_bsn_debug_counter_desc_stats_request : of_bsn_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 0xffff;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t subtype == 13;
+};
+
+struct of_bsn_debug_counter_desc_stats_entry {
+    uint64_t counter_id;
+    of_str64_t name;
+    of_desc_str_t description;
+};
+
+struct of_bsn_debug_counter_desc_stats_reply : of_bsn_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 0xffff;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t subtype == 13;
+    list(of_bsn_debug_counter_desc_stats_entry_t) entries;
+};