VPP-143: Correctly drop local l2tp packets when no session is found
[vpp.git] / vnet / vnet / l2tp / l2tp.c
index 36567f9..4380137 100644 (file)
@@ -334,8 +334,8 @@ int create_l2tpv3_ipv6_tunnel (l2t_main_t * lm,
 
   pool_get (lm->sessions, s);
   memset (s, 0, sizeof (*s));
-  memcpy (&s->our_address, our_address, sizeof (s->our_address));
-  memcpy (&s->client_address, client_address, sizeof (s->client_address));
+  clib_memcpy (&s->our_address, our_address, sizeof (s->our_address));
+  clib_memcpy (&s->client_address, client_address, sizeof (s->client_address));
   s->local_cookie[0] = clib_host_to_net_u64 (local_cookie);
   s->remote_cookie = clib_host_to_net_u64 (remote_cookie);
   s->local_session_id = local_session_id;
@@ -350,13 +350,13 @@ int create_l2tpv3_ipv6_tunnel (l2t_main_t * lm,
   switch (lm->lookup_type) {
   case L2T_LOOKUP_SRC_ADDRESS:
     src_address_copy = clib_mem_alloc (sizeof (*src_address_copy));
-    memcpy (src_address_copy, client_address, sizeof (*src_address_copy));
+    clib_memcpy (src_address_copy, client_address, sizeof (*src_address_copy));
     hash_set_mem (lm->session_by_src_address, src_address_copy, 
                   s - lm->sessions);
     break;
   case L2T_LOOKUP_DST_ADDRESS:
     dst_address_copy = clib_mem_alloc (sizeof (*dst_address_copy));
-    memcpy (dst_address_copy, our_address, sizeof (*dst_address_copy));
+    clib_memcpy (dst_address_copy, our_address, sizeof (*dst_address_copy));
     hash_set_mem (lm->session_by_dst_address, dst_address_copy, 
                   s - lm->sessions);
     break;
@@ -466,6 +466,7 @@ create_l2tpv3_tunnel_command_fn (vlib_main_t * vm,
   switch(rv)
     {
     case 0:
+      vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
       break;
     case VNET_API_ERROR_INVALID_VALUE:
       return clib_error_return (0, "session already exists...");
@@ -576,12 +577,12 @@ int l2tpv3_interface_enable_disable (vnet_main_t * vnm,
   ip_config_main_t * rx_cm = &lm->rx_config_mains[VNET_UNICAST];
   u32 ci;
   ip6_l2tpv3_config_t config;
-  ip6_rx_feature_type_t type;
+  u32 feature_index;
 
   if (pool_is_free_index (vnm->interface_main.sw_interfaces, sw_if_index))
     return VNET_API_ERROR_INVALID_SW_IF_INDEX;
 
-  type = IP6_RX_FEATURE_L2TPV3;
+  feature_index = im->ip6_unicast_rx_feature_l2tp_decap;
 
   ci = rx_cm->config_index_by_sw_if_index[sw_if_index];
   ci = (enable_disable
@@ -589,7 +590,7 @@ int l2tpv3_interface_enable_disable (vnet_main_t * vnm,
         : vnet_config_del_feature)
     (vlib_get_main(), &rx_cm->config_main,
      ci,
-     type,
+     feature_index,
      &config,
      sizeof (config));
   rx_cm->config_index_by_sw_if_index[sw_if_index] = ci;