[dpdk-dev] [PATCH v2 6/7] net/virtio_user: enable offloading
Yuanhan Liu
yuanhan.liu at linux.intel.com
Mon Dec 26 08:53:46 CET 2016
On Fri, Dec 23, 2016 at 07:14:25AM +0000, Jianfeng Tan wrote:
> When used with vhost kernel backend, we can offload at both directions.
> - From vhost kernel to virtio_user, the offload is enabled so that
> DPDK app can trust the flow is checksum-correct; and if DPDK app
> sends it through another port, the checksum needs to be
> recalculated or offloaded. It also applies to TSO.
> - From virtio_user to vhost_kernel, the offload is enabled so that
> kernel can trust the flow is L4-checksum-correct, no need to verify
> it; if kernel will consume it, DPDK app should make sure the
> l3-checksum is correctly set.
>
> Signed-off-by: Jianfeng Tan <jianfeng.tan at intel.com>
> ---
> drivers/net/virtio/virtio_user/vhost_kernel.c | 61 ++++++++++++++++++++++++++-
> 1 file changed, 59 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/virtio/virtio_user/vhost_kernel.c b/drivers/net/virtio/virtio_user/vhost_kernel.c
> index 8984c5c..fb3c454 100644
> --- a/drivers/net/virtio/virtio_user/vhost_kernel.c
> +++ b/drivers/net/virtio/virtio_user/vhost_kernel.c
> @@ -91,6 +91,13 @@ struct vhost_memory_kernel {
> #define IFF_ATTACH_QUEUE 0x0200
> #define IFF_DETACH_QUEUE 0x0400
>
> +/* Features for GSO (TUNSETOFFLOAD). */
> +#define TUN_F_CSUM 0x01 /* You can hand me unchecksummed packets. */
> +#define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets */
> +#define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets */
> +#define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */
> +#define TUN_F_UFO 0x10 /* I can handle UFO packets */
> +
> /* Constants */
> #define TUN_DEF_SNDBUF (1ull << 20)
> #define PATH_NET_TUN "/dev/net/tun"
> @@ -173,6 +180,28 @@ prepare_vhost_memory_kernel(void)
> return vm;
> }
>
> +/* with below features, vhost kernel does not need to do the checksum and TSO,
> + * these info will be passed to virtio_user through virtio net header.
> + */
> +static const uint64_t guest_offloads_mask =
The typical way is to define it as macro?
> + (1ULL << VIRTIO_NET_F_GUEST_CSUM) |
> + (1ULL << VIRTIO_NET_F_GUEST_TSO4) |
> + (1ULL << VIRTIO_NET_F_GUEST_TSO6) |
> + (1ULL << VIRTIO_NET_F_GUEST_ECN) |
> + (1ULL << VIRTIO_NET_F_GUEST_UFO);
> +
> @@ -271,6 +314,12 @@ vhost_kernel_enable_queue_pair(struct virtio_user_dev *dev,
> int hdr_size;
> int vhostfd;
> int tapfd;
> + unsigned int offload =
> + TUN_F_CSUM |
> + TUN_F_TSO4 |
> + TUN_F_TSO6 |
> + TUN_F_TSO_ECN |
> + TUN_F_UFO;
Same here?
--yliu
More information about the dev
mailing list