#include <vnet/ip/ip4_packet.h>
#include <vnet/ip/ip6_packet.h>
#include <vnet/ip/format.h>
-#include <linux/virtio_net.h>
-#include <linux/vhost.h>
#include <vnet/devices/virtio/virtio.h>
#include <vnet/devices/tap/tap.h>
args.tap_flags &= ~TAP_FLAG_GSO;
else if (unformat (line_input, "gso"))
args.tap_flags |= TAP_FLAG_GSO;
+ else if (unformat (line_input, "gro-coalesce"))
+ args.tap_flags |= TAP_FLAG_GRO_COALESCE;
else if (unformat (line_input, "csum-offload"))
args.tap_flags |= TAP_FLAG_CSUM_OFFLOAD;
else if (unformat (line_input, "persist"))
args.tap_flags |= TAP_FLAG_ATTACH;
else if (unformat (line_input, "tun"))
args.tap_flags |= TAP_FLAG_TUN;
+ else if (unformat (line_input, "packed"))
+ args.tap_flags |= TAP_FLAG_PACKED;
+ else if (unformat (line_input, "in-order"))
+ args.tap_flags |= TAP_FLAG_IN_ORDER;
else if (unformat (line_input, "hw-addr %U",
unformat_ethernet_address, args.mac_addr.bytes))
args.mac_addr_set = 1;
"[host-ip4-addr <ip4addr/mask>] [host-ip6-addr <ip6-addr>] "
"[host-ip4-gw <ip4-addr>] [host-ip6-gw <ip6-addr>] "
"[host-mac-addr <host-mac-address>] [host-if-name <name>] "
- "[host-mtu-size <size>] [no-gso|gso|csum-offload] [persist] [attach] [tun]",
+ "[host-mtu-size <size>] [no-gso|gso [gro-coalesce]|csum-offload] "
+ "[persist] [attach] [tun] [packed] [in-order]",
.function = tap_create_command_fn,
};
/* *INDENT-ON* */
unformat_input_t _line_input, *line_input = &_line_input;
u32 sw_if_index = ~0;
vnet_main_t *vnm = vnet_get_main ();
- int gso_enable = 0, gso_disable = 0;
+ int gso_enable = 0, gso_disable = 0, is_gro_coalesce = 0;
int csum_offload_enable = 0, csum_offload_disable = 0;
int rv = 0;
vnm, &sw_if_index))
;
else if (unformat (line_input, "gso-enable"))
- gso_enable = 1;
+ {
+ gso_enable = 1;
+ if (unformat (line_input, "gro-coalesce"))
+ is_gro_coalesce = 1;
+ }
else if (unformat (line_input, "gso-disable"))
gso_disable = 1;
else if (unformat (line_input, "csum-offload-enable"))
"please specify interface name or sw_if_index");
if (gso_enable)
- rv = tap_gso_enable_disable (vm, sw_if_index, 1);
+ rv = tap_gso_enable_disable (vm, sw_if_index, 1, is_gro_coalesce);
else if (csum_offload_enable)
rv = tap_csum_offload_enable_disable (vm, sw_if_index, 1);
else if (gso_disable)
- rv = tap_gso_enable_disable (vm, sw_if_index, 0);
+ rv = tap_gso_enable_disable (vm, sw_if_index, 0, 0);
else if (csum_offload_disable)
rv = tap_csum_offload_enable_disable (vm, sw_if_index, 0);
{
.path = "set tap offload",
.short_help = "set tap offload {<interface> | sw_if_index <sw_idx>}"
- " <gso-enable | gso-disable | csum-offload-enable | csum-offload-disable>",
+ " <gso-enable [gro-coalesce] | gso-disable | csum-offload-enable |"
+ "csum-offload-disable>",
.function = tap_offload_command_fn,
};
/* *INDENT-ON* */
if (vec_len (hw_if_indices) == 0)
{
/* *INDENT-OFF* */
- pool_foreach (vif, mm->interfaces,
+ pool_foreach (vif, mm->interfaces)
vec_add1 (hw_if_indices, vif->hw_if_index);
- );
/* *INDENT-ON* */
}
if (vec_len (hw_if_indices) == 0)
{
/* *INDENT-OFF* */
- pool_foreach (vif, mm->interfaces,
+ pool_foreach (vif, mm->interfaces)
vec_add1 (hw_if_indices, vif->hw_if_index);
- );
/* *INDENT-ON* */
}