aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/pktio/pcap.c
diff options
context:
space:
mode:
authorJere Leppänen <jere.leppanen@nokia.com>2022-03-18 17:55:01 +0200
committerPetri Savolainen <petri.savolainen@nokia.com>2022-03-31 16:35:49 +0300
commitdcc3103f509a4fea326f8afbdabc7033d13c17c0 (patch)
tree0d3c345efa681ffd179650acffca605dbe591f42 /platform/linux-generic/pktio/pcap.c
parent43e4ead4cd1149f956f13e9968679b424240948f (diff)
linux-gen: pktio: pcap: fix stats
Don't count packets with errors in in_octets and in_packets. Add in_errors and in_discards counters. Signed-off-by: Jere Leppänen <jere.leppanen@nokia.com> Reviewed-by: Matias Elo <matias.elo@nokia.com> Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com>
Diffstat (limited to 'platform/linux-generic/pktio/pcap.c')
-rw-r--r--platform/linux-generic/pktio/pcap.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/platform/linux-generic/pktio/pcap.c b/platform/linux-generic/pktio/pcap.c
index 2088c06d9..af94ffa72 100644
--- a/platform/linux-generic/pktio/pcap.c
+++ b/platform/linux-generic/pktio/pcap.c
@@ -249,6 +249,8 @@ static int pcapif_recv_pkt(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
pkt_pcap_t *pcap = pkt_priv(pktio_entry);
odp_time_t ts_val;
odp_time_t *ts = NULL;
+ int packets = 0, errors = 0;
+ uint32_t octets = 0;
uint16_t frame_offset = pktio_entry->s.pktin_frame_offset;
const odp_proto_chksums_t chksums = pktio_entry->s.in_chksums;
const odp_proto_layer_t layer = pktio_entry->s.parse_layer;
@@ -300,6 +302,9 @@ static int pcapif_recv_pkt(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
ret = _odp_packet_parse_common(&pkt_hdr->p, data, pkt_len,
pkt_len, layer, chksums,
&l4_part_sum, opt);
+ if (ret)
+ errors++;
+
if (ret < 0) {
odp_packet_free(pkt);
continue;
@@ -319,8 +324,10 @@ static int pcapif_recv_pkt(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
odp_packet_free(pkt);
- if (odp_unlikely(new_pkt == ODP_PACKET_INVALID))
+ if (odp_unlikely(new_pkt == ODP_PACKET_INVALID)) {
+ pktio_entry->s.stats.in_discards++;
continue;
+ }
pkt = new_pkt;
pkt_hdr = packet_hdr(new_pkt);
@@ -331,16 +338,22 @@ static int pcapif_recv_pkt(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
_odp_packet_l4_chksum(pkt_hdr, chksums, l4_part_sum);
}
- pktio_entry->s.stats.in_octets += pkt_hdr->frame_len;
-
packet_set_ts(pkt_hdr, ts);
pkt_hdr->input = pktio_entry->s.handle;
+ if (!pkt_hdr->p.flags.all.error) {
+ octets += pkt_len;
+ packets++;
+ }
+
pkts[i] = pkt;
i++;
}
- pktio_entry->s.stats.in_packets += i;
+
+ pktio_entry->s.stats.in_octets += octets;
+ pktio_entry->s.stats.in_packets += packets;
+ pktio_entry->s.stats.in_errors += errors;
odp_ticketlock_unlock(&pktio_entry->s.rxl);
@@ -455,6 +468,8 @@ static int pcapif_capability(pktio_entry_t *pktio_entry ODP_UNUSED,
capa->stats.pktio.counter.in_octets = 1;
capa->stats.pktio.counter.in_packets = 1;
+ capa->stats.pktio.counter.in_discards = 1;
+ capa->stats.pktio.counter.in_errors = 1;
capa->stats.pktio.counter.out_octets = 1;
capa->stats.pktio.counter.out_packets = 1;