Improve "show xxx tunnel" and "show int addr" output 94/10094/3
authorJohn Lo <loj@cisco.com>
Fri, 12 Jan 2018 22:15:25 +0000 (17:15 -0500)
committerDave Barach <openvpp@barachs.net>
Sat, 13 Jan 2018 15:24:15 +0000 (15:24 +0000)
Improve "show xxx tunnel" output functions format_xxx_tunnel() for
GRE, VXLAN, VXLAN-GPE, GENEVE and GTPU tunnels to make their output
more consistent and provide better information.
Improved the output of "show int addr" to make its info more
consistent with tunnels and provide fib-index info.

Change-Id: Icd4b5b85a5bec417f8ee19afea336c770ad3b4c5
Signed-off-by: John Lo <loj@cisco.com>
src/plugins/gtpu/gtpu.c
src/vnet/geneve/geneve.c
src/vnet/gre/interface.c
src/vnet/interface_cli.c
src/vnet/vxlan-gpe/vxlan_gpe.c
src/vnet/vxlan/vxlan.c

index 80069a7..96399f3 100755 (executable)
@@ -75,18 +75,18 @@ format_gtpu_tunnel (u8 * s, va_list * args)
   gtpu_tunnel_t *t = va_arg (*args, gtpu_tunnel_t *);
   gtpu_main_t *ngm = &gtpu_main;
 
-  s = format (s, "[%d] src %U dst %U teid %d sw_if_index %d ",
+  s = format (s, "[%d] src %U dst %U teid %d fib-idx %d sw-if-idx %d ",
              t - ngm->tunnels,
              format_ip46_address, &t->src, IP46_TYPE_ANY,
              format_ip46_address, &t->dst, IP46_TYPE_ANY,
-             t->teid, t->sw_if_index);
+             t->teid,  t->encap_fib_index, t->sw_if_index);
 
-  if (ip46_address_is_multicast (&t->dst))
-    s = format (s, "mcast_sw_if_index %d ", t->mcast_sw_if_index);
+  s = format (s, "encap-dpo-idx %d ", t->next_dpo.dpoi_index);
+  s = format (s, "decap-next-%U ", format_decap_next, t->decap_next_index);
+
+  if (PREDICT_FALSE (ip46_address_is_multicast (&t->dst)))
+    s = format (s, "mcast-sw-if-idx %d ", t->mcast_sw_if_index);
 
-  s = format (s, "encap_fib_index %d fib_entry_index %d decap_next %U\n",
-             t->encap_fib_index, t->fib_entry_index,
-             format_decap_next, t->decap_next_index);
   return s;
 }
 
index 56db5ee..6bc4b67 100644 (file)
@@ -60,18 +60,18 @@ format_geneve_tunnel (u8 * s, va_list * args)
   geneve_tunnel_t *t = va_arg (*args, geneve_tunnel_t *);
   geneve_main_t *ngm = &geneve_main;
 
-  s = format (s, "[%d] local %U remote %U vni %d sw_if_index %d ",
+  s = format (s, "[%d] lcl %U rmt %U vni %d fib-idx %d sw-if-idx %d ",
              t - ngm->tunnels,
              format_ip46_address, &t->local, IP46_TYPE_ANY,
              format_ip46_address, &t->remote, IP46_TYPE_ANY,
-             t->vni, t->sw_if_index);
+             t->vni, t->encap_fib_index, t->sw_if_index);
 
-  if (ip46_address_is_multicast (&t->remote))
-    s = format (s, "mcast_sw_if_index %d ", t->mcast_sw_if_index);
+  s = format (s, "encap-dpo-idx %d ", t->next_dpo.dpoi_index);
+  s = format (s, "decap-next-%U ", format_decap_next, t->decap_next_index);
+
+  if (PREDICT_FALSE (ip46_address_is_multicast (&t->remote)))
+    s = format (s, "mcast-sw-if-idx %d ", t->mcast_sw_if_index);
 
-  s = format (s, "encap_fib_index %d fib_entry_index %d decap_next %U\n",
-             t->encap_fib_index, t->fib_entry_index,
-             format_decap_next, t->decap_next_index);
   return s;
 }
 
index 8b1ad6b..ce9685d 100644 (file)
 
 static const char *gre_tunnel_type_names[] = GRE_TUNNEL_TYPE_NAMES;
 
