From 247bbe2cfa517d3b0498e3416ea5fe6855b6549e Mon Sep 17 00:00:00 2001 From: Mohsin Kazmi Date: Thu, 30 Jan 2020 13:36:02 +0100 Subject: tap: fix the host mac address Tap configuration code sets the host mac address two time. This patch fixes it. Type: fix Change-Id: I7bebb9b7f25352a8a9a98bae6a0636757c0cea9c Signed-off-by: Mohsin Kazmi (cherry picked from commit 3039753eda526e63d57a09debd3762e5590459df) --- src/vnet/devices/tap/cli.c | 3 ++- src/vnet/devices/tap/tap.c | 26 +++++++------------------- src/vnet/devices/virtio/virtio.c | 2 ++ 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/vnet/devices/tap/cli.c b/src/vnet/devices/tap/cli.c index 8d5e3b44e31..8d59210c293 100644 --- a/src/vnet/devices/tap/cli.c +++ b/src/vnet/devices/tap/cli.c @@ -57,7 +57,8 @@ tap_create_command_fn (vlib_main_t * vm, unformat_input_t * input, else if (unformat (line_input, "host-ns %s", &args.host_namespace)) ; else if (unformat (line_input, "host-mac-addr %U", - unformat_ethernet_address, args.host_mac_addr)) + unformat_ethernet_address, + args.host_mac_addr.bytes)) ; else if (unformat (line_input, "host-bridge %s", &args.host_bridge)) ; diff --git a/src/vnet/devices/tap/tap.c b/src/vnet/devices/tap/tap.c index 3e36b6c3e74..067905c64b5 100644 --- a/src/vnet/devices/tap/tap.c +++ b/src/vnet/devices/tap/tap.c @@ -170,10 +170,6 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args) vif->num_rxqs = args->num_rx_queues; num_q_pairs = clib_max (vif->num_rxqs, vif->num_txqs); - if (ethernet_mac_address_is_zero (args->host_mac_addr.bytes)) - ethernet_mac_address_generate (args->host_mac_addr.bytes); - clib_memcpy (vif->host_mac_addr, args->host_mac_addr.bytes, 6); - if ((vif->tap_fd = tfd = open ("/dev/net/tun", O_RDWR | O_NONBLOCK)) < 0) { args->rv = VNET_API_ERROR_SYSCALL_ERROR_2; @@ -245,13 +241,6 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args) tap_log_dbg (vif, "TUNSETOFFLOAD: fd %d offload 0x%lx", tfd, offload); _IOCTL (tfd, TUNSETOFFLOAD, offload); - clib_memset (&ifr, 0, sizeof (ifr)); - ifr.ifr_addr.sa_family = ARPHRD_ETHER; - clib_memcpy (ifr.ifr_hwaddr.sa_data, vif->host_mac_addr, 6); - tap_log_dbg (vif, "SIOCSIFHWADDR: fd %d hwaddr %U", tfd, - format_hex_bytes, ifr.ifr_hwaddr.sa_data, 6); - _IOCTL (tfd, SIOCSIFHWADDR, (void *) &ifr); - /* open vhost-net fd for each queue pair and set ownership */ for (i = 0; i < num_q_pairs; i++) { @@ -350,15 +339,14 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args) } } - if (!ethernet_mac_address_is_zero (args->host_mac_addr.bytes)) + if (ethernet_mac_address_is_zero (args->host_mac_addr.bytes)) + ethernet_mac_address_generate (args->host_mac_addr.bytes); + args->error = vnet_netlink_set_link_addr (vif->ifindex, + args->host_mac_addr.bytes); + if (args->error) { - args->error = vnet_netlink_set_link_addr (vif->ifindex, - args->host_mac_addr.bytes); - if (args->error) - { - args->rv = VNET_API_ERROR_NETLINK_ERROR; - goto error; - } + args->rv = VNET_API_ERROR_NETLINK_ERROR; + goto error; } if (args->host_bridge) diff --git a/src/vnet/devices/virtio/virtio.c b/src/vnet/devices/virtio/virtio.c index 0f5e441df64..d78c9114e5c 100644 --- a/src/vnet/devices/virtio/virtio.c +++ b/src/vnet/devices/virtio/virtio.c @@ -304,6 +304,8 @@ virtio_show (vlib_main_t * vm, u32 * hw_if_indices, u8 show_descr, u32 type) if (vif->host_mtu_size) vlib_cli_output (vm, " host-mtu-size \"%d\"", vif->host_mtu_size); + vlib_cli_output (vm, " host-mac-addr: %U", + format_ethernet_address, vif->host_mac_addr); vec_foreach_index (i, vif->vhost_fds) str = format (str, " %d", vif->vhost_fds[i]); -- cgit 1.2.3-korg