On 10/19/2015 18:49, Ola Liljedahl wrote:
On 16 October 2015 at 15:25, Maxim Uvarov <maxim.uva...@linaro.org
<mailto:maxim.uva...@linaro.org>> wrote:
Signed-off-by: Maxim Uvarov <maxim.uva...@linaro.org
<mailto:maxim.uva...@linaro.org>>
---
include/odp/api/packet_io_stats.h | 166
+++++++++++++++++++++++++
platform/linux-generic/include/odp/packet_io.h | 1 +
2 files changed, 167 insertions(+)
create mode 100644 include/odp/api/packet_io_stats.h
diff --git a/include/odp/api/packet_io_stats.h
b/include/odp/api/packet_io_stats.h
new file mode 100644
index 0000000..94af18c
--- /dev/null
+++ b/include/odp/api/packet_io_stats.h
@@ -0,0 +1,166 @@
+/* Copyright (c) 2015, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/**
+ * @file
+ *
+ * ODP Packet IO
+ */
+
+#ifndef ODP_API_PACKET_IO_STATS_H_
+#define ODP_API_PACKET_IO_STATS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @defgroup odp_packet_io ODP PACKET IO
+ * @{
+ */
+
+/**
+ * Packet IO statistics
+ *
+ * Packet IO statictics counters follow RFCs for Management
Information Base
+ * (MIB)for use with network management protocols in the Internet
community:
+ * https://tools.ietf.org/html/rfc3635
+ * https://tools.ietf.org/html/rfc2863
+ * https://tools.ietf.org/html/rfc2819
+ */
+typedef struct odp_pktio_stats_t {
+ /**
+ * The number of octets in valid MAC frames received on
this interface,
+ * including the MAC header and FCS. See ifHCInOctets counter
+ * description in RFC 3635 for details.
+ */
+ uint64_t in_octets;
+ /**
+ * The number of packets, delivered by this sub-layer to a
higher
+ * (sub-)layer, which were not addressed to a multicast or
broadcast
+ * address at this sub-layer. See InUcastPkts in RFC 2863.
+ */
+ uint64_t in_ucast_pkts;
+ /**
+ * The number of inbound packets which were chosen to be
discarded
+ * even though no errors had been detected to preven their
being
+ * deliverable to a higher-layer protocol. One possible
reason for
+ * discarding such a packet could be to free up buffer space.
+ * See InDiscards in RFC 2863.
+ */
+ uint64_t in_discards;
+ /**
+ * The sum for this interface of AlignmentErrors,
FCSErrors, FrameTooLongs,
+ * InternalMacReceiveErrors. See InErrors in RFC 3635.
+ */
+ uint64_t in_errors;
+ /**
+ * For packet-oriented interfaces, the number of packets
received via
+ * the interface which were discarded because of an unknown or
+ * unsupported protocol. For character-oriented or
fixed-length
+ * interfaces that support protocol multiplexing the number of
+ * transmission units received via the interface which
were discarded
+ * because of an unknown or unsupported protocol. For any
interface
+ * that does not support protocol multiplexing, this
counter will always
+ * be 0. See InUnknownProtos in RFC 2863.
+ */
+ uint64_t in_unknown_protos;
+ /**
+ * The number of octets transmitted in valid MAC frames on
this
+ * interface, including the MAC header and FCS. This does
include
+ * the number of octets in valid MAC Control frames
transmitted on
+ * this interface. See OutOctets in RFC 3635.
+ */
+ uint64_t out_octets;
+ /**
+ * The total number of packets that higher-level protocols
requested
+ * be transmitted, and which were not addressed to a
multicast or
+ * broadcast address at this sub-layer, including those
that were
+ * discarded or not sent. does not include MAC Control frames.
+ * See OutUcastPkts in RFC 2863, 3635.
+ */
+ uint64_t out_ucast_pkts;
+ /**
+ * The number of outbound packets which were chosen to be
discarded
+ * even though no errors had been detected to prevent
their being
+ * transmitted. One possible reason for discarding such a
packet could
+ * be to free up buffer space. See OutDiscards in RFC 2863.
+ */
+ uint64_t out_discards;
+ /**
+ * The sum for this interface of SQETestErrors,
LateCollisions,
+ * ExcessiveCollisions, InternalMacTransmitErrors and
+ * CarrierSenseErrors. See OutErrors in RFC 3635.
+ */
+ uint64_t out_errors;
+} odp_pktio_stats_t;
+
+/** Bit in odp_pktio_stats_mask_t defines if in_octets counter
+ * of odp_pktio_stats_t struct is supported */
+#define ODP_PKTIO_STATS_IN_OCTETS (1 << 0)
+/** Bit in odp_pktio_stats_mask_t defines if in_ucast_pkts counter
+ * of odp_pktio_stats_t struct is supported */
+#define ODP_PKTIO_STATS_IN_UCAST_PKTS (1 << 1)
+/** Bit in odp_pktio_stats_mask_t defines if in_discards counter
+ * of odp_pktio_stats_t struct is supported */
+#define ODP_PKTIO_STATS_IN_DISCARDS (1 << 2)
+/** Bit in odp_pktio_stats_mask_t defines if in_errors counter
+ * of odp_pktio_stats_t struct is supported */
+#define ODP_PKTIO_STATS_IN_ERRORS (1 << 3)
+/** Bit in odp_pktio_stats_mask_t defines if in_unknown_protos
counter
+ * of odp_pktio_stats_t struct is supported */
+#define ODP_PKTIO_STATS_IN_UPROTOS (1 << 4)
+/** Bit in odp_pktio_stats_mask_t defines if out_octets counter
+ * of odp_pktio_stats_t struct is supported */
+#define ODP_PKTIO_STATS_OUT_OCTETS (1 << 5)
+/** Bit in odp_pktio_stats_mask_t defines if out_ucast_pkts counter
+ * of odp_pktio_stats_t struct is supported */
+#define ODP_PKTIO_STATS_OUT_UCAST_PKTS (1 << 6)
+/** Bit in odp_pktio_stats_mask_t defines if out_discards counter
+ * of odp_pktio_stats_t struct is supported */
+#define ODP_PKTIO_STATS_OUT_DISCARDS (1 << 7)
+/** Bit in odp_pktio_stats_mask_t defines if out_errors counter
+ * of odp_pktio_stats_t struct is supported */
+#define ODP_PKTIO_STATS_OUT_ERRORS (1 << 8)
These definitions should be explicitly defined to mirror the order in
which the corresponding fields occur in the stats struct. They do
mirror the order now but it is not defined that it must be so. The
reason is that we might add fields to the stats struct and want to
preserve some binary compatibility (think e.g. separately maintained
drivers that provide these counters to the caller).
Ola, how to solve that? I added comment about 2 lines bellow the line
I'm writing. Do you think we need something else?
+
+/**
+ * Mask type of supported counters by platform, defined as:
+ * ODP_PKTIO_STATS_xxxx
+ */
+typedef uint32_t odp_pktio_stats_mask_t;
+
+/**
+ * Get statistics for pktio handle
+ *
+ * @param pktio Packet IO handle
+ * @param[out] *stats Output buffer for counters
+ * @param[out] *mask Output buffer for counters supported mask
+ * @retval 0 on success
+ * @retval <0 on failure
+ */
+int odp_pktio_stats(odp_pktio_t pktio,
+ odp_pktio_stats_t *stats,
Mask should be a field in the stats structure, not a separate parameter.
ok, will do.
Maxim.
+ odp_pktio_stats_mask_t *mask);
+
+/**
+ * Reset statistics for pktio handle
+ *
+ * @param pktio Packet IO handle
+ * @param mask Counters mask to reset
+ * @retval 0 on success
+ * @retval <0 on failure
+ *
+ */
+int odp_pktio_stats_reset(odp_pktio_t pktio,
odp_pktio_stats_mask_t mask);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/include/odp/packet_io.h
b/platform/linux-generic/include/odp/packet_io.h
index 1d690f5..18f8e78 100644
--- a/platform/linux-generic/include/odp/packet_io.h
+++ b/platform/linux-generic/include/odp/packet_io.h
@@ -33,6 +33,7 @@ extern "C" {
*/
#include <odp/api/packet_io.h>
+#include <odp/api/packet_io_stats.h>
#ifdef __cplusplus
}
--
1.9.1
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
https://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp