[dpdk-dev] [PATCH] add drop statistic for af_packet
Vadim
podovinnikov at protei.ru
Mon Nov 25 14:41:05 CET 2019
---
drivers/net/af_packet/rte_eth_af_packet.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index f5806bf42..eb1902170 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -327,8 +327,10 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)
{
unsigned i, imax;
unsigned long rx_total = 0, tx_total = 0, tx_err_total = 0;
- unsigned long rx_bytes_total = 0, tx_bytes_total = 0;
+ unsigned long rx_bytes_total = 0, tx_bytes_total = 0, rx_drop = 0;
const struct pmd_internals *internal = dev->data->dev_private;
+ socklen_t sock_len = sizeof(struct tpacket_stats_v3);
+ struct tpacket_stats_v3 st;
imax = (internal->nb_queues < RTE_ETHDEV_QUEUE_STAT_CNTRS ?
internal->nb_queues : RTE_ETHDEV_QUEUE_STAT_CNTRS);
@@ -337,6 +339,12 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)
igb_stats->q_ibytes[i] = internal->rx_queue[i].rx_bytes;
rx_total += igb_stats->q_ipackets[i];
rx_bytes_total += igb_stats->q_ibytes[i];
+
+ memset(&st, 0, sock_len);
+ int rc = getsockopt(internal->rx_queue[i].sockfd, SOL_PACKET,
+ PACKET_STATISTICS, &st, &sock_len);
+ if (0 == rc)
+ rx_drop += st.tp_drops;
}
imax = (internal->nb_queues < RTE_ETHDEV_QUEUE_STAT_CNTRS ?
@@ -349,6 +357,7 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)
tx_bytes_total += igb_stats->q_obytes[i];
}
+ igb_stats->imissed = rx_drop;
igb_stats->ipackets = rx_total;
igb_stats->ibytes = rx_bytes_total;
igb_stats->opackets = tx_total;
--
2.24.0
More information about the dev
mailing list