aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerin Jacob <jerinj@marvell.com>2021-02-15 15:29:42 +0530
committerMatias Elo <matias.elo@nokia.com>2021-07-21 11:02:15 +0300
commit2a6bd22254c74a4bc5b28460aa0d0131ee8c8f3d (patch)
treee92b996dbc12569b1acb69e2a05c06313bbd2549
parentd9aaba1b356856713023775534ac34cb34e5dac8 (diff)
api: proto_stats: introduce generic protocol stats framework
Add generic protocol stats framework where protocol stats object supports basic operations like creation, lookup, access and destroy of stats object is supported. Each object supports a set of stats based on object params. This generic framework is also useful when we have to associate stats objects to fast path with minimal overhead as it is as close to HW implementation as possible. Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com> Signed-off-by: Jerin Jacob <jerinj@marvell.com> Reviewed-by: Janne Peltonen <janne.peltonen@nokia.com>
-rw-r--r--include/Makefile.am10
-rw-r--r--include/odp/api/abi-default/proto_stats.h40
-rw-r--r--include/odp/api/proto_stats.h28
-rw-r--r--include/odp/api/spec/proto_stats.h139
-rw-r--r--include/odp/arch/arm32-linux/odp/api/abi/proto_stats.h5
-rw-r--r--include/odp/arch/arm64-linux/odp/api/abi/proto_stats.h5
-rw-r--r--include/odp/arch/default-linux/odp/api/abi/proto_stats.h5
-rw-r--r--include/odp/arch/mips64-linux/odp/api/abi/proto_stats.h5
-rw-r--r--include/odp/arch/power64-linux/odp/api/abi/proto_stats.h5
-rw-r--r--include/odp/arch/x86_32-linux/odp/api/abi/proto_stats.h5
-rw-r--r--include/odp/arch/x86_64-linux/odp/api/abi/proto_stats.h5
-rw-r--r--platform/linux-generic/Makefile.am1
-rw-r--r--platform/linux-generic/include-abi/odp/api/abi/proto_stats.h37
13 files changed, 290 insertions, 0 deletions
diff --git a/include/Makefile.am b/include/Makefile.am
index e5fa867c6..c0e598991 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -37,6 +37,7 @@ odpapiinclude_HEADERS = \
odp/api/packet_io_stats.h \
odp/api/protocols.h \
odp/api/pool.h \
+ odp/api/proto_stats.h \
odp/api/queue.h \
odp/api/queue_types.h \
odp/api/random.h \
@@ -92,6 +93,7 @@ odpapispecinclude_HEADERS = \
odp/api/spec/protocols.h \
odp/api/spec/pool.h \
odp/api/spec/pool_types.h \
+ odp/api/spec/proto_stats.h \
odp/api/spec/queue.h \
odp/api/spec/queue_types.h \
odp/api/spec/random.h \
@@ -144,6 +146,7 @@ odpapiabidefaultinclude_HEADERS = \
odp/api/abi-default/packet_types.h \
odp/api/abi-default/packet_flags.h \
odp/api/abi-default/packet_io.h \
+ odp/api/abi-default/proto_stats.h \
odp/api/abi-default/pool.h \
odp/api/abi-default/queue.h \
odp/api/abi-default/queue_types.h \
@@ -193,6 +196,7 @@ odpapiabiarchinclude_HEADERS = \
odp/arch/arm32-linux/odp/api/abi/packet_flags.h \
odp/arch/arm32-linux/odp/api/abi/packet_io.h \
odp/arch/arm32-linux/odp/api/abi/pool.h \
+ odp/arch/arm32-linux/odp/api/abi/proto_stats.h \
odp/arch/arm32-linux/odp/api/abi/queue.h \
odp/arch/arm32-linux/odp/api/abi/queue_types.h \
odp/arch/arm32-linux/odp/api/abi/rwlock.h \
@@ -237,6 +241,7 @@ odpapiabiarchinclude_HEADERS = \
odp/arch/arm64-linux/odp/api/abi/packet_flags.h \
odp/arch/arm64-linux/odp/api/abi/packet_io.h \
odp/arch/arm64-linux/odp/api/abi/pool.h \
+ odp/arch/arm64-linux/odp/api/abi/proto_stats.h \
odp/arch/arm64-linux/odp/api/abi/queue.h \
odp/arch/arm64-linux/odp/api/abi/queue_types.h \
odp/arch/arm64-linux/odp/api/abi/rwlock.h \
@@ -281,6 +286,7 @@ odpapiabiarchinclude_HEADERS = \
odp/arch/default-linux/odp/api/abi/packet_flags.h \
odp/arch/default-linux/odp/api/abi/packet_io.h \
odp/arch/default-linux/odp/api/abi/pool.h \
+ odp/arch/default-linux/odp/api/abi/proto_stats.h \
odp/arch/default-linux/odp/api/abi/queue.h \
odp/arch/default-linux/odp/api/abi/queue_types.h \
odp/arch/default-linux/odp/api/abi/rwlock.h \
@@ -325,6 +331,7 @@ odpapiabiarchinclude_HEADERS = \
odp/arch/mips64-linux/odp/api/abi/packet_flags.h \
odp/arch/mips64-linux/odp/api/abi/packet_io.h \
odp/arch/mips64-linux/odp/api/abi/pool.h \
+ odp/arch/mips64-linux/odp/api/abi/proto_stats.h \
odp/arch/mips64-linux/odp/api/abi/queue.h \
odp/arch/mips64-linux/odp/api/abi/queue_types.h \
odp/arch/mips64-linux/odp/api/abi/rwlock.h \
@@ -369,6 +376,7 @@ odpapiabiarchinclude_HEADERS = \
odp/arch/power64-linux/odp/api/abi/packet_flags.h \
odp/arch/power64-linux/odp/api/abi/packet_io.h \
odp/arch/power64-linux/odp/api/abi/pool.h \
+ odp/arch/power64-linux/odp/api/abi/proto_stats.h \
odp/arch/power64-linux/odp/api/abi/queue.h \
odp/arch/power64-linux/odp/api/abi/queue_types.h \
odp/arch/power64-linux/odp/api/abi/rwlock.h \
@@ -413,6 +421,7 @@ odpapiabiarchinclude_HEADERS = \
odp/arch/x86_32-linux/odp/api/abi/packet_flags.h \
odp/arch/x86_32-linux/odp/api/abi/packet_io.h \
odp/arch/x86_32-linux/odp/api/abi/pool.h \
+ odp/arch/x86_32-linux/odp/api/abi/proto_stats.h \
odp/arch/x86_32-linux/odp/api/abi/queue.h \
odp/arch/x86_32-linux/odp/api/abi/queue_types.h \
odp/arch/x86_32-linux/odp/api/abi/rwlock.h \
@@ -457,6 +466,7 @@ odpapiabiarchinclude_HEADERS = \
odp/arch/x86_64-linux/odp/api/abi/packet_flags.h \
odp/arch/x86_64-linux/odp/api/abi/packet_io.h \
odp/arch/x86_64-linux/odp/api/abi/pool.h \
+ odp/arch/x86_64-linux/odp/api/abi/proto_stats.h \
odp/arch/x86_64-linux/odp/api/abi/queue.h \
odp/arch/x86_64-linux/odp/api/abi/queue_types.h \
odp/arch/x86_64-linux/odp/api/abi/rwlock.h \
diff --git a/include/odp/api/abi-default/proto_stats.h b/include/odp/api/abi-default/proto_stats.h
new file mode 100644
index 000000000..209521b5a
--- /dev/null
+++ b/include/odp/api/abi-default/proto_stats.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+/**
+ * @file
+ *
+ * ODP Proto Stats
+ */
+
+#ifndef ODP_ABI_PROTO_STATS_H_
+#define ODP_ABI_PROTO_STATS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <odp/api/std_types.h>
+
+/** @internal Dummy type for strong typing */
+typedef struct { char dummy; /**< @internal Dummy */ } _odp_abi_proto_stats_t;
+
+/** @ingroup odp_proto_stats
+ * Operations on a proto stats object.
+ * @{
+ */
+
+typedef _odp_abi_proto_stats_t *odp_proto_stats_t;
+
+#define ODP_PROTO_STATS_INVALID ((odp_proto_stats_t)0)
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/odp/api/proto_stats.h b/include/odp/api/proto_stats.h
new file mode 100644
index 000000000..9b434a16e
--- /dev/null
+++ b/include/odp/api/proto_stats.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+/**
+ * @file
+ *
+ * ODP proto stats
+ */
+
+#ifndef ODP_API_PROTO_STATS_H_
+#define ODP_API_PROTO_STATS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <odp/api/std_types.h>
+#include <odp/api/abi/queue.h>
+#include <odp/api/abi/proto_stats.h>
+
+#include <odp/api/spec/proto_stats.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/odp/api/spec/proto_stats.h b/include/odp/api/spec/proto_stats.h
new file mode 100644
index 000000000..a4a27af16
--- /dev/null
+++ b/include/odp/api/spec/proto_stats.h
@@ -0,0 +1,139 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+/**
+ * @file
+ *
+ * ODP Proto Stats
+ */
+
+#ifndef ODP_API_SPEC_PROTO_STATS_H_
+#define ODP_API_SPEC_PROTO_STATS_H_
+#include <odp/visibility_begin.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @addtogroup odp_proto_stats
+ * @{
+ */
+
+/**
+ * @def ODP_PROTO_STATS_INVALID
+ * Invalid proto stats handle
+ */
+
+/** ODP proto stats params */
+typedef struct odp_proto_stats_param_t {
+} odp_proto_stats_param_t;
+
+/**
+ * Proto stats capabilities
+ */
+typedef struct odp_proto_stats_capability_t {
+} odp_proto_stats_capability_t;
+
+/**
+ * Initialize proto stats parameters
+ *
+ * Initialize an odp_proto_stats_param_t to its default values.
+ * By default all the statistics are disabled.
+ *
+ * @param param Proto stats parameter pointer.
+ */
+void odp_proto_stats_param_init(odp_proto_stats_param_t *param);
+
+/**
+ * Get proto stats capability
+ *
+ * Get supported protocol statistics and metadata for a PKTIO.
+ *
+ * @param pktio Packet IO handle
+ * @param[out] capa Pointer where capabilities are updated
+ *
+ * @retval 0 on success
+ * @retval <0 on failure
+ */
+int odp_proto_stats_capability(odp_pktio_t pktio, odp_proto_stats_capability_t *capa);
+
+/**
+ * Create a proto stats object
+ *
+ * Create a proto stats object with given name and parameters.
+ * A proto stats object can be created with any set of statistics but only the
+ * statistics that are supported by a PKTIO are updated in a proto stats object
+ * for that PKTIO associated packets. Same proto stats object can be used with
+ * any PKTIO.
+ *
+ * @param name Object name
+ * @param param Proto stats parameters
+ *
+ * @return Proto stats object handle
+ * @retval ODP_PROTO_STATS_INVALID on failure
+ */
+odp_proto_stats_t odp_proto_stats_create(const char *name, const odp_proto_stats_param_t *param);
+
+/**
+ * Lookup a proto stats object by name
+ *
+ * Lookup an already created proto stats object by name.
+ *
+ * @param name Proto stats object name
+ *
+ * @return Proto stats object handle
+ * @retval ODP_PROTO_STATS_INVALID on failure
+ */
+odp_proto_stats_t odp_proto_stats_lookup(const char *name);
+
+/**
+ * Destroy a proto stats object
+ *
+ * Destroy a proto stats object already created.
+ *
+ * @param stat Proto stats handle
+ *
+ * @retval 0 on success
+ * @retval <0 on failure
+ */
+int odp_proto_stats_destroy(odp_proto_stats_t stat);
+
+/** ODP proto stats counters */
+typedef struct odp_proto_stats_data_t {
+} odp_proto_stats_data_t;
+
+/**
+ * Get all proto stats counters
+ *
+ * Get current values of all counters of the proto stats object.
+ * The values of counters that are not enabled in the proto stats object are undefined.
+ *
+ * @param stat Proto stats object handle
+ * @param[out] data Pointer to a caller allocated structure where the statistics will
+ * be written to.
+ *
+ * @retval =0 on success
+ * @retval <0 on failure
+ */
+int odp_proto_stats(odp_proto_stats_t stat, odp_proto_stats_data_t *data);
+
+/**
+ * Print proto stats object info to ODP log.
+ *
+ * Print implementation-defined proto stats debug information to ODP log.
+ *
+ * @param stat Proto stats object handle
+ */
+void odp_proto_stats_print(odp_proto_stats_t stat);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <odp/visibility_end.h>
+#endif
diff --git a/include/odp/arch/arm32-linux/odp/api/abi/proto_stats.h b/include/odp/arch/arm32-linux/odp/api/abi/proto_stats.h
new file mode 100644
index 000000000..81108faa5
--- /dev/null
+++ b/include/odp/arch/arm32-linux/odp/api/abi/proto_stats.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+#include <odp/api/abi-default/proto_stats.h>
diff --git a/include/odp/arch/arm64-linux/odp/api/abi/proto_stats.h b/include/odp/arch/arm64-linux/odp/api/abi/proto_stats.h
new file mode 100644
index 000000000..81108faa5
--- /dev/null
+++ b/include/odp/arch/arm64-linux/odp/api/abi/proto_stats.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+#include <odp/api/abi-default/proto_stats.h>
diff --git a/include/odp/arch/default-linux/odp/api/abi/proto_stats.h b/include/odp/arch/default-linux/odp/api/abi/proto_stats.h
new file mode 100644
index 000000000..81108faa5
--- /dev/null
+++ b/include/odp/arch/default-linux/odp/api/abi/proto_stats.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+#include <odp/api/abi-default/proto_stats.h>
diff --git a/include/odp/arch/mips64-linux/odp/api/abi/proto_stats.h b/include/odp/arch/mips64-linux/odp/api/abi/proto_stats.h
new file mode 100644
index 000000000..81108faa5
--- /dev/null
+++ b/include/odp/arch/mips64-linux/odp/api/abi/proto_stats.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+#include <odp/api/abi-default/proto_stats.h>
diff --git a/include/odp/arch/power64-linux/odp/api/abi/proto_stats.h b/include/odp/arch/power64-linux/odp/api/abi/proto_stats.h
new file mode 100644
index 000000000..81108faa5
--- /dev/null
+++ b/include/odp/arch/power64-linux/odp/api/abi/proto_stats.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+#include <odp/api/abi-default/proto_stats.h>
diff --git a/include/odp/arch/x86_32-linux/odp/api/abi/proto_stats.h b/include/odp/arch/x86_32-linux/odp/api/abi/proto_stats.h
new file mode 100644
index 000000000..81108faa5
--- /dev/null
+++ b/include/odp/arch/x86_32-linux/odp/api/abi/proto_stats.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+#include <odp/api/abi-default/proto_stats.h>
diff --git a/include/odp/arch/x86_64-linux/odp/api/abi/proto_stats.h b/include/odp/arch/x86_64-linux/odp/api/abi/proto_stats.h
new file mode 100644
index 000000000..81108faa5
--- /dev/null
+++ b/include/odp/arch/x86_64-linux/odp/api/abi/proto_stats.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+#include <odp/api/abi-default/proto_stats.h>
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index b12066365..55c37856a 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -70,6 +70,7 @@ odpapiabiarchinclude_HEADERS += \
include-abi/odp/api/abi/packet_types.h \
include-abi/odp/api/abi/packet_flags.h \
include-abi/odp/api/abi/packet_io.h \
+ include-abi/odp/api/abi/proto_stats.h \
include-abi/odp/api/abi/pool.h \
include-abi/odp/api/abi/queue.h \
include-abi/odp/api/abi/queue_types.h \
diff --git a/platform/linux-generic/include-abi/odp/api/abi/proto_stats.h b/platform/linux-generic/include-abi/odp/api/abi/proto_stats.h
new file mode 100644
index 000000000..2ebfa57cd
--- /dev/null
+++ b/platform/linux-generic/include-abi/odp/api/abi/proto_stats.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+/**
+ * @file
+ *
+ * ODP proto stats
+ */
+
+#ifndef ODP_API_ABI_PROTO_STATS_H_
+#define ODP_API_ABI_PROTO_STATS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <odp/api/std_types.h>
+#include <odp/api/plat/strong_types.h>
+
+/** @ingroup odp_proto_stats
+ * @{
+ */
+
+typedef ODP_HANDLE_T(odp_proto_stats_t);
+
+#define ODP_PROTO_STATS_INVALID _odp_cast_scalar(odp_proto_stats_t, 0)
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif