X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fclib.h;h=22377c61440ef5dc309d56f89059101fb67a483e;hb=refs%2Fchanges%2F10%2F30610%2F6;hp=be21cad604b8e5544c231ec7cd53361192bea548;hpb=cc1085647b2ae36e6c086d65b4e81b9f1cf9fc9a;p=vpp.git diff --git a/src/vppinfra/clib.h b/src/vppinfra/clib.h index be21cad604b..22377c61440 100644 --- a/src/vppinfra/clib.h +++ b/src/vppinfra/clib.h @@ -38,6 +38,7 @@ #ifndef included_clib_h #define included_clib_h +#include #include #ifdef __x86_64__ @@ -66,8 +67,8 @@ #define ARRAY_LEN(x) (sizeof (x)/sizeof (x[0])) #define _STRUCT_FIELD(t,f) (((t *) 0)->f) -#define STRUCT_OFFSET_OF(t,f) ((uword) & _STRUCT_FIELD (t, f)) -#define STRUCT_BIT_OFFSET_OF(t,f) (BITS(u8) * (uword) & _STRUCT_FIELD (t, f)) +#define STRUCT_OFFSET_OF(t,f) offsetof(t, f) +#define STRUCT_BIT_OFFSET_OF(t,f) (BITS(u8) * STRUCT_OFFSET_OF (t, f)) #define STRUCT_SIZE_OF(t,f) (sizeof (_STRUCT_FIELD (t, f))) #define STRUCT_BITS_OF(t,f) (BITS (_STRUCT_FIELD (t, f))) #define STRUCT_ARRAY_LEN(t,f) ARRAY_LEN (_STRUCT_FIELD (t, f)) @@ -99,6 +100,7 @@ #define __clib_aligned(x) __attribute__ ((aligned(x))) #define __clib_section(s) __attribute__ ((section(s))) #define __clib_warn_unused_result __attribute__ ((warn_unused_result)) +#define __clib_export __attribute__ ((visibility("default"))) #define never_inline __attribute__ ((__noinline__)) @@ -330,6 +332,14 @@ extract_bits (uword x, int start, int count) _x < _y ? _x : _y; \ }) +#define clib_clamp(x,lo,hi) \ +({ \ + __typeof__ (x) _x = (x); \ + __typeof__ (lo) _lo = (lo); \ + __typeof__ (hi) _hi = (hi); \ + _x < _lo ? _lo : (_x > _hi ? _hi : _x); \ +}) + #define clib_abs(x) \ ({ \ __typeof__ (x) _x = (x); \