VAT: don't pass u8 to unformat - it expects an 4 byte integer
[vpp.git] / vpp-api-test / vat / api_format.c
index 65114ec..549bd03 100644 (file)
@@ -3575,7 +3575,8 @@ _(ip_source_and_port_range_check_add_del_reply)         \
 _(ip_source_and_port_range_check_interface_add_del_reply)\
 _(delete_subif_reply)                                   \
 _(l2_interface_pbb_tag_rewrite_reply)                   \
-_(punt_reply)
+_(punt_reply)                                           \
+_(feature_enable_disable_reply)
 
 #define _(n)                                    \
     static void vl_api_##n##_t_handler          \
@@ -3817,7 +3818,8 @@ _(DELETE_SUBIF_REPLY, delete_subif_reply)                               \
 _(L2_INTERFACE_PBB_TAG_REWRITE_REPLY, l2_interface_pbb_tag_rewrite_reply) \
 _(PUNT_REPLY, punt_reply)                                               \
 _(IP_FIB_DETAILS, ip_fib_details)                                       \
-_(IP6_FIB_DETAILS, ip6_fib_details)
+_(IP6_FIB_DETAILS, ip6_fib_details)                                     \
+_(FEATURE_ENABLE_DISABLE_REPLY, feature_enable_disable_reply)
 
 /* M: construct, but don't yet send a message */
 
@@ -5766,7 +5768,7 @@ api_ip_add_del_route (vat_main_t * vam)
   u8 is_unreach = 0, is_prohibit = 0;
   u8 create_vrf_if_needed = 0;
   u8 is_add = 1;
-  u8 next_hop_weight = 1;
+  u32 next_hop_weight = 1;
   u8 not_last = 0;
   u8 is_multipath = 0;
   u8 address_set = 0;
@@ -6052,7 +6054,7 @@ api_mpls_route_add_del (vat_main_t * vam)
   u32 sw_if_index = ~0, table_id = 0;
   u8 create_table_if_needed = 0;
   u8 is_add = 1;
-  u8 next_hop_weight = 1;
+  u32 next_hop_weight = 1;
   u8 is_multipath = 0;
   u32 next_hop_table_id = 0;
   u8 next_hop_set = 0;
@@ -6492,6 +6494,9 @@ api_mpls_ethernet_add_del_tunnel (vat_main_t * vam)
   u32 tx_sw_if_index;
   int tx_sw_if_index_set = 0;
 
+  /* Shut up coverity */
+  memset (dst_mac_address, 0, sizeof (dst_mac_address));
+
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (i, "vrf %d", &inner_vrf_id))
@@ -8756,6 +8761,8 @@ api_classify_add_del_table (vat_main_t * vam)
   u32 memory_size = 32 << 20;
   u8 *mask = 0;
   f64 timeout;
+  u32 current_data_flag = 0;
+  int current_data_offset = 0;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -8785,6 +8792,10 @@ api_classify_add_del_table (vat_main_t * vam)
       else if (unformat (i, "acl-miss-next %U", unformat_acl_next_index,
                         &miss_next_index))
        ;
+      else if (unformat (i, "current-data-flag %d", &current_data_flag))
+       ;
+      else if (unformat (i, "current-data-offset %d", &current_data_offset))
+       ;
       else
        break;
     }
@@ -8823,6 +8834,8 @@ api_classify_add_del_table (vat_main_t * vam)
   mp->match_n_vectors = ntohl (match);
   mp->next_table_index = ntohl (next_table_index);
   mp->miss_next_index = ntohl (miss_next_index);
+  mp->current_data_flag = ntohl (current_data_flag);
+  mp->current_data_offset = ntohl (current_data_offset);
   clib_memcpy (mp->mask, mask, vec_len (mask));
 
   vec_free (mask);
@@ -9282,6 +9295,8 @@ api_classify_add_del_session (vat_main_t * vam)
   f64 timeout;
   u32 skip_n_vectors = 0;
   u32 match_n_vectors = 0;
