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),
