29 .arc_name =
"ip6-unicast",
30 .node_name =
"nat66-in2out",
34 .arc_name =
"ip6-unicast",
35 .node_name =
"nat66-out2in",
47 u32 static_mapping_buckets = 1024;
48 uword static_mapping_memory_size = 64 << 20;
56 clib_bihash_init_24_8 (&nm->
sm_l,
"nat66-static-map-by-local",
57 static_mapping_buckets, static_mapping_memory_size);
58 clib_bihash_init_24_8 (&nm->
sm_e,
"nat66-static-map-by-external",
59 static_mapping_buckets, static_mapping_memory_size);
69 const char *feature_name;
74 if (i->sw_if_index == sw_if_index)
85 return VNET_API_ERROR_VALUE_EXIST;
87 pool_get (nm->interfaces, interface);
96 return VNET_API_ERROR_NO_SUCH_ENTRY;
98 pool_put (nm->interfaces, interface);
101 feature_name = is_inside ?
"nat66-in2out" :
"nat66-out2in";
138 if (!clib_bihash_search_24_8
139 (is_local ? &nm->
sm_l : &nm->
sm_e, &kv, &value))
147 u32 vrf_id,
u8 is_add)
164 if (!clib_bihash_search_24_8 (&nm->
sm_l, &kv, &value))
170 return VNET_API_ERROR_VALUE_EXIST;
187 if (clib_bihash_add_del_24_8 (&nm->
sm_l, &kv, 1))
195 if (clib_bihash_add_del_24_8 (&nm->
sm_e, &kv, 1))
196 nat_elog_warn (
"nat66-static-map-by-external add key failed");
204 return VNET_API_ERROR_NO_SUCH_ENTRY;
207 if (clib_bihash_add_del_24_8 (&nm->
sm_l, &kv, 0))
208 nat_elog_warn (
"nat66-static-map-by-local delete key failed");
215 if (clib_bihash_add_del_24_8 (&nm->
sm_e, &kv, 0))
216 nat_elog_warn (
"nat66-static-map-by-external delete key failed");
void vlib_validate_combined_counter(vlib_combined_counter_main_t *cm, u32 index)
validate a combined counter
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
#define NAT_INTERFACE_FLAG_IS_OUTSIDE
#define nat_elog_warn(nat_elog_str)
clib_bihash_24_8_t sm_e
Static mapping by external address lookup table.
#define pool_get(P, E)
Allocate an object E from a pool P (unspecified alignment).
#define pool_foreach(VAR, POOL, BODY)
Iterate through pool.
vl_api_interface_index_t sw_if_index
A high priority source a plugin can use.
u32 fib_table_find(fib_protocol_t proto, u32 table_id)
Get the index of the FIB for a Table-ID.
void nat66_init(vlib_main_t *vm)
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
static void vlib_zero_combined_counter(vlib_combined_counter_main_t *cm, u32 index)
Clear a combined counter Clears the set of per-thread counters.
void nat66_static_mappings_walk(nat66_static_mapping_walk_fn_t fn, void *ctx)
#define pool_put(P, E)
Free an object E in pool P.
int(* nat66_static_mapping_walk_fn_t)(nat66_static_mapping_t *sm, void *ctx)
void fib_table_unlock(u32 fib_index, fib_protocol_t proto, fib_source_t source)
Take a reference counting lock on the table.
int nat66_interface_add_del(u32 sw_if_index, u8 is_inside, u8 is_add)
snat_interface_t * interfaces
Interface pool.
clib_bihash_24_8_t sm_l
Static mapping by local address lookup table.
vlib_node_t * vlib_get_node_by_name(vlib_main_t *vm, u8 *name)
VNET_FEATURE_INIT(nat66_in2out, static)
#define NAT_INTERFACE_FLAG_IS_INSIDE
u32 fib_table_find_or_create_and_lock(fib_protocol_t proto, u32 table_id, fib_source_t src)
Get the index of the FIB for a Table-ID.
#define VNET_FEATURES(...)
vlib_combined_counter_main_t session_counters
Session counters.
int(* nat66_interface_walk_fn_t)(snat_interface_t *i, void *ctx)
void nat66_interfaces_walk(nat66_interface_walk_fn_t fn, void *ctx)
char * name
The counter collection's name.
int nat66_static_mapping_add_del(ip6_address_t *l_addr, ip6_address_t *e_addr, u32 vrf_id, u8 is_add)
nat66_static_mapping_t * sm
Static mapping pool.
u32 in2out_node_index
node index
NAT66 global declarations.
nat66_static_mapping_t * nat66_static_mapping_get(ip6_address_t *addr, u32 fib_index, u8 is_local)
int vnet_feature_enable_disable(const char *arc_name, const char *node_name, u32 sw_if_index, int enable_disable, void *feature_config, u32 n_feature_config_bytes)