diff options
author | Mohsin Kazmi <sykazmi@cisco.com> | 2020-01-30 13:36:02 +0100 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2020-03-27 14:29:37 +0000 |
commit | 247bbe2cfa517d3b0498e3416ea5fe6855b6549e (patch) | |
tree | bac1b91e09921e2bfb2d2e813d19739a72793b9a | |
parent | fd8da464989cf9b166848dd9f0bacbcbae156121 (diff) |
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 <sykazmi@cisco.com>
(cherry picked from commit 3039753eda526e63d57a09debd3762e5590459df)
-rw-r--r-- | src/vnet/devices/tap/cli.c | 3 | ||||
-rw-r--r-- | src/vnet/devices/tap/tap.c | 26 | ||||
-rw-r--r-- | 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]); |