+  u32 action = 0;
+  u32 metadata = 0;
 
   /*
    * Warning: you have to supply skip_n and match_n
@@ -9319,6 +9334,14 @@ api_classify_add_del_session (vat_main_t * vam)
        ;
       else if (unformat (i, "table-index %d", &table_index))
        ;
+      else if (unformat (i, "action set-ip4-fib-id %d", &metadata))
+       action = 1;
+      else if (unformat (i, "action set-ip6-fib-id %d", &metadata))
+       action = 2;
+      else if (unformat (i, "action %d", &action))
+       ;
+      else if (unformat (i, "metadata %d", &metadata))
+       ;
       else
        break;
     }
@@ -9342,6 +9365,8 @@ api_classify_add_del_session (vat_main_t * vam)
   mp->hit_next_index = ntohl (hit_next_index);
   mp->opaque_index = ntohl (opaque_index);
   mp->advance = ntohl (advance);
+  mp->action = action;
+  mp->metadata = ntohl (metadata);
   clib_memcpy (mp->match, match, vec_len (match));
   vec_free (match);
 
@@ -10561,6 +10586,9 @@ api_create_vhost_user_if (vat_main_t * vam)
   u8 hwaddr[6];
   u8 use_custom_mac = 0;
 
+  /* Shut up coverity */
+  memset (hwaddr, 0, sizeof (hwaddr));
+
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (i, "socket %s", &file_name))
@@ -14876,12 +14904,20 @@ vl_api_mpls_fib_details_t_handler (vl_api_mpls_fib_details_t * mp)
   fp = mp->path;
   for (i = 0; i < count; i++)
     {
-      fformat (vam->ofp,
-              "  weight %d, sw_if_index %d, is_local %d, is_drop %d, is_unreach %d, "
-              "is_prohitbit %d, afi %d, next_hop %U\n", ntohl (fp->weight),
-              ntohl (fp->sw_if_index), fp->is_local, fp->is_drop,
-              fp->is_unreach, fp->is_prohibit, fp->afi, format_ip46_address,
-              fp->next_hop, fp->afi);
+      if (fp->afi == IP46_TYPE_IP6)
+       fformat (vam->ofp,
+                "  weight %d, sw_if_index %d, is_local %d, is_drop %d, "
+                "is_unreach %d, is_prohitbit %d, afi %d, next_hop %U\n",
+                ntohl (fp->weight), ntohl (fp->sw_if_index), fp->is_local,
+                fp->is_drop, fp->is_unreach, fp->is_prohibit, fp->afi,
+                format_ip6_address, fp->next_hop);
+      else if (fp->afi == IP46_TYPE_IP4)
+       fformat (vam->ofp,
+                "  weight %d, sw_if_index %d, is_local %d, is_drop %d, "
+                "is_unreach %d, is_prohitbit %d, afi %d, next_hop %U\n",
+                ntohl (fp->weight), ntohl (fp->sw_if_index), fp->is_local,
+                fp->is_drop, fp->is_unreach, fp->is_prohibit, fp->afi,
+                format_ip4_address, fp->next_hop);
       fp++;
     }
 }
@@ -14968,12 +15004,20 @@ vl_api_ip_fib_details_t_handler (vl_api_ip_fib_details_t * mp)
   fp = mp->path;
   for (i = 0; i < count; i++)
     {
-      fformat (vam->ofp,
-              "  weight %d, sw_if_index %d, is_local %d, is_drop %d, is_unreach %d, "
-              "is_prohitbit %d, afi %d, next_hop %U\n", ntohl (fp->weight),
-              ntohl (fp->sw_if_index), fp->is_local, fp->is_drop,
-              fp->is_unreach, fp->is_prohibit, fp->afi, format_ip46_address,
-              fp->next_hop, fp->afi);
+      if (fp->afi == IP46_TYPE_IP6)
+       fformat (vam->ofp,
+                "  weight %d, sw_if_index %d, is_local %d, is_drop %d, "
+                "is_unreach %d, is_prohitbit %d, afi %d, next_hop %U\n",
+                ntohl (fp->weight), ntohl (fp->sw_if_index), fp->is_local,
+                fp->is_drop, fp->is_unreach, fp->is_prohibit, fp->afi,
+                format_ip6_address, fp->next_hop);
+      else if (fp->afi == IP46_TYPE_IP4)
+       fformat (vam->ofp,
+                "  weight %d, sw_if_index %d, is_local %d, is_drop %d, "
+                "is_unreach %d, is_prohitbit %d, afi %d, next_hop %U\n",
+                ntohl (fp->weight), ntohl (fp->sw_if_index), fp->is_local,
+                fp->is_drop, fp->is_unreach, fp->is_prohibit, fp->afi,
+                format_ip4_address, fp->next_hop);
       fp++;
     }
 }
