aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2021-05-19 15:14:42 +0300
committerMatias Elo <matias.elo@nokia.com>2021-06-23 08:16:10 +0300
commit912c80c29b4a7ce432de7062d1cab199c4e5f923 (patch)
treee97a685dacfb37272c145bcd8f2ad61b113c13ca /platform/linux-generic
parentc8cabf410c9ab4610a81e74a7ce4ef9bef80dd50 (diff)
linux-gen: pktio: implement statistics counters capabilities
Fill new odp_pktio_stats_capability_t capability for all pktio devices supporting statistics counters. Signed-off-by: Matias Elo <matias.elo@nokia.com> Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com>
Diffstat (limited to 'platform/linux-generic')
-rw-r--r--platform/linux-generic/include/odp_packet_io_stats.h3
-rw-r--r--platform/linux-generic/pktio/dpdk.c8
-rw-r--r--platform/linux-generic/pktio/loop.c6
-rw-r--r--platform/linux-generic/pktio/netmap.c1
-rw-r--r--platform/linux-generic/pktio/pcap.c5
-rw-r--r--platform/linux-generic/pktio/socket.c5
-rw-r--r--platform/linux-generic/pktio/socket_mmap.c5
-rw-r--r--platform/linux-generic/pktio/stats/packet_io_stats.c37
8 files changed, 68 insertions, 2 deletions
diff --git a/platform/linux-generic/include/odp_packet_io_stats.h b/platform/linux-generic/include/odp_packet_io_stats.h
index 22e3b5041..486fd76d7 100644
--- a/platform/linux-generic/include/odp_packet_io_stats.h
+++ b/platform/linux-generic/include/odp_packet_io_stats.h
@@ -22,6 +22,9 @@ int _odp_sock_stats_fd(pktio_entry_t *pktio_entry,
int fd);
int _odp_sock_stats_reset_fd(pktio_entry_t *pktio_entry, int fd);
+void _odp_sock_stats_capa(pktio_entry_t *pktio_entry,
+ odp_pktio_capability_t *capa);
+
pktio_stats_type_t _odp_sock_stats_type_fd(pktio_entry_t *pktio_entry, int fd);
#ifdef __cplusplus
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c
index 7d836368f..7e781f955 100644
--- a/platform/linux-generic/pktio/dpdk.c
+++ b/platform/linux-generic/pktio/dpdk.c
@@ -1613,6 +1613,14 @@ static int dpdk_init_capability(pktio_entry_t *pktio_entry,
capa->config.pktout.bit.tcp_chksum;
capa->config.pktout.bit.ts_ena = 1;
+ 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;
+ capa->stats.pktio.counter.out_errors = 1;
+
return 0;
}
diff --git a/platform/linux-generic/pktio/loop.c b/platform/linux-generic/pktio/loop.c
index dd321511a..d21c7ab17 100644
--- a/platform/linux-generic/pktio/loop.c
+++ b/platform/linux-generic/pktio/loop.c
@@ -458,6 +458,12 @@ static int loopback_init_capability(pktio_entry_t *pktio_entry)
capa->config.pktout.bit.sctp_chksum_ena =
capa->config.pktout.bit.sctp_chksum;
+ capa->stats.pktio.counter.in_octets = 1;
+ capa->stats.pktio.counter.in_packets = 1;
+ capa->stats.pktio.counter.in_errors = 1;
+ capa->stats.pktio.counter.out_octets = 1;
+ capa->stats.pktio.counter.out_packets = 1;
+
return 0;
}
diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c
index 544503aa3..2ac97bae9 100644
--- a/platform/linux-generic/pktio/netmap.c
+++ b/platform/linux-generic/pktio/netmap.c
@@ -637,6 +637,7 @@ static int netmap_open(odp_pktio_t id ODP_UNUSED, pktio_entry_t *pktio_entry,
pktio_entry->s.stats_type = STATS_UNSUPPORTED;
} else {
pktio_entry->s.stats_type = STATS_ETHTOOL;
+ _odp_sock_stats_capa(pktio_entry, &pktio_entry->s.capa);
}
(void)netmap_stats_reset(pktio_entry);
diff --git a/platform/linux-generic/pktio/pcap.c b/platform/linux-generic/pktio/pcap.c
index d4858903b..bf4c87c02 100644
--- a/platform/linux-generic/pktio/pcap.c
+++ b/platform/linux-generic/pktio/pcap.c
@@ -431,6 +431,11 @@ static int pcapif_capability(pktio_entry_t *pktio_entry ODP_UNUSED,
capa->config.pktout.bit.ts_ena = 1;
+ capa->stats.pktio.counter.in_octets = 1;
+ capa->stats.pktio.counter.in_packets = 1;
+ capa->stats.pktio.counter.out_octets = 1;
+ capa->stats.pktio.counter.out_packets = 1;
+
return 0;
}
diff --git a/platform/linux-generic/pktio/socket.c b/platform/linux-generic/pktio/socket.c
index eb4390e46..adeddd9fb 100644
--- a/platform/linux-generic/pktio/socket.c
+++ b/platform/linux-generic/pktio/socket.c
@@ -526,7 +526,7 @@ static int sock_link_info(pktio_entry_t *pktio_entry, odp_pktio_link_info_t *inf
return _odp_link_info_fd(pkt_priv(pktio_entry)->sockfd, pktio_entry->s.name, info);
}
-static int sock_capability(pktio_entry_t *pktio_entry ODP_UNUSED,
+static int sock_capability(pktio_entry_t *pktio_entry,
odp_pktio_capability_t *capa)
{
pkt_sock_t *pkt_sock = pkt_priv(pktio_entry);
@@ -550,6 +550,9 @@ static int sock_capability(pktio_entry_t *pktio_entry ODP_UNUSED,
capa->config.pktout.bit.ts_ena = 1;
+ /* Fill statistics capabilities */
+ _odp_sock_stats_capa(pktio_entry, capa);
+
return 0;
}
diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c
index 532f392fa..66a0b6df0 100644
--- a/platform/linux-generic/pktio/socket_mmap.c
+++ b/platform/linux-generic/pktio/socket_mmap.c
@@ -841,7 +841,7 @@ static int sock_mmap_link_info(pktio_entry_t *pktio_entry, odp_pktio_link_info_t
return _odp_link_info_fd(pkt_priv(pktio_entry)->sockfd, pktio_entry->s.name, info);
}
-static int sock_mmap_capability(pktio_entry_t *pktio_entry ODP_UNUSED,
+static int sock_mmap_capability(pktio_entry_t *pktio_entry,
odp_pktio_capability_t *capa)
{
pkt_sock_mmap_t *const pkt_sock = pkt_priv(pktio_entry);
@@ -865,6 +865,9 @@ static int sock_mmap_capability(pktio_entry_t *pktio_entry ODP_UNUSED,
capa->config.pktout.bit.ts_ena = 1;
+ /* Fill statistics capabilities */
+ _odp_sock_stats_capa(pktio_entry, capa);
+
return 0;
}
diff --git a/platform/linux-generic/pktio/stats/packet_io_stats.c b/platform/linux-generic/pktio/stats/packet_io_stats.c
index cf5de895f..8d7ea9fb1 100644
--- a/platform/linux-generic/pktio/stats/packet_io_stats.c
+++ b/platform/linux-generic/pktio/stats/packet_io_stats.c
@@ -108,3 +108,40 @@ pktio_stats_type_t _odp_sock_stats_type_fd(pktio_entry_t *pktio_entry, int fd)
return STATS_UNSUPPORTED;
}
+
+void _odp_sock_stats_capa(pktio_entry_t *pktio_entry,
+ odp_pktio_capability_t *capa)
+{
+ capa->stats.pktio.all_counters = 0;
+ capa->stats.pktin_queue.all_counters = 0;
+ capa->stats.pktout_queue.all_counters = 0;
+
+ if (pktio_entry->s.stats_type == STATS_SYSFS) {
+ capa->stats.pktio.counter.in_octets = 1;
+ capa->stats.pktio.counter.in_packets = 1;
+ capa->stats.pktio.counter.in_ucast_pkts = 1;
+ capa->stats.pktio.counter.in_mcast_pkts = 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;
+ capa->stats.pktio.counter.out_ucast_pkts = 1;
+ capa->stats.pktio.counter.out_discards = 1;
+ capa->stats.pktio.counter.out_errors = 1;
+ } else if (pktio_entry->s.stats_type == STATS_ETHTOOL) {
+ capa->stats.pktio.counter.in_octets = 1;
+ capa->stats.pktio.counter.in_packets = 1;
+ capa->stats.pktio.counter.in_ucast_pkts = 1;
+ capa->stats.pktio.counter.in_bcast_pkts = 1;
+ capa->stats.pktio.counter.in_mcast_pkts = 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;
+ capa->stats.pktio.counter.out_ucast_pkts = 1;
+ capa->stats.pktio.counter.out_bcast_pkts = 1;
+ capa->stats.pktio.counter.out_mcast_pkts = 1;
+ capa->stats.pktio.counter.out_discards = 1;
+ capa->stats.pktio.counter.out_errors = 1;
+ }
+}