for (i = 0; i < vec_len (rt->errors); i++)
rt->errors[i] = vlib_error_set (n->index, i);
- ASSERT (sizeof (vlib_node_runtime_t) == 2 * CLIB_CACHE_LINE_BYTES);
+ STATIC_ASSERT (sizeof (vlib_node_runtime_t) == 2 * CLIB_CACHE_LINE_BYTES,
+ "Size of vlib_node_runtime_t must be equal to 2 cachelines");
ASSERT (vec_len (n->runtime_data) <= sizeof (vlib_node_runtime_t) -
STRUCT_OFFSET_OF (vlib_node_runtime_t, runtime_data));
vlib_thread_main_t *tm = vlib_get_thread_main ();
/* verify that structs are cacheline aligned */
- ASSERT (offsetof (dpdk_device_t, cacheline0) == 0);
- ASSERT (offsetof (dpdk_device_t, cacheline1) == CLIB_CACHE_LINE_BYTES);
- ASSERT (offsetof (dpdk_worker_t, cacheline0) == 0);
- ASSERT (offsetof (frame_queue_trace_t, cacheline0) == 0);
+ STATIC_ASSERT (offsetof (dpdk_device_t, cacheline0) == 0,
+ "Cache line marker must be 1st element in dpdk_device_t");
+ STATIC_ASSERT (offsetof (dpdk_device_t, cacheline1) ==
+ CLIB_CACHE_LINE_BYTES,
+ "Data in cache line 0 is bigger than cache line size");
+ STATIC_ASSERT (offsetof (dpdk_worker_t, cacheline0) == 0,
+ "Cache line marker must be 1st element in dpdk_worker_t");
+ STATIC_ASSERT (offsetof (frame_queue_trace_t, cacheline0) == 0,
+ "Cache line marker must be 1st element in frame_queue_trace_t");
dm->vlib_main = vm;
dm->vnet_main = vnet_get_main ();
void ip_lookup_init (ip_lookup_main_t * lm, u32 is_ip6)
{
/* ensure that adjacency is cacheline aligned and sized */
- ASSERT(STRUCT_OFFSET_OF(ip_adjacency_t, cacheline0) == 0);
- ASSERT(STRUCT_OFFSET_OF(ip_adjacency_t, cacheline1) == CLIB_CACHE_LINE_BYTES);
+ STATIC_ASSERT(STRUCT_OFFSET_OF(ip_adjacency_t, cacheline0) == 0,
+ "Cache line marker must be 1st element in struct");
+ STATIC_ASSERT(STRUCT_OFFSET_OF(ip_adjacency_t, cacheline1) == CLIB_CACHE_LINE_BYTES,
+ "Data in cache line 0 is bigger than cache line size");
/* Preallocate three "special" adjacencies */
lm->adjacency_heap = adj_pool;
} \
} while (0)
+#define STATIC_ASSERT(truth,...) _Static_assert(truth, __VA_ARGS__)
+
/* Assert without allocating memory. */
#define ASSERT_AND_PANIC(truth) \
do { \