lb: remove api boilerplate
[vpp.git] / src / plugins / map / map.h
index a692b64..a4aced5 100644 (file)
@@ -22,6 +22,7 @@
 #include <vnet/adj/adj.h>
 #include <vnet/dpo/load_balance.h>
 #include "lpm.h"
+#include <vppinfra/lock.h>
 
 #define MAP_SKIP_IP6_LOOKUP 1
 
@@ -36,7 +37,7 @@ int map_create_domain (ip4_address_t * ip4_prefix, u8 ip4_prefix_len,
                       ip6_address_t * ip6_prefix, u8 ip6_prefix_len,
                       ip6_address_t * ip6_src, u8 ip6_src_len,
                       u8 ea_bits_len, u8 psid_offset, u8 psid_length,
-                      u32 * map_domain_index, u16 mtu, u8 flags, char *tag);
+                      u32 * map_domain_index, u16 mtu, u8 flags, u8 * tag);
 int map_delete_domain (u32 map_domain_index);
 int map_add_del_psid (u32 map_domain_index, u16 psid, ip6_address_t * tep,
                      bool is_add);
@@ -137,7 +138,7 @@ STATIC_ASSERT ((sizeof (map_domain_t) <= CLIB_CACHE_LINE_BYTES),
  */
 typedef struct
 {
-  char *tag;                   /* Probably a user-assigned domain name. */
+  u8 *tag;                     /* Probably a user-assigned domain name. */
 } map_domain_extra_t;
 
 #define MAP_REASS_INDEX_NONE ((u16)0xffff)
@@ -305,7 +306,7 @@ typedef struct {
   u16 ip4_reass_allocated;
   u16 *ip4_reass_hash_table;
   u16 ip4_reass_fifo_last;
-  volatile u32 *ip4_reass_lock;
+  clib_spinlock_t ip4_reass_lock;
 
   /* Counters */
   u32 ip4_reass_buffered_counter;
@@ -328,7 +329,7 @@ typedef struct {
   u16 ip6_reass_allocated;
   u16 *ip6_reass_hash_table;
   u16 ip6_reass_fifo_last;
-  volatile u32 *ip6_reass_lock;
+  clib_spinlock_t ip6_reass_lock;
 
   /* Counters */
   u32 ip6_reass_buffered_counter;
@@ -341,6 +342,8 @@ typedef struct {
   lpm_t *ip4_prefix_tbl;
   lpm_t *ip6_prefix_tbl;
   lpm_t *ip6_src_prefix_tbl;
+
+  uword ip4_sv_reass_custom_next_index;
 } map_main_t;
 
 /*
@@ -501,8 +504,8 @@ map_ip4_reass_get(u32 src, u32 dst, u16 fragment_id,
 void
 map_ip4_reass_free(map_ip4_reass_t *r, u32 **pi_to_drop);
 
-#define map_ip4_reass_lock() while (clib_atomic_test_and_set (map_main.ip4_reass_lock)) {}
-#define map_ip4_reass_unlock() do {CLIB_MEMORY_BARRIER(); *map_main.ip4_reass_lock = 0;} while(0)
+#define map_ip4_reass_lock() clib_spinlock_lock (&map_main.ip4_reass_lock)
+#define map_ip4_reass_unlock() clib_spinlock_unlock (&map_main.ip4_reass_lock)
 
 static_always_inline void
 map_ip4_reass_get_fragments(map_ip4_reass_t *r, u32 **pi)
@@ -526,8 +529,8 @@ map_ip6_reass_get(ip6_address_t *src, ip6_address_t *dst, u32 fragment_id,
 void
 map_ip6_reass_free(map_ip6_reass_t *r, u32 **pi_to_drop);
 
-#define map_ip6_reass_lock() while (clib_atomic_test_and_set (map_main.ip6_reass_lock)) {}
-#define map_ip6_reass_unlock() do {CLIB_MEMORY_BARRIER(); *map_main.ip6_reass_lock = 0;} while(0)
+#define map_ip6_reass_lock() clib_spinlock_lock (&map_main.ip6_reass_lock)
+#define map_ip6_reass_unlock() clib_spinlock_unlock (&map_main.ip6_reass_lock)
 
 int
 map_ip6_reass_add_fragment(map_ip6_reass_t *r, u32 pi,
@@ -588,6 +591,7 @@ map_domain_counter_lock (map_main_t *mm)
     while (clib_atomic_test_and_set (mm->counter_lock))
       /* zzzz */ ;
 }
+
 static inline void
 map_domain_counter_unlock (map_main_t *mm)
 {