lisp: switch to new timer wheel code
[vpp.git] / src / vnet / lisp-cp / lisp_types.h
index 672835b..e08ba15 100644 (file)
@@ -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
@@ -90,6 +41,8 @@ typedef enum
   GID_ADDR_MAC,
   GID_ADDR_SRC_DST,
   GID_ADDR_NSH,
+  GID_ADDR_ARP,
+  GID_ADDR_NDP,
   GID_ADDR_NO_ADDRESS,
   GID_ADDR_TYPES
 } gid_address_type_t;
@@ -101,6 +54,7 @@ typedef enum
   LCAF_AFI_LIST_TYPE,
   LCAF_INSTANCE_ID,
   LCAF_SOURCE_DEST = 12,
+  LCAF_NSH = 17,
   LCAF_TYPES
 } lcaf_type_t;
 
@@ -126,6 +80,8 @@ typedef struct
 typedef fid_address_t dp_address_t;
 
 #define fid_addr_ippref(_a) (_a)->ippref
+#define fid_addr_prefix_length(_a) ip_prefix_len(&fid_addr_ippref(_a))
+#define fid_addr_ip_version(_a) ip_prefix_version(&fid_addr_ippref(_a))
 #define fid_addr_mac(_a) (_a)->mac
 #define fid_addr_nsh(_a) (_a)->nsh
 #define fid_addr_type(_a) (_a)->type
@@ -163,12 +119,28 @@ typedef struct
   u8 si;
 } nsh_t;
 
+#define nsh_spi(_a) (_a)->spi
+#define nsh_si(_a) (_a)->si
+
+typedef struct
+{
+  ip_address_t addr;
+  u32 bd;
+} lcaf_arp_ndp_t;
+
+#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
 {
   /* the union needs to be at the beginning! */
   union
   {
     source_dest_t sd;
+    lcaf_arp_ndp_t arp_ndp;
     vni_t uni;
   };
   u8 type;
@@ -187,6 +159,7 @@ typedef struct _gid_address_t
     lcaf_t lcaf;
     u8 mac[6];
     source_dest_t sd;
+    lcaf_arp_ndp_t arp_ndp;
     nsh_t nsh;
   };
   u8 type;
@@ -194,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);
@@ -210,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
@@ -244,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)
@@ -255,9 +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_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)                          \
@@ -333,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
@@ -359,6 +337,7 @@ void
 build_src_dst (gid_address_t * sd, gid_address_t * src, gid_address_t * dst);
 
 void gid_address_from_ip (gid_address_t * g, ip_address_t * ip);
+void gid_to_dp_address (gid_address_t * g, dp_address_t * d);
 
 #endif /* VNET_LISP_GPE_LISP_TYPES_H_ */