Coding standards cleanup for vnet/vnet/ip, VPP-255
[vpp.git] / vnet / vnet / unix / tapcli.c
index 608b220..9862a2b 100644 (file)
 
 #include <vnet/ethernet/ethernet.h>
 
-#if DPDK == 1
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
-
+#include <vnet/feature/feature.h>
+#include <vnet/devices/devices.h>
 #include <vnet/unix/tapcli.h>
 
 static vnet_device_class_t tapcli_dev_class;
@@ -239,16 +237,6 @@ VLIB_REGISTER_NODE (tapcli_tx_node,static) = {
   .vector_size = 4,
 };
 
-enum {
-  TAPCLI_RX_NEXT_IP4_INPUT,
-  TAPCLI_RX_NEXT_IP6_INPUT,
-  TAPCLI_RX_NEXT_ETHERNET_INPUT,
-  TAPCLI_RX_NEXT_DROP,
-  TAPCLI_RX_N_NEXT,
-};
-
-
-
 /**
  * @brief Dispatch tapcli RX node function for node tap_cli_rx
  *
@@ -351,24 +339,24 @@ static uword tapcli_rx_iface(vlib_main_t * vm,
         (n_bytes_in_packet > buffer_size) ? n_bytes_in_packet - buffer_size : 0;
     b_first->flags |= VLIB_BUFFER_TOTAL_LENGTH_VALID;
 
-    /* Ensure mbufs are updated */
-    vlib_buffer_chain_validate(vm, b_first);
-
     VLIB_BUFFER_TRACE_TRAJECTORY_INIT(b_first);
 
     vnet_buffer (b_first)->sw_if_index[VLIB_RX] = ti->sw_if_index;
     vnet_buffer (b_first)->sw_if_index[VLIB_TX] = (u32)~0;
 
     b_first->error = node->errors[TAPCLI_ERROR_NONE];
-    next_index = TAPCLI_RX_NEXT_ETHERNET_INPUT;
+    next_index = VNET_DEVICE_INPUT_NEXT_ETHERNET_INPUT;
     next_index = (ti->per_interface_next_index != ~0) ?
         ti->per_interface_next_index : next_index;
-    next_index = admin_down ? TAPCLI_RX_NEXT_DROP : next_index;
+    next_index = admin_down ? VNET_DEVICE_INPUT_NEXT_DROP : next_index;
 
     to_next[0] = bi_first;
     to_next++;
     n_left_to_next--;
 
+    vnet_feature_start_device_input_x1 (ti->sw_if_index, &next_index, 
+                                        b_first, 0);
+
     vlib_validate_buffer_enqueue_x1 (vm, node, next,
                                      to_next, n_left_to_next,
                                      bi_first, next_index);
@@ -452,20 +440,13 @@ static char * tapcli_rx_error_strings[] = {
 VLIB_REGISTER_NODE (tapcli_rx_node, static) = {
   .function = tapcli_rx,
   .name = "tapcli-rx",
+  .sibling_of = "device-input",
   .type = VLIB_NODE_TYPE_INPUT,
   .state = VLIB_NODE_STATE_INTERRUPT,
   .vector_size = 4,
   .n_errors = TAPCLI_N_ERROR,
   .error_strings = tapcli_rx_error_strings,
   .format_trace = format_tapcli_rx_trace,
-
-  .n_next_nodes = TAPCLI_RX_N_NEXT,
-  .next_nodes = {
-    [TAPCLI_RX_NEXT_IP4_INPUT] = "ip4-input-no-checksum",
-    [TAPCLI_RX_NEXT_IP6_INPUT] = "ip6-input",
-    [TAPCLI_RX_NEXT_DROP] = "error-drop",
-    [TAPCLI_RX_NEXT_ETHERNET_INPUT] = "ethernet-input",
-  },
 };
 
 
@@ -585,6 +566,7 @@ tapcli_nopunt_frame (vlib_main_t * vm,
 
 VNET_HW_INTERFACE_CLASS (tapcli_interface_class,static) = {
   .name = "tapcli",
+  .flags = VNET_HW_INTERFACE_CLASS_FLAG_P2P,
 };
 
 /**
@@ -736,7 +718,6 @@ VNET_DEVICE_CLASS (tapcli_dev_class,static) = {
   .rx_redirect_to_node = tapcli_set_interface_next_node,
   .name_renumber = tap_name_renumber,
   .admin_up_down_function = tapcli_interface_admin_up_down,
-  .no_flatten_output_chains = 1,
 };
 
 /**
@@ -802,10 +783,10 @@ static tapcli_interface_t *tapcli_get_new_tapif()
 /**
  * @brief Connect a TAP interface
  *
- * @param *vm - vlib_main_t
- * @param *intfc_name - u8
- * @param *hwaddr_arg - u8
- * @param *sw_if_index - u32
+ * @param vm - vlib_main_t
+ * @param intfc_name - u8
+ * @param hwaddr_arg - u8
+ * @param sw_if_indexp - u32
  *
  * @return rc - int
  *
@@ -1025,10 +1006,11 @@ static int tapcli_tap_disconnect (tapcli_interface_t *ti)
     unix_file_del (&unix_main, unix_main.file_pool + ti->unix_file_index);
     ti->unix_file_index = ~0;
   }
+  else
+    close(ti->unix_fd);
 
   hash_unset (tm->tapcli_interface_index_by_unix_fd, ti->unix_fd);
   hash_unset (tm->tapcli_interface_index_by_sw_if_index, ti->sw_if_index);
-  close(ti->unix_fd);
   close(ti->provision_fd);
   ti->unix_fd = -1;
   ti->provision_fd = -1;