vxlan: vxlan/vxlan.api API cleanup
[vpp.git] / src / vnet / l2tp / l2tp.c
index a59c789..42ecfa6 100644 (file)
@@ -254,20 +254,11 @@ l2tpv3_name_renumber (vnet_hw_interface_t * hi, u32 new_dev_instance)
   return 0;
 }
 
-static uword
-dummy_interface_tx (vlib_main_t * vm,
-                   vlib_node_runtime_t * node, vlib_frame_t * frame)
-{
-  clib_warning ("you shouldn't be here, leaking buffers...");
-  return frame->n_vectors;
-}
-
 /* *INDENT-OFF* */
 VNET_DEVICE_CLASS (l2tpv3_device_class,static) = {
   .name = "L2TPv3",
   .format_device_name = format_l2tpv3_name,
   .name_renumber = l2tpv3_name_renumber,
-  .tx_function = dummy_interface_tx,
 };
 /* *INDENT-ON* */
 
@@ -334,7 +325,7 @@ create_l2tpv3_ipv6_tunnel (l2t_main_t * lm,
     return VNET_API_ERROR_INVALID_VALUE;
 
   pool_get (lm->sessions, s);
-  memset (s, 0, sizeof (*s));
+  clib_memset (s, 0, sizeof (*s));
   clib_memcpy (&s->our_address, our_address, sizeof (s->our_address));
   clib_memcpy (&s->client_address, client_address,
               sizeof (s->client_address));
@@ -408,6 +399,12 @@ create_l2tpv3_ipv6_tunnel (l2t_main_t * lm,
   if (sw_if_index)
     *sw_if_index = hi->sw_if_index;
 
+  if (!lm->proto_registered)
+    {
+      ip6_register_protocol (IP_PROTOCOL_L2TP, l2t_decap_local_node.index);
+      lm->proto_registered = true;
+    }
+
   return 0;
 }
 
@@ -626,7 +623,7 @@ l2tpv3_interface_enable_disable (vnet_main_t * vnm,
   return 0;
 }
 
-/* Enable/disable L2TPv3 intercept on IP6 fowarding path */
+/* Enable/disable L2TPv3 intercept on IP6 forwarding path */
 static clib_error_t *
 set_ip6_l2tpv3 (vlib_main_t * vm,
                unformat_input_t * input, vlib_cli_command_t * cmd)
@@ -738,9 +735,10 @@ l2tp_init (vlib_main_t * vm)
   pi = ip_get_protocol_info (im, IP_PROTOCOL_L2TP);
   pi->unformat_pg_edit = unformat_pg_l2tp_header;
 
+  lm->proto_registered = false;
+
   /* insure these nodes are included in build */
   l2tp_encap_init (vm);
-  l2tp_decap_init ();
 
   return 0;
 }