doc: add Meson coding style to contributors guide
[dpdk.git] / lib / librte_port / rte_port.h
index 1d763c2..6b6a2cd 100644 (file)
@@ -1,34 +1,5 @@
-/*-
- *   BSD LICENSE
- *
- *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- *   All rights reserved.
- *
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions
- *   are met:
- *
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in
- *       the documentation and/or other materials provided with the
- *       distribution.
- *     * Neither the name of Intel Corporation nor the names of its
- *       contributors may be used to endorse or promote products derived
- *       from this software without specific prior written permission.
- *
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2010-2014 Intel Corporation
  */
 
 #ifndef __INCLUDE_RTE_PORT_H__
@@ -42,7 +13,7 @@ extern "C" {
  * @file
  * RTE Port
  *
- * This tool is part of the Intel DPDK Packet Framework tool suite and provides
+ * This tool is part of the DPDK Packet Framework tool suite and provides
  * a standard interface to implement different types of packet ports.
  *
  ***/
@@ -50,6 +21,29 @@ extern "C" {
 #include <stdint.h>
 #include <rte_mbuf.h>
 
+/**@{
+ * Macros to allow accessing metadata stored in the mbuf headroom
+ * just beyond the end of the mbuf data structure returned by a port
+ */
+#define RTE_MBUF_METADATA_UINT8_PTR(mbuf, offset)          \
+       (&((uint8_t *)(mbuf))[offset])
+#define RTE_MBUF_METADATA_UINT16_PTR(mbuf, offset)         \
+       ((uint16_t *) RTE_MBUF_METADATA_UINT8_PTR(mbuf, offset))
+#define RTE_MBUF_METADATA_UINT32_PTR(mbuf, offset)         \
+       ((uint32_t *) RTE_MBUF_METADATA_UINT8_PTR(mbuf, offset))
+#define RTE_MBUF_METADATA_UINT64_PTR(mbuf, offset)         \
+       ((uint64_t *) RTE_MBUF_METADATA_UINT8_PTR(mbuf, offset))
+
+#define RTE_MBUF_METADATA_UINT8(mbuf, offset)              \
+       (*RTE_MBUF_METADATA_UINT8_PTR(mbuf, offset))
+#define RTE_MBUF_METADATA_UINT16(mbuf, offset)             \
+       (*RTE_MBUF_METADATA_UINT16_PTR(mbuf, offset))
+#define RTE_MBUF_METADATA_UINT32(mbuf, offset)             \
+       (*RTE_MBUF_METADATA_UINT32_PTR(mbuf, offset))
+#define RTE_MBUF_METADATA_UINT64(mbuf, offset)             \
+       (*RTE_MBUF_METADATA_UINT64_PTR(mbuf, offset))
+/**@}*/
+
 /*
  * Port IN
  *
@@ -58,6 +52,12 @@ extern "C" {
 Cannot be changed. */
 #define RTE_PORT_IN_BURST_SIZE_MAX                         64
 
+/** Input port statistics */
+struct rte_port_in_stats {
+       uint64_t n_pkts_in;
+       uint64_t n_pkts_drop;
+};
+
 /**
  * Input port create
  *
@@ -97,17 +97,42 @@ typedef int (*rte_port_in_op_rx)(
        struct rte_mbuf **pkts,
        uint32_t n_pkts);
 
+/**
+ * Input port stats get
+ *
+ * @param port
+ *   Handle to output port instance
+ * @param stats
+ *   Handle to port_in stats struct to copy data
+ * @param clear
+ *   Flag indicating that stats should be cleared after read
+ *
+ * @return
+ *   Error code or 0 on success.
+ */
+typedef int (*rte_port_in_op_stats_read)(
+               void *port,
+               struct rte_port_in_stats *stats,
+               int clear);
+
 /** Input port interface defining the input port operation */
 struct rte_port_in_ops {
-       rte_port_in_op_create f_create; /**< Create */
-       rte_port_in_op_free f_free;     /**< Free */
-       rte_port_in_op_rx f_rx;         /**< Packet RX (packet burst) */
+       rte_port_in_op_create f_create;      /**< Create */
+       rte_port_in_op_free f_free;          /**< Free */
+       rte_port_in_op_rx f_rx;              /**< Packet RX (packet burst) */
+       rte_port_in_op_stats_read f_stats;   /**< Stats */
 };
 
 /*
  * Port OUT
  *
  */
+/** Output port statistics */
+struct rte_port_out_stats {
+       uint64_t n_pkts_in;
+       uint64_t n_pkts_drop;
+};
+
 /**
  * Output port create
  *
@@ -161,7 +186,7 @@ typedef int (*rte_port_out_op_tx)(
  */
 typedef int (*rte_port_out_op_tx_bulk)(
        void *port,
-       struct rte_mbuf **pkt,
+       struct rte_mbuf **pkts,
        uint64_t pkts_mask);
 
 /**
@@ -174,13 +199,32 @@ typedef int (*rte_port_out_op_tx_bulk)(
  */
 typedef int (*rte_port_out_op_flush)(void *port);
 
+/**
+ * Output port stats read
+ *
+ * @param port
+ *   Handle to output port instance
+ * @param stats
+ *   Handle to port_out stats struct to copy data
+ * @param clear
+ *   Flag indicating that stats should be cleared after read
+ *
+ * @return
+ *   Error code or 0 on success.
+ */
+typedef int (*rte_port_out_op_stats_read)(
+               void *port,
+               struct rte_port_out_stats *stats,
+               int clear);
+
 /** Output port interface defining the output port operation */
 struct rte_port_out_ops {
-       rte_port_out_op_create f_create;   /**< Create */
-       rte_port_out_op_free f_free;       /**< Free */
-       rte_port_out_op_tx f_tx;           /**< Packet TX (single packet) */
-       rte_port_out_op_tx_bulk f_tx_bulk; /**< Packet TX (packet burst) */
-       rte_port_out_op_flush f_flush;     /**< Flush */
+       rte_port_out_op_create f_create;      /**< Create */
+       rte_port_out_op_free f_free;          /**< Free */
+       rte_port_out_op_tx f_tx;              /**< Packet TX (single packet) */
+       rte_port_out_op_tx_bulk f_tx_bulk;    /**< Packet TX (packet burst) */
+       rte_port_out_op_flush f_flush;        /**< Flush */
+       rte_port_out_op_stats_read f_stats;   /**< Stats */
 };
 
 #ifdef __cplusplus