aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/pktio/pktio_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linux-generic/pktio/pktio_common.c')
-rw-r--r--platform/linux-generic/pktio/pktio_common.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/platform/linux-generic/pktio/pktio_common.c b/platform/linux-generic/pktio/pktio_common.c
index be9db330f..1adc5f2ea 100644
--- a/platform/linux-generic/pktio/pktio_common.c
+++ b/platform/linux-generic/pktio/pktio_common.c
@@ -51,3 +51,75 @@ int _odp_packet_cls_enq(pktio_entry_t *pktio_entry,
return 0;
}
+
+int sock_stats_reset_fd(pktio_entry_t *pktio_entry, int fd)
+{
+ int err = 0;
+ odp_pktio_stats_t cur_stats;
+
+ if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) {
+ memset(&pktio_entry->s.stats, 0,
+ sizeof(odp_pktio_stats_t));
+ return 0;
+ }
+
+ memset(&cur_stats, 0, sizeof(odp_pktio_stats_t));
+
+ if (pktio_entry->s.stats_type == STATS_ETHTOOL) {
+ (void)ethtool_stats_get_fd(fd,
+ pktio_entry->s.name,
+ &cur_stats);
+ } else if (pktio_entry->s.stats_type == STATS_SYSFS) {
+ err = sysfs_stats(pktio_entry, &cur_stats);
+ if (err != 0)
+ ODP_ERR("stats error\n");
+ }
+
+ if (err == 0)
+ memcpy(&pktio_entry->s.stats, &cur_stats,
+ sizeof(odp_pktio_stats_t));
+
+ return err;
+}
+
+int sock_stats_fd(pktio_entry_t *pktio_entry,
+ odp_pktio_stats_t *stats,
+ int fd)
+{
+ odp_pktio_stats_t cur_stats;
+ int ret = 0;
+
+ if (pktio_entry->s.stats_type == STATS_UNSUPPORTED)
+ return 0;
+
+ memset(&cur_stats, 0, sizeof(odp_pktio_stats_t));
+ if (pktio_entry->s.stats_type == STATS_ETHTOOL) {
+ (void)ethtool_stats_get_fd(fd,
+ pktio_entry->s.name,
+ &cur_stats);
+ } else if (pktio_entry->s.stats_type == STATS_SYSFS) {
+ sysfs_stats(pktio_entry, &cur_stats);
+ }
+
+ stats->in_octets = cur_stats.in_octets -
+ pktio_entry->s.stats.in_octets;
+ stats->in_ucast_pkts = cur_stats.in_ucast_pkts -
+ pktio_entry->s.stats.in_ucast_pkts;
+ stats->in_discards = cur_stats.in_discards -
+ pktio_entry->s.stats.in_discards;
+ stats->in_errors = cur_stats.in_errors -
+ pktio_entry->s.stats.in_errors;
+ stats->in_unknown_protos = cur_stats.in_unknown_protos -
+ pktio_entry->s.stats.in_unknown_protos;
+
+ stats->out_octets = cur_stats.out_octets -
+ pktio_entry->s.stats.out_octets;
+ stats->out_ucast_pkts = cur_stats.out_ucast_pkts -
+ pktio_entry->s.stats.out_ucast_pkts;
+ stats->out_discards = cur_stats.out_discards -
+ pktio_entry->s.stats.out_discards;
+ stats->out_errors = cur_stats.out_errors -
+ pktio_entry->s.stats.out_errors;
+
+ return ret;
+}