v3 changes: -updated commit log -fixed the bug that stats data can't be cleared
Signed-off-by: Zhida Zang <zhida.zang at intel.com> --- lib/librte_pmd_i40e/i40e_ethdev.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c index 4b7a827..c1ea37e 100644 --- a/lib/librte_pmd_i40e/i40e_ethdev.c +++ b/lib/librte_pmd_i40e/i40e_ethdev.c @@ -1102,6 +1102,7 @@ i40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct i40e_hw_port_stats *ns = &pf->stats; /* new stats */ struct i40e_hw_port_stats *os = &pf->stats_offset; /* old stats */ + struct i40e_eth_stats *ves = &pf->main_vsi->eth_stats; /* vsi stats */ /* Get statistics of struct i40e_eth_stats */ i40e_stat_update_48(hw, I40E_GLPRT_GORCH(hw->port), @@ -1277,15 +1278,18 @@ i40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) /* GLPRT_MSPDC not supported */ /* GLPRT_XEC not supported */ - pf->offset_loaded = true; - 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 + + if (pf->offset_loaded) + stats->opackets = ves->tx_unicast + ves->tx_multicast + + ves->tx_broadcast; + else + stats->opackets = ns->eth.tx_unicast + ns->eth.tx_multicast + ns->eth.tx_broadcast; + pf->offset_loaded = true; stats->ibytes = ns->eth.rx_bytes; stats->obytes = ns->eth.tx_bytes; stats->oerrors = ns->eth.tx_errors; -- 1.9.3