The old statistics on i40e only count the packets on ports.
This patch is to make statistics for packets both on ports and VSI.
But there're still some issues about statistics for 'bytes'.

Signed-off-by: Xutao Sun <xutao.sun at intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 40b0526..a8d7116 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -1511,21 +1511,26 @@ i40e_dev_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
        if (pf->main_vsi)
                i40e_update_vsi_stats(pf->main_vsi);

-       stats->ipackets = ns->eth.rx_unicast + ns->eth.rx_multicast +
-                                               ns->eth.rx_broadcast;
-       stats->opackets = ns->eth.tx_unicast + ns->eth.tx_multicast +
-                                               ns->eth.tx_broadcast;
+       stats->ipackets = pf->main_vsi->eth_stats.rx_unicast +
+                       pf->main_vsi->eth_stats.rx_multicast +
+                       pf->main_vsi->eth_stats.rx_broadcast -
+                       pf->main_vsi->eth_stats.rx_discards;
+       stats->opackets = pf->main_vsi->eth_stats.tx_unicast +
+                       pf->main_vsi->eth_stats.tx_multicast +
+                       pf->main_vsi->eth_stats.tx_broadcast;
        stats->ibytes   = ns->eth.rx_bytes;
        stats->obytes   = ns->eth.tx_bytes;
-       stats->oerrors  = ns->eth.tx_errors;
-       stats->imcasts  = ns->eth.rx_multicast;
+       stats->oerrors  = ns->eth.tx_errors + 
+                       pf->main_vsi->eth_stats.tx_errors;
+       stats->imcasts  = pf->main_vsi->eth_stats.rx_multicast;
        stats->fdirmatch = ns->fd_sb_match;

        /* Rx Errors */
        stats->ibadcrc  = ns->crc_errors;
        stats->ibadlen  = ns->rx_length_errors + ns->rx_undersize +
                        ns->rx_oversize + ns->rx_fragments + ns->rx_jabber;
-       stats->imissed  = ns->eth.rx_discards;
+       stats->imissed  = ns->eth.rx_discards + 
+                       pf->main_vsi->eth_stats.rx_discards;
        stats->ierrors  = stats->ibadcrc + stats->ibadlen + stats->imissed;

        PMD_DRV_LOG(DEBUG, "***************** PF stats start 
*******************");
-- 
1.9.3

Reply via email to