nat64_main_t nat64_main;
-/* *INDENT-OFF* */
/* Hook up input features */
VNET_FEATURE_INIT (nat64_in2out, static) = {
.arc_name = "ip6-unicast",
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
};
-/* *INDENT-ON* */
#define nat_elog_str(_str) \
do \
clib_memset (&daddr, 0, sizeof (daddr));
daddr.ip4.as_u32 = ip->dst_address.as_u32;
- /* *INDENT-OFF* */
vec_foreach (db, nm->db)
{
bibe = nat64_db_bib_entry_find (db, &daddr, 0, ip->protocol, 0, 0);
if (bibe)
return (u32) (db - nm->db);
}
- /* *INDENT-ON* */
return vlib_get_thread_index ();
}
for (i = 0; i < nm->num_workers; i++)
bitmap = clib_bitmap_set (bitmap, i, 1);
- /* *INDENT-OFF* */
clib_bitmap_foreach (i, bitmap)
{
vec_add1(nm->workers, i);
}
- /* *INDENT-ON* */
clib_bitmap_free (bitmap);
vec_validate (nm->db, tm->n_vlib_mains - 1);
- /* *INDENT-OFF* */
vec_foreach (db, nm->db)
{
if (nat64_db_init (db, c, nat64_free_out_addr_and_port))
rv = 1;
}
}
- /* *INDENT-ON* */
return rv;
}
nat64_db_t *db;
int rv = 0;
- /* *INDENT-OFF* */
vec_foreach (db, nm->db)
{
if (nat64_db_free (db))
rv = 1;
}
}
- /* *INDENT-ON* */
vec_free (nm->db);
if (a->fib_index != ~0)
fib_table_unlock (a->fib_index, FIB_PROTOCOL_IP6, nm->fib_src_hi);
/* Delete sessions using address */
- /* *INDENT-OFF* */
vec_foreach (db, nm->db)
{
nat64_db_free_out_addr (thread_index, db, &a->addr);
vlib_set_simple_counter (&nm->total_sessions, db - nm->db, 0,
db->st.st_entries_num);
}
- /* *INDENT-ON* */
vec_del1 (nm->addr_pool, i);
}
/* Add/del external address to FIB */
- /* *INDENT-OFF* */
pool_foreach (interface, nm->interfaces)
{
if (nat64_interface_is_inside(interface))
nat64_add_del_addr_to_fib (addr, 32, interface->sw_if_index, is_add);
break;
}
- /* *INDENT-ON* */
return 0;
}
nat64_main_t *nm = &nat64_main;
nat64_address_t *a = 0;
- /* *INDENT-OFF* */
vec_foreach (a, nm->addr_pool)
{
if (fn (a, ctx))
break;
};
- /* *INDENT-ON* */
}
int
// TODO: is enabled ? we can't signal if it is not
/* Check if interface already exists */
- /* *INDENT-OFF* */
pool_foreach (i, nm->interfaces)
{
if (i->sw_if_index == sw_if_index)
break;
}
}
- /* *INDENT-ON* */
if (is_add)
{
if (!is_inside)
{
- /* *INDENT-OFF* */
vec_foreach (ap, nm->addr_pool)
nat64_add_del_addr_to_fib (&ap->addr, 32, sw_if_index, is_add);
- /* *INDENT-ON* */
}
if (nm->num_workers > 1)
nat64_main_t *nm = &nat64_main;
nat64_interface_t *i = 0;
- /* *INDENT-OFF* */
pool_foreach (i, nm->interfaces)
{
if (fn (i, ctx))
break;
}
- /* *INDENT-ON* */
}
// TODO: plugin independent
nat64_db_bib_entry_t *bibe;
ip46_address_t addr;
- /* *INDENT-OFF* */
pool_foreach (static_bib, nm->static_bibs)
{
if ((static_bib->thread_index != thread_index) || (static_bib->done))
static_bib->done = 1;
}
- /* *INDENT-ON* */
return 0;
}
static vlib_node_registration_t nat64_static_bib_worker_node;
-/* *INDENT-OFF* */
VLIB_REGISTER_NODE (nat64_static_bib_worker_node, static) = {
.function = nat64_static_bib_worker_fn,
.type = VLIB_NODE_TYPE_INPUT,
.state = VLIB_NODE_STATE_INTERRUPT,
.name = "nat64-static-bib-worker",
};
-/* *INDENT-ON* */
int
nat64_add_del_static_bib_entry (ip6_address_t * in_addr,
if (nm->num_workers)
{
- /* *INDENT-OFF* */
pool_foreach (static_bib, nm->static_bibs)
{
if (static_bib->done)
}
vec_foreach (index, to_be_free)
pool_put_index (nm->static_bibs, index[0]);
- /* *INDENT-ON* */
vec_free (to_be_free);
pool_get (nm->static_bibs, static_bib);
static_bib->in_addr.as_u64[0] = in_addr->as_u64[0];
nat64_main_t *nm = &nat64_main;
nat64_prefix_t *p = 0;
- /* *INDENT-OFF* */
vec_foreach (p, nm->pref64)
{
if (fn (p, ctx))
break;
};
- /* *INDENT-ON* */
}
void
nat64_main_t *nm = &nat64_main;
nat64_prefix_t *p, *gp = 0, *prefix = 0;
- /* *INDENT-OFF* */
vec_foreach (p, nm->pref64)
{
if (p->fib_index == fib_index)
if (p->fib_index == 0)
gp = p;
};
- /* *INDENT-ON* */
if (!prefix)
prefix = gp;
nat64_prefix_t *p, *gp = 0;
u8 plen = 0;
- /* *INDENT-OFF* */
vec_foreach (p, nm->pref64)
{
if (p->fib_index == fib_index)
if (p->vrf_id == 0)
gp = p;
};
- /* *INDENT-ON* */
if (!plen)
{
return 0;
}
-/* *INDENT-OFF* */
VLIB_REGISTER_NODE (nat64_expire_worker_walk_node, static) = {
.function = nat64_expire_worker_walk_fn,
.type = VLIB_NODE_TYPE_INPUT,
.state = VLIB_NODE_STATE_INTERRUPT,
.name = "nat64-expire-worker-walk",
};
-/* *INDENT-ON* */
/**
* @brief Centralized process to drive per worker expire walk.
}
nm->enabled = 0;
- /* *INDENT-OFF* */
pool_foreach (i, nm->interfaces)
{
vec_add1 (interfaces, *i);
}
- /* *INDENT-ON* */
vec_foreach (i, interfaces)
{
rv = nat64_interface_add_del (i->sw_if_index, i->flags, 0);