On 19 October 2015 at 17:58, Maxim Uvarov <[email protected]> wrote:
> On 10/19/2015 18:49, Ola Liljedahl wrote: > >> On 16 October 2015 at 15:25, Maxim Uvarov <[email protected] >> <mailto:[email protected]>> wrote: >> >> Signed-off-by: Maxim Uvarov <[email protected] >> <mailto:[email protected]>> >> --- >> 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? > Just add to the comment that the numbering of the mask bits must mirror the ordering of the fields in the stats structure and that new fields should be added to the end of the structure (I have seen people add new fields in the middle of structs, structs that were part of user/kernel space interfaces and thus must be backwards and forwards compatible... the horror). > > + >> +/** >> + * 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 >> [email protected] <mailto:[email protected]> >> https://lists.linaro.org/mailman/listinfo/lng-odp >> >> >> >
_______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
