Skip to content

Commit

Permalink
tap: fix the host mac address
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mohsinkazmi authored and dmarion committed Jan 30, 2020
1 parent ffad890 commit 3039753
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 20 deletions.
3 changes: 2 additions & 1 deletion src/vnet/devices/tap/cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -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))
;
Expand Down
26 changes: 7 additions & 19 deletions src/vnet/devices/tap/tap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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++)
{
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions src/vnet/devices/virtio/virtio.c
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,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]);
Expand Down

0 comments on commit 3039753

Please sign in to comment.