X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Flisp-cp%2Flisp_types.h;h=e08ba15dfd36a4d48f54e2b7a6c042919578d4da;hb=67ec589d231cd27261ccf2265ee8627cfce0fa00;hp=f5d2a676ff7facc6f0aa806623e3944a0c899782;hpb=d5a65db98d66c66b03b057ac568be05f2456f73c;p=vpp.git diff --git a/src/vnet/lisp-cp/lisp_types.h b/src/vnet/lisp-cp/lisp_types.h index f5d2a676ff7..e08ba15dfd3 100644 --- a/src/vnet/lisp-cp/lisp_types.h +++ b/src/vnet/lisp-cp/lisp_types.h @@ -32,55 +32,6 @@ typedef enum uword unformat_hmac_key_id (unformat_input_t * input, va_list * args); u8 *format_hmac_key_id (u8 * s, va_list * args); -typedef enum -{ - IP4, - IP6 -} ip_address_type_t; - -/* *INDENT-OFF* */ -typedef CLIB_PACKED(struct ip_address -{ - union - { - ip4_address_t v4; - ip6_address_t v6; - } ip; - u8 version; -}) ip_address_t; -/* *INDENT-ON* */ - -#define ip_addr_addr(_a) (_a)->ip -#define ip_addr_v4(_a) (_a)->ip.v4 -#define ip_addr_v6(_a) (_a)->ip.v6 -#define ip_addr_version(_a) (_a)->version - -int ip_address_cmp (const ip_address_t * ip1, const ip_address_t * ip2); -void ip_address_copy (ip_address_t * dst, const ip_address_t * src); -void ip_address_copy_addr (void *dst, const ip_address_t * src); -void ip_address_set (ip_address_t * dst, const void *src, u8 version); - -/* *INDENT-OFF* */ -typedef CLIB_PACKED(struct ip_prefix -{ - ip_address_t addr; - u8 len; -}) ip_prefix_t; -/* *INDENT-ON* */ - -#define ip_prefix_addr(_a) (_a)->addr -#define ip_prefix_version(_a) ip_addr_version(&ip_prefix_addr(_a)) -#define ip_prefix_len(_a) (_a)->len -#define ip_prefix_v4(_a) ip_addr_v4(&ip_prefix_addr(_a)) -#define ip_prefix_v6(_a) ip_addr_v6(&ip_prefix_addr(_a)) - -void ip_prefix_normalize (ip_prefix_t * a); - -extern void ip_address_to_fib_prefix (const ip_address_t * addr, - fib_prefix_t * prefix); -extern void ip_prefix_to_fib_prefix (const ip_prefix_t * ipp, - fib_prefix_t * fibp); - typedef enum { /* NOTE: ip addresses are left out on purpose. Use max masked ip-prefixes @@ -91,6 +42,7 @@ typedef enum GID_ADDR_SRC_DST, GID_ADDR_NSH, GID_ADDR_ARP, + GID_ADDR_NDP, GID_ADDR_NO_ADDRESS, GID_ADDR_TYPES } gid_address_type_t; @@ -102,6 +54,7 @@ typedef enum LCAF_AFI_LIST_TYPE, LCAF_INSTANCE_ID, LCAF_SOURCE_DEST = 12, + LCAF_NSH = 17, LCAF_TYPES } lcaf_type_t; @@ -166,14 +119,20 @@ typedef struct u8 si; } nsh_t; +#define nsh_spi(_a) (_a)->spi +#define nsh_si(_a) (_a)->si + typedef struct { - ip4_address_t addr; + ip_address_t addr; u32 bd; -} lcaf_arp_t; +} lcaf_arp_ndp_t; -#define lcaf_arp_ip4(_a) (_a)->addr -#define lcaf_arp_bd(_a) (_a)->bd +#define lcaf_arp_ndp_ip(_a) (_a)->addr +#define lcaf_arp_ndp_ip_ver(_a) ip_addr_version(&lcaf_arp_ndp_ip(_a)) +#define lcaf_arp_ndp_ip4(_a) ip_addr_v4(&lcaf_arp_ndp_ip(_a)) +#define lcaf_arp_ndp_ip6(_a) ip_addr_v6(&lcaf_arp_ndp_ip(_a)) +#define lcaf_arp_ndp_bd(_a) (_a)->bd typedef struct { @@ -181,7 +140,7 @@ typedef struct union { source_dest_t sd; - lcaf_arp_t arp; + lcaf_arp_ndp_t arp_ndp; vni_t uni; }; u8 type; @@ -200,7 +159,7 @@ typedef struct _gid_address_t lcaf_t lcaf; u8 mac[6]; source_dest_t sd; - lcaf_arp_t arp; + lcaf_arp_ndp_t arp_ndp; nsh_t nsh; }; u8 type; @@ -208,13 +167,6 @@ typedef struct _gid_address_t u8 vni_mask; } gid_address_t; -u8 *format_ip_address (u8 * s, va_list * args); -uword unformat_ip_address (unformat_input_t * input, va_list * args); -u8 *format_ip_prefix (u8 * s, va_list * args); -uword unformat_ip_prefix (unformat_input_t * input, va_list * args); -u8 *format_mac_address (u8 * s, va_list * args); -uword unformat_mac_address (unformat_input_t * input, va_list * args); - u16 ip4_address_size_to_put (); u16 ip6_address_size_to_put (); u32 ip4_address_put (u8 * b, ip4_address_t * a); @@ -224,8 +176,6 @@ u16 ip_address_size_to_write (ip_address_t * a); u16 ip_address_iana_afi (ip_address_t * a); u8 ip_address_max_len (u8 ver); u32 ip_address_put (u8 * b, ip_address_t * a); -void ip_address_to_46 (const ip_address_t * addr, - ip46_address_t * a, fib_protocol_t * proto); /* LISP AFI codes */ typedef enum @@ -258,6 +208,8 @@ void gid_address_ip_set (gid_address_t * dst, void *src, u8 version); #define gid_address_lcaf(_a) (_a)->lcaf #define gid_address_mac(_a) (_a)->mac #define gid_address_nsh(_a) (_a)->nsh +#define gid_address_nsh_spi(_a) nsh_spi(&gid_address_nsh(_a)) +#define gid_address_nsh_si(_a) nsh_si(&gid_address_nsh(_a)) #define gid_address_vni(_a) (_a)->vni #define gid_address_vni_mask(_a) (_a)->vni_mask #define gid_address_sd_dst_ippref(_a) sd_dst_ippref(&(_a)->sd) @@ -269,12 +221,17 @@ void gid_address_ip_set (gid_address_t * dst, void *src, u8 version); #define gid_address_sd_dst(_a) sd_dst(&gid_address_sd(_a)) #define gid_address_sd_src_type(_a) sd_src_type(&gid_address_sd(_a)) #define gid_address_sd_dst_type(_a) sd_dst_type(&gid_address_sd(_a)) -#define gid_address_arp(_a) (_a)->arp -#define gid_address_arp_ip4(_a) lcaf_arp_ip4(&gid_address_arp (_a)) -#define gid_address_arp_bd(_a) lcaf_arp_bd(&gid_address_arp (_a)) +#define gid_address_arp_ndp(_a) (_a)->arp_ndp +#define gid_address_arp_ndp_bd(_a) lcaf_arp_ndp_bd(&gid_address_arp_ndp(_a)) +#define gid_address_arp_ndp_ip(_a) lcaf_arp_ndp_ip(&gid_address_arp_ndp(_a)) +#define gid_address_arp_ip4(_a) lcaf_arp_ndp_ip4(&gid_address_arp_ndp(_a)) +#define gid_address_ndp_ip6(_a) lcaf_arp_ndp_ip6(&gid_address_arp_ndp(_a)) +#define gid_address_ndp_bd gid_address_arp_ndp_bd +#define gid_address_arp_bd gid_address_arp_ndp_bd /* 'sub'address functions */ #define foreach_gid_address_type_fcns \ + _(no_addr) \ _(ip_prefix) \ _(lcaf) \ _(mac) \ @@ -350,12 +307,16 @@ typedef struct /* valid only for remote mappings */ u8 is_static:1; u8 pitr_set:1; - u8 rsvd:4; - + u8 nsh_set:1; + u8 almost_expired:1; + u8 delete_after_expiration:1; + u8 rsvd:1; u8 *key; lisp_key_type_t key_id; u8 timer_set; + u32 timer_handle; + counter_t packets; } mapping_t; uword