aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/devices/tap/tap.c
diff options
context:
space:
mode:
authorMohsin Kazmi <sykazmi@cisco.com>2020-02-28 14:21:25 +0100
committerAndrew Yourtchenko <ayourtch@gmail.com>2020-03-04 20:08:24 +0000
commit488e74adf48406441434ba5ea7e03339e9c09751 (patch)
tree6fde7ff40034985f0e91c720d46dcf1739124ccc /src/vnet/devices/tap/tap.c
parent03bcbd3621867dac4c5dcb32b59f70424a7bc4d9 (diff)
tap: misc fixes
Ticket: VPPSUPP-58 1) Previously, host mtu can't be set if tap interface is in namespace. 2) generate the host mac address, if it is not provided. 3) fix the parameters for tap_create_v2 in vat. 4) fix the pretty print of parameters for tap_create_v2 in custom dump. Type: fix Change-Id: I18898af90dbd37d773a40b6535dd9c03c9984679 Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
Diffstat (limited to 'src/vnet/devices/tap/tap.c')
-rw-r--r--src/vnet/devices/tap/tap.c39
1 files changed, 19 insertions, 20 deletions
diff --git a/src/vnet/devices/tap/tap.c b/src/vnet/devices/tap/tap.c
index f2903a95adc..7f0a0e9943d 100644
--- a/src/vnet/devices/tap/tap.c
+++ b/src/vnet/devices/tap/tap.c
@@ -246,15 +246,14 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
}
}
- if (!ethernet_mac_address_is_zero (args->host_mac_addr))
+ if (ethernet_mac_address_is_zero (args->host_mac_addr))
+ ethernet_mac_address_generate (args->host_mac_addr);
+ args->error = vnet_netlink_set_link_addr (vif->ifindex,
+ args->host_mac_addr);
+ if (args->error)
{
- args->error = vnet_netlink_set_link_addr (vif->ifindex,
- args->host_mac_addr);
- 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)
@@ -320,18 +319,6 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
}
}
- /* switch back to old net namespace */
- if (args->host_namespace)
- {
- if (setns (old_netns_fd, CLONE_NEWNET) == -1)
- {
- args->rv = VNET_API_ERROR_SYSCALL_ERROR_2;
- args->error = clib_error_return_unix (0, "setns '%s'",
- args->host_namespace);
- goto error;
- }
- }
-
if (args->host_mtu_set)
{
args->error =
@@ -355,6 +342,18 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
args->host_mtu_size = tm->host_mtu_size;
}
+ /* switch back to old net namespace */
+ if (args->host_namespace)
+ {
+ if (setns (old_netns_fd, CLONE_NEWNET) == -1)
+ {
+ args->rv = VNET_API_ERROR_SYSCALL_ERROR_2;
+ args->error = clib_error_return_unix (0, "setns '%s'",
+ args->host_namespace);
+ goto error;
+ }
+ }
+
/* Set vhost memory table */
i = sizeof (struct vhost_memory) + sizeof (struct vhost_memory_region);
vhost_mem = clib_mem_alloc (i);