30 .arc_name =
"ip6-unicast",
31 .node_name =
"nat66-in2out",
36 .arc_name =
"ip6-unicast",
37 .node_name =
"nat66-out2in",
50 u32 static_mapping_buckets = 1024;
51 uword static_mapping_memory_size = 64 << 20;
59 clib_bihash_init_24_8 (&nm->
sm_l,
"nat66-static-map-by-local",
60 static_mapping_buckets, static_mapping_memory_size);
61 clib_bihash_init_24_8 (&nm->
sm_e,
"nat66-static-map-by-external",
62 static_mapping_buckets, static_mapping_memory_size);
72 const char *feature_name;
77 if (i->sw_if_index == sw_if_index)
88 return VNET_API_ERROR_VALUE_EXIST;
90 pool_get (nm->interfaces, interface);
99 return VNET_API_ERROR_NO_SUCH_ENTRY;
101 pool_put (nm->interfaces, interface);
104 feature_name = is_inside ?
"nat66-in2out" :
"nat66-out2in";
135 sm_key.
addr.as_u64[0] = addr->as_u64[0];
136 sm_key.
addr.as_u64[1] = addr->as_u64[1];
144 if (!clib_bihash_search_24_8
145 (is_local ? &nm->
sm_l : &nm->
sm_e, &kv, &value))
162 sm_key.
addr.as_u64[0] = l_addr->as_u64[0];
163 sm_key.
addr.as_u64[1] = l_addr->as_u64[1];
170 if (!clib_bihash_search_24_8 (&nm->
sm_l, &kv, &value))
176 return VNET_API_ERROR_VALUE_EXIST;
182 sm->
l_addr.as_u64[0] = l_addr->as_u64[0];
183 sm->
l_addr.as_u64[1] = l_addr->as_u64[1];
184 sm->
e_addr.as_u64[0] = e_addr->as_u64[0];
185 sm->
e_addr.as_u64[1] = e_addr->as_u64[1];
193 if (clib_bihash_add_del_24_8 (&nm->
sm_l, &kv, 1))
195 sm_key.
addr.as_u64[0] = e_addr->as_u64[0];
196 sm_key.
addr.as_u64[1] = e_addr->as_u64[1];
201 if (clib_bihash_add_del_24_8 (&nm->
sm_e, &kv, 1))
202 nat_elog_warn (
"nat66-static-map-by-external add key failed");
210 return VNET_API_ERROR_NO_SUCH_ENTRY;
213 if (clib_bihash_add_del_24_8 (&nm->
sm_l, &kv, 0))
214 nat_elog_warn (
"nat66-static-map-by-local delete key failed");
215 sm_key.
addr.as_u64[0] = e_addr->as_u64[0];
216 sm_key.
addr.as_u64[1] = e_addr->as_u64[1];
221 if (clib_bihash_add_del_24_8 (&nm->
sm_e, &kv, 0))
222 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
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)
vlib_node_t * vlib_get_node_by_name(vlib_main_t *vm, u8 *name)
IPv6 shallow virtual reassembly.
#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)
sll srl srl sll sra u16x4 i
snat_interface_t * interfaces
Interface pool.
clib_bihash_24_8_t sm_l
Static mapping by local address lookup table.
vlib_main_t vlib_node_runtime_t * node
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.
fib_source_t nat_fib_src_hi
int ip6_sv_reass_enable_disable_with_refcnt(u32 sw_if_index, int is_enable)
#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)