diff options
author | Matias Elo <matias.elo@nokia.com> | 2021-05-19 15:14:42 +0300 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2021-06-23 08:16:10 +0300 |
commit | 912c80c29b4a7ce432de7062d1cab199c4e5f923 (patch) | |
tree | e97a685dacfb37272c145bcd8f2ad61b113c13ca /platform/linux-generic | |
parent | c8cabf410c9ab4610a81e74a7ce4ef9bef80dd50 (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.h | 3 | ||||
-rw-r--r-- | platform/linux-generic/pktio/dpdk.c | 8 | ||||
-rw-r--r-- | platform/linux-generic/pktio/loop.c | 6 | ||||
-rw-r--r-- | platform/linux-generic/pktio/netmap.c | 1 | ||||
-rw-r--r-- | platform/linux-generic/pktio/pcap.c | 5 | ||||
-rw-r--r-- | platform/linux-generic/pktio/socket.c | 5 | ||||
-rw-r--r-- | platform/linux-generic/pktio/socket_mmap.c | 5 | ||||
-rw-r--r-- | platform/linux-generic/pktio/stats/packet_io_stats.c | 37 |
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; + } +} |