#include <vnet/adj/adj.h>
#include <vnet/dpo/load_balance.h>
#include "lpm.h"
+#include <vppinfra/lock.h>
#define MAP_SKIP_IP6_LOOKUP 1
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);
*/
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)
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;
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;
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;
/*
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)
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,
while (clib_atomic_test_and_set (mm->counter_lock))
/* zzzz */ ;
}
+
static inline void
map_domain_counter_unlock (map_main_t *mm)
{