From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtprelay05.ispgateway.de (smtprelay05.ispgateway.de [80.67.18.28]) by dpdk.org (Postfix) with ESMTP id AF4885A7B for ; Sun, 12 Jul 2015 20:38:50 +0200 (CEST) Received: from [84.133.80.39] (helo=kd.localdomain) by smtprelay05.ispgateway.de with esmtpsa (TLSv1.2:AES128-SHA256:128) (Exim 4.84) (envelope-from ) id 1ZEM9L-0001WX-Ns; Sun, 12 Jul 2015 20:38:51 +0200 From: Klaus Degner To: dev@dpdk.org Date: Fri, 10 Jul 2015 21:13:13 +0200 Message-Id: <1436555593-62452-1-git-send-email-kd@allegro-packets.com> X-Mailer: git-send-email 2.4.5 In-Reply-To: <1435664375-25648-1-git-send-email-kd@allegro-packets.com> References: <1435664375-25648-1-git-send-email-kd@allegro-packets.com> X-Df-Sender: a2RAYWxsZWdyby1wYWNrZXRzLmNvbQ== Subject: [dpdk-dev] [PATCH v3] pcap: add support for rx and tx byte counters X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Jul 2015 18:38:50 -0000 add support for rx and tx byte counters in addition to existing rx and tx packet counters, updated with new dpdk master branch --- drivers/net/pcap/rte_eth_pcap.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index 682628f..0fd04b5 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -69,6 +69,7 @@ struct pcap_rx_queue { uint8_t in_port; struct rte_mempool *mb_pool; volatile unsigned long rx_pkts; + volatile unsigned long rx_bytes; volatile unsigned long err_pkts; char name[PATH_MAX]; char type[ETH_PCAP_ARG_MAXLEN]; @@ -78,6 +79,7 @@ struct pcap_tx_queue { pcap_dumper_t *dumper; pcap_t *pcap; volatile unsigned long tx_pkts; + volatile unsigned long tx_bytes; volatile unsigned long err_pkts; char name[PATH_MAX]; char type[ETH_PCAP_ARG_MAXLEN]; @@ -196,6 +198,7 @@ eth_pcap_rx(void *queue, struct pcap_rx_queue *pcap_q = queue; uint16_t num_rx = 0; uint16_t buf_size; + uint32_t bytes_rx = 0; if (unlikely(pcap_q->pcap == NULL || nb_pkts == 0)) return 0; @@ -222,6 +225,7 @@ eth_pcap_rx(void *queue, rte_memcpy(rte_pktmbuf_mtod(mbuf, void *), packet, header.len); mbuf->data_len = (uint16_t)header.len; + bytes_rx += header.len; } else { /* Try read jumbo frame into multi mbufs. */ if (unlikely(eth_pcap_rx_jumbo(pcap_q->mb_pool, @@ -237,6 +241,7 @@ eth_pcap_rx(void *queue, num_rx++; } pcap_q->rx_pkts += num_rx; + pcap_q->rx_bytes += bytes_rx; return num_rx; } @@ -263,6 +268,7 @@ eth_pcap_tx_dumper(void *queue, struct rte_mbuf *mbuf; struct pcap_tx_queue *dumper_q = queue; uint16_t num_tx = 0; + uint32_t bytes_tx = 0; struct pcap_pkthdr header; if (dumper_q->dumper == NULL || nb_pkts == 0) @@ -297,6 +303,7 @@ eth_pcap_tx_dumper(void *queue, rte_pktmbuf_free(mbuf); num_tx++; + bytes_tx += header.len; } /* @@ -306,6 +313,7 @@ eth_pcap_tx_dumper(void *queue, */ pcap_dump_flush(dumper_q->dumper); dumper_q->tx_pkts += num_tx; + dumper_q->tx_bytes += bytes_tx; dumper_q->err_pkts += nb_pkts - num_tx; return num_tx; } @@ -499,25 +507,32 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats) { unsigned i; - unsigned long rx_total = 0, tx_total = 0, tx_err_total = 0; + unsigned long rx_total = 0, rx_b_total = 0; + unsigned long tx_total = 0, tx_err_total = 0, tx_b_total = 0; const struct pmd_internals *internal = dev->data->dev_private; for (i = 0; i < RTE_ETHDEV_QUEUE_STAT_CNTRS && i < internal->nb_rx_queues; i++) { igb_stats->q_ipackets[i] = internal->rx_queue[i].rx_pkts; + igb_stats->q_ibytes[i] = internal->rx_queue[i].rx_bytes; rx_total += igb_stats->q_ipackets[i]; + rx_b_total += igb_stats->q_ibytes[i]; } for (i = 0; i < RTE_ETHDEV_QUEUE_STAT_CNTRS && i < internal->nb_tx_queues; i++) { igb_stats->q_opackets[i] = internal->tx_queue[i].tx_pkts; + igb_stats->q_obytes[i] = internal->tx_queue[i].tx_bytes; igb_stats->q_errors[i] = internal->tx_queue[i].err_pkts; tx_total += igb_stats->q_opackets[i]; + tx_b_total += igb_stats->q_obytes[i]; tx_err_total += igb_stats->q_errors[i]; } igb_stats->ipackets = rx_total; + igb_stats->ibytes = rx_b_total; igb_stats->opackets = tx_total; + igb_stats->obytes = tx_b_total; igb_stats->oerrors = tx_err_total; } @@ -526,10 +541,13 @@ eth_stats_reset(struct rte_eth_dev *dev) { unsigned i; struct pmd_internals *internal = dev->data->dev_private; - for (i = 0; i < internal->nb_rx_queues; i++) + for (i = 0; i < internal->nb_rx_queues; i++) { internal->rx_queue[i].rx_pkts = 0; + internal->rx_queue[i].rx_bytes = 0; + } for (i = 0; i < internal->nb_tx_queues; i++) { internal->tx_queue[i].tx_pkts = 0; + internal->tx_queue[i].tx_bytes = 0; internal->tx_queue[i].err_pkts = 0; } } -- 2.4.5