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