@@ -15061,12 +15105,20 @@ vl_api_ip6_fib_details_t_handler (vl_api_ip6_fib_details_t * mp)
   fp = mp->path;
   for (i = 0; i < count; i++)
     {
-      fformat (vam->ofp,
-              "  weight %d, sw_if_index %d, is_local %d, is_drop %d, is_unreach %d, "
-              "is_prohitbit %d, afi %d, next_hop %U\n", ntohl (fp->weight),
-              ntohl (fp->sw_if_index), fp->is_local, fp->is_drop,
-              fp->is_unreach, fp->is_prohibit, fp->afi, format_ip46_address,
-              fp->next_hop, fp->afi);
+      if (fp->afi == IP46_TYPE_IP6)
+       fformat (vam->ofp,
+                "  weight %d, sw_if_index %d, is_local %d, is_drop %d, "
+                "is_unreach %d, is_prohitbit %d, afi %d, next_hop %U\n",
+                ntohl (fp->weight), ntohl (fp->sw_if_index), fp->is_local,
+                fp->is_drop, fp->is_unreach, fp->is_prohibit, fp->afi,
+                format_ip6_address, fp->next_hop);
+      else if (fp->afi == IP46_TYPE_IP4)
+       fformat (vam->ofp,
+                "  weight %d, sw_if_index %d, is_local %d, is_drop %d, "
+                "is_unreach %d, is_prohitbit %d, afi %d, next_hop %U\n",
+                ntohl (fp->weight), ntohl (fp->sw_if_index), fp->is_local,
+                fp->is_drop, fp->is_unreach, fp->is_prohibit, fp->afi,
+                format_ip4_address, fp->next_hop);
       fp++;
     }
 }
@@ -16068,6 +16120,10 @@ api_l2_interface_pbb_tag_rewrite (vat_main_t * vam)
   u32 sid = ~0;
   u32 tmp;
 
+  /* Shut up coverity */
+  memset (dmac, 0, sizeof (dmac));
+  memset (smac, 0, sizeof (smac));
+
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (i, "%U", unformat_sw_if_index, vam, &sw_if_index))
@@ -16225,6 +16281,72 @@ api_flow_classify_dump (vat_main_t * vam)
   return 0;
 }
 
+static int
+api_feature_enable_disable (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_feature_enable_disable_t *mp;
+  f64 timeout;
+  u8 *arc_name = 0;
+  u8 *feature_name = 0;
+  u32 sw_if_index = ~0;
+  u8 enable = 1;
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "arc_name %s", &arc_name))
+       ;
+      else if (unformat (i, "feature_name %s", &feature_name))
+       ;
+      else if (unformat (i, "%U", unformat_sw_if_index, vam, &sw_if_index))
+       ;
+      else if (unformat (i, "sw_if_index %d", &sw_if_index))
+       ;
+      else if (unformat (i, "disable"))
+       enable = 0;
+      else
+       break;
+    }
+
+  if (arc_name == 0)
+    {
+      errmsg ("missing arc name\n");
+      return -99;
+    }
+  if (vec_len (arc_name) > 63)
+    {
+      errmsg ("arc name too long\n");
+    }
+
+  if (feature_name == 0)
+    {
+      errmsg ("missing feature name\n");
+      return -99;
+    }
+  if (vec_len (feature_name) > 63)
+    {
+      errmsg ("feature name too long\n");
+    }
+
+  if (sw_if_index == ~0)
+    {
+      errmsg ("missing interface name or sw_if_index\n");
+      return -99;
+    }
+
+  /* Construct the API message */
+  M (FEATURE_ENABLE_DISABLE, feature_enable_disable);
+  mp->sw_if_index = ntohl (sw_if_index);
+  mp->enable = enable;
+  clib_memcpy (mp->arc_name, arc_name, vec_len (arc_name));
+  clib_memcpy (mp->feature_name, feature_name, vec_len (feature_name));
+  vec_free (arc_name);
+  vec_free (feature_name);
+
+  S;
+  W;
+}
+
 static int
 q_or_quit (vat_main_t * vam)
 {
@@ -16412,6 +16534,67 @@ dump_node_table (vat_main_t * vam)
   return 0;
 }
 
