Merge into master from pull request #205:
loci: rework assertions for better static analysis (https://github.com/floodlight/loxigen/pull/205)
diff --git a/c_gen/c_code_gen.py b/c_gen/c_code_gen.py
index 78a809e..cbbcfba 100644
--- a/c_gen/c_code_gen.py
+++ b/c_gen/c_code_gen.py
@@ -467,7 +467,7 @@
  * underlying wire buffer's current bytes.
  */
 #define OF_LENGTH_CHECK_ASSERT(obj) \\
-    ASSERT(((obj)->parent != NULL) || \\
+    LOCI_ASSERT(((obj)->parent != NULL) || \\
      ((obj)->wire_object.wbuf == NULL) || \\
      (WBUF_CURRENT_BYTES((obj)->wire_object.wbuf) == (obj)->length))
 
@@ -609,14 +609,21 @@
 
 extern const char *const of_error_strings[];
 
-#ifndef NDEBUG
-/* #define ASSERT(val) assert(val) */
-#define FORCE_FAULT *(volatile int *)0 = 1
-#define ASSERT(val) if (!(val)) \\
-    fprintf(stderr, "\\nASSERT %s. %s:%d\\n", #val, __FILE__, __LINE__), \\
-    FORCE_FAULT
+#ifdef __GNUC__
+#define LOCI_NORETURN_ATTR __attribute__((__noreturn__))
 #else
-#define ASSERT(val)
+#define LOCI_NORETURN_ATTR
+#endif
+
+extern void loci_assert_fail(
+    const char *cond,
+    const char *file,
+    unsigned int line) LOCI_NORETURN_ATTR;
+
+#ifndef NDEBUG
+#define LOCI_ASSERT(val) ((val) ? (void)0 : loci_assert_fail(#val, __FILE__, __LINE__))
+#else
+#define LOCI_ASSERT(val)
 #endif
 
 /*
@@ -1650,13 +1657,13 @@
            out.write("    OF_PORT_NO_VALUE_CHECK(*%s, ver);\n" % m_name)
     elif m_type == "of_octets_t":
         out.write("""\
-    ASSERT(cur_len + abs_offset <= WBUF_CURRENT_BYTES(wbuf));
+    LOCI_ASSERT(cur_len + abs_offset <= WBUF_CURRENT_BYTES(wbuf));
     %(m_name)s->bytes = cur_len;
     %(m_name)s->data = OF_WIRE_BUFFER_INDEX(wbuf, abs_offset);
 """ % dict(m_name=m_name))
     elif m_type == "of_match_t":
         out.write("""
-    ASSERT(cur_len + abs_offset <= WBUF_CURRENT_BYTES(wbuf));
+    LOCI_ASSERT(cur_len + abs_offset <= WBUF_CURRENT_BYTES(wbuf));
     match_octets.bytes = cur_len;
     match_octets.data = OF_OBJECT_BUFFER_INDEX(obj, offset);
     OF_TRY(of_match_deserialize(ver, %(m_name)s, &match_octets));
@@ -1714,8 +1721,8 @@
     if (obj->wire_object.wbuf == %(m_name)s->wire_object.wbuf) {
         of_wire_buffer_grow(wbuf, abs_offset + new_len);
         /* Verify that the offsets are correct */
-        ASSERT(abs_offset == OF_OBJECT_ABSOLUTE_OFFSET(%(m_name)s, 0));
-        /* ASSERT(new_len == cur_len); */ /* fixme: may fail for OXM lists */
+        LOCI_ASSERT(abs_offset == OF_OBJECT_ABSOLUTE_OFFSET(%(m_name)s, 0));
+        /* LOCI_ASSERT(new_len == cur_len); */ /* fixme: may fail for OXM lists */
         return %(ret_success)s;
     }
 
@@ -1831,10 +1838,10 @@
 """)
 
     out.write("""
-    ASSERT(%(assert_str)s);
+    LOCI_ASSERT(%(assert_str)s);
     ver = obj->version;
     wbuf = OF_OBJECT_TO_WBUF(obj);
-    ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf != NULL);
 
     /* By version, determine offset and current length (where needed) */
     switch (ver) {
@@ -1863,14 +1870,14 @@
     gen_accessor_offsets(out, cls, m_name, next, a_type, m_type, prev_o)
     out.write("""\
     default:
-        ASSERT(0);
+        LOCI_ASSERT(0);
     }
 
     abs_offset = OF_OBJECT_ABSOLUTE_OFFSET(obj, offset);
-    ASSERT(abs_offset >= 0);
+    LOCI_ASSERT(abs_offset >= 0);
 """)
     if not loxi_utils.type_is_scalar(m_type):
-        out.write("    ASSERT(cur_len >= 0 && cur_len < 64 * 1024);\n")
+        out.write("    LOCI_ASSERT(cur_len >= 0 && cur_len < 64 * 1024);\n")
 
     # Now generate the common accessor code
     if a_type in ["get", "bind"]:
@@ -2038,7 +2045,7 @@
 """ % cls)
 
     out.write("""
-    ASSERT(of_object_fixed_len[version][%(enum)s] >= 0);
+    LOCI_ASSERT(of_object_fixed_len[version][%(enum)s] >= 0);
     if (clean_wire) {
         MEMSET(obj, 0, sizeof(*obj));
     }
diff --git a/c_gen/templates/locitest/test_list_limits.c b/c_gen/templates/locitest/test_list_limits.c
index d8368ff..68ead8f 100644
--- a/c_gen/templates/locitest/test_list_limits.c
+++ b/c_gen/templates/locitest/test_list_limits.c
@@ -44,19 +44,19 @@
 
     of_flow_stats_reply_entries_bind(obj, &list);
 
-    ASSERT(element != NULL);
+    LOCI_ASSERT(element != NULL);
 
 
     while (1) {
         int rv = of_list_flow_stats_entry_append(&list, element);
-        ASSERT(rv == OF_ERROR_NONE || rv == OF_ERROR_RESOURCE);
+        LOCI_ASSERT(rv == OF_ERROR_NONE || rv == OF_ERROR_RESOURCE);
         if (rv != OF_ERROR_NONE) {
             break;
         }
         i++;
     }
 
-    ASSERT(i == 744);
+    LOCI_ASSERT(i == 744);
 
     of_flow_stats_entry_delete(element);
     of_flow_stats_reply_delete(obj);
@@ -77,14 +77,14 @@
         int rv; 
         of_flow_stats_entry_init(&element, OF_VERSION_1_0, -1, 1);
         rv = of_list_flow_stats_entry_append_bind(&list, &element);
-        ASSERT(rv == OF_ERROR_NONE || rv == OF_ERROR_RESOURCE);
+        LOCI_ASSERT(rv == OF_ERROR_NONE || rv == OF_ERROR_RESOURCE);
         if (rv != OF_ERROR_NONE) {
             break;
         }
         i++;
     }
 
-    ASSERT(i == 744);
+    LOCI_ASSERT(i == 744);
 
     of_flow_stats_reply_delete(obj);
     return TEST_PASS;
diff --git a/c_gen/templates/locitest/unittest.h b/c_gen/templates/locitest/unittest.h
index c897d67..06568d3 100644
--- a/c_gen/templates/locitest/unittest.h
+++ b/c_gen/templates/locitest/unittest.h
@@ -41,9 +41,9 @@
     } while (0)
 
 #define TEST_ASSERT(result) if (!(result)) do {                         \
