net/avf: support stats
Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
This commit is contained in:
parent
48de41ca11
commit
f4a41a6953
@ -17,6 +17,7 @@ VLAN offload = Y
|
||||
L3 checksum offload = Y
|
||||
L4 checksum offload = Y
|
||||
Packet type parsing = Y
|
||||
Basic stats = Y
|
||||
Multiprocess aware = Y
|
||||
BSD nic_uio = Y
|
||||
Linux UIO = Y
|
||||
|
@ -201,4 +201,6 @@ int avf_config_irq_map(struct avf_adapter *adapter);
|
||||
void avf_add_del_all_mac_addr(struct avf_adapter *adapter, bool add);
|
||||
int avf_dev_link_update(struct rte_eth_dev *dev,
|
||||
__rte_unused int wait_to_complete);
|
||||
int avf_query_stats(struct avf_adapter *adapter,
|
||||
struct virtchnl_eth_stats **pstats);
|
||||
#endif /* _AVF_ETHDEV_H_ */
|
||||
|
@ -40,6 +40,8 @@ static void avf_dev_close(struct rte_eth_dev *dev);
|
||||
static void avf_dev_info_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_dev_info *dev_info);
|
||||
static const uint32_t *avf_dev_supported_ptypes_get(struct rte_eth_dev *dev);
|
||||
static int avf_dev_stats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_stats *stats);
|
||||
|
||||
int avf_logtype_init;
|
||||
int avf_logtype_driver;
|
||||
@ -56,6 +58,7 @@ static const struct eth_dev_ops avf_eth_dev_ops = {
|
||||
.dev_infos_get = avf_dev_info_get,
|
||||
.dev_supported_ptypes_get = avf_dev_supported_ptypes_get,
|
||||
.link_update = avf_dev_link_update,
|
||||
.stats_get = avf_dev_stats_get,
|
||||
.rx_queue_start = avf_dev_rx_queue_start,
|
||||
.rx_queue_stop = avf_dev_rx_queue_stop,
|
||||
.tx_queue_start = avf_dev_tx_queue_start,
|
||||
@ -477,6 +480,30 @@ avf_dev_link_update(struct rte_eth_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
avf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
{
|
||||
struct avf_adapter *adapter =
|
||||
AVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
|
||||
struct virtchnl_eth_stats *pstats = NULL;
|
||||
int ret;
|
||||
|
||||
ret = avf_query_stats(adapter, &pstats);
|
||||
if (ret == 0) {
|
||||
stats->ipackets = pstats->rx_unicast + pstats->rx_multicast +
|
||||
pstats->rx_broadcast;
|
||||
stats->opackets = pstats->tx_broadcast + pstats->tx_multicast +
|
||||
pstats->tx_unicast;
|
||||
stats->imissed = pstats->rx_discards;
|
||||
stats->oerrors = pstats->tx_errors + pstats->tx_discards;
|
||||
stats->ibytes = pstats->rx_bytes;
|
||||
stats->obytes = pstats->tx_bytes;
|
||||
} else {
|
||||
PMD_DRV_LOG(ERR, "Get statistics failed");
|
||||
}
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static int
|
||||
avf_check_vf_reset_done(struct avf_hw *hw)
|
||||
{
|
||||
|
@ -693,3 +693,30 @@ avf_add_del_all_mac_addr(struct avf_adapter *adapter, bool add)
|
||||
begin = next_begin;
|
||||
} while (begin < AVF_NUM_MACADDR_MAX);
|
||||
}
|
||||
|
||||
int
|
||||
avf_query_stats(struct avf_adapter *adapter,
|
||||
struct virtchnl_eth_stats **pstats)
|
||||
{
|
||||
struct avf_info *vf = AVF_DEV_PRIVATE_TO_VF(adapter);
|
||||
struct virtchnl_queue_select q_stats;
|
||||
struct avf_cmd_info args;
|
||||
int err;
|
||||
|
||||
memset(&q_stats, 0, sizeof(q_stats));
|
||||
q_stats.vsi_id = vf->vsi_res->vsi_id;
|
||||
args.ops = VIRTCHNL_OP_GET_STATS;
|
||||
args.in_args = (uint8_t *)&q_stats;
|
||||
args.in_args_size = sizeof(q_stats);
|
||||
args.out_buffer = vf->aq_resp;
|
||||
args.out_size = AVF_AQ_BUF_SZ;
|
||||
|
||||
err = avf_execute_vf_cmd(adapter, &args);
|
||||
if (err) {
|
||||
PMD_DRV_LOG(ERR, "fail to execute command OP_GET_STATS");
|
||||
*pstats = NULL;
|
||||
return err;
|
||||
}
|
||||
*pstats = (struct virtchnl_eth_stats *)args.out_buffer;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user