Fix allocation of port per dslite session.
After each session is created per protocol,
when new one should be created with new port,
instead it's trying to create with the same port
and while(1) loop is executed forever and VPP does
not response
Type: fix
Signed-off-by: Vladimir Ratnikov <vratnikov@netgate.com>
Change-Id: Ic91b8b07253498ef9846ca60bcd4c4c76a5fac91
}
static_always_inline u16
}
static_always_inline u16
-nat_random_port (u32 random_seed, u16 min, u16 max)
+nat_random_port (u32 * random_seed, u16 min, u16 max)
- return min + random_u32 (&random_seed) /
+ return min + random_u32 (random_seed) /
(random_u32_max () / (max - min + 1) + 1);
}
(random_u32_max () / (max - min + 1) + 1);
}
{ \
portnum = (port_per_thread * \
nat_thread_index) + \
{ \
portnum = (port_per_thread * \
nat_thread_index) + \
- nat_random_port(pool->random_seed, 1, port_per_thread) + 1024; \
+ nat_random_port(&pool->random_seed, 1, port_per_thread) + 1024; \
if (clib_bitmap_get_no_check (a->busy_##n##_port_bitmap, portnum)) \
continue; \
clib_bitmap_set_no_check (a->busy_##n##_port_bitmap, portnum, 1); \
if (clib_bitmap_get_no_check (a->busy_##n##_port_bitmap, portnum)) \
continue; \
clib_bitmap_set_no_check (a->busy_##n##_port_bitmap, portnum, 1); \
{ \
portnum = (port_per_thread * \
nat_thread_index) + \
{ \
portnum = (port_per_thread * \
nat_thread_index) + \
- nat_random_port(pool->random_seed, 1, port_per_thread) + 1024; \
+ nat_random_port(&pool->random_seed, 1, port_per_thread) + 1024; \
if (clib_bitmap_get_no_check (a->busy_##n##_port_bitmap, portnum)) \
continue; \
clib_bitmap_set_no_check (a->busy_##n##_port_bitmap, portnum, 1); \
if (clib_bitmap_get_no_check (a->busy_##n##_port_bitmap, portnum)) \
continue; \
clib_bitmap_set_no_check (a->busy_##n##_port_bitmap, portnum, 1); \