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 943B145E6D; Tue, 10 Dec 2024 22:28:56 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 19C9B4066D; Tue, 10 Dec 2024 22:28:18 +0100 (CET) Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) by mails.dpdk.org (Postfix) with ESMTP id 16CE6402EE for ; Tue, 10 Dec 2024 22:28:14 +0100 (CET) Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-728e3826211so871934b3a.0 for ; Tue, 10 Dec 2024 13:28:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1733866093; x=1734470893; 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=NKLXs8IohCT52Pqfe7TAnKloVJMEGXykd6AZ26JEyvo=; b=0k5bvx5MgodwsxM6/V+GY7RELbob0FDzbpcr+JRlAGwLxP/ITf94AOuJKK5MdHZvha IwB/gKsHv1+wRE9GO50eNldJiT2B7JAYNKtgrXWu8Z6VtfmQTDvOEOfJXWTmu3d0fpcy irXVwYpGu1PdIAUWDNkzw5iD0oDGPfzBx6FrzOB70ehOpyRI/A4d4tL1E7LfKfNK/h7f 3opZkPnGDjtinRCZB7bqGyZw4YXwvi0foc+GoB1BdZn8iYWrDtNXaCEY5samhv7sxD07 COXZEicIrMkxY+d3DwA4NhlUwX9zLryDt0XbM6TI2ReWfO+xTdTMFDo3e4+WxhB2TgxO erOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733866093; x=1734470893; 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=NKLXs8IohCT52Pqfe7TAnKloVJMEGXykd6AZ26JEyvo=; b=CZ22TYM9zW8tANh+Ty0YkCmhh4LIKadKumiUdVBf8PeVTdyZf3pPrhNs/5DogFAz4C Ley8YmJZrEuxnR/NWfodFCR4Ufo2CzwL5xoaYSaHRUB6AlbL9Y4ZC2JUpz0k3Na3s378 V0E6ri2HoUMKl50RVQJQ20wItrXj5y6jmAtxPE9aakI32A3Vs7bc9ACW6cBr/ls2JEyq 50KZwPuNmSk2loM5bhdXPHLuWitfAuhgnXmzPdSJ6XOqPDGMmP9URnQdJUk9MUqPO1uw Zv1iZLVhoyinL5Y/EkuGNXiWpvNp4tlV9M8bCWwNQWnUKkJIt/ejVDjlVYP64iB22aqc ZypQ== X-Gm-Message-State: AOJu0Yz6avr27SYXJ+IhOvolX+izg6lvb3d7YFp84X74RA75RZYa0mqG bknpXpzjoLk+C7Cy5O6ZalvVyD8LM66oala9D5VJN6xaxv7NwiqMWWMZ+2s9cu7J29eIPiLawfK l X-Gm-Gg: ASbGncsD2zEkq5bVdwIxseY6hRX9e3JOw/9hGNLx+SnFXmyXhlOhV6Cz148cHkV+XpI E6gM5sA1WjAYuhS5JAiGEPAdatjR2zj5wA1zSmIJFuMqmitd7oJyyEPj7yt+VP8DNS1yI0psHBp UA6wvT4Opo1qOP8FMV4A4iSLGJw/BkZodCpx5L+T2GFx/sDGFZeKqI++Ri4s0nry6T4mrfepuWM LmBY6GdSFzAUVOlgcHXzwrMNe/RIOnCyzEgm1mQna6ORs6F7a3Zj+0q3M/trD8oZNpcYL+MM0M8 oF9wAgblPF763NSA5uClQpT1uwEB6B8= X-Google-Smtp-Source: AGHT+IEklXM1OD9aNatpFN8d7K4Z7gIrF4QfW1T8JARb2Tm64gutv0cyjcUvOVQkSuUMmkWiAplJWg== X-Received: by 2002:a05:6a00:4611:b0:726:64a5:5f67 with SMTP id d2e1a72fcca58-728ed3ed75emr675135b3a.12.1733866093313; Tue, 10 Dec 2024 13:28:13 -0800 (PST) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-725e7c98efbsm4972577b3a.186.2024.12.10.13.28.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Dec 2024 13:28:12 -0800 (PST) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Subject: [RFC 7/8] net/ioring: add VLAN support Date: Tue, 10 Dec 2024 13:23:38 -0800 Message-ID: <20241210212757.83490-8-stephen@networkplumber.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20241210212757.83490-1-stephen@networkplumber.org> References: <20241210212757.83490-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 fa79bc5667..a2bfefec45 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; @@ -582,6 +589,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; @@ -636,6 +644,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) { @@ -739,6 +779,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