-static u8 *
-format_gre_tunnel_type (u8 * s, va_list * args)
-{
-  gre_tunnel_type_t type = va_arg (*args, gre_tunnel_type_t);
-
-  return (format (s, "%s", gre_tunnel_type_names[type]));
-}
-
 static u8 *
 format_gre_tunnel (u8 * s, va_list * args)
 {
   gre_tunnel_t *t = va_arg (*args, gre_tunnel_t *);
   gre_main_t *gm = &gre_main;
-  u8 is_ipv6 = t->tunnel_dst.fp_proto == FIB_PROTOCOL_IP6 ? 1 : 0;
 
-  if (!is_ipv6)
-    s = format (s,
-               "[%d] %U (src) %U (dst) payload %U outer_fib_index %d",
-               t - gm->tunnels,
-               format_ip4_address, &t->tunnel_src.ip4,
-               format_ip4_address, &t->tunnel_dst.fp_addr.ip4,
-               format_gre_tunnel_type, t->type, t->outer_fib_index);
-  else
-    s = format (s,
-               "[%d] %U (src) %U (dst) payload %U outer_fib_index %d",
-               t - gm->tunnels,
-               format_ip6_address, &t->tunnel_src.ip6,
-               format_ip6_address, &t->tunnel_dst.fp_addr.ip6,
-               format_gre_tunnel_type, t->type, t->outer_fib_index);
+  s = format (s, "[%d] src %U dst %U fib-idx %d sw-if-idx %d ",
+             t - gm->tunnels,
+             format_ip46_address, &t->tunnel_src, IP46_TYPE_ANY,
+             format_ip46_address, &t->tunnel_dst.fp_addr, IP46_TYPE_ANY,
+             t->outer_fib_index, t->sw_if_index);
+
+  s = format (s, "payload %s", gre_tunnel_type_names[t->type]);
 
   return s;
 }
