API refactoring : af_packet
[vpp.git] / vpp / vpp-api / api.c
index 3868af9..496c577 100644 (file)
@@ -82,7 +82,6 @@
 #include <vnet/cop/cop.h>
 #include <vnet/ip/ip6_hop_by_hop.h>
 #include <vnet/ip/ip_source_and_port_range_check.h>
-#include <vnet/devices/af_packet/af_packet.h>
 #include <vnet/policer/policer.h>
 #include <vnet/devices/netmap/netmap.h>
 #include <vnet/flow/flow_report.h>
@@ -265,8 +264,6 @@ _(LISP_GET_MAP_REQUEST_ITR_RLOCS, lisp_get_map_request_itr_rlocs)       \
 _(SHOW_LISP_PITR, show_lisp_pitr)                                       \
 _(SHOW_LISP_MAP_REQUEST_MODE, show_lisp_map_request_mode)               \
 _(SR_MULTICAST_MAP_ADD_DEL, sr_multicast_map_add_del)                   \
-_(AF_PACKET_CREATE, af_packet_create)                                   \
-_(AF_PACKET_DELETE, af_packet_delete)                                   \
 _(POLICER_ADD_DEL, policer_add_del)                                     \
 _(POLICER_DUMP, policer_dump)                                           \
 _(POLICER_CLASSIFY_SET_INTERFACE, policer_classify_set_interface)       \
@@ -3104,6 +3101,7 @@ static void vl_api_vxlan_add_del_tunnel_t_handler
   u32 encap_fib_index;
   uword *p;
   ip4_main_t *im = &ip4_main;
+  vnet_main_t *vnm = vnet_get_main ();
   u32 sw_if_index = ~0;
 
   p = hash_get (im->fib_index_by_table_id, ntohl (mp->encap_vrf_id));
@@ -3129,6 +3127,13 @@ static void vl_api_vxlan_add_del_tunnel_t_handler
       goto out;
     }
   a->mcast_sw_if_index = ntohl (mp->mcast_sw_if_index);
+  if (ip46_address_is_multicast (&a->dst) &&
+      pool_is_free_index (vnm->interface_main.sw_interfaces,
+                         a->mcast_sw_if_index))
+    {
+      rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
+      goto out;
+    }
   a->encap_fib_index = encap_fib_index;
   a->decap_next_index = ntohl (mp->decap_next_index);
   a->vni = ntohl (mp->vni);
@@ -5457,50 +5462,6 @@ vl_api_ioam_disable_t_handler (vl_api_ioam_disable_t * mp)
   REPLY_MACRO (VL_API_IOAM_DISABLE_REPLY);
 }
 
-static void
-vl_api_af_packet_create_t_handler (vl_api_af_packet_create_t * mp)
-{
-  vlib_main_t *vm = vlib_get_main ();
-  vl_api_af_packet_create_reply_t *rmp;
-  int rv = 0;
-  u8 *host_if_name = NULL;
-  u32 sw_if_index;
-
-  host_if_name = format (0, "%s", mp->host_if_name);
-  vec_add1 (host_if_name, 0);
-
-  rv = af_packet_create_if (vm, host_if_name,
-                           mp->use_random_hw_addr ? 0 : mp->hw_addr,
-                           &sw_if_index);
-
-  vec_free (host_if_name);
-
-  /* *INDENT-OFF* */
-  REPLY_MACRO2(VL_API_AF_PACKET_CREATE_REPLY,
-  ({
-    rmp->sw_if_index = clib_host_to_net_u32(sw_if_index);
-  }));
-  /* *INDENT-ON* */
-}
-
-static void
-vl_api_af_packet_delete_t_handler (vl_api_af_packet_delete_t * mp)
-{
-  vlib_main_t *vm = vlib_get_main ();
-  vl_api_af_packet_delete_reply_t *rmp;
-  int rv = 0;
-  u8 *host_if_name = NULL;
-
-  host_if_name = format (0, "%s", mp->host_if_name);
-  vec_add1 (host_if_name, 0);
-
-  rv = af_packet_delete_if (vm, host_if_name);
-
-  vec_free (host_if_name);
-
-  REPLY_MACRO (VL_API_AF_PACKET_DELETE_REPLY);
-}
-
 static void
 vl_api_policer_add_del_t_handler (vl_api_policer_add_del_t * mp)
 {
@@ -6868,10 +6829,10 @@ send_bfd_udp_session_details (unix_shared_memory_queue_t * q, u32 context,
     }
   else
     {
-      clib_memcpy (mp->local_addr, &key->local_addr.ip4.data,
-                  sizeof (&key->local_addr.ip4.data));
-      clib_memcpy (mp->peer_addr, &key->peer_addr.ip4.data,
-                  sizeof (&key->peer_addr.ip4.data));
+      clib_memcpy (mp->local_addr, key->local_addr.ip4.data,
+                  sizeof (key->local_addr.ip4.data));
+      clib_memcpy (mp->peer_addr, key->peer_addr.ip4.data,
+                  sizeof (key->peer_addr.ip4.data));
     }
 
   vl_msg_api_send_shmem (q, (u8 *) & mp);