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

Reply via email to