+static int
+value_sort_cmp (void *a1, void *a2)
+{
+  name_sort_t *n1 = a1;
+  name_sort_t *n2 = a2;
+
+  if (n1->value < n2->value)
+    return -1;
+  if (n1->value > n2->value)
+    return 1;
+  return 0;
+}
+
+
+static int
+dump_msg_api_table (vat_main_t * vam)
+{
+  api_main_t *am = &api_main;
+  name_sort_t *nses = 0, *ns;
+  hash_pair_t *hp;
+  int i;
+
+  /* *INDENT-OFF* */
+  hash_foreach_pair (hp, am->msg_index_by_name_and_crc,
+  ({
+    vec_add2 (nses, ns, 1);
+    ns->name = (u8 *)(hp->key);
+    ns->value = (u32) hp->value[0];
+  }));
+  /* *INDENT-ON* */
+
+  vec_sort_with_function (nses, value_sort_cmp);
+
+  for (i = 0; i < vec_len (nses); i++)
+    fformat (vam->ofp, " [%d]: %s\n", nses[i].value, nses[i].name);
+  vec_free (nses);
+  return 0;
+}
+
+static int
+get_msg_id (vat_main_t * vam)
+{
+  u8 *name_and_crc;
+  u32 message_index;
+
+  if (unformat (vam->input, "%s", &name_and_crc))
+    {
+      message_index = vl_api_get_msg_index (name_and_crc);
+      if (message_index == ~0)
+       {
+         fformat (vam->ofp, " '%s' not found\n", name_and_crc);
+         return 0;
+       }
+      fformat (vam->ofp, " '%s' has message index %d\n",
+              name_and_crc, message_index);
+      return 0;
+    }
+  errmsg ("name_and_crc required...\n");
+  return 0;
+}
+
 static int
 search_node_table (vat_main_t * vam)
 {
@@ -16641,12 +16824,14 @@ _(sr_multicast_map_add_del,                                             \
   "address [ip6 multicast address] sr-policy [policy name] [del]")     \
 _(classify_add_del_table,                                               \
   "buckets <nn> [skip <n>] [match <n>] [memory_size <nn-bytes>]\n"     \
-  "[del] mask <mask-value>\n"                                          \
-  " [l2-miss-next | miss-next | acl-miss-next] <name|nn>")             \
+  " [del] mask <mask-value>\n"                                          \
+  " [l2-miss-next | miss-next | acl-miss-next] <name|nn>\n"            \
+  " [current-data-flag <n>] [current-data-offset <nn>] [table <nn>]")   \
 _(classify_add_del_session,                                             \
   "[hit-next|l2-hit-next|acl-hit-next|policer-hit-next] <name|nn>\n"    \
   "  table-index <nn> skip_n <nn> match_n <nn> match [hex] [l2]\n"      \
-  "  [l3 [ip4|ip6]]")                                                  \
+  "  [l3 [ip4|ip6]] [action set-ip4-fib-id <nn>]\n"                     \
+  "  [action set-ip6-fib-id <nn> | action <n> metadata <nn>] [del]")    \
 _(classify_set_interface_ip_table,                                      \
   "<intfc> | sw_if_index <nn> table <nn>")                             \
 _(classify_set_interface_l2_tables,                                     \
@@ -16833,7 +17018,9 @@ _(flow_classify_set_interface,                                          \
   "<intfc> | sw_if_index <nn> [ip4-table <nn>] [ip6-table <nn>] [del]") \
 _(flow_classify_dump, "type [ip4|ip6]")                                 \
 _(ip_fib_dump, "")                                                      \
-_(ip6_fib_dump, "")
+_(ip6_fib_dump, "")                                                     \
+_(feature_enable_disable, "arc_name <arc_name> "                        \
+  "feature_name <feature_name> <intfc> | sw_if_index <nn> [disable]")
 
 /* List of command functions, CLI names map directly to functions */
 #define foreach_cli_function                                    \
@@ -16845,6 +17032,8 @@ _(dump_ipv6_table, "usage: dump_ipv6_table")                    \
 _(dump_stats_table, "usage: dump_stats_table")                  \
 _(dump_macro_table, "usage: dump_macro_table ")                 \
 _(dump_node_table, "usage: dump_node_table")                   \
+_(dump_msg_api_table, "usage: dump_msg_api_table")             \
+_(get_msg_id, "usage: get_msg_id name_and_crc")                        \
 _(echo, "usage: echo <message>")                               \
 _(exec, "usage: exec <vpe-debug-CLI-command>")                  \
 _(exec_inband, "usage: exec_inband <vpe-debug-CLI-command>")    \