All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ido Goshen <ido@cgstowernetworks.com>
To: ferruh.yigit@xilinx.com, stephen@networkplumber.org
Cc: dev@dpdk.org, Ido Goshen <ido@cgstowernetworks.com>
Subject: [PATCH v7 3/3] pcap: support MTU set for linux interfaces count ierrors
Date: Sun, 19 Jun 2022 12:30:34 +0300	[thread overview]
Message-ID: <20220619093034.26891-4-ido@cgstowernetworks.com> (raw)
In-Reply-To: <20220619093034.26891-1-ido@cgstowernetworks.com>

Count oversized packets that are dropped by the interface

Signed-off-by: Ido Goshen <ido@cgstowernetworks.com>
---
 drivers/net/pcap/pcap_ethdev.c | 74 +++++++++++++++++++++-------------
 1 file changed, 45 insertions(+), 29 deletions(-)

diff --git a/drivers/net/pcap/pcap_ethdev.c b/drivers/net/pcap/pcap_ethdev.c
index ff98762058..46f18e9b10 100644
--- a/drivers/net/pcap/pcap_ethdev.c
+++ b/drivers/net/pcap/pcap_ethdev.c
@@ -54,7 +54,7 @@ struct queue_stat {
 	volatile unsigned long rx_nombuf;
 };
 
