From patchwork Thu Mar 29 16:05:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chas Williams <3chas3@gmail.com> X-Patchwork-Id: 36676 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C329334F0; Thu, 29 Mar 2018 18:05:18 +0200 (CEST) Received: from mail-qk0-f196.google.com (mail-qk0-f196.google.com [209.85.220.196]) by dpdk.org (Postfix) with ESMTP id B04F02965 for ; Thu, 29 Mar 2018 18:05:16 +0200 (CEST) Received: by mail-qk0-f196.google.com with SMTP id o64so6488285qkl.7 for ; Thu, 29 Mar 2018 09:05:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=HmkJxKe0/kxuDRxYuEB2zcAS2tX6/x6BWlMQpPRT5ng=; b=IbCjN21gE6ndSKMGwkgP1oNwPlkwyR7SXin2lvjH6+4Qf8IvHaKHWzJ0gr3m6vbsn8 2xkwzTl3Yx6Td4tjS55uIjhDy5R/JoNmPOlGP1LV3qst0h2+zYokvUejHWiSQ9hMGXzc HyxakbUhWZCX0QV69QnoLM8GPNoufKnvo7pbzyf8I13iMPbeaso08GTycNgn5NivhxPv yvf3ody/PCaBsZepkBqeeaPNg8ijj1dXF1trlu3agDqVR6FxjUjiGE3f0lmInWe8luKH UBrapL4aZfXeJas/be5vAp4iC90l57FOuUyI7Q451Be8a8r6IJi752p/W5mlJ2iKQWW1 QyUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=HmkJxKe0/kxuDRxYuEB2zcAS2tX6/x6BWlMQpPRT5ng=; b=IbLArtbrlp62nCSnclY6CDBbHdDwM3PQvgrkIu5hTze/M9qfeVYIAMr5kdVRhqOolw zMOHJ8ekB7fkOsNylrTLQA1cHHqike3iVmxh6uzt7QkfGHNNfL8nV2kmHQcnl0tJDfLH DIAXm/3ZRW8Me5en9e4ZChKstfeqY4NqrDiu1ydzMI6eWGde7IZGFOmBbNPXQS4H5h6J HoUw/C9ps7lYKaQ0AnPpw9EsL2002bW533fIXoEdtyJuEWloBLQ0KZN0ODJFTAjfVu3A Hhp/H8MUHOlgVR97RinC4CepJFTv2yTL3W7VEi7/WWybNF+Mv0JK4INNMxADyMGZqOUu YQ7g== X-Gm-Message-State: AElRT7GVCin9S8NzWrzrK7o4GD7ihTWJrsvho0JLrQqDWHNPzII+bqQl mEgLu9h1QIhHB8pwt3/QteRm1A== X-Google-Smtp-Source: AIpwx491JOFB8qzP/Pt3gNdDVvvJRORrjd3rJ2m1WWyB7JQkfdPNcWwN1M5gDfKR8BHSMLzqLeT3oA== X-Received: by 10.55.58.196 with SMTP id h187mr11523951qka.284.1522339515992; Thu, 29 Mar 2018 09:05:15 -0700 (PDT) Received: from monolith.home (pool-173-79-224-159.washdc.fios.verizon.net. [173.79.224.159]) by smtp.gmail.com with ESMTPSA id f3sm4678666qkj.7.2018.03.29.09.05.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 29 Mar 2018 09:05:15 -0700 (PDT) From: Chas Williams <3chas3@gmail.com> To: dev@dpdk.org Cc: mtetsuyah@gmail.com, yliu@fridaylinux.org, maxime.coquelin@redhat.com, Jan Blunck Date: Thu, 29 Mar 2018 12:05:07 -0400 Message-Id: <20180329160507.25081-2-3chas3@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180329160507.25081-1-3chas3@gmail.com> References: <20180329160507.25081-1-3chas3@gmail.com> Subject: [dpdk-dev] [PATCH 2/2] net/vhost: insert/strip VLAN header in software X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Jan Blunck This lets the vhost driver handle the VLAN header like the virtio driver in software. Signed-off-by: Jan Blunck Reviewed-by: Maxime Coquelin --- drivers/net/vhost/rte_eth_vhost.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 453d9bee1..0beb28e94 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -119,6 +119,7 @@ struct pmd_internal { uint16_t max_queues; rte_atomic32_t started; int vid; + uint8_t vlan_strip; }; struct internal_list { @@ -422,6 +423,12 @@ eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) for (i = 0; likely(i < nb_rx); i++) { bufs[i]->port = r->port; + bufs[i]->ol_flags = 0; + bufs[i]->vlan_tci = 0; + + if (r->internal->vlan_strip) + rte_vlan_strip(bufs[i]); + r->stats.bytes += bufs[i]->pkt_len; } @@ -438,7 +445,7 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) { struct vhost_queue *r = q; uint16_t i, nb_tx = 0; - uint16_t nb_send = nb_bufs; + uint16_t nb_send = 0; if (unlikely(rte_atomic32_read(&r->allow_queuing) == 0)) return 0; @@ -448,6 +455,22 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) if (unlikely(rte_atomic32_read(&r->allow_queuing) == 0)) goto out; + for (i = 0; i < nb_bufs; i++) { + struct rte_mbuf *m = bufs[i]; + + /* Do VLAN tag insertion */ + if (m->ol_flags & PKT_TX_VLAN_PKT) { + int error = rte_vlan_insert(&m); + if (unlikely(error)) { + rte_pktmbuf_free(m); + continue; + } + } + + bufs[nb_send] = m; + ++nb_send; + } + /* Enqueue packets to guest RX queue */ while (nb_send) { uint16_t nb_pkts; @@ -489,6 +512,16 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) static int eth_dev_configure(struct rte_eth_dev *dev __rte_unused) { + struct pmd_internal *internal = dev->data->dev_private; + const struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; + + internal->vlan_strip = rxmode->hw_vlan_strip; + + if (rxmode->hw_vlan_filter) + RTE_LOG(WARNING, PMD, + "vhost(%s): vlan filtering not available\n", + internal->dev_name); + return 0; }