IPv6: Make link-local configurable per-interface (VPP-1446)
[vpp.git] / src / vat / api_format.c
index efd116d..599b29b 100644 (file)
@@ -18,6 +18,7 @@
  */
 
 #include <vat/vat.h>
+#include <vpp/api/types.h>
 #include <vppinfra/socket.h>
 #include <vlibapi/api.h>
 #include <vlibmemory/api.h>
@@ -53,6 +54,8 @@
 #include <vnet/bonding/node.h>
 #include <vnet/qos/qos_types.h>
 #include "vat/json_format.h"
+#include <vnet/ip/ip_types_api.h>
+#include <vnet/ethernet/ethernet_types_api.h>
 
 #include <inttypes.h>
 #include <sys/stat.h>
 #if VPP_API_TEST_BUILTIN == 0
 #include <netdb.h>
 
+/* *INDENT-OFF* */
+const mac_address_t ZERO_MAC_ADDRESS = {
+  .bytes = {
+    0, 0, 0, 0, 0, 0,
+  },
+};
+/* *INDENT-ON* */
+
 u32
 vl (void *p)
 {
@@ -5458,7 +5469,6 @@ _(dhcp_proxy_set_vss_reply)                             \
 _(dhcp_client_config_reply)                             \
 _(set_ip_flow_hash_reply)                               \
 _(sw_interface_ip6_enable_disable_reply)                \
-_(sw_interface_ip6_set_link_local_address_reply)        \
 _(ip6nd_proxy_add_del_reply)                            \
 _(sw_interface_ip6nd_ra_prefix_reply)                   \
 _(sw_interface_ip6nd_ra_config_reply)                   \
@@ -5684,8 +5694,6 @@ _(DHCP_CLIENT_CONFIG_REPLY, dhcp_client_config_reply)                   \
 _(SET_IP_FLOW_HASH_REPLY, set_ip_flow_hash_reply)                       \
 _(SW_INTERFACE_IP6_ENABLE_DISABLE_REPLY,                                \
   sw_interface_ip6_enable_disable_reply)                                \
-_(SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS_REPLY,                        \
-  sw_interface_ip6_set_link_local_address_reply)                        \
 _(IP6ND_PROXY_ADD_DEL_REPLY, ip6nd_proxy_add_del_reply)                 \
 _(IP6ND_PROXY_DETAILS, ip6nd_proxy_details)                             \
 _(SW_INTERFACE_IP6ND_RA_PREFIX_REPLY,                                   \
@@ -7815,16 +7823,17 @@ api_bridge_flags (vat_main_t * vam)
 static int
 api_bd_ip_mac_add_del (vat_main_t * vam)
 {
+  vl_api_address_t ip = VL_API_ZERO_ADDRESS;
+  vl_api_mac_address_t mac = VL_API_ZERO_MAC_ADDRESS;
   unformat_input_t *i = vam->input;
   vl_api_bd_ip_mac_add_del_t *mp;
+  ip46_type_t type;
   u32 bd_id;
   u8 is_ipv6 = 0;
   u8 is_add = 1;
   u8 bd_id_set = 0;
   u8 ip_set = 0;
   u8 mac_set = 0;
-  ip4_address_t v4addr;
-  ip6_address_t v6addr;
   u8 macaddr[6];
   int ret;
 
@@ -7836,16 +7845,11 @@ api_bd_ip_mac_add_del (vat_main_t * vam)
        {
          bd_id_set++;
        }
-      else if (unformat (i, "%U", unformat_ip4_address, &v4addr))
+      else if (unformat (i, "%U", unformat_vl_api_address, &ip))
        {
          ip_set++;
        }
-      else if (unformat (i, "%U", unformat_ip6_address, &v6addr))
-       {
-         ip_set++;
-         is_ipv6++;
-       }
-      else if (unformat (i, "%U", unformat_ethernet_address, macaddr))
+      else if (unformat (i, "%U", unformat_vl_api_mac_address, &mac))
        {
          mac_set++;
        }
@@ -7874,13 +7878,11 @@ api_bd_ip_mac_add_del (vat_main_t * vam)
   M (BD_IP_MAC_ADD_DEL, mp);
 
   mp->bd_id = ntohl (bd_id);
-  mp->is_ipv6 = is_ipv6;
   mp->is_add = is_add;
-  if (is_ipv6)
-    clib_memcpy (mp->ip_address, &v6addr, sizeof (v6addr));
-  else
-    clib_memcpy (mp->ip_address, &v4addr, sizeof (v4addr));
-  clib_memcpy (mp->mac_address, macaddr, 6);
+
+  clib_memcpy (&mp->ip, &ip, sizeof (ip));
+  clib_memcpy (&mp->mac, &mac, sizeof (mac));
+
   S (mp);
   W (ret);
   return ret;
@@ -10680,55 +10682,6 @@ api_sw_interface_ip6_enable_disable (vat_main_t * vam)
   return ret;
 }
 
-static int
-api_sw_interface_ip6_set_link_local_address (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_sw_interface_ip6_set_link_local_address_t *mp;
-  u32 sw_if_index;
-  u8 sw_if_index_set = 0;
-  u8 v6_address_set = 0;
-  ip6_address_t v6address;
-  int ret;
-
-  /* Parse args required to build the message */
-  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_ip6_address, &v6address))
-       v6_address_set = 1;
-      else
-       break;
-    }
-
-  if (sw_if_index_set == 0)
-    {
-      errmsg ("missing interface name or sw_if_index");
-      return -99;
-    }
-  if (!v6_address_set)
-    {
-      errmsg ("no address set");
-      return -99;
-    }
-
-  /* Construct the API message */
-  M (SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS, mp);
-
-  mp->sw_if_index = ntohl (sw_if_index);
-  clib_memcpy (mp->address, &v6address, sizeof (v6address));
-
-  /* send it... */
-  S (mp);
-
-  /* Wait for a reply, return good/bad news  */
-  W (ret);
-  return ret;
-}
-
 static int
 api_ip6nd_proxy_add_del (vat_main_t * vam)
 {
@@ -23762,8 +23715,6 @@ _(set_ip_flow_hash,                                                     \
   "vrf <n> [src] [dst] [sport] [dport] [proto] [reverse] [ipv6]")       \
 _(sw_interface_ip6_enable_disable,                                      \
   "<intfc> | sw_if_index <id> enable | disable")                        \
-_(sw_interface_ip6_set_link_local_address,                              \
-  "<intfc> | sw_if_index <id> <ip6-address>/<mask-width>")              \
 _(ip6nd_proxy_add_del,                                                  \
   "<intfc> | sw_if_index <id> <ip6-address>")                           \
 _(ip6nd_proxy_dump, "")                                                 \