fib: make deag entries urpf extempt 60/9860/4
authorFlorin Coras <fcoras@cisco.com>
Sat, 16 Dec 2017 16:31:06 +0000 (08:31 -0800)
committerNeale Ranns <nranns@cisco.com>
Thu, 21 Dec 2017 20:53:31 +0000 (20:53 +0000)
Change-Id: Ie8f6bb4fcd3e4fa269e86a77d2f21c87f372b783
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vnet/fib/fib_entry_src.c
src/vnet/fib/fib_path.c
src/vnet/fib/fib_types.c
src/vnet/fib/fib_types.h
src/vnet/ip/ip_api.c

index 1d73af3..66f5987 100644 (file)
@@ -1077,6 +1077,10 @@ fib_entry_flags_update (const fib_entry_t *fib_entry,
        {
            esrc->fes_entry_flags &= ~FIB_ENTRY_FLAG_ATTACHED;
        }
+       if (rpath->frp_flags & FIB_ROUTE_PATH_DEAG)
+       {
+           esrc->fes_entry_flags |= FIB_ENTRY_FLAG_LOOSE_URPF_EXEMPT;
+       }
     }
     if (fib_route_attached_cross_table(fib_entry, rpath))
     {
index f7fed26..fddb8ec 100644 (file)
@@ -1294,6 +1294,11 @@ fib_path_create (fib_node_index_t pl_index,
         path->fp_type = FIB_PATH_TYPE_BIER_TABLE;
         path->bier_table.fp_bier_tbl = rpath->frp_bier_tbl;
     }
+    else if (rpath->frp_flags & FIB_ROUTE_PATH_DEAG)
+    {
+       path->fp_type = FIB_PATH_TYPE_DEAG;
+       path->deag.fp_tbl_id = rpath->frp_fib_index;
+    }
     else if (~0 != rpath->frp_sw_if_index)
     {
         if (ip46_address_is_zero(&rpath->frp_addr))
index 48f2bd1..f38c815 100644 (file)
@@ -416,6 +416,7 @@ unformat_fib_route_path (unformat_input_t * input, va_list * args)
         {
             rpath->frp_proto = *payload_proto;
             rpath->frp_sw_if_index = ~0;
+            rpath->frp_flags |= FIB_ROUTE_PATH_DEAG;
         }
         else if (unformat (input, "resolve-via-host"))
         {
index 94c9422..5742c69 100644 (file)
@@ -340,6 +340,10 @@ typedef enum fib_route_path_flags_t_
      * A path that resolves via a BIER impostion object
      */
     FIB_ROUTE_PATH_BIER_IMP = (1 << 12),
+    /**
+     * A path that resolves via another table
+     */
+    FIB_ROUTE_PATH_DEAG = (1 << 13),
 } fib_route_path_flags_t;
 
 /**
index fefaccf..db88d7b 100644 (file)
@@ -911,6 +911,11 @@ add_del_route_t_handler (u8 is_multipath,
       path_flags |= FIB_ROUTE_PATH_UDP_ENCAP;
       path.frp_udp_encap_id = next_hop_id;
     }
+  if (path.frp_sw_if_index == ~0 && ip46_address_is_zero (&path.frp_addr)
+      && path.frp_fib_index != ~0)
+    {
+      path_flags |= FIB_ROUTE_PATH_DEAG;
+    }
 
   path.frp_flags = path_flags;