aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/devices/tap
diff options
context:
space:
mode:
authorMohsin Kazmi <sykazmi@cisco.com>2020-01-30 13:36:02 +0100
committerAndrew Yourtchenko <ayourtch@gmail.com>2020-03-27 14:29:37 +0000
commit247bbe2cfa517d3b0498e3416ea5fe6855b6549e (patch)
treebac1b91e09921e2bfb2d2e813d19739a72793b9a /src/vnet/devices/tap
parentfd8da464989cf9b166848dd9f0bacbcbae156121 (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)
Diffstat (limited to 'src/vnet/devices/tap')
-rw-r--r--src/vnet/devices/tap/cli.c3
-rw-r--r--src/vnet/devices/tap/tap.c26
2 files changed, 9 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)