ipip: Multi-point interface
[vpp.git] / src / vnet / fib / fib_path.c
index 1eb195d..a640480 100644 (file)
@@ -1488,7 +1488,7 @@ fib_path_copy (fib_node_index_t path_index,
     orig_path = fib_path_get(path_index);
     ASSERT(NULL != orig_path);
 
-    memcpy(path, orig_path, sizeof(*path));
+    clib_memcpy(path, orig_path, sizeof(*path));
 
     FIB_PATH_DBG(path, "create-copy:%d", path_index);
 
@@ -1590,8 +1590,8 @@ fib_path_cmp_i (const fib_path_t *path1,
                    path2->attached.fp_interface);
            break;
        case FIB_PATH_TYPE_RECURSIVE:
-           res = ip46_address_cmp(&path1->recursive.fp_nh,
-                                  &path2->recursive.fp_nh);
+           res = ip46_address_cmp(&path1->recursive.fp_nh.fp_ip,
+                                  &path2->recursive.fp_nh.fp_ip);
  
            if (0 == res)
            {
@@ -1870,7 +1870,8 @@ fib_path_recursive_loop_detect (fib_node_index_t path_index,
     }
     case FIB_PATH_TYPE_ATTACHED_NEXT_HOP:
     case FIB_PATH_TYPE_ATTACHED:
-       if (adj_recursive_loop_detect(path->fp_dpo.dpoi_index,
+       if (dpo_is_adj(&path->fp_dpo) &&
+            adj_recursive_loop_detect(path->fp_dpo.dpoi_index,
                                       entry_indicies))
        {
            FIB_PATH_DBG(path, "recursive loop formed");