ipsec: IPSec protection for multi-point tunnel interfaces
[vpp.git] / src / vppinfra / error_bootstrap.h
index 18d2176..8dbbc7f 100644 (file)
@@ -79,6 +79,35 @@ do {                                                 \
     }                                                  \
 } while (0)
 
+/*
+ * This version always generates code, and has a Coverity-specific
+ * version to stop Coverity complaining about
+ * ALWAYS_ASSERT(p != 0); p->member...
+ */
+
+#ifndef __COVERITY__
+#define ALWAYS_ASSERT(truth)                           \
+do {                                                   \
+  if (PREDICT_FALSE(!(truth)))                          \
+    {                                                  \
+      _clib_error (CLIB_ERROR_ABORT, 0, 0,             \
+                  "%s:%d (%s) assertion `%s' fails",   \
+                  __FILE__,                            \
+                  (uword) __LINE__,                    \
+                  clib_error_function,                 \
+                  # truth);                            \
+    }                                                  \
+} while (0)
+#else /* __COVERITY__ */
+#define ALWAYS_ASSERT(truth)                    \
+do {                                            \
+  if (PREDICT_FALSE(!(truth)))                  \
+    {                                           \
+      abort();                                  \
+    }                                           \
+} while (0)
+#endif /* __COVERITY */
+
 #if defined(__clang__)
 #define STATIC_ASSERT(truth,...)
 #else
@@ -88,6 +117,9 @@ do {                                                 \
 #define STATIC_ASSERT_SIZEOF(d, s) \
   STATIC_ASSERT (sizeof (d) == s, "Size of " #d " must be " # s " bytes")
 
+#define STATIC_ASSERT_SIZEOF_ELT(d, e, s) \
+  STATIC_ASSERT (sizeof (((d *)0)->e) == s, "Size of " #d "." #e " must be " # s " bytes")
+
 #define STATIC_ASSERT_OFFSET_OF(s, e, o) \
   STATIC_ASSERT (STRUCT_OFFSET_OF(s,e) == o, "Offset of " #s "." #e " must be " # o)