fib: FIB Entry tracking
[vpp.git] / src / vnet / vxlan / vxlan.c
index 52d0812..c274cdb 100644 (file)
@@ -16,6 +16,7 @@
 #include <vnet/ip/format.h>
 #include <vnet/fib/fib_entry.h>
 #include <vnet/fib/fib_table.h>
+#include <vnet/fib/fib_entry_track.h>
 #include <vnet/mfib/mfib_table.h>
 #include <vnet/adj/adj_mcast.h>
 #include <vnet/adj/rewrite.h>
@@ -513,11 +514,11 @@ int vnet_vxlan_add_del_tunnel
           * re-stack accordingly
           */
          vtep_addr_ref (&t->src);
-         t->fib_entry_index = fib_table_entry_special_add
-           (t->encap_fib_index, &tun_dst_pfx, FIB_SOURCE_RR,
-            FIB_ENTRY_FLAG_NONE);
-         t->sibling_index = fib_entry_child_add
-           (t->fib_entry_index, FIB_NODE_TYPE_VXLAN_TUNNEL, dev_instance);
+         t->fib_entry_index = fib_entry_track (t->encap_fib_index,
+                                               &tun_dst_pfx,
+                                               FIB_NODE_TYPE_VXLAN_TUNNEL,
+                                               dev_instance,
+                                               &t->sibling_index);
          vxlan_tunnel_restack_dpo (t);
        }
       else
@@ -538,8 +539,9 @@ int vnet_vxlan_add_del_tunnel
                .frp_addr = zero_addr,
                .frp_sw_if_index = 0xffffffff,
                .frp_fib_index = ~0,
-               .frp_weight = 0,
+               .frp_weight = 1,
                .frp_flags = FIB_ROUTE_PATH_LOCAL,
+               .frp_mitf_flags = MFIB_ITF_FLAG_FORWARD,
              };
              const mfib_prefix_t mpfx = {
                .fp_proto = fp,
@@ -553,17 +555,14 @@ int vnet_vxlan_add_del_tunnel
               *  - the accepting interface is that from the API
               */
              mfib_table_entry_path_update (t->encap_fib_index,
-                                           &mpfx,
-                                           MFIB_SOURCE_VXLAN,
-                                           &path, MFIB_ITF_FLAG_FORWARD);
+                                           &mpfx, MFIB_SOURCE_VXLAN, &path);
 
              path.frp_sw_if_index = a->mcast_sw_if_index;
              path.frp_flags = FIB_ROUTE_PATH_FLAG_NONE;
+             path.frp_mitf_flags = MFIB_ITF_FLAG_ACCEPT;
              mfei = mfib_table_entry_path_update (t->encap_fib_index,
                                                   &mpfx,
-                                                  MFIB_SOURCE_VXLAN,
-                                                  &path,
-                                                  MFIB_ITF_FLAG_ACCEPT);
+                                                  MFIB_SOURCE_VXLAN, &path);
 
              /*
               * Create the mcast adjacency to send traffic to the group
@@ -621,8 +620,7 @@ int vnet_vxlan_add_del_tunnel
            vnet_flow_del (vnm, t->flow_index);
 
          vtep_addr_unref (&t->src);
-         fib_entry_child_remove (t->fib_entry_index, t->sibling_index);
-         fib_table_entry_delete_index (t->fib_entry_index, FIB_SOURCE_RR);
+         fib_entry_untrack (t->fib_entry_index, t->sibling_index);
        }
       else if (vtep_addr_unref (&t->dst) == 0)
        {