Signed-off-by: Maxim Uvarov <maxim.uva...@linaro.org>
---
 platform/linux-generic/pktio/pcap.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/platform/linux-generic/pktio/pcap.c 
b/platform/linux-generic/pktio/pcap.c
index 0817bf5..34cd73c 100644
--- a/platform/linux-generic/pktio/pcap.c
+++ b/platform/linux-generic/pktio/pcap.c
@@ -51,6 +51,8 @@
 #define PKTIO_PCAP_MTU (64 * 1024)
 static const char pcap_mac[] = {0x02, 0xe9, 0x34, 0x80, 0x73, 0x04};
 
+static int pcapif_stats_reset(pktio_entry_t *pktio_entry);
+
 static int _pcapif_parse_devname(pkt_pcap_t *pcap, const char *devname)
 {
        char *tok;
@@ -156,6 +158,8 @@ static int pcapif_init(odp_pktio_t id ODP_UNUSED, 
pktio_entry_t *pktio_entry,
        if (ret == 0 && (!pcap->rx && !pcap->tx_dump))
                ret = -1;
 
+       (void)pcapif_stats_reset(pktio_entry);
+
        return ret;
 }
 
@@ -251,6 +255,7 @@ static int pcapif_recv_pkt(pktio_entry_t *pktio_entry, 
odp_packet_t pkts[],
                }
 
                packet_parse_l2(pkt_hdr);
+               pktio_entry->s.stats.in_octets += pkt_hdr->frame_len;
 
                pkts[i] = pkt;
                pkt = ODP_PACKET_INVALID;
@@ -261,6 +266,7 @@ static int pcapif_recv_pkt(pktio_entry_t *pktio_entry, 
odp_packet_t pkts[],
        if (pkt != ODP_PACKET_INVALID)
                odp_packet_free(pkt);
 
+       pktio_entry->s.stats.in_ucast_pkts += i;
        return i;
 }
 
@@ -293,7 +299,9 @@ static int pcapif_send_pkt(pktio_entry_t *pktio_entry, 
odp_packet_t pkts[],
        ODP_ASSERT(pktio_entry->s.state == STATE_START);
 
        for (i = 0; i < len; ++i) {
-               if (odp_packet_len(pkts[i]) > PKTIO_PCAP_MTU) {
+               int pkt_len = odp_packet_len(pkts[i]);
+
+               if (pkt_len > PKTIO_PCAP_MTU) {
                        if (i == 0)
                                return -1;
                        break;
@@ -302,9 +310,12 @@ static int pcapif_send_pkt(pktio_entry_t *pktio_entry, 
odp_packet_t pkts[],
                if (_pcapif_dump_pkt(pcap, pkts[i]) != 0)
                        break;
 
+               pktio_entry->s.stats.out_octets += pkt_len;
                odp_packet_free(pkts[i]);
        }
 
+       pktio_entry->s.stats.out_ucast_pkts += i;
+
        return i;
 }
 
@@ -369,9 +380,24 @@ static int pcapif_promisc_mode_get(pktio_entry_t 
*pktio_entry)
        return pktio_entry->s.pkt_pcap.promisc;
 }
 
+static int pcapif_stats_reset(pktio_entry_t *pktio_entry)
+{
+       memset(&pktio_entry->s.stats, 0, sizeof(odp_pktio_stats_t));
+       return 0;
+}
+
+static int pcapif_stats(pktio_entry_t *pktio_entry,
+                       odp_pktio_stats_t *stats)
+{
+       memcpy(stats, &pktio_entry->s.stats, sizeof(odp_pktio_stats_t));
+       return 0;
+}
+
 const pktio_if_ops_t pcap_pktio_ops = {
        .open = pcapif_init,
        .close = pcapif_close,
+       .stats = pcapif_stats,
+       .stats_reset = pcapif_stats_reset,
        .recv = pcapif_recv_pkt,
        .send = pcapif_send_pkt,
        .mtu_get = pcapif_mtu_get,
-- 
1.9.1

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to