ipsec: allow null/null for crypto/integ algorithms pair
[vpp.git] / src / vat / api_format.c
index db964fe..924986e 100644 (file)
@@ -51,6 +51,7 @@
 #include <vnet/mfib/mfib_types.h>
 #include <vnet/dhcp/dhcp_proxy.h>
 #include <vnet/bonding/node.h>
+#include <vnet/qos/qos_types.h>
 #include "vat/json_format.h"
 
 #include <inttypes.h>
@@ -981,7 +982,7 @@ static void vl_api_sw_interface_details_t_handler_json
   vat_json_object_add_uint (node, "link_up_down", mp->link_up_down);
   vat_json_object_add_uint (node, "link_duplex", mp->link_duplex);
   vat_json_object_add_uint (node, "link_speed", mp->link_speed);
-  vat_json_object_add_uint (node, "mtu", ntohs (mp->mtu));
+  vat_json_object_add_uint (node, "mtu", ntohs (mp->link_mtu));
   vat_json_object_add_uint (node, "sub_id", ntohl (mp->sub_id));
   vat_json_object_add_uint (node, "sub_dot1ad", mp->sub_dot1ad);
   vat_json_object_add_uint (node, "sub_number_of_tags",
@@ -5569,6 +5570,7 @@ _(l2_interface_efp_filter_reply)                        \
 _(l2_interface_vlan_tag_rewrite_reply)                  \
 _(modify_vhost_user_if_reply)                           \
 _(delete_vhost_user_if_reply)                           \
+_(ip_probe_neighbor_reply)                              \
 _(want_ip4_arp_events_reply)                            \
 _(want_ip6_nd_events_reply)                             \
 _(want_l2_macs_events_reply)                            \
@@ -5661,7 +5663,8 @@ _(dns_enable_disable_reply)                             \
 _(dns_name_server_add_del_reply)                       \
 _(session_rule_add_del_reply)                          \
 _(ip_container_proxy_add_del_reply)                     \
-_(output_acl_set_interface_reply)
+_(output_acl_set_interface_reply)                       \
+_(qos_record_enable_disable_reply)
 
 #define _(n)                                    \
     static void vl_api_##n##_t_handler          \
@@ -5811,9 +5814,10 @@ _(MODIFY_VHOST_USER_IF_REPLY, modify_vhost_user_if_reply)               \
 _(DELETE_VHOST_USER_IF_REPLY, delete_vhost_user_if_reply)               \
 _(SHOW_VERSION_REPLY, show_version_reply)                               \
 _(L2_FIB_TABLE_DETAILS, l2_fib_table_details)                          \
-_(VXLAN_GPE_ADD_DEL_TUNNEL_REPLY, vxlan_gpe_add_del_tunnel_reply)          \
+_(VXLAN_GPE_ADD_DEL_TUNNEL_REPLY, vxlan_gpe_add_del_tunnel_reply)      \
 _(VXLAN_GPE_TUNNEL_DETAILS, vxlan_gpe_tunnel_details)                   \
 _(INTERFACE_NAME_RENUMBER_REPLY, interface_name_renumber_reply)                \
+_(IP_PROBE_NEIGHBOR_REPLY, ip_probe_neighbor_reply)                    \
 _(WANT_IP4_ARP_EVENTS_REPLY, want_ip4_arp_events_reply)                        \
 _(IP4_ARP_EVENT, ip4_arp_event)                                         \
 _(WANT_IP6_ND_EVENTS_REPLY, want_ip6_nd_events_reply)                  \
@@ -5996,6 +6000,7 @@ _(SESSION_RULE_ADD_DEL_REPLY, session_rule_add_del_reply)         \
 _(SESSION_RULES_DETAILS, session_rules_details)                                \
 _(IP_CONTAINER_PROXY_ADD_DEL_REPLY, ip_container_proxy_add_del_reply)  \
 _(OUTPUT_ACL_SET_INTERFACE_REPLY, output_acl_set_interface_reply)       \
+_(QOS_RECORD_ENABLE_DISABLE_REPLY, qos_record_enable_disable_reply)
 
 #define foreach_standalone_reply_msg                                   \
 _(SW_INTERFACE_EVENT, sw_interface_event)                               \
@@ -11994,6 +11999,25 @@ unformat_l2_match (unformat_input_t * input, va_list * args)
   *matchp = match;
   return 1;
 }
