int i;
clib_error_t *error;
vlib_main_t *vm = vlib_get_main ();
- vnet_main_t *vnm = vnet_get_main ();
vlib_thread_main_t *tm = vlib_get_thread_main ();
vnet_device_main_t *vdm = &vnet_device_main;
vnet_sw_interface_t *sw;
(hi->flags & VNET_HW_INTERFACE_FLAG_SUPPORTS_TX_L4_CKSUM_OFFLOAD))
{
hi->flags |= VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO;
- vnm->interface_main.gso_interface_count++;
xd->port_conf.txmode.offloads |= DEV_TX_OFFLOAD_TCP_TSO |
DEV_TX_OFFLOAD_UDP_TSO;
}
vmxnet3_device_init (vlib_main_t * vm, vmxnet3_device_t * vd,
vmxnet3_create_if_args_t * args)
{
- vnet_main_t *vnm = vnet_get_main ();
clib_error_t *error = 0;
u32 ret, i, size;
vlib_thread_main_t *tm = vlib_get_thread_main ();
if (args->enable_gso && (vd->version >= 3))
{
vd->gso_enable = 1;
- vnm->interface_main.gso_interface_count++;
}
vmxnet3_reg_write (vd, 1, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK);
clib_memset (vd, 0, sizeof (*vd));
pool_put (vmxm->devices, vd);
- if (vd->gso_enable)
- vnm->interface_main.gso_interface_count--;
}
/*
if (args->tap_flags & TAP_FLAG_GSO)
{
hw->flags |= VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO;
- vnm->interface_main.gso_interface_count++;
}
vnet_hw_interface_set_input_node (vnm, vif->hw_if_index,
virtio_input_node.index);
if (vif->type != VIRTIO_IF_TYPE_TAP)
return VNET_API_ERROR_INVALID_INTERFACE;
- /* decrement if this was a GSO interface */
- if (hw->flags & VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO)
- vnm->interface_main.gso_interface_count--;
-
/* bring down the interface */
vnet_hw_interface_set_flags (vnm, vif->hw_if_index, 0);
vnet_sw_interface_set_flags (vnm, vif->sw_if_index, 0);
{
if ((hw->flags & VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO) == 0)
{
- vnm->interface_main.gso_interface_count++;
hw->flags |= VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO;
}
}
{
if ((hw->flags & VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO) != 0)
{
- vnm->interface_main.gso_interface_count--;
hw->flags &= ~VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO;
}
}
virtio_main_t *nm = &virtio_main;
vnet_interface_output_runtime_t *rund = (void *) node->runtime_data;
virtio_if_t *vif = pool_elt_at_index (nm->interfaces, rund->dev_instance);
- vnet_main_t *vnm = vnet_get_main ();
- if (vnm->interface_main.gso_interface_count > 0)
+ if (vif->gso_enabled > 0)
return virtio_interface_tx_inline (vm, node, frame, vif, 1 /* do_gso */ );
else
return virtio_interface_tx_inline (vm, node, frame, vif,
{
vif->gso_enabled = 1;
hw->flags |= VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO;
- vnm->interface_main.gso_interface_count++;
}
}
if (vif->features & VIRTIO_FEATURE (VIRTIO_NET_F_MQ))
virtio_pci_legacy_reset (vm, vif);
- if (vif->gso_enabled)
- vnm->interface_main.gso_interface_count--;
-
if (vif->hw_if_index)
{
vnet_hw_interface_set_flags (vnm, vif->hw_if_index, 0);
static_always_inline void
vhost_user_update_gso_interface_count (vhost_user_intf_t * vui, u8 add)
{
- vnet_main_t *vnm = vnet_get_main ();
vhost_user_main_t *vum = &vhost_user_main;
if (vui->enable_gso)
{
if (add)
{
- vnm->interface_main.gso_interface_count++;
vum->gso_count++;
}
else
{
- ASSERT (vnm->interface_main.gso_interface_count > 0);
- vnm->interface_main.gso_interface_count--;
ASSERT (vum->gso_count > 0);
vum->gso_count--;
}
}
}
- im->gso_interface_count = 0;
/* init per-thread data */
vec_validate_aligned (im->per_thread_data, vlib_num_workers (),
CLIB_CACHE_LINE_BYTES);
/* per-thread data */
vnet_interface_per_thread_data_t *per_thread_data;
- /* enable GSO processing in packet path if this count is > 0 */
- u32 gso_interface_count;
-
/* feature_arc_index */
u8 output_feature_arc_index;
} vnet_interface_main_t;
ip4_rewrite_inline_with_gso (vlib_main_t * vm,
vlib_node_runtime_t * node,
vlib_frame_t * frame,
- int do_counters, int is_midchain, int is_mcast,
- int do_gso)
+ int do_counters, int is_midchain, int is_mcast)
{
ip_lookup_main_t *lm = &ip4_main.lookup_main;
u32 *from = vlib_frame_vector_args (frame);
u16 ip0_len = clib_net_to_host_u16 (ip0->length);
u16 ip1_len = clib_net_to_host_u16 (ip1->length);
- if (do_gso && (b[0]->flags & VNET_BUFFER_F_GSO))
+ if (b[0]->flags & VNET_BUFFER_F_GSO)
ip0_len = gso_mtu_sz (b[0]);
- if (do_gso && (b[1]->flags & VNET_BUFFER_F_GSO))
+ if (b[1]->flags & VNET_BUFFER_F_GSO)
ip1_len = gso_mtu_sz (b[1]);
ip4_mtu_check (b[0], ip0_len,
/* Check MTU of outgoing interface. */
u16 ip0_len = clib_net_to_host_u16 (ip0->length);
- if (do_gso && (b[0]->flags & VNET_BUFFER_F_GSO))
+ if (b[0]->flags & VNET_BUFFER_F_GSO)
ip0_len = gso_mtu_sz (b[0]);
ip4_mtu_check (b[0], ip0_len,
/* Check MTU of outgoing interface. */
u16 ip0_len = clib_net_to_host_u16 (ip0->length);
- if (do_gso && (b[0]->flags & VNET_BUFFER_F_GSO))
+ if (b[0]->flags & VNET_BUFFER_F_GSO)
ip0_len = gso_mtu_sz (b[0]);
ip4_mtu_check (b[0], ip0_len,
vlib_frame_t * frame,
int do_counters, int is_midchain, int is_mcast)
{
- vnet_main_t *vnm = vnet_get_main ();
- if (PREDICT_FALSE (vnm->interface_main.gso_interface_count > 0))
- return ip4_rewrite_inline_with_gso (vm, node, frame, do_counters,
- is_midchain, is_mcast,
- 1 /* do_gso */ );
- else
- return ip4_rewrite_inline_with_gso (vm, node, frame, do_counters,
- is_midchain, is_mcast,
- 0 /* no do_gso */ );
+ return ip4_rewrite_inline_with_gso (vm, node, frame, do_counters,
+ is_midchain, is_mcast);
}
ip6_rewrite_inline_with_gso (vlib_main_t * vm,
vlib_node_runtime_t * node,
vlib_frame_t * frame,
- int do_counters, int is_midchain, int is_mcast,
- int do_gso)
+ int do_counters, int is_midchain, int is_mcast)
{
ip_lookup_main_t *lm = &ip6_main.lookup_main;
u32 *from = vlib_frame_vector_args (frame);
u16 ip1_len =
clib_net_to_host_u16 (ip1->payload_length) +
sizeof (ip6_header_t);
- if (do_gso && (p0->flags & VNET_BUFFER_F_GSO))
+ if (p0->flags & VNET_BUFFER_F_GSO)
ip0_len = gso_mtu_sz (p0);
- if (do_gso && (p1->flags & VNET_BUFFER_F_GSO))
+ if (p1->flags & VNET_BUFFER_F_GSO)
ip1_len = gso_mtu_sz (p1);
u16 ip0_len =
clib_net_to_host_u16 (ip0->payload_length) +
sizeof (ip6_header_t);
- if (do_gso && (p0->flags & VNET_BUFFER_F_GSO))
+ if (p0->flags & VNET_BUFFER_F_GSO)
ip0_len = gso_mtu_sz (p0);
ip6_mtu_check (p0, ip0_len,
vlib_frame_t * frame,
int do_counters, int is_midchain, int is_mcast)
{
- vnet_main_t *vnm = vnet_get_main ();
- if (PREDICT_FALSE (vnm->interface_main.gso_interface_count > 0))
- return ip6_rewrite_inline_with_gso (vm, node, frame, do_counters,
- is_midchain, is_mcast,
- 1 /* do_gso */ );
- else
- return ip6_rewrite_inline_with_gso (vm, node, frame, do_counters,
- is_midchain, is_mcast,
- 0 /* no do_gso */ );
+ return ip6_rewrite_inline_with_gso (vm, node, frame, do_counters,
+ is_midchain, is_mcast);
}
VLIB_NODE_FN (ip6_rewrite_node) (vlib_main_t * vm,
if (gso_enabled)
{
hi->flags |= VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO;
- vnm->interface_main.gso_interface_count++;
pi->gso_enabled = 1;
pi->gso_size = gso_size;
}