dpdk/drivers/net/nfb/nfb_stats.c
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(c) 2019 Cesnet
   3 * Copyright(c) 2019 Netcope Technologies, a.s. <info@netcope.com>
   4 * All rights reserved.
   5 */
   6
   7#include "nfb_stats.h"
   8#include "nfb.h"
   9
  10int
  11nfb_eth_stats_get(struct rte_eth_dev *dev,
  12        struct rte_eth_stats *stats)
  13{
  14        uint16_t i;
  15        uint16_t nb_rx = dev->data->nb_rx_queues;
  16        uint16_t nb_tx = dev->data->nb_tx_queues;
  17        uint64_t rx_total = 0;
  18        uint64_t tx_total = 0;
  19        uint64_t tx_err_total = 0;
  20        uint64_t rx_total_bytes = 0;
  21        uint64_t tx_total_bytes = 0;
  22
  23        struct ndp_rx_queue *rx_queue = *((struct ndp_rx_queue **)
  24                dev->data->rx_queues);
  25        struct ndp_tx_queue *tx_queue = *((struct ndp_tx_queue **)
  26                dev->data->tx_queues);
  27
  28        for (i = 0; i < nb_rx; i++) {
  29                if (i < RTE_ETHDEV_QUEUE_STAT_CNTRS) {
  30                        stats->q_ipackets[i] = rx_queue[i].rx_pkts;
  31                        stats->q_ibytes[i] = rx_queue[i].rx_bytes;
  32                }
  33                rx_total += rx_queue[i].rx_pkts;
  34                rx_total_bytes += rx_queue[i].rx_bytes;
  35        }
  36
  37        for (i = 0; i < nb_tx; i++) {
  38                if (i < RTE_ETHDEV_QUEUE_STAT_CNTRS) {
  39                        stats->q_opackets[i] = tx_queue[i].tx_pkts;
  40                        stats->q_obytes[i] = tx_queue[i].tx_bytes;
  41                }
  42                tx_total += tx_queue[i].tx_pkts;
  43                tx_total_bytes += tx_queue[i].tx_bytes;
  44                tx_err_total += tx_queue[i].err_pkts;
  45        }
  46
  47        stats->ipackets = rx_total;
  48        stats->opackets = tx_total;
  49        stats->ibytes = rx_total_bytes;
  50        stats->obytes = tx_total_bytes;
  51        stats->oerrors = tx_err_total;
  52        return 0;
  53}
  54
  55int
  56nfb_eth_stats_reset(struct rte_eth_dev *dev)
  57{
  58        uint16_t i;
  59        uint16_t nb_rx = dev->data->nb_rx_queues;
  60        uint16_t nb_tx = dev->data->nb_tx_queues;
  61
  62        struct ndp_rx_queue *rx_queue = *((struct ndp_rx_queue **)
  63                dev->data->rx_queues);
  64        struct ndp_tx_queue *tx_queue = *((struct ndp_tx_queue **)
  65                dev->data->tx_queues);
  66
  67        for (i = 0; i < nb_rx; i++) {
  68                rx_queue[i].rx_pkts = 0;
  69                rx_queue[i].rx_bytes = 0;
  70                rx_queue[i].err_pkts = 0;
  71        }
  72        for (i = 0; i < nb_tx; i++) {
  73                tx_queue[i].tx_pkts = 0;
  74                tx_queue[i].tx_bytes = 0;
  75                tx_queue[i].err_pkts = 0;
  76        }
  77
  78        return 0;
  79}
  80