+
+uword
+unformat_qos_source (unformat_input_t * input, va_list * args)
+{
+  int *qs = va_arg (*args, int *);
+
+  if (unformat (input, "ip"))
+    *qs = QOS_SOURCE_IP;
+  else if (unformat (input, "mpls"))
+    *qs = QOS_SOURCE_MPLS;
+  else if (unformat (input, "ext"))
+    *qs = QOS_SOURCE_EXT;
+  else if (unformat (input, "vlan"))
+    *qs = QOS_SOURCE_VLAN;
+  else
+    return 0;
+
+  return 1;
+}
 #endif
 
 uword
@@ -14462,6 +14486,58 @@ api_interface_name_renumber (vat_main_t * vam)
   return ret;
 }
 
+static int
+api_ip_probe_neighbor (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_ip_probe_neighbor_t *mp;
+  u8 int_set = 0;
+  u8 adr_set = 0;
+  u8 is_ipv6 = 0;
+  u8 dst_adr[16];
+  u32 sw_if_index;
+  int ret;
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
+       int_set = 1;
+      else if (unformat (i, "sw_if_index %d", &sw_if_index))
+       int_set = 1;
+      else if (unformat (i, "address %U", unformat_ip4_address, dst_adr))
+       adr_set = 1;
+      else if (unformat (i, "address %U", unformat_ip6_address, dst_adr))
+       {
+         adr_set = 1;
+         is_ipv6 = 1;
+       }
+      else
+       break;
+    }
+
+  if (int_set == 0)
+    {
+      errmsg ("missing interface");
+      return -99;
+    }
+
+  if (adr_set == 0)
+    {
+      errmsg ("missing addresses");
+      return -99;
+    }
+
+  M (IP_PROBE_NEIGHBOR, mp);
+
+  mp->sw_if_index = ntohl (sw_if_index);
+  mp->is_ipv6 = is_ipv6;
+  clib_memcpy (mp->dst_address, dst_adr, sizeof (dst_adr));
+
+  S (mp);
+  W (ret);
+  return ret;
+}
+
 static int
 api_want_ip4_arp_events (vat_main_t * vam)
 {
@@ -15092,7 +15168,7 @@ api_ipsec_sad_add_del_entry (vat_main_t * vam)
        if (unformat
            (i, "crypto_alg %U", unformat_ipsec_crypto_alg, &crypto_alg))
        {
-         if (crypto_alg < IPSEC_CRYPTO_ALG_AES_CBC_128 ||
+         if (crypto_alg < IPSEC_CRYPTO_ALG_NONE ||
              crypto_alg >= IPSEC_CRYPTO_N_ALG)
            {
              clib_warning ("unsupported crypto-alg: '%U'",
@@ -15106,7 +15182,7 @@ api_ipsec_sad_add_del_entry (vat_main_t * vam)
        if (unformat
            (i, "integ_alg %U", unformat_ipsec_integ_alg, &integ_alg))
        {
-         if (integ_alg < IPSEC_INTEG_ALG_SHA1_96 ||
+         if (integ_alg < IPSEC_INTEG_ALG_NONE ||
              integ_alg >= IPSEC_INTEG_N_ALG)
            {
              clib_warning ("unsupported integ-alg: '%U'",
@@ -15231,6 +15307,8 @@ api_ipsec_tunnel_if_add_del (vat_main_t * vam)
   u8 is_add = 1;
   u8 esn = 0;
   u8 anti_replay = 0;
+  u8 renumber = 0;
+  u32 instance = ~0;
   int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -15262,7 +15340,7 @@ api_ipsec_tunnel_if_add_del (vat_main_t * vam)
        if (unformat
            (i, "crypto_alg %U", unformat_ipsec_crypto_alg, &crypto_alg))
        {
-         if (crypto_alg < IPSEC_CRYPTO_ALG_AES_CBC_128 ||
+         if (crypto_alg < IPSEC_CRYPTO_ALG_NONE ||
              crypto_alg >= IPSEC_CRYPTO_N_ALG)
            {
              errmsg ("unsupported crypto-alg: '%U'\n",
@@ -15274,7 +15352,7 @@ api_ipsec_tunnel_if_add_del (vat_main_t * vam)
        if (unformat
            (i, "integ_alg %U", unformat_ipsec_integ_alg, &integ_alg))
        {
-         if (integ_alg < IPSEC_INTEG_ALG_SHA1_96 ||
+         if (integ_alg < IPSEC_INTEG_ALG_NONE ||
              integ_alg >= IPSEC_INTEG_N_ALG)
            {
              errmsg ("unsupported integ-alg: '%U'\n",
@@ -15282,6 +15360,8 @@ api_ipsec_tunnel_if_add_del (vat_main_t * vam)
              return -99;
            }
        }
+      else if (unformat (i, "instance %u", &instance))
+       renumber = 1;
       else
        {
          errmsg ("parse error '%U'\n", format_unformat_error, i);
@@ -15340,6 +15420,12 @@ api_ipsec_tunnel_if_add_del (vat_main_t * vam)
       clib_memcpy (mp->remote_integ_key, rik, mp->remote_integ_key_len);
     }
 
+  if (renumber)
+    {
+      mp->renumber = renumber;
+      mp->show_instance = ntohl (instance);
+    }
+
   S (mp);
   W (ret);
   return ret;
@@ -22830,6 +22916,55 @@ api_ip_container_proxy_add_del (vat_main_t * vam)
   return ret;
 }
 
+static int
+api_qos_record_enable_disable (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_qos_record_enable_disable_t *mp;
+  u32 sw_if_index, qs = 0xff;
+  u8 sw_if_index_set = 0;
+  u8 enable = 1;
+  int ret;
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
+       sw_if_index_set = 1;
+      else if (unformat (i, "sw_if_index %d", &sw_if_index))
+       sw_if_index_set = 1;
+      else if (unformat (i, "%U", unformat_qos_source, &qs))
+       ;
+      else if (unformat (i, "disable"))
+       enable = 0;
+      else
+       {
+         clib_warning ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
+    }
+
+  if (sw_if_index_set == 0)
+    {
+      errmsg ("missing interface name or sw_if_index");
+      return -99;
+    }
+  if (qs == 0xff)
+    {
+      errmsg ("input location must be specified");
+      return -99;
+    }
+
+  M (QOS_RECORD_ENABLE_DISABLE, mp);
+
+  mp->sw_if_index = ntohl (sw_if_index);
+  mp->input_source = qs;
+  mp->enable = enable;
+
+  S (mp);
+  W (ret);
+  return ret;
+}
+
 static int
 q_or_quit (vat_main_t * vam)
 {
@@ -23403,6 +23538,7 @@ _(interface_name_renumber,                                              \
 _(input_acl_set_interface,                                              \
   "<intfc> | sw_if_index <nn> [ip4-table <nn>] [ip6-table <nn>]\n"      \
   "  [l2-table <nn>] [del]")                                            \
+_(ip_probe_neighbor, "(<intc> | sw_if_index <nn>) address <ip4|ip6-addr>") \
 _(want_ip4_arp_events, "address <ip4-address> [del]")                   \
 _(want_ip6_nd_events, "address <ip6-address> [del]")                    \
 _(want_l2_macs_events, "[disable] [learn-limit <n>] [scan-delay <n>] [max-entries <n>]") \
@@ -23422,7 +23558,8 @@ _(ipsec_sa_set_key, "sa_id <n> crypto_key <hex> integ_key <hex>")       \
 _(ipsec_tunnel_if_add_del, "local_spi <n> remote_spi <n>\n"             \
   "  crypto_alg <alg> local_crypto_key <hex> remote_crypto_key <hex>\n" \
   "  integ_alg <alg> local_integ_key <hex> remote_integ_key <hex>\n"    \
-  "  local_ip <addr> remote_ip <addr> [esn] [anti_replay] [del]\n")     \
+  "  local_ip <addr> remote_ip <addr> [esn] [anti_replay] [del]\n"      \
+  "  [instance <n>]")     \
 _(ipsec_sa_dump, "[sa_id <n>]")                                         \
 _(ipsec_tunnel_if_set_key, "<intfc> <local|remote> <crypto|integ>\n"    \
   "  <alg> <hex>\n")                                                    \
@@ -23669,6 +23806,7 @@ _(ip_container_proxy_add_del, "[add|del] <address> <sw_if_index>")      \
 _(output_acl_set_interface,                                             \
   "<intfc> | sw_if_index <nn> [ip4-table <nn>] [ip6-table <nn>]\n"      \
   "  [l2-table <nn>] [del]")                                            \
+_(qos_record_enable_disable, "<record-source> <intfc> | sw_if_index <id> [disable]")
 
 /* List of command functions, CLI names map directly to functions */
 #define foreach_cli_function                                    \