nat: fix dslite session port allocation 04/27204/2
authorVladimir Ratnikov <vratnikov@netgate.com>
Thu, 21 May 2020 17:52:51 +0000 (13:52 -0400)
committerOle Trøan <otroan@employees.org>
Fri, 22 May 2020 08:02:12 +0000 (08:02 +0000)
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

src/plugins/nat/lib/alloc.c

index ed4ba06..3196718 100644 (file)
@@ -102,9 +102,9 @@ nat_add_del_ip4_pool_addrs (nat_ip4_pool_t * pool,
 }
 
 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);
 }
 
@@ -136,7 +136,7 @@ nat_alloc_ip4_addr_and_port_cb_default (nat_ip4_pool_t * pool,
                     { \
                       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); \
@@ -171,7 +171,7 @@ nat_alloc_ip4_addr_and_port_cb_default (nat_ip4_pool_t * pool,
             { \
               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); \