57 #define foreach_lcaf_type \ 77 #define _(cond, name) \ 78 u16 name ## _write (u8 * p, void * a); \ 79 u16 name ## _parse (u8 * p, void * a); \ 80 u16 name ## _size_to_write (void * a); \ 81 void name ## _free (void * a); \ 82 void name ## _copy (void * dst, void * src); \ 83 u8 name ## _length (void * a); \ 84 int name ## _cmp (void *, void *); 87 #define CONCAT(a,b) a##_##b 88 #define IF(c, t, e) CONCAT(IF, c)(t, e) 91 #define EXPAND_FCN(cond, fcn) \ 95 #define _(cond, name) \ 96 EXPAND_FCN(cond, name##_cmp), 102 #define _(cond, name) \ 103 EXPAND_FCN(cond, name##_length), 109 #define _(cond, name) \ 110 EXPAND_FCN(cond, name##_copy), 116 #define _(cond, name) \ 117 EXPAND_FCN(cond, name##_free), 123 #define _(cond, name) \ 124 EXPAND_FCN(cond, name##_size_to_write), 130 #define _(cond, name) \ 131 EXPAND_FCN(cond, name##_write), 137 #define _(cond, name) \ 138 EXPAND_FCN(cond, name##_parse), 146 ip_address_t *
a = va_arg (*args, ip_address_t *);
166 ip_address_t *
a = va_arg (*args, ip_address_t *);
168 memset (a, 0,
sizeof (*a));
181 ip_prefix_t *
a = va_arg (*args, ip_prefix_t *);
189 ip_prefix_t *
a = va_arg (*args, ip_prefix_t *);
209 u8 *
a = va_arg (*args,
u8 *);
210 return unformat (input,
"%x:%x:%x:%x:%x:%x", &a[0], &a[1], &a[2], &a[3],
217 u8 *
a = va_arg (*args,
u8 *);
218 return format (s,
"%02x:%02x:%02x:%02x:%02x:%02x",
219 a[0], a[1], a[2], a[3], a[4], a[5]);
239 u32 *
a = va_arg (*args,
u32 *);
240 return format (s,
"SPI:%d SI:%d", *a >> 8, *a & 0xff);
327 u32 *key_id = va_arg (*args,
u32 *);
332 if (!strcmp ((
char *) s,
"sha1"))
334 else if (!strcmp ((
char *) s,
"sha256"))
358 memset (&ippref, 0,
sizeof (ippref));
359 memset (&sim1, 0,
sizeof (sim1));
360 memset (&sim2, 0,
sizeof (sim2));
393 u32 *action = va_arg (*args,
u32 *);
398 if (!strcmp ((
char *) s,
"no-action"))
400 else if (!strcmp ((
char *) s,
"natively-forward"))
402 else if (!strcmp ((
char *) s,
"send-map-request"))
404 else if (!strcmp ((
char *) s,
"drop"))
427 return format (0,
"sha1");
429 return format (0,
"sha256");
445 s =
format (s,
"no-action");
448 s =
format (s,
"natively-forward");
451 s =
format (s,
"send-map-request");
551 return version ==
IP4 ? 32 : 128;
572 u8 *p = b +
sizeof (
u16);
581 u8 *p = b +
sizeof (
u16);
591 u8 *p = b +
sizeof (
u16);
593 return (len +
sizeof (
u16));
602 return (
sizeof (
u16) + size);
622 clib_warning (
"Source/Dest address type %d not supported!",
647 lcaf->
type = lh->type;
655 return sizeof (lh[0]);
676 u16 afi = clib_net_to_host_u16 (*(
u16 *) p);
694 #define INC(dst, exp) \ 697 if ((u16)~0 == _sum) \ 729 if (n1->
si != n2->
si)
746 size +=
sizeof (sd_hdr[0]);
787 size +=
sizeof (
u32);
792 u16 afi = clib_net_to_host_u16 (*((
u16 *) (p + size)));
814 offset +=
sizeof (
u16);
826 return sizeof (
u16) + size;
863 memset (g, 0,
sizeof (g[0]));
891 memset (dst, 0,
sizeof (*dst));
892 dst->ip.v4 = src->ip.v4;
926 a->ip6 = addr->ip.v6;
946 mask =
pow2_mask (preflen) << (32 - preflen);
947 mask = clib_host_to_net_u32 (mask);
960 memset (mask_6, 0,
sizeof (mask_6));
969 m = (
u32 *) & mask_6[0];
971 for (j = 0; j < i0; j++)
978 m[i0] = clib_host_to_net_u32 (
pow2_mask (i1) << (32 - i1));
981 for (j = 0; j <
sizeof (mask_6); j++)
983 ip6->
as_u8[j] &= mask_6[j];
1016 ip_prefix_t *
a = (ip_prefix_t *) pref;
1183 return (
sizeof (
u32)
1196 size +=
sizeof (
u16);
1197 memset (h, 0,
sizeof (h[0]));
1200 LCAF_LENGTH (h) = clib_host_to_net_u16 (lcaf_len);
1203 size +=
sizeof (h[0]);
1206 if ((
u16) ~ 0 == len)
1261 size +=
sizeof (
u16);
1262 memset (h, 0,
sizeof (h[0]));
1267 LCAF_LENGTH (h) = clib_host_to_net_u16 (lcaf_len);
1270 size +=
sizeof (h[0]);
1272 memset (&sd_hdr, 0,
sizeof (sd_hdr));
1276 size +=
sizeof (sd_hdr);
1279 if ((
u16) ~ 0 == len)
1284 if ((
u16) ~ 0 == len)
1301 memset (&lcaf, 0,
sizeof (lcaf));
1302 memset (&spi, 0,
sizeof (spi));
1312 size +=
sizeof (
u16);
1315 size +=
sizeof (lcaf);
1318 size +=
sizeof (spi);
1332 size +=
sizeof (
u16);
1333 memset (h, 0,
sizeof (h[0]));
1335 u16 lcaf_len =
sizeof (
u32)
1337 LCAF_LENGTH (h) = clib_host_to_net_u16 (lcaf_len);
1342 size +=
sizeof (h[0]);
1344 u32 *afip = (
u32 *) (p + size);
1346 size +=
sizeof (
u32);
1352 if ((
u16) ~ 0 == len)
1359 if ((
u16) ~ 0 == len)
1369 return sizeof (
u16);
1375 return sizeof (
u16);
1400 u16 lcaf_size =
sizeof (
u32) +
sizeof (
u16)
1417 size +=
sizeof (
u16);
1440 return sizeof (
u16) + 6;
1508 offset +=
sizeof (
u16);
1511 return sizeof (
u16) + 6;
1524 afi = clib_net_to_host_u16 (*((
u16 *) offset));
1556 return (len == (
u16) ~ 0) ? ~0 : len;
1588 return memcmp (a1, a2, 6);
1698 loc->
state = status;
1745 memset (sd, 0,
sizeof (*sd));
1767 clib_warning (
"Unsupported gid type %d while conversion!",
size_to_write_fct size_to_write_fcts[GID_ADDR_TYPES]
void vni_copy(void *dst, void *src)
static u16 gid_address_size_to_put_no_vni(gid_address_t *gid)
u8 * format_hmac_key_id(u8 *s, va_list *args)
sll srl srl sll sra u16x4 i
#define gid_address_type(_a)
cast_fct cast_fcts[GID_ADDR_TYPES]
u16 no_addr_parse(u8 *p, void *a)
addr_len_fct lcaf_body_length_fcts[LCAF_TYPES]
uword unformat_nsh_address(unformat_input_t *input, va_list *args)
static lisp_afi_e ip_version_to_iana_afi(u16 version)
static void ip_prefix_normalize_ip6(ip6_address_t *ip6, u8 preflen)
void sd_copy(void *dst, void *src)
void * ip_prefix_cast(gid_address_t *a)
struct _lcaf_spi_hdr_t lcaf_spi_hdr_t
static int mac_cmp(void *a1, void *a2)
u16 vni_parse(u8 *p, void *a)
u16 ip_prefix_write(u8 *p, void *gid)
u8 * format_nsh_address(u8 *s, va_list *args)
#define gid_address_sd_src_mac(_a)
#define ip_prefix_len(_a)
#define gid_address_sd(_a)
u8 * format_fid_nsh_address(u8 *s, va_list *args)
uword unformat_ip_address(unformat_input_t *input, va_list *args)
int no_addr_cmp(void *a1, void *a2)
#define gid_address_sd_src_ippref(_a)
u16 sd_parse(u8 *p, void *a)
#define gid_address_lcaf(_a)
static u16 fid_addr_write(u8 *p, fid_address_t *a)
#define gid_address_sd_dst_mac(_a)
int sd_cmp(void *a1, void *a2)
void ip_address_copy(ip_address_t *dst, const ip_address_t *src)
int nsh_cmp(void *a1, void *a2)
#define LCAF_SD_DST_ML(_h)
void ip_address_set(ip_address_t *dst, const void *src, u8 version)
static void ip_prefix_normalize_ip4(ip4_address_t *ip4, u8 preflen)
void * sd_cast(gid_address_t *a)
uword unformat_hmac_key_id(unformat_input_t *input, va_list *args)
#define ip_prefix_version(_a)
void gid_address_from_ip(gid_address_t *g, ip_address_t *ip)
enum fib_protocol_t_ fib_protocol_t
Protocol Type.
void lcaf_copy(void *dst, void *src)
#define LOC_REACHABLE(h_)
u16 nsh_write(u8 *p, void *a)
void nsh_copy(void *dst, void *src)
uword unformat_negative_mapping_action(unformat_input_t *input, va_list *args)
serdes_fct lcaf_write_fcts[LCAF_TYPES]
u32 locator_parse(void *b, locator_t *loc)
void * lcaf_cast(gid_address_t *a)
u16 gid_address_put(u8 *b, gid_address_t *gid)
u16 gid_address_size_to_put(gid_address_t *gid)
void no_addr_free(void *a)
u16 nsh_size_to_write(void *a)
u32 ip6_address_put(u8 *b, ip6_address_t *a)
u16 sd_size_to_write(void *a)
u8 * format_mac_address(u8 *s, va_list *args)
free_fct lcaf_free_fcts[LCAF_TYPES]
static uword pow2_mask(uword x)
void locator_copy(locator_t *dst, locator_t *src)
int vni_cmp(void *a1, void *a2)
u8 ip_version_to_max_plen(u8 ver)
u32 ip_address_parse(void *offset, u16 iana_afi, ip_address_t *dst)
#define gid_address_sd_src(_a)
u16 ip_version_to_size(u8 ver)
#define ip_addr_version(_a)
void *(* cast_fct)(gid_address_t *)
u16 try_parse_src_dst_lcaf(u8 *p, gid_address_t *a)
static u8 fid_address_length(fid_address_t *a)
void gid_to_dp_address(gid_address_t *g, dp_address_t *d)
u16 vni_size_to_write(void *a)
u16 nsh_parse(u8 *p, void *a)
void ip_address_copy_addr(void *dst, const ip_address_t *src)
#define gid_address_arp_ndp_ip(_a)
u8 * format_negative_mapping_action(u8 *s, va_list *args)
u8(* addr_len_fct)(void *)
#define gid_address_mac(_a)
u16(* serdes_fct)(u8 *, void *)
void * nsh_cast(gid_address_t *a)
struct _lcaf_src_dst_hdr_t lcaf_src_dst_hdr_t
u32 lcaf_hdr_parse(void *offset, lcaf_t *lcaf)
void gid_address_free(gid_address_t *a)
u16 ip_address_size(const ip_address_t *a)
#define gid_address_sd_dst_type(_a)
uword unformat_gid_address(unformat_input_t *input, va_list *args)
u8 * format_gid_address(u8 *s, va_list *args)
u16 mac_size_to_write(void *a)
serdes_fct lcaf_parse_fcts[LCAF_TYPES]
u32 ip_address_put(u8 *b, ip_address_t *a)
void ip_prefix_normalize(ip_prefix_t *a)
void ip_address_to_46(const ip_address_t *addr, ip46_address_t *a, fib_protocol_t *proto)
u16 ip4_address_size_to_put()
#define gid_address_ippref(_a)
u16 lcaf_size_to_write(void *a)
u16(* size_to_write_fct)(void *)
cmp_fct lcaf_cmp_fcts[LCAF_TYPES]
int gid_address_cmp(gid_address_t *a1, gid_address_t *a2)
void gid_address_ip_set(gid_address_t *dst, void *src, u8 version)
#define vec_free(V)
Free vector's memory (no header).
#define gid_address_ippref_len(_a)
#define clib_warning(format, args...)
u16 sd_write(u8 *p, void *a)
#define clib_memcpy(a, b, c)
u32 locator_cmp(locator_t *l1, locator_t *l2)
static u16 fid_addr_size_to_write(fid_address_t *a)
#define gid_address_nsh_si(_a)
addr_len_fct addr_len_fcts[GID_ADDR_TYPES]
u8 no_addr_length(void *a)
static int fid_addr_cmp(fid_address_t *a1, fid_address_t *a2)
#define gid_address_arp_ndp_bd(_a)
#define fid_addr_ippref(_a)
size_to_write_fct lcaf_size_to_write_fcts[LCAF_TYPES]
struct _gid_address_t gid_address_t
uword unformat_mac_address(unformat_input_t *input, va_list *args)
struct _lcaf_hdr_t lcaf_hdr_t
void(* copy_fct)(void *, void *)
#define fid_addr_type(_a)
#define gid_address_nsh(_a)
u8 * format_ip_address(u8 *s, va_list *args)
#define gid_address_sd_dst(_a)
#define ip46_address_set_ip4(ip46, ip)
u16 no_addr_write(u8 *p, void *a)
void * mac_cast(gid_address_t *a)
static u16 gid_address_put_no_vni(u8 *b, gid_address_t *gid)
static void clib_mem_free(void *p)
int ip_prefix_cmp(ip_prefix_t *p1, ip_prefix_t *p2)
void * gid_address_cast(gid_address_t *gid, gid_address_type_t type)
struct _locator_hdr locator_hdr_t
#define gid_address_sd_dst_ippref(_a)
uword unformat_ip_prefix(unformat_input_t *input, va_list *args)
static void * clib_mem_alloc(uword size)
u32 ip4_address_put(u8 *b, ip4_address_t *a)
u8 * format_ip_prefix(u8 *s, va_list *args)
u16 no_addr_size_to_write(void *a)
void * no_addr_cast(gid_address_t *a)
#define foreach_lcaf_type
template key/value backing page structure
#define gid_address_ip(_a)
#define gid_address_vni(_a)
u32 mac_parse(u8 *offset, u8 *a)
void locator_free(locator_t *l)
u16 ip_address_size_to_write(ip_address_t *a)
u8 gid_address_len(gid_address_t *a)
#define gid_address_nsh_spi(_a)
copy_fct lcaf_copy_fcts[LCAF_TYPES]
u8 ip_address_max_len(u8 version)
#define LOC_MPRIORITY(h_)
void gid_address_copy(gid_address_t *dst, gid_address_t *src)
void mac_copy(void *dst, void *src)
u16 vni_write(u8 *p, void *a)
struct clib_bihash_value offset
template key/value backing page structure
int(* cmp_fct)(void *, void *)
static u8 iana_afi_to_fid_addr_type(u16 type)
u16 ip_address_iana_afi(ip_address_t *a)
void no_addr_copy(void *dst, void *src)
#define gid_address_sd_src_type(_a)
u32 gid_address_parse(u8 *offset, gid_address_t *a)
#define gid_address_vni_mask(_a)
u16 mac_write(u8 *p, void *a)
copy_fct copy_fcts[GID_ADDR_TYPES]
u16 lcaf_write(u8 *p, void *a)
static u8 ip_iana_afi_to_version(lisp_afi_e afi)
u8 ip_prefix_length(void *a)
u8 * format_fid_address(u8 *s, va_list *args)
void build_src_dst(gid_address_t *sd, gid_address_t *src, gid_address_t *dst)
static u16 fid_addr_parse(u8 *p, fid_address_t *a)
#define LCAF_SD_SRC_ML(_h)
void ip_prefix_copy(void *dst, void *src)
u16 ip_prefix_size_to_write(void *pref)
u16 ip6_address_size_to_put()
#define ip_prefix_addr(_a)
int ip_address_cmp(const ip_address_t *ip1, const ip_address_t *ip2)
u32 lcaf_parse(void *offset, gid_address_t *addr)
serdes_fct write_fcts[GID_ADDR_TYPES]
uword unformat_fid_address(unformat_input_t *i, va_list *args)