-struct queue_missed_stat {
+struct queue_pcap_stat {
 	/* last value retrieved from pcap */
 	unsigned int pcap;
 	/* stores values lost by pcap stop or rollover */
@@ -63,12 +63,19 @@ struct queue_missed_stat {
 	unsigned long reset;
 };
 
+enum {
+	QUEUE_PCAP_STAT_FIRST = 0,
+	QUEUE_PCAP_STAT_MISSED = QUEUE_PCAP_STAT_FIRST,
+	QUEUE_PCAP_STAT_ERROR,
+	QUEUE_PCAP_STAT_NUM
+};
+
 struct pcap_rx_queue {
 	uint16_t port_id;
 	uint16_t queue_id;
 	struct rte_mempool *mb_pool;
 	struct queue_stat rx_stat;
-	struct queue_missed_stat missed_stat;
+	struct queue_pcap_stat queue_pcap_stat[QUEUE_PCAP_STAT_NUM];
 	char name[PATH_MAX];
 	char type[ETH_PCAP_ARG_MAXLEN];
 
@@ -144,54 +151,62 @@ static struct rte_eth_link pmd_link = {
 
 RTE_LOG_REGISTER_DEFAULT(eth_pcap_logtype, NOTICE);
 
-static struct queue_missed_stat*
-queue_missed_stat_update(struct rte_eth_dev *dev, unsigned int qid)
+static struct queue_pcap_stat*
+queue_pcap_stat_update(struct rte_eth_dev *dev, unsigned int qid, int type)
 {
 	struct pmd_internals *internals = dev->data->dev_private;
-	struct queue_missed_stat *missed_stat =
-			&internals->rx_queue[qid].missed_stat;
+	struct queue_pcap_stat *queue_pcap_stat =
+			&internals->rx_queue[qid].queue_pcap_stat[type];
 	const struct pmd_process_private *pp = dev->process_private;
 	pcap_t *pcap = pp->rx_pcap[qid];
 	struct pcap_stat stat;
+	u_int value;
 
 	if (!pcap || (pcap_stats(pcap, &stat) != 0))
-		return missed_stat;
+		return queue_pcap_stat;
 
+	value = (type == QUEUE_PCAP_STAT_ERROR) ? stat.ps_ifdrop : stat.ps_drop;
 	/* rollover check - best effort fixup assuming single rollover */
-	if (stat.ps_drop < missed_stat->pcap)
-		missed_stat->mnemonic += UINT_MAX;
-	missed_stat->pcap = stat.ps_drop;
+	if (value < queue_pcap_stat->pcap)
+		queue_pcap_stat->mnemonic += UINT_MAX;
+	queue_pcap_stat->pcap = value;
 
-	return missed_stat;
+	return queue_pcap_stat;
 }
 
 static void
-queue_missed_stat_on_stop_update(struct rte_eth_dev *dev, unsigned int qid)
+queue_pcap_stat_on_stop_update(struct rte_eth_dev *dev, unsigned int qid)
 {
-	struct queue_missed_stat *missed_stat =
-			queue_missed_stat_update(dev, qid);
+	int type;
+	struct queue_pcap_stat *queue_pcap_stat;
 
-	missed_stat->mnemonic += missed_stat->pcap;
-	missed_stat->pcap = 0;
+	for (type = QUEUE_PCAP_STAT_FIRST; type < QUEUE_PCAP_STAT_NUM; type++) {
+		queue_pcap_stat = queue_pcap_stat_update(dev, qid, type);
+		queue_pcap_stat->mnemonic += queue_pcap_stat->pcap;
+		queue_pcap_stat->pcap = 0;
+	}
 }
 
 static void
-queue_missed_stat_reset(struct rte_eth_dev *dev, unsigned int qid)
+queue_pcap_stat_reset(struct rte_eth_dev *dev, unsigned int qid)
 {
-	struct queue_missed_stat *missed_stat =
-			queue_missed_stat_update(dev, qid);
+	int type;
+	struct queue_pcap_stat *queue_pcap_stat;
 
-	missed_stat->reset = missed_stat->pcap;
-	missed_stat->mnemonic = 0;
+	for (type = QUEUE_PCAP_STAT_FIRST; type < QUEUE_PCAP_STAT_NUM; type++) {
+		queue_pcap_stat = queue_pcap_stat_update(dev, qid, type);
+		queue_pcap_stat->reset = queue_pcap_stat->pcap;
+		queue_pcap_stat->mnemonic = 0;
+	}
 }
 
 static unsigned long
-queue_missed_stat_get(struct rte_eth_dev *dev, unsigned int qid)
+queue_pcap_stat_get(struct rte_eth_dev *dev, unsigned int qid, int type)
 {
-	const struct queue_missed_stat *missed_stat =
-			queue_missed_stat_update(dev, qid);
+	const struct queue_pcap_stat *queue_pcap_stat =
+			queue_pcap_stat_update(dev, qid, type);
 
-	return missed_stat->pcap + missed_stat->mnemonic - missed_stat->reset;
+	return queue_pcap_stat->pcap + queue_pcap_stat->mnemonic - queue_pcap_stat->reset;
 }
 
 static int
@@ -684,7 +699,7 @@ eth_dev_stop(struct rte_eth_dev *dev)
 
 	/* Special iface case. Single pcap is open and shared between tx/rx. */
 	if (internals->single_iface) {
-		queue_missed_stat_on_stop_update(dev, 0);
+		queue_pcap_stat_on_stop_update(dev, 0);
 		if (pp->tx_pcap[0] != NULL) {
 			pcap_close(pp->tx_pcap[0]);
 			pp->tx_pcap[0] = NULL;
@@ -707,7 +722,7 @@ eth_dev_stop(struct rte_eth_dev *dev)
 
 	for (i = 0; i < dev->data->nb_rx_queues; i++) {
 		if (pp->rx_pcap[i] != NULL) {
-			queue_missed_stat_on_stop_update(dev, i);
+			queue_pcap_stat_on_stop_update(dev, i);
 			pcap_close(pp->rx_pcap[i]);
 			pp->rx_pcap[i] = NULL;
 		}
@@ -766,7 +781,8 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 		rx_err_total += internal->rx_queue[i].rx_stat.err_pkts;
 		rx_packets_total += stats->q_ipackets[i];
 		rx_bytes_total += stats->q_ibytes[i];
-		rx_missed_total += queue_missed_stat_get(dev, i);
+		rx_missed_total += queue_pcap_stat_get(dev, i, QUEUE_PCAP_STAT_MISSED);
+		rx_err_total += queue_pcap_stat_get(dev, i, QUEUE_PCAP_STAT_ERROR);
 	}
 
 	for (i = 0; i < RTE_ETHDEV_QUEUE_STAT_CNTRS &&
@@ -801,7 +817,7 @@ eth_stats_reset(struct rte_eth_dev *dev)
 		internal->rx_queue[i].rx_stat.bytes = 0;
 		internal->rx_queue[i].rx_stat.err_pkts = 0;
 		internal->rx_queue[i].rx_stat.rx_nombuf = 0;
-		queue_missed_stat_reset(dev, i);
+		queue_pcap_stat_reset(dev, i);
 	}
 
 	for (i = 0; i < dev->data->nb_tx_queues; i++) {
-- 
2.17.1


  parent reply	other threads:[~2022-06-19  9:31 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-17 17:43 [PATCH] net/pcap: support MTU set ido g
2022-03-17 18:20 ` Stephen Hemminger
2022-03-17 19:11   ` Ido Goshen
2022-03-22 13:02     ` Ido Goshen
2022-04-26 17:03       ` Ferruh Yigit
2022-04-27 18:21         ` Ido Goshen
2022-04-27 19:14           ` Stephen Hemminger
2022-05-23  7:48             ` Ido Goshen
2022-05-30 10:36 ` [PATCH v3] pcap: " Ido Goshen
2022-05-30 18:05   ` Ferruh Yigit
2022-05-31 13:12     ` Ido Goshen
2022-06-06  9:40     ` Ido Goshen
2022-06-06 16:21 ` [PATCH v4] " Ido Goshen
2022-06-06 17:10   ` Stephen Hemminger
2022-06-06 19:07     ` Ido Goshen
2022-06-07  6:27 ` [PATCH v5] pcap: support MTU set for linux interafces Ido Goshen
2022-06-08 16:04   ` [PATCH v6] " Ido Goshen
2022-06-08 16:23     ` Stephen Hemminger
2022-06-19  9:30 ` [PATCH v7 0/3] pcap: support MTU set for linux interfaces Ido Goshen
2022-06-19  9:30   ` [PATCH v7 1/3] " Ido Goshen
2022-06-19  9:30   ` [PATCH v7 2/3] pcap: support MTU set for linux interfaces TX enhancment Ido Goshen
2022-06-20 22:52     ` Stephen Hemminger
2022-06-21  9:07       ` Ido Goshen
2022-06-19  9:30   ` Ido Goshen [this message]
2022-06-20  8:39 ` [PATCH v8 0/3] pcap: support MTU set for linux interfaces Ido Goshen
2022-06-20  8:39   ` [PATCH v8 1/3] " Ido Goshen
2022-06-20  8:39   ` [PATCH v8 2/3] pcap: support MTU set for linux interfaces TX enhancment Ido Goshen
2022-06-20  8:39   ` [PATCH v8 3/3] pcap: support MTU set for linux interfaces count ierrors Ido Goshen
2023-07-04 17:43 ` [PATCH] pcap: support MTU set Stephen Hemminger
2023-07-04 21:02 ` [PATCH v2] " Stephen Hemminger
2023-07-05 11:37   ` Ferruh Yigit
2023-07-05 15:18     ` Stephen Hemminger
2023-07-06 10:45       ` Ido Goshen
2023-07-10 16:45 ` [PATCH] net/pcap: " Stephen Hemminger
2023-07-10 17:46   ` Ferruh Yigit
2023-07-11  9:41     ` Ido Goshen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220619093034.26891-4-ido@cgstowernetworks.com \
    --to=ido@cgstowernetworks.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@xilinx.com \
    --cc=stephen@networkplumber.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.