Unlock LISP source FIB if only default left
authorFlorin Coras <[email protected]>
Mon, 28 Nov 2016 06:33:01 +0000 (22:33 -0800)
committerFlorin Coras <[email protected]>
Mon, 28 Nov 2016 06:44:36 +0000 (22:44 -0800)
If when removing a source route the LISP source FIB contains only the
default, remove the whole source FIB. Defaults are added when FIBs are
created so no forwarding entry depends on them.

Change-Id: I0dd5dc31d128d834ac3b92c962c4c68577aa7429
Signed-off-by: Florin Coras <[email protected]>
vnet/vnet/lisp-gpe/lisp_gpe_fwd_entry.c

index c7aafc6..cae2eb9 100644 (file)
@@ -150,12 +150,22 @@ ip_src_dst_fib_del_route (u32 src_fib_index,
 
   fib_table_entry_delete (src_fib_index, &src_fib_prefix, FIB_SOURCE_LISP);
 
-  if (0 == fib_table_get_num_entries (src_fib_index,
+  /* check if only default left */
+  if (1 == fib_table_get_num_entries (src_fib_index,
                                      src_fib_prefix.fp_proto,
                                      FIB_SOURCE_LISP))
     {
       /*
-       * there's nothing left, unlock the source FIB and the
+       * remove src FIB default route
+       */
+      fib_prefix_t prefix = {
+       .fp_proto = dst_fib_prefix.fp_proto,
+      };
+      fib_table_entry_special_remove (src_fib_index, &prefix,
+                                     FIB_SOURCE_LISP);
+
+      /*
+       * there's nothing left now, unlock the source FIB and the
        * destination route
        */
       fib_table_entry_special_remove (dst_fib_index,