-        fprintf(stderr, "\nTEST ASSERT FAILURE "                        \
+        fprintf(stderr, "\nTEST LOCI_ASSERT FAILURE "                        \
                #result " :: %s:%d\n",__FILE__,__LINE__);                \
-        ASSERT(0);                                                      \
+        LOCI_ASSERT(0);                                                      \
         return TEST_FAIL;                                               \
     } while (0)
 
diff --git a/c_gen/templates/of_object.c b/c_gen/templates/of_object.c
index 9b1bafd..005965e 100644
--- a/c_gen/templates/of_object.c
+++ b/c_gen/templates/of_object.c
@@ -160,7 +160,7 @@
     }
 
     object_id = of_message_to_object_id(msg, len);
-    ASSERT(object_id != OF_OBJECT_INVALID);
+    LOCI_ASSERT(object_id != OF_OBJECT_INVALID);
 
     if ((obj = of_object_new(-1)) == NULL) {
         return NULL;
@@ -199,9 +199,9 @@
     of_wire_object_t *wobj;
     of_wire_buffer_t *wbuf;
 
-    ASSERT(buf != NULL);
-    ASSERT(bytes > 0);
-    // ASSERT(wobj is not bound);
+    LOCI_ASSERT(buf != NULL);
+    LOCI_ASSERT(bytes > 0);
+    // LOCI_ASSERT(wobj is not bound);
 
     wobj = &obj->wire_object;
     MEMSET(wobj, 0, sizeof(*wobj));
@@ -487,7 +487,7 @@
 {
     int offset;
 
-    ASSERT(child->length > 0);
+    LOCI_ASSERT(child->length > 0);
 
     /* Get offset of parent */
     if (of_list_is_last(parent, child)) {
@@ -505,7 +505,7 @@
 void
 of_object_wire_buffer_steal(of_object_t *obj, uint8_t **buffer)
 {
-    ASSERT(obj != NULL);
+    LOCI_ASSERT(obj != NULL);
     of_wire_buffer_steal(obj->wire_object.wbuf, buffer);
     obj->wire_object.wbuf = NULL;
 }
@@ -530,7 +530,7 @@
 #endif
 
     while (obj != NULL) {
-        ASSERT(count++ < _MAX_PARENT_ITERATIONS);
+        LOCI_ASSERT(count++ < _MAX_PARENT_ITERATIONS);
         obj->length += delta;
         if (obj->wire_length_set != NULL) {
             obj->wire_length_set(obj, obj->length);
@@ -540,10 +540,10 @@
 #endif
 
         /* Asserts for wire length checking */
-        ASSERT(obj->length + obj->wire_object.obj_offset <=
+        LOCI_ASSERT(obj->length + obj->wire_object.obj_offset <=
                WBUF_CURRENT_BYTES(wbuf));
         if (obj->parent == NULL) {
-            ASSERT(obj->length + obj->wire_object.obj_offset ==
+            LOCI_ASSERT(obj->length + obj->wire_object.obj_offset ==
                    WBUF_CURRENT_BYTES(wbuf));
         }
 
diff --git a/c_gen/templates/of_type_maps.c b/c_gen/templates/of_type_maps.c
index 3ea7b6f..8d89a36 100644
--- a/c_gen/templates/of_type_maps.c
+++ b/c_gen/templates/of_type_maps.c
@@ -55,8 +55,8 @@
 void
 of_object_message_wire_length_get(of_object_t *obj, int *bytes)
 {
-    ASSERT(OF_OBJECT_TO_WBUF(obj) != NULL);
-    // ASSERT(obj is message)
+    LOCI_ASSERT(OF_OBJECT_TO_WBUF(obj) != NULL);
+    // LOCI_ASSERT(obj is message)
     *bytes = of_message_length_get(OF_OBJECT_TO_MESSAGE(obj));
 }
 
@@ -69,8 +69,8 @@
 void
 of_object_message_wire_length_set(of_object_t *obj, int bytes)
 {
-    ASSERT(OF_OBJECT_TO_WBUF(obj) != NULL);
-    // ASSERT(obj is message)
+    LOCI_ASSERT(OF_OBJECT_TO_WBUF(obj) != NULL);
+    // LOCI_ASSERT(obj is message)
     of_message_length_set(OF_OBJECT_TO_MESSAGE(obj), bytes);
 }
 
@@ -97,7 +97,7 @@
 {
     uint16_t val16;
     of_wire_buffer_t *wbuf = OF_OBJECT_TO_WBUF(obj);
-    ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf != NULL);
 
     of_wire_buffer_u16_get(wbuf, 
            OF_OBJECT_ABSOLUTE_OFFSET(obj, TLV16_WIRE_LENGTH_OFFSET), &val16);
@@ -115,7 +115,7 @@
 of_tlv16_wire_length_set(of_object_t *obj, int bytes)
 {
     of_wire_buffer_t *wbuf = OF_OBJECT_TO_WBUF(obj);
-    ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf != NULL);
 
     of_wire_buffer_u16_set(wbuf, 
         OF_OBJECT_ABSOLUTE_OFFSET(obj, TLV16_WIRE_LENGTH_OFFSET), bytes);
@@ -247,10 +247,10 @@
         return;
     }
 
-    ASSERT(wire_type >= 0 && wire_type < OF_ACTION_ITEM_COUNT);
+    LOCI_ASSERT(wire_type >= 0 && wire_type < OF_ACTION_ITEM_COUNT);
 
     *id = of_action_type_to_id[obj->version][wire_type];
-    ASSERT(*id != OF_OBJECT_INVALID);
+    LOCI_ASSERT(*id != OF_OBJECT_INVALID);
 }
 
 /**
@@ -271,10 +271,10 @@
         return;
     }
 
-    ASSERT(wire_type >= 0 && wire_type < OF_ACTION_ID_ITEM_COUNT);
+    LOCI_ASSERT(wire_type >= 0 && wire_type < OF_ACTION_ID_ITEM_COUNT);
 
     *id = of_action_id_type_to_id[obj->version][wire_type];
-    ASSERT(*id != OF_OBJECT_INVALID);
+    LOCI_ASSERT(*id != OF_OBJECT_INVALID);
 }
 
 /**
@@ -328,10 +328,10 @@
         return;
     }
 
-    ASSERT(wire_type >= 0 && wire_type < OF_INSTRUCTION_ITEM_COUNT);
+    LOCI_ASSERT(wire_type >= 0 && wire_type < OF_INSTRUCTION_ITEM_COUNT);
 
     *id = of_instruction_type_to_id[obj->version][wire_type];
-    ASSERT(*id != OF_OBJECT_INVALID);
+    LOCI_ASSERT(*id != OF_OBJECT_INVALID);
 }
 
 
@@ -365,10 +365,10 @@
         return;
     }
 
-    ASSERT(wire_type >= 0 && wire_type < OF_QUEUE_PROP_ITEM_COUNT);
+    LOCI_ASSERT(wire_type >= 0 && wire_type < OF_QUEUE_PROP_ITEM_COUNT);
 
     *id = of_queue_prop_type_to_id[obj->version][wire_type];
-    ASSERT(*id != OF_OBJECT_INVALID);
+    LOCI_ASSERT(*id != OF_OBJECT_INVALID);
 }
 
 
@@ -405,10 +405,10 @@
         return;
     }
 
-    ASSERT(wire_type >= 0 && wire_type < OF_METER_BAND_ITEM_COUNT);
+    LOCI_ASSERT(wire_type >= 0 && wire_type < OF_METER_BAND_ITEM_COUNT);
 
     *id = of_meter_band_type_to_id[obj->version][wire_type];
-    ASSERT(*id != OF_OBJECT_INVALID);
+    LOCI_ASSERT(*id != OF_OBJECT_INVALID);
 }
 
 /**
@@ -423,9 +423,9 @@
     int wire_type;
 
     of_tlv16_wire_type_get(obj, &wire_type);
-    ASSERT(wire_type >= 0 && wire_type < OF_HELLO_ELEM_ITEM_COUNT);
+    LOCI_ASSERT(wire_type >= 0 && wire_type < OF_HELLO_ELEM_ITEM_COUNT);
     *id = of_hello_elem_type_to_id[obj->version][wire_type];
-    ASSERT(*id != OF_OBJECT_INVALID);
+    LOCI_ASSERT(*id != OF_OBJECT_INVALID);
 }
 
 /**
@@ -440,9 +440,9 @@
     int wire_type;
 
     of_tlv16_wire_type_get(obj, &wire_type);
-    ASSERT(wire_type >= 0 && wire_type < OF_BSN_TLV_ITEM_COUNT);
+    LOCI_ASSERT(wire_type >= 0 && wire_type < OF_BSN_TLV_ITEM_COUNT);
     *id = of_bsn_tlv_type_to_id[obj->version][wire_type];
-    ASSERT(*id != OF_OBJECT_INVALID);
+    LOCI_ASSERT(*id != OF_OBJECT_INVALID);
 }
 
 /****************************************************************
@@ -461,14 +461,14 @@
 
 #define _GET_OXM_TYPE_LEN(obj, tl_p, wbuf) do {                         \
         wbuf = OF_OBJECT_TO_WBUF(obj);                                  \
-        ASSERT(wbuf != NULL);                                           \
+        LOCI_ASSERT(wbuf != NULL);                                           \
         of_wire_buffer_u32_get(wbuf,                                    \
             OF_OBJECT_ABSOLUTE_OFFSET(obj, OXM_HDR_OFFSET), (tl_p));    \
     } while (0)
 
 #define _SET_OXM_TYPE_LEN(obj, tl_p, wbuf) do {                         \
         wbuf = OF_OBJECT_TO_WBUF(obj);                                  \
-        ASSERT(wbuf != NULL);                                           \
+        LOCI_ASSERT(wbuf != NULL);                                           \
         of_wire_buffer_u32_set(wbuf,                                    \
             OF_OBJECT_ABSOLUTE_OFFSET(obj, OXM_HDR_OFFSET), (tl_p));    \
     } while (0)
@@ -518,7 +518,7 @@
     of_wire_buffer_t *wbuf = OF_OBJECT_TO_WBUF(obj);
     uint16_t u16;
 
-    ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf != NULL);
 
     of_wire_buffer_u16_get(wbuf, 
            OF_OBJECT_ABSOLUTE_OFFSET(obj, OF_U16_LEN_LENGTH_OFFSET),
@@ -537,9 +537,9 @@
 of_u16_len_wire_length_set(of_object_t *obj, int bytes)
 {
     of_wire_buffer_t *wbuf = OF_OBJECT_TO_WBUF(obj);
-    ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf != NULL);
 
-    /* ASSERT(obj is u16-len entry) */
+    /* LOCI_ASSERT(obj is u16-len entry) */
 
     of_wire_buffer_u16_set(wbuf, 
            OF_OBJECT_ABSOLUTE_OFFSET(obj, OF_U16_LEN_LENGTH_OFFSET),
@@ -564,9 +564,9 @@
     uint16_t u16;
     int offset;
 
-    ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf != NULL);
 
-    /* ASSERT(obj is packet queue obj) */
+    /* LOCI_ASSERT(obj is packet queue obj) */
     offset = OF_PACKET_QUEUE_LENGTH_OFFSET(obj->version);
     of_wire_buffer_u16_get(wbuf, OF_OBJECT_ABSOLUTE_OFFSET(obj, offset),
                            &u16);
@@ -588,9 +588,9 @@
     of_wire_buffer_t *wbuf = OF_OBJECT_TO_WBUF(obj);
     int offset;
 
-    ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf != NULL);
 
-    /* ASSERT(obj is packet queue obj) */
+    /* LOCI_ASSERT(obj is packet queue obj) */
     offset = OF_PACKET_QUEUE_LENGTH_OFFSET(obj->version);
     of_wire_buffer_u16_set(wbuf, OF_OBJECT_ABSOLUTE_OFFSET(obj, offset),
                                   bytes);
@@ -607,8 +607,8 @@
 void
 of_list_meter_band_stats_wire_length_get(of_object_t *obj, int *bytes)
 {
-    ASSERT(obj->parent != NULL);
-    ASSERT(obj->parent->object_id == OF_METER_STATS);
+    LOCI_ASSERT(obj->parent != NULL);
+    LOCI_ASSERT(obj->parent->object_id == OF_METER_STATS);
 
     /* We're counting on the parent being properly initialized already.
      * The length is stored in a uint16 at offset 4 of the parent.
@@ -631,7 +631,7 @@
 {
     uint16_t val16;
     of_wire_buffer_t *wbuf = OF_OBJECT_TO_WBUF(obj);
-    ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf != NULL);
     of_wire_buffer_u16_get(wbuf, 
                OF_OBJECT_ABSOLUTE_OFFSET(obj, OF_METER_STATS_LENGTH_OFFSET),
                &val16);
@@ -642,7 +642,7 @@
 of_meter_stats_wire_length_set(of_object_t *obj, int bytes)
 {
     of_wire_buffer_t *wbuf = OF_OBJECT_TO_WBUF(obj);
-    ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf != NULL);
 
     of_wire_buffer_u16_set(wbuf, 
         OF_OBJECT_ABSOLUTE_OFFSET(obj, OF_METER_STATS_LENGTH_OFFSET), bytes);
diff --git a/c_gen/templates/of_utils.c b/c_gen/templates/of_utils.c
index ba22536..373ad59 100644
--- a/c_gen/templates/of_utils.c
+++ b/c_gen/templates/of_utils.c
@@ -35,6 +35,8 @@
  ****************************************************************/
 
 #include <loci/of_utils.h>
+#include <stdio.h>
+#include <stdlib.h>
 
 
 /**
@@ -76,3 +78,9 @@
     return rv;
 }
 
+void
+loci_assert_fail(const char *msg, const char *file, unsigned int line)
+{
+    fprintf(stderr, "\\nASSERT %s. %s:%d\\n", msg, file, line);
+    abort();
+}
diff --git a/c_gen/templates/of_wire_buf.c b/c_gen/templates/of_wire_buf.c
index 13da8e3..7f759f9 100644
--- a/c_gen/templates/of_wire_buf.c
+++ b/c_gen/templates/of_wire_buf.c
@@ -131,12 +131,12 @@
     uint8_t *src_ptr, *dst_ptr;
     int cur_bytes;
 
-    ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf != NULL);
 
     cur_bytes = wbuf->current_bytes;
 
     /* Doesn't make sense; mismatch in current buffer info */
-    ASSERT(old_len + offset <= wbuf->current_bytes);
+    LOCI_ASSERT(old_len + offset <= wbuf->current_bytes);
 
     wbuf->current_bytes += (new_len - old_len); // may decrease size
 
@@ -151,5 +151,5 @@
     dst_ptr = &wbuf->buf[offset];
     MEMCPY(dst_ptr, data, new_len);
 
-    ASSERT(wbuf->current_bytes == cur_bytes + (new_len - old_len));
+    LOCI_ASSERT(wbuf->current_bytes == cur_bytes + (new_len - old_len));
 }
diff --git a/c_gen/templates/of_wire_buf.h b/c_gen/templates/of_wire_buf.h
index f977004..4736ac0 100644
--- a/c_gen/templates/of_wire_buf.h
+++ b/c_gen/templates/of_wire_buf.h
@@ -88,7 +88,7 @@
  * @param offset The extent of the buffer required
  */
 #define OF_WIRE_BUFFER_ACCESS_CHECK(wbuf, offset)                      \
-    ASSERT(((wbuf) != NULL) && (WBUF_BUF(wbuf) != NULL) &&             \
+    LOCI_ASSERT(((wbuf) != NULL) && (WBUF_BUF(wbuf) != NULL) &&             \
            (offset > 0) && (WBUF_CURRENT_BYTES(wbuf) >= offset))
 
 /*
@@ -242,8 +242,8 @@
 static inline void
 of_wire_buffer_grow(of_wire_buffer_t *wbuf, int bytes)
 {
-    ASSERT(wbuf != NULL);
-    ASSERT(wbuf->alloc_bytes >= bytes);
+    LOCI_ASSERT(wbuf != NULL);
+    LOCI_ASSERT(wbuf->alloc_bytes >= bytes);
     if (bytes > wbuf->current_bytes) {
         wbuf->current_bytes = bytes;
     }
@@ -426,7 +426,7 @@
 of_wire_buffer_match_get(int version, of_wire_buffer_t *wbuf, int offset,
                       of_match_t *value)
 {
-    ASSERT(0);
+    LOCI_ASSERT(0);
 }
 
 /**
@@ -443,7 +443,7 @@
 of_wire_buffer_match_set(int version, of_wire_buffer_t *wbuf, int offset,
                       of_match_t *value)
 {
-    ASSERT(0);
+    LOCI_ASSERT(0);
 }
 
 /**
@@ -461,7 +461,7 @@
 of_wire_buffer_of_port_desc_get(int version, of_wire_buffer_t *wbuf, int offset,
                              void *value)
 {
-    ASSERT(0);
+    LOCI_ASSERT(0);
 }
 
 /**
@@ -479,7 +479,7 @@
 of_wire_buffer_of_port_desc_set(int version, of_wire_buffer_t *wbuf, int offset,
                              void *value)
 {
-    ASSERT(0);
+    LOCI_ASSERT(0);
 }
 
 /**
@@ -510,7 +510,7 @@
         *value = v32;
         break;
     default:
-        ASSERT(0);
+        LOCI_ASSERT(0);
     }
 }
 
@@ -538,7 +538,7 @@
         of_wire_buffer_u32_set(wbuf, offset, (uint32_t)value);
         break;
     default:
-        ASSERT(0);
+        LOCI_ASSERT(0);
     }
 }
 
@@ -568,7 +568,7 @@
         *value = v8;
         break;
     default:
-        ASSERT(0);
+        LOCI_ASSERT(0);
     }
 }
 
@@ -593,7 +593,7 @@
         of_wire_buffer_u8_set(wbuf, offset, (uint8_t)value);
         break;
     default:
-        ASSERT(0);
+        LOCI_ASSERT(0);
     }
 }
 
@@ -623,7 +623,7 @@
         *value = v64;
         break;
     default:
-        ASSERT(0);
+        LOCI_ASSERT(0);
     }
 }
 
@@ -648,7 +648,7 @@
         of_wire_buffer_u64_set(wbuf, offset, (uint64_t)value);
         break;
     default:
-        ASSERT(0);
+        LOCI_ASSERT(0);
     }
 }
 
@@ -702,7 +702,7 @@
                                of_octets_t *value, int cur_len)
 {
     // FIXME need to adjust length of octets member in buffer
-    ASSERT(cur_len == 0 || cur_len == value->bytes);
+    LOCI_ASSERT(cur_len == 0 || cur_len == value->bytes);
 
     OF_WIRE_BUFFER_ACCESS_CHECK(wbuf, offset + OF_OCTETS_BYTES_GET(value));
     buf_octets_set(OF_WIRE_BUFFER_INDEX(wbuf, offset),