index 0debdb4..5509e3f 100644 (file)
@@ -365,11 +365,7 @@ show_sw_interfaces (vlib_main_t * vm,
        ip_lookup_main_t *lm4 = &im4->lookup_main;
        ip_lookup_main_t *lm6 = &im6->lookup_main;
        ip_interface_address_t *ia = 0;
-       ip4_address_t *r4;
-       ip6_address_t *r6;
        u32 fib_index4 = 0, fib_index6 = 0;
-       ip4_fib_t *fib4;
-       ip6_fib_t *fib6;
 
        if (vec_len (im4->fib_index_by_sw_if_index) > si->sw_if_index)
          fib_index4 = vec_elt (im4->fib_index_by_sw_if_index,
@@ -379,85 +375,69 @@ show_sw_interfaces (vlib_main_t * vm,
          fib_index6 = vec_elt (im6->fib_index_by_sw_if_index,
                                si->sw_if_index);
 
-       fib4 = ip4_fib_get (fib_index4);
-       fib6 = ip6_fib_get (fib_index6);
+       ip4_fib_t *fib4 = ip4_fib_get (fib_index4);
+       ip6_fib_t *fib6 = ip6_fib_get (fib_index6);
 
        if (si->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED)
          vlib_cli_output
            (vm, "%U (%s): \n  unnumbered, use %U",
-            format_vnet_sw_if_index_name,
-            vnm, si->sw_if_index,
+            format_vnet_sw_if_index_name, vnm, si->sw_if_index,
             (si->flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) ? "up" : "dn",
             format_vnet_sw_if_index_name, vnm, si->unnumbered_sw_if_index);
-
        else
-         {
-           vlib_cli_output (vm, "%U (%s):",
-                            format_vnet_sw_if_index_name,
-                            vnm, si->sw_if_index,
-                            (si->flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP)
-                            ? "up" : "dn");
-         }
+         vlib_cli_output
+           (vm, "%U (%s):",
+            format_vnet_sw_if_index_name, vnm, si->sw_if_index,
+            (si->flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) ? "up" : "dn");
 
        /* Display any L2 info */
        l2_input_config_t *l2_input = l2input_intf_config (si->sw_if_index);
        if (l2_input->bridge)
          {
+           bd_main_t *bdm = &bd_main;
            u32 bd_id = l2input_main.bd_configs[l2_input->bd_index].bd_id;
-           vlib_cli_output (vm, "  l2 bridge bd_id %d%s%d", bd_id,
-                            l2_input->bvi ? " bvi shg " : " shg ",
-                            l2_input->shg);
+           vlib_cli_output (vm, "  L2 bridge bd-id %d idx %d shg %d %s",
+                            bd_id, bd_find_index (bdm, bd_id), l2_input->shg,
+                            l2_input->bvi ? "bvi" : " ");
          }
        else if (l2_input->xconnect)
-         {
-           vlib_cli_output (vm, "  l2 xconnect %U",
-                            format_vnet_sw_if_index_name,
-                            vnm, l2_input->output_sw_if_index);
-         }
+         vlib_cli_output (vm, "  L2 xconnect %U",
+                          format_vnet_sw_if_index_name, vnm,
+                          l2_input->output_sw_if_index);
 
+       /* *INDENT-OFF* */
        /* Display any IP4 addressing info */
-          /* *INDENT-OFF* */
-         foreach_ip_interface_address (lm4, ia, si->sw_if_index,
-                                       1 /* honor unnumbered */,
-         ({
-            r4 = ip_interface_address_get_address (lm4, ia);
-            if (fib4->table_id)
-              {
-                vlib_cli_output (vm, "  %U/%d table %d",
-                                 format_ip4_address, r4,
-                                 ia->address_length,
-                                 fib4->table_id);
-              }
-            else
-              {
-                vlib_cli_output (vm, "  %U/%d",
-                                 format_ip4_address, r4,
-                                 ia->address_length);
-              }
-          }));
-          /* *INDENT-ON* */
-
+       foreach_ip_interface_address (lm4, ia, si->sw_if_index,
+                                     1 /* honor unnumbered */,
+       ({
+         ip4_address_t *r4 = ip_interface_address_get_address (lm4, ia);
+         if (fib4->table_id)
+           vlib_cli_output (vm, "  L3 %U/%d ip4 table-id %d fib-idx %d",
+                            format_ip4_address, r4, ia->address_length,
+                            fib4->table_id,
+                            ip4_fib_index_from_table_id (fib4->table_id));
+         else
+           vlib_cli_output (vm, "  L3 %U/%d",
+                            format_ip4_address, r4, ia->address_length);
+        }));
+       /* *INDENT-ON* */
+
+       /* *INDENT-OFF* */
        /* Display any IP6 addressing info */
-          /* *INDENT-OFF* */
-          foreach_ip_interface_address (lm6, ia, si->sw_if_index,
-                                        1 /* honor unnumbered */,
-          ({
-            r6 = ip_interface_address_get_address (lm6, ia);
-            if (fib6->table_id)
-              {
-                vlib_cli_output (vm, "  %U/%d table %d",
-                                 format_ip6_address, r6,
-                                 ia->address_length,
-                                 fib6->table_id);
-              }
-            else
-              {
-                vlib_cli_output (vm, "  %U/%d",
-                                 format_ip6_address, r6,
-                                 ia->address_length);
-              }
-          }));
-          /* *INDENT-ON* */
+       foreach_ip_interface_address (lm6, ia, si->sw_if_index,
+                                     1 /* honor unnumbered */,
+        ({
+         ip6_address_t *r6 = ip_interface_address_get_address (lm6, ia);
+         if (fib6->table_id)
+           vlib_cli_output (vm, "  L3 %U/%d ip6 table-id %d fib-idx %d",
+                            format_ip6_address, r6, ia->address_length,
+                            fib6->table_id,
+                            ip6_fib_index_from_table_id (fib6->table_id));
+         else
+           vlib_cli_output (vm, "  L3 %U/%d",
+                            format_ip6_address, r6, ia->address_length);
+        }));
+       /* *INDENT-ON* */
       }
     }
   else
index b0c6a68..918a982 100644 (file)
 
 vxlan_gpe_main_t vxlan_gpe_main;
 
-/**
- * @brief Tracing function for VXLAN GPE tunnel packets
- *
- * @param *s formatting string
- * @param *args
- *
- * @return *s formatted string
- *
- */
-u8 *
-format_vxlan_gpe_tunnel (u8 * s, va_list * args)
+static u8 *
+format_decap_next (u8 * s, va_list * args)
 {
   vxlan_gpe_tunnel_t *t = va_arg (*args, vxlan_gpe_tunnel_t *);
-  vxlan_gpe_main_t *ngm = &vxlan_gpe_main;
-
-  s = format (s, "[%d] local: %U remote: %U ",
-             t - ngm->tunnels,
-             format_ip46_address, &t->local, IP46_TYPE_ANY,
-             format_ip46_address, &t->remote, IP46_TYPE_ANY);
-
-  s = format (s, "  vxlan VNI %d ", t->vni);
 
   switch (t->protocol)
     {
     case VXLAN_GPE_PROTOCOL_IP4:
-      s = format (s, "next-protocol ip4");
+      s = format (s, "protocol ip4 fib-idx %d", t->decap_fib_index);
       break;
     case VXLAN_GPE_PROTOCOL_IP6:
-      s = format (s, "next-protocol ip6");
+      s = format (s, "protocol ip6 fib-idx %d", t->decap_fib_index);
       break;
     case VXLAN_GPE_PROTOCOL_ETHERNET:
-      s = format (s, "next-protocol ethernet");
+      s = format (s, "protocol ethernet");
       break;
     case VXLAN_GPE_PROTOCOL_NSH:
-      s = format (s, "next-protocol nsh");
+      s = format (s, "protocol nsh");
       break;
     default:
-      s = format (s, "next-protocol unknown %d", t->protocol);
+      s = format (s, "protocol unknown %d", t->protocol);
     }
 
-  if (ip46_address_is_multicast (&t->remote))
-    s = format (s, "mcast_sw_if_index %d ", t->mcast_sw_if_index);
+  return s;
+}
+
+/**
+ * @brief Format function for VXLAN GPE tunnel
+ *
+ * @param *s formatting string
+ * @param *args
+ *
+ * @return *s formatted string
+ *
+ */
+u8 *
+format_vxlan_gpe_tunnel (u8 * s, va_list * args)
+{
+  vxlan_gpe_tunnel_t *t = va_arg (*args, vxlan_gpe_tunnel_t *);
+  vxlan_gpe_main_t *ngm = &vxlan_gpe_main;
 
-  s = format (s, " fibs: (encap %d, decap %d)",
-             t->encap_fib_index, t->decap_fib_index);
+  s = format (s, "[%d] lcl %U rmt %U vni %d fib-idx %d sw-if-idx %d ",
+             t - ngm->tunnels,
+             format_ip46_address, &t->local, IP46_TYPE_ANY,
+             format_ip46_address, &t->remote, IP46_TYPE_ANY,
+             t->vni, t->encap_fib_index, t->sw_if_index);
+
+#if 0
+  /* next_dpo not yet used by vxlan-gpe-encap node */
+  s = format (s, "encap-dpo-idx %d ", t->next_dpo.dpoi_index);
+  */
+#endif
+    s = format (s, "decap-next-%U ", format_decap_next, t);
+
+  if (PREDICT_FALSE (ip46_address_is_multicast (&t->remote)))
+    s = format (s, "mcast-sw-if-idx %d ", t->mcast_sw_if_index);
 
   return s;
 }
index 5926062..edd8733 100644 (file)
@@ -44,15 +44,10 @@ static u8 * format_decap_next (u8 * s, va_list * args)
 {
   u32 next_index = va_arg (*args, u32);
 
-  switch (next_index)
-    {
-    case VXLAN_INPUT_NEXT_DROP:
-      return format (s, "drop");
-    case VXLAN_INPUT_NEXT_L2_INPUT:
-      return format (s, "l2");
-    default:
-      return format (s, "index %d", next_index);
-    }
+  if (next_index == VXLAN_INPUT_NEXT_DROP)
+    return format (s, "drop");
+  else
+    return format (s, "index %d", next_index);
   return s;
 }
 
@@ -61,18 +56,20 @@ u8 * format_vxlan_tunnel (u8 * s, va_list * args)
   vxlan_tunnel_t * t = va_arg (*args, vxlan_tunnel_t *);
   vxlan_main_t * ngm = &vxlan_main;
 
-  s = format (s, "[%d] src %U dst %U vni %d sw_if_index %d ",
+  s = format (s, "[%d] src %U dst %U vni %d fib-idx %d sw-if-idx %d ",
               t - ngm->tunnels,
               format_ip46_address, &t->src, IP46_TYPE_ANY,
               format_ip46_address, &t->dst, IP46_TYPE_ANY,
-              t->vni, t->sw_if_index);
+              t->vni, t->encap_fib_index, t->sw_if_index);
+
+  s = format (s, "encap-dpo-idx %d ", t->next_dpo.dpoi_index);
+
+  if (PREDICT_FALSE (t->decap_next_index != VXLAN_INPUT_NEXT_L2_INPUT))
+    s = format (s, "decap-next-%U ", format_decap_next, t->decap_next_index);
 
-  if (ip46_address_is_multicast (&t->dst))
-    s = format (s, "mcast_sw_if_index %d ", t->mcast_sw_if_index);
+  if (PREDICT_FALSE (ip46_address_is_multicast (&t->dst)))
+    s = format (s, "mcast-sw-if-idx %d ", t->mcast_sw_if_index);
 
-  s = format (s, "encap_fib_index %d fib_entry_index %d decap_next %U\n", 
-             t->encap_fib_index, t->fib_entry_index,
-             format_decap_next, t->decap_next_index);
   return s;
 }