ADJ: more thorough link up check 97/18297/4
authorNeale Ranns <nranns@cisco.com>
Thu, 14 Mar 2019 16:21:02 +0000 (09:21 -0700)
committerDamjan Marion <dmarion@me.com>
Fri, 22 Mar 2019 17:30:58 +0000 (17:30 +0000)
Change-Id: I04dbfb914706b25fcc3bd6ee0d19cfdc810234ae
Signed-off-by: Neale Ranns <nranns@cisco.com>
src/plugins/unittest/bier_test.c
src/vnet/fib/fib_path.c
src/vnet/interface_funcs.h

index d15ee59..087da6f 100644 (file)
@@ -127,6 +127,9 @@ bier_test_mk_intf (u32 ninterfaces)
                                             &tm->hw_if_indicies[i],
                                             /* flag change */ 0);
 
+        error = vnet_hw_interface_set_flags(vnet_get_main(),
+                                            tm->hw_if_indicies[i],
+                                            VNET_HW_INTERFACE_FLAG_LINK_UP);
         BIER_TEST((NULL == error), "ADD interface %d", i);
 
         tm->hw[i] = vnet_get_hw_interface(vnet_get_main(),
index d4a701d..55013a9 100644 (file)
@@ -686,8 +686,8 @@ fib_path_attached_next_hop_set (fib_path_t *path)
                                     FIB_NODE_TYPE_PATH,
                                     fib_path_get_index(path));
 
-    if (!vnet_sw_interface_is_admin_up(vnet_get_main(),
-                                     path->attached_next_hop.fp_interface) ||
+    if (!vnet_sw_interface_is_up(vnet_get_main(),
+                                 path->attached_next_hop.fp_interface) ||
         !adj_is_up(path->fp_dpo.dpoi_index))
     {
        path->fp_oper_flags &= ~FIB_PATH_OPER_FLAG_RESOLVED;
@@ -1083,7 +1083,7 @@ FIXME comment
             uword if_is_up;
             adj_index_t ai;
 
-            if_is_up = vnet_sw_interface_is_admin_up(
+            if_is_up = vnet_sw_interface_is_up(
                            vnet_get_main(),
                            path->attached_next_hop.fp_interface);
 
@@ -1886,8 +1886,8 @@ fib_path_resolve (fib_node_index_t path_index)
         /*
          * path->attached.fp_interface
          */
-        if (!vnet_sw_interface_is_admin_up(vnet_get_main(),
-                                           path->attached.fp_interface))
+        if (!vnet_sw_interface_is_up(vnet_get_main(),
+                                     path->attached.fp_interface))
         {
             path->fp_oper_flags &= ~FIB_PATH_OPER_FLAG_RESOLVED;
         }
index ef1fc16..b862f48 100644 (file)
@@ -306,8 +306,23 @@ vnet_sw_interface_get_mtu (vnet_main_t * vnm, u32 sw_if_index, vnet_mtu_t af)
 always_inline uword
 vnet_hw_interface_is_link_up (vnet_main_t * vnm, u32 hw_if_index)
 {
-  return (vnet_hw_interface_get_flags (vnm, hw_if_index) &
-         VNET_HW_INTERFACE_FLAG_LINK_UP) != 0;
+  return ((vnet_hw_interface_get_flags (vnm, hw_if_index) &
+          VNET_HW_INTERFACE_FLAG_LINK_UP) != 0);
+}
+
+always_inline uword
+vnet_sw_interface_is_link_up (vnet_main_t * vnm, u32 sw_if_index)
+{
+  vnet_sw_interface_t *sw = vnet_get_sup_sw_interface (vnm, sw_if_index);
+
+  return (vnet_hw_interface_is_link_up (vnm, sw->hw_if_index));
+}
+
+always_inline uword
+vnet_sw_interface_is_up (vnet_main_t * vnm, u32 sw_if_index)
+{
+  return (vnet_sw_interface_is_admin_up (vnm, sw_if_index) &&
+         vnet_sw_interface_is_link_up (vnm, sw_if_index));
 }
 
 always_inline vlib_frame_t *