From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 50C0645E79; Wed, 11 Dec 2024 17:30:00 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5D96840674; Wed, 11 Dec 2024 17:29:26 +0100 (CET) Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by mails.dpdk.org (Postfix) with ESMTP id 7362A40647 for ; Wed, 11 Dec 2024 17:29:19 +0100 (CET) Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2163b0c09afso38949575ad.0 for ; Wed, 11 Dec 2024 08:29:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1733934558; x=1734539358; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OzTEOpr4EtRTbhbSZIVzEB2OMG1GdaZUo3iYGnpjYJU=; b=y2w3wNpcOVB631F3uEcWRWR1C10gYcONbyiWjy+wQt4fn7f+V56UygQ0oxo6+l59Fp tEQq8R6WH73806XTGRyJl5LNQr7Wcy0XFzQYMwI8QUJsQFuQqyZWVgM+SJhsgWEGcVV7 vkMqB97Sagb8BVExbxlgOGoGePdu+j5mCLleDvXKeAX2LYiGQuWf32murHuj/KV9Qwv1 AeJeoRdovbXdG0Mq6RnVtexwo+GF/qcwsykcRc6g1hfjbh9eLh2XWtPdIuEjlpZR6L6q KQBpsvnjejHyMrkoHEPwqj5prSfZMgx24hQK2Rj5GJjqO4g2vItwv4UfDeFkoNLSTClA OkYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733934558; x=1734539358; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OzTEOpr4EtRTbhbSZIVzEB2OMG1GdaZUo3iYGnpjYJU=; b=YoBqZlalC8RamPIUKYIaOPGmNmIORy58pAUh9PLAOH2ToPBkVrJVybEqdBWsIMKzE4 ZmPEovlP0RgXpUyQzOZxCq79oGmpQWxp4SEqSgw2gbUY0cPdlUUTXXJGEbE55lEix1ej XagwRCnq0qUA224xHSfwAvbcH7skZKRFNsc5T8joIApedYTmQVstONe4XJ0fSytLVIcv wRyCWsbDcUMqNd2aRgbOYZIc6rhWGtkRVKkv8RWeRXDKwnyr2tEVXH9HvZKpMsju/158 dbqBZh7pOE+qWqaqw4A4fcpMEzdWFF20G4tLCtKTuA3ZhZTZWm+4G3GWAZml7fXYdLLj 0g1w== X-Gm-Message-State: AOJu0YxEEiqWPoTGU9aO7ILQsvWt4DPkiHW8cGMdg6ZWuM4bbnNb6yvN rNRVewMASa+qpRbmGFfBJC06KN5z5JSirPXLJREFA6mKUnjdDqixhDnhTksPPmYBwmWcXizLsfx 7 X-Gm-Gg: ASbGncubCqFMlCeZSCYo0OW5g0/m9Alr5C3dqUlHxKk7cjJb/U2y25G3NJkm9OchwV5 +HWGxU6jV1SSUN8ZyT/fqY7cMbGS6nWBiApgD2e+r38b7bcTYYdusKWzZ6pGHJEx4hJ3MTR6g8e GLbDV2RvDwkwjIqxliUt+F1Mu41yuOcIr+Yy6SvzHtfFJGgAkTRLjIOevhEqA/3KqmYAa9jfQ6S me6JEtEUu3o8+27A5ew3uPcMtlfQ/1jyvlHUin2vbfSWsmLIpRws3HjclZzixjnUBePy6LclgCL FY8bsxNOTZcrwAKfNGDEPVDlpVQKi2w= X-Google-Smtp-Source: AGHT+IHwa1tdHU1Dkz457tZhQRMusaisI4ioHQvxjj1AwJwn021SAhVEZoiNHLdSKOEuY40v0r+qdg== X-Received: by 2002:a17:902:fa07:b0:216:70b6:8723 with SMTP id d9443c01a7336-2178aeed538mr5229005ad.44.1733934558682; Wed, 11 Dec 2024 08:29:18 -0800 (PST) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21632c4fc62sm71989895ad.194.2024.12.11.08.29.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 08:29:18 -0800 (PST) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Subject: [PATCH v2 7/8] net/ioring: add VLAN support Date: Wed, 11 Dec 2024 08:28:08 -0800 Message-ID: <20241211162904.121695-8-stephen@networkplumber.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20241211162904.121695-1-stephen@networkplumber.org> References: <20241210212757.83490-1-stephen@networkplumber.org> <20241211162904.121695-1-stephen@networkplumber.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add support for VLAN insert and stripping. Signed-off-by: Stephen Hemminger --- drivers/net/ioring/rte_eth_ioring.c | 45 +++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/drivers/net/ioring/rte_eth_ioring.c b/drivers/net/ioring/rte_eth_ioring.c index 8dd717cb9d..a7f38e0d5c 100644 --- a/drivers/net/ioring/rte_eth_ioring.c +++ b/drivers/net/ioring/rte_eth_ioring.c @@ -34,6 +34,8 @@ #define IORING_NUM_BUFFERS 1024 #define IORING_MAX_QUEUES 128 +#define IORING_TX_OFFLOAD RTE_ETH_TX_OFFLOAD_VLAN_INSERT +#define IORING_RX_OFFLOAD RTE_ETH_RX_OFFLOAD_VLAN_STRIP static_assert(IORING_MAX_QUEUES <= RTE_MP_MAX_FD_NUM, "Max queues exceeds MP fd limit"); @@ -70,6 +72,7 @@ static const char * const valid_arguments[] = { struct rx_queue { struct rte_mempool *mb_pool; /* rx buffer pool */ struct io_uring io_ring; /* queue of posted read's */ + uint64_t offloads; uint16_t port_id; uint16_t queue_id; @@ -81,6 +84,7 @@ struct rx_queue { struct tx_queue { struct io_uring io_ring; + uint64_t offloads; uint16_t port_id; uint16_t queue_id; @@ -471,6 +475,9 @@ eth_ioring_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) goto resubmit; } + if (rxq->offloads & RTE_ETH_RX_OFFLOAD_VLAN_STRIP) + rte_vlan_strip(mb); + mb->pkt_len = len; mb->data_len = len; mb->port = rxq->port_id; @@ -495,8 +502,7 @@ eth_ioring_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) static int eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_id, uint16_t nb_rx_desc, - unsigned int socket_id, - const struct rte_eth_rxconf *rx_conf __rte_unused, + unsigned int socket_id, const struct rte_eth_rxconf *rx_conf, struct rte_mempool *mb_pool) { struct pmd_internals *pmd = dev->data->dev_private; @@ -515,6 +521,7 @@ eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_id, uint16_t nb_rx_de return -1; } + rxq->offloads = rx_conf->offloads; rxq->mb_pool = mb_pool; rxq->port_id = dev->data->port_id; rxq->queue_id = queue_id; @@ -583,6 +590,7 @@ eth_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_id, txq->port_id = dev->data->port_id; txq->queue_id = queue_id; + txq->offloads = tx_conf->offloads; txq->free_thresh = tx_conf->tx_free_thresh; dev->data->tx_queues[queue_id] = txq; @@ -637,6 +645,38 @@ eth_ioring_tx_cleanup(struct tx_queue *txq) txq->tx_bytes += tx_bytes; } +static uint16_t +eth_ioring_tx_prepare(void *tx_queue __rte_unused, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) +{ + uint16_t nb_tx; + int error; + + for (nb_tx = 0; nb_tx < nb_pkts; nb_tx++) { + struct rte_mbuf *m = tx_pkts[nb_tx]; + +#ifdef RTE_LIBRTE_ETHDEV_DEBUG + error = rte_validate_tx_offload(m); + if (unlikely(error)) { + rte_errno = -error; + break; + } +#endif + /* Do VLAN tag insertion */ + if (unlikely(m->ol_flags & RTE_MBUF_F_TX_VLAN)) { + error = rte_vlan_insert(&m); + /* rte_vlan_insert() may change pointer */ + tx_pkts[nb_tx] = m; + + if (unlikely(error)) { + rte_errno = -error; + break; + } + } + } + + return nb_tx; +} + static uint16_t eth_ioring_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) { @@ -740,6 +780,7 @@ ioring_create(struct rte_eth_dev *dev, const char *tap_name, uint8_t persist) PMD_LOG(DEBUG, "%s setup", ifr.ifr_name); dev->rx_pkt_burst = eth_ioring_rx; + dev->tx_pkt_prepare = eth_ioring_tx_prepare; dev->tx_pkt_burst = eth_ioring_tx; return 0; -- 2.45.2