vhost: vhost interface hardware address not set 46/30946/2
authorSteven Luong <sluong@cisco.com>
Wed, 27 Jan 2021 07:44:19 +0000 (23:44 -0800)
committerBeno�t Ganne <bganne@cisco.com>
Wed, 27 Jan 2021 16:47:03 +0000 (16:47 +0000)
The check args->hwaddr is always true and it always copies the
mac address from args->hwaddr even though none was set.

Check args->use_custom_mac instead.

Type: fix
Fixes: gerrit 29970

Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: I0c51bf1ea79b02c4fbdc3c52e694f186bdd96600

src/vnet/devices/virtio/vhost_user.c
src/vnet/devices/virtio/vhost_user.h
src/vnet/devices/virtio/vhost_user_api.c

index b45b18b..426f03c 100644 (file)
@@ -1521,17 +1521,18 @@ error:
  * Create ethernet interface for vhost user interface.
  */
 static void
-vhost_user_create_ethernet (vnet_main_t * vnm, vlib_main_t * vm,
-                           vhost_user_intf_t * vui, u8 * hwaddress)
+vhost_user_create_ethernet (vnet_main_t *vnm, vlib_main_t *vm,
+                           vhost_user_intf_t *vui,
+                           vhost_user_create_if_args_t *args)
 {
   vhost_user_main_t *vum = &vhost_user_main;
   u8 hwaddr[6];
   clib_error_t *error;
 
   /* create hw and sw interface */
-  if (hwaddress)
+  if (args->use_custom_mac)
     {
-      clib_memcpy (hwaddr, hwaddress, 6);
+      clib_memcpy (hwaddr, args->hwaddr, 6);
     }
   else
     {
@@ -1667,7 +1668,7 @@ vhost_user_create_if (vnet_main_t * vnm, vlib_main_t * vm,
   /* Protect the uninitialized vui from being dispatched by rx/tx */
   vlib_worker_thread_barrier_sync (vm);
   pool_get (vhost_user_main.vhost_user_interfaces, vui);
-  vhost_user_create_ethernet (vnm, vm, vui, args->hwaddr);
+  vhost_user_create_ethernet (vnm, vm, vui, args);
   vlib_worker_thread_barrier_release (vm);
 
   vhost_user_vui_init (vnm, vui, server_sock_fd, args, &sw_if_idx);
@@ -1775,7 +1776,7 @@ vhost_user_connect_command_fn (vlib_main_t * vm,
        ;
       else if (unformat (line_input, "hwaddr %U", unformat_ethernet_address,
                         args.hwaddr))
-       ;
+       args.use_custom_mac = 1;
       else if (unformat (line_input, "renumber %d",
                         &args.custom_dev_instance))
        args.renumber = 1;
index 06c78bc..63a0bc0 100644 (file)
@@ -109,6 +109,7 @@ typedef struct
   u8 enable_gso;
   u8 enable_packed;
   u8 enable_event_idx;
+  u8 use_custom_mac;
 
   /* return */
   u32 sw_if_index;
index a4e027f..8665688 100644 (file)
@@ -86,6 +86,7 @@ vl_api_create_vhost_user_if_t_handler (vl_api_create_vhost_user_if_t * mp)
   if (mp->use_custom_mac)
     mac_address_decode (mp->mac_address, (mac_address_t *) args.hwaddr);
 
+  args.use_custom_mac = mp->use_custom_mac;
   args.is_server = mp->is_server;
   args.sock_filename = (char *) mp->sock_filename;
   args.renumber = mp->renumber;