VPP-328: Add dump call for listing LISP VNIs
[vpp.git] / vnet / vnet / unix / tapcli.c
index a299936..7e2ee06 100644 (file)
@@ -249,7 +249,9 @@ static uword tapcli_rx_iface(vlib_main_t * vm,
           vlib_buffer_alloc_from_free_list(vm, &tm->rx_buffers[len],
                             VLIB_FRAME_SIZE - len, VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
       if (PREDICT_FALSE(vec_len(tm->rx_buffers) < tm->mtu_buffers)) {
-        clib_warning("vlib_buffer_alloc failed");
+          vlib_node_increment_counter(vm, tapcli_rx_node.index,
+                                      TAPCLI_ERROR_BUFFER_ALLOC,
+                                      tm->mtu_buffers - vec_len(tm->rx_buffers));
         break;
       }
     }
@@ -261,7 +263,6 @@ static uword tapcli_rx_iface(vlib_main_t * vm,
     vec_validate (tm->iovecs, tm->mtu_buffers - 1);
     for (j = 0; j < tm->mtu_buffers; j++) {
       b = vlib_get_buffer (vm, tm->rx_buffers[i_rx - j]);
-      b->clone_count = 0;
       tm->iovecs[j].iov_base = b->data;
       tm->iovecs[j].iov_len = buffer_size;
     }
@@ -369,7 +370,7 @@ tapcli_rx (vlib_main_t * vm,
   }));
 
   if (vec_len (ready_interface_indices) == 0)
-    return 1;
+    return 0;
 
   for (i = 0; i < vec_len(ready_interface_indices); i++)
   {
@@ -757,24 +758,28 @@ int vnet_tap_connect (vlib_main_t * vm, u8 * intfc_name, u8 *hwaddr_arg,
       goto error;
     }
 
-  if (ioctl (dev_tap_fd, SIOCGIFHWADDR, &ifr) < 0)
-    {
-      rv = VNET_API_ERROR_SYSCALL_ERROR_1;
-      goto error;
-    }
-
   ti = tapcli_get_new_tapif();
   ti->per_interface_next_index = ~0;
 
   if (hwaddr_arg != 0)
     clib_memcpy(hwaddr, hwaddr_arg, 6);
+  else
+    {
+      f64 now = vlib_time_now(vm);
+      u32 rnd;
+      rnd = (u32) (now * 1e6);
+      rnd = random_u32 (&rnd);
+
+      memcpy (hwaddr+2, &rnd, sizeof(rnd));
+      hwaddr[0] = 2;
+      hwaddr[1] = 0xfe;
+    }
 
   error = ethernet_register_interface
         (tm->vnet_main,
          tapcli_dev_class.index,
          ti - tm->tapcli_interfaces /* device instance */,
-         hwaddr_arg != 0 ? hwaddr :
-         (u8 *) ifr.ifr_hwaddr.sa_data /* ethernet address */,
+         hwaddr /* ethernet address */,
          &ti->hw_if_index, 
          tapcli_flag_change);
 
@@ -818,7 +823,8 @@ int vnet_tap_connect (vlib_main_t * vm, u8 * intfc_name, u8 *hwaddr_arg,
 
  error:
   close (dev_net_tun_fd);
-  close (dev_tap_fd);
+  if (dev_tap_fd >= 0)
+      close (dev_tap_fd);
 
   return rv;
 }
@@ -996,7 +1002,7 @@ tap_modify_command_fn (vlib_main_t * vm,
 
 VLIB_CLI_COMMAND (tap_modify_command, static) = {
     .path = "tap modify",
-    .short_help = "tap modify <vpp-tap-intfc-name> <linux-intfc-name> [hwaddr [<addr> | random]]",
+    .short_help = "tap modify <vpp-tap-intfc-name> <linux-intfc-name> [hwaddr <addr>]",
     .function = tap_modify_command_fn,
 };
 
@@ -1007,7 +1013,6 @@ tap_connect_command_fn (vlib_main_t * vm,
 {
   u8 * intfc_name;
   tapcli_main_t * tm = &tapcli_main;
-  int user_hwaddr = 0;
   u8 hwaddr[6];
   u8 *hwaddr_arg = 0;
   u32 sw_if_index;
@@ -1025,21 +1030,11 @@ tap_connect_command_fn (vlib_main_t * vm,
   
   if (unformat(input, "hwaddr %U", unformat_ethernet_address,
                &hwaddr))
-    user_hwaddr = 1;
+    hwaddr_arg = hwaddr;
 
+  /* It is here for backward compatibility */
   if (unformat(input, "hwaddr random"))
-    {
-      f64 now = vlib_time_now(vm);
-      u32 rnd;
-      rnd = (u32) (now * 1e6);
-      rnd = random_u32 (&rnd);
-
-      clib_memcpy (hwaddr+2, &rnd, sizeof(rnd));
-      hwaddr[0] = 2;
-      hwaddr[1] = 0xfe;
-      user_hwaddr = 1;
-    }
-  if (user_hwaddr) hwaddr_arg = hwaddr;
+    ;
 
   int rv = vnet_tap_connect(vm, intfc_name, hwaddr_arg, &sw_if_index);
   if (rv) {
@@ -1090,17 +1085,13 @@ tap_connect_command_fn (vlib_main_t * vm,
     return 0;
   }
 
-  vlib_cli_output (vm, "Created %U for Linux tap '%s'",
-                  format_vnet_sw_if_index_name, tm->vnet_main, 
-                  sw_if_index, intfc_name);
-                   
+  vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
   return 0;
-
   }
 
 VLIB_CLI_COMMAND (tap_connect_command, static) = {
     .path = "tap connect",
-    .short_help = "tap connect <intfc-name> [hwaddr [<addr> | random]]",
+    .short_help = "tap connect <intfc-name> [hwaddr <addr>]",
     .function = tap_connect_command_fn,
 };