SANT: fib_table unlock (VPP-918) 22/7722/2
authorMatus Fabian <matfabia@cisco.com>
Mon, 24 Jul 2017 06:41:03 +0000 (23:41 -0700)
committerNeale Ranns <nranns@cisco.com>
Tue, 25 Jul 2017 09:11:06 +0000 (09:11 +0000)
Change-Id: Ie0ad3671e3f4b55cd0f14601b6fed9ee2a1cbec0
Signed-off-by: Matus Fabian <matfabia@cisco.com>
src/plugins/snat/nat64.c
src/plugins/snat/snat.c

index d7772a7..47809b0 100644 (file)
@@ -118,6 +118,9 @@ nat64_add_del_pool_addr (ip4_address_t * addr, u32 vrf_id, u8 is_add)
       if (!a)
        return VNET_API_ERROR_NO_SUCH_ENTRY;
 
+      if (a->fib_index)
+       fib_table_unlock (a->fib_index, FIB_PROTOCOL_IP6);
+
 #define _(N, id, n, s) \
       clib_bitmap_free (a->busy_##n##_port_bitmap);
       foreach_snat_protocol
index 1820aef..f927915 100644 (file)
@@ -165,7 +165,11 @@ void snat_add_address (snat_main_t *sm, ip4_address_t *addr, u32 vrf_id)
 
   vec_add2 (sm->addresses, ap, 1);
   ap->addr = *addr;
-  ap->fib_index = ip4_fib_index_from_table_id(vrf_id);
+  if (vrf_id != ~0)
+    ap->fib_index =
+      fib_table_find_or_create_and_lock (FIB_PROTOCOL_IP4, vrf_id);
+  else
+    ap->fib_index = ~0;
 #define _(N, i, n, s) \
   clib_bitmap_alloc (ap->busy_##n##_port_bitmap, 65535);
   foreach_snat_protocol
@@ -631,6 +635,9 @@ int snat_del_address (snat_main_t *sm, ip4_address_t addr, u8 delete_sm)
         }
     }
 
+  if (a->fib_index != ~0)
+    fib_table_unlock(a->fib_index, FIB_PROTOCOL_IP4);
+
   /* Delete sessions using address */
   if (a->busy_tcp_ports || a->busy_udp_ports || a->busy_icmp_ports)
     {