Attached hosts
[vpp.git] / src / vnet / fib / fib_entry_src.c
index 5710915..aa1d5a2 100644 (file)
@@ -266,6 +266,7 @@ fib_entry_src_collect_forwarding (fib_node_index_t pl_index,
 {
     fib_entry_src_collect_forwarding_ctx_t *ctx;
     fib_path_ext_t *path_ext;
+    int have_path_ext;
 
     ctx = arg;
 
@@ -285,14 +286,17 @@ fib_entry_src_collect_forwarding (fib_node_index_t pl_index,
     /*
      * get the matching path-extension for the path being visited.
      */
+    have_path_ext = 0;
     vec_foreach(path_ext, ctx->esrc->fes_path_exts)
     {
         if (path_ext->fpe_path_index == path_index)
+        {
+            have_path_ext = 1;
             break;
+        }
     }
     
-    if (NULL != path_ext &&
-        path_ext->fpe_path_index == path_index &&
+    if (have_path_ext &&
         fib_entry_src_valid_out_label(path_ext->fpe_label_stack[0]))
     {
         /*
@@ -442,8 +446,9 @@ fib_entry_src_mk_lb (fib_entry_t *fib_entry,
      */
     index_t ui = fib_path_list_get_urpf(esrc->fes_pl);
 
-    if (fib_entry_is_sourced(fib_entry_get_index(fib_entry),
-                            FIB_SOURCE_URPF_EXEMPT) &&
+    if ((fib_entry_is_sourced(fib_entry_get_index(fib_entry),
+                             FIB_SOURCE_URPF_EXEMPT) ||
+        (esrc->fes_entry_flags & FIB_ENTRY_FLAG_LOOSE_URPF_EXEMPT))&&
        (0 == fib_urpf_check_size(ui)))
     {
        /*
@@ -941,6 +946,10 @@ fib_path_is_attached (const fib_route_path_t *rpath)
     {
        return (!0);
     }
+    else if (rpath->frp_flags & FIB_ROUTE_PATH_ATTACHED)
+    {
+        return (!0);
+    }
     return (0);
 }