v2: This patch incorporates mike's review comments

Signed-off-by: Balasubramanian Manoharan <[email protected]>
---
 platform/linux-generic/Makefile.am                 |   2 +
 .../linux-generic/include/api/odp_classification.h | 540 +++++++++++++++++++++
 platform/linux-generic/include/api/odp_packet_io.h |   5 +
 platform/linux-generic/include/api/odp_queue.h     |   5 +
 platform/linux-generic/odp_classification.c        | 235 +++++++++
 5 files changed, 787 insertions(+)
 create mode 100644 platform/linux-generic/include/api/odp_classification.h
 create mode 100644 platform/linux-generic/odp_classification.c

diff --git a/platform/linux-generic/Makefile.am 
b/platform/linux-generic/Makefile.am
index d076d50..38dfdd1 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -12,6 +12,7 @@ include_HEADERS = \
                  
$(top_srcdir)/platform/linux-generic/include/api/odp_barrier.h \
                  $(top_srcdir)/platform/linux-generic/include/api/odp_buffer.h 
\
                  
$(top_srcdir)/platform/linux-generic/include/api/odp_buffer_pool.h \
+                 
$(top_srcdir)/platform/linux-generic/include/api/odp_classification.h \
                  
$(top_srcdir)/platform/linux-generic/include/api/odp_byteorder.h \
                  
$(top_srcdir)/platform/linux-generic/include/api/odp_compiler.h \
                  $(top_srcdir)/platform/linux-generic/include/api/odp_config.h 
\
@@ -51,6 +52,7 @@ __LIB__libodp_la_SOURCES = \
                           odp_barrier.c \
                           odp_buffer.c \
                           odp_buffer_pool.c \
+                          odp_classification.c \
                           odp_coremask.c \
                           odp_crypto.c \
                           odp_init.c \
diff --git a/platform/linux-generic/include/api/odp_classification.h 
b/platform/linux-generic/include/api/odp_classification.h
new file mode 100644
index 0000000..a8db72d
--- /dev/null
+++ b/platform/linux-generic/include/api/odp_classification.h
@@ -0,0 +1,540 @@
+/* Copyright (c) 2013, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+
+/**
+ * @file
+ *
+ * ODP classification descriptor
+ */
+
+#ifndef ODP_CLASSIFY_H_
+#define ODP_CLASSIFY_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <odp_std_types.h>
+#include <odp_buffer_pool.h>
+#include <odp_packet.h>
+#include <odp_packet_io.h>
+#include <odp_queue.h>
+
+/**
+ * Class of service instance type
+ */
+typedef uint32_t odp_cos_t;
+
+
+/**
+ * flow signature type, only used for packet meta data field.
+ */
+typedef uint32_t odp_flowsig_t;
+
+/**
+ * This value is returned from odp_cos_create() on failure,
+ * May also be used as a ???sink??? class of service that
+ * results in packets being discarded.
+*/
+#define ODP_COS_INVALID    ((odp_cos_t)~0)
+
+/**
+ * Class-of-service packet drop policies
+ */
+typedef enum odp_cos_drop {
+       ODP_COS_DROP_POOL,    /**< Follow buffer pool drop policy */
+       ODP_COS_DROP_NEVER,    /**< Never drop, ignoring buffer pool policy */
+} odp_drop_e;
+
+/**
+ * Packet header field enumeration
+ * for fields that may be used to calculate
+ * the flow signature, if present in a packet.
+ */
+typedef enum odp_cos_hdr_flow_fields {
+       ODP_COS_FHDR_IN_PKTIO,  /**< Ingress port number */
+       ODP_COS_FHDR_L2_SAP,    /**< Ethernet Source MAC address */
+       ODP_COS_FHDR_L2_DAP,    /**< Ethernet Destination MAC address */
+       ODP_COS_FHDR_L2_VID,    /**< Ethernet VLAN ID */
+       ODP_COS_FHDR_L3_FLOW,   /**< IPv6 flow_id */
+       ODP_COS_FHDR_L3_SAP,    /**< IP source address */
+       ODP_COS_FHDR_L3_DAP,    /**< IP destination address */
+       ODP_COS_FHDR_L4_PROTO,  /**< IP protocol (e.g. TCP/UDP/ICMP) */
+       ODP_COS_FHDR_L4_SAP,    /**< Transport source port */
+       ODP_COS_FHDR_L4_DAP,    /**< Transport destination port */
+       ODP_COS_FHDR_IPSEC_SPI, /**< IPsec session identifier */
+       ODP_COS_FHDR_LD_VNI,    /**< NVGRE/VXLAN network identifier */
+       ODP_COS_FHDR_USER       /**< Application-specific header field(s) */
+} odp_cos_hdr_flow_fields_e;
+
+/**
+ * Create a class-of-service
+ *
+ * @param[in]  name    String intended for debugging purposes.
+ *
+ * @return             Class of service instance identifier,
+ *                     or ODP_COS_INVALID on error.
+ */
+odp_cos_t odp_cos_create(const char *name);
+
+/**
+ * Discard a class-of-service along with all its associated resources
+ *
+ * @param[in]  cos_id  class-of-service instance.
+ *
+ * @return             0 on success, -1 on error.
+ */
+int odp_cos_destroy(odp_cos_t cos_id);
+
+/**
+ * Assign a queue for a class-of-service
+ *
+ * @param[in]  cos_id          class-of-service instance.
+ *
+ * @param[in]  queue_id        Identifier of a queue where all packets
+ *                             of this specific class of service
+ *                             will be enqueued.
+ *
+ * @return                     0 on success, -1 on error.
+ */
+int odp_cos_set_queue(odp_cos_t cos_id, odp_queue_t queue_id);
+
+/**
+ * Assign a homogenous queue-group to a class-of-service.
+ *
+ * @param[in]  cos_id          class-of-service instance
+ * @param[in]  queue_group_id  Identifier of the queue group to receive packets
+ *                             associated with this class of service.
+ *
+ * @return                     0 on success, -1 on error.
+ */
+int odp_cos_set_queue_group(odp_cos_t cos_id,
+                           odp_queue_group_t queue_group_id);
+
+/**
+ * Assign packet buffer pool for specific class-of-service
+ *
+ * @param[in]  cos_id          class-of-service instance.
+ * @param[in]  pool_id         Buffer pool identifier where all packet buffers
+ *                             will be sourced to store packet that
+ *                             belong to this class of service.
+ *
+ * @return                     0 on success, -1 on error.
+ *
+ * @note Optional.
+ */
+int odp_cos_set_pool(odp_cos_t cos_id, odp_buffer_pool_t pool_id);
+
+
+/**
+ * Assign packet drop policy for specific class-of-service
+ *
+ * @param[in]  cos_id          class-of-service instance.
+ * @param[in]  drop_policy     Desired packet drop policy for this class.
+ *
+ * @return                     0 on success, -1 on error.
+ *
+ * @note Optional.
+ */
+int odp_cos_set_drop(odp_cos_t cos_id, odp_drop_e drop_policy);
+
+/**
+ * Setup per-port default class-of-service.
+ *
+ * @param[in]  pktio_in        Ingress port identifier.
+ * @param[in]  default_cos     Class-of-service set to all packets arriving
+ *                             at the 'pktio_in' ingress port,
+ *                             unless overridden by subsequent
+ *                             header-based filters.
+ *
+ * @return                     0 on success, -1 on error.
+ */
+int odp_pktio_set_default_cos(odp_pktio_t pktio_in, odp_cos_t default_cos);
+
+/**
+ * Setup per-port error class-of-service
+ *
+ * @param[in]  pktio_in        Ingress port identifier.
+ * @param[in]  error_cos       class-of-service set to all packets arriving
+ *                             at the 'pktio_in' ingress port
+ *                             that contain an error.
+ *
+ * @return                     0 on success, -1 on error.
+ *
+ * @note Optional.
+ */
+int odp_pktio_set_error_cos(odp_pktio_t pktio_in, odp_cos_t error_cos);
+
+/**
+ * Setup per-port header offset
+ *
+ * @param[in]  pktio_in        Ingress port identifier.
+ * @param[in]  offset          Number of bytes the classifier must skip.
+ *
+ * @return                     0 on success, -1 on error.
+ * @note  Optional.
+ *
+ */
+int odp_pktio_set_skip(odp_pktio_t pktio_in, size_t offset);
+
+/**
+ * Specify per-port buffer headroom
+ *
+ * @param[in]  pktio_in        Ingress port identifier.
+ * @param[in]  headroom        Number of bytes of space preceding
+ *                             packet data to reserve for use as headroom.
+ *                             Must not exceed the implementation
+ *                             defined ODP_PACKET_MAX_HEADROOM.
+ *
+ * @return                     0 on success, -1 on error.
+ *
+ * @note Optional.
+ */
+int odp_pktio_set_headroom(odp_pktio_t port_id, size_t headroom);
+
+/**
+ * Specify per-cos buffer headroom
+ *
+ * @param[in]  cos_id          Class-of-service instance
+ * @param[in]  headroom        Number of bytes of space preceding packet
+ *                             data to reserve for use as headroom.
+ *                             Must not exceed the implementation
+ *                             defined ODP_PACKET_MAX_HEADROOM.
+ *
+ * @return                     0 on success, -1 on error.
+ *
+ * @note Optional.
+ */
+int odp_cos_set_headroom(odp_cos_t cos_id, size_t req_room);
+
+/**
+ * Request to override per-port class of service
+ * based on Layer-2 priority field if present.
+ *
+ * @param[in]  pktio_in        Ingress port identifier.
+ * @param[in]  num_qos         Number of QoS levels, typically 8.
+ * @param[in]  qos_table       Values of the Layer-2 QoS header field.
+ * @param[in]  cos_table       Class-of-service assigned to each of the
+ *                             allowed Layer-2 QOS levels.
+ * @return                     0 on success, -1 on error.
+ */
+int odp_cos_with_l2_priority(odp_pktio_t pktio_in,
+                            size_t num_qos,
+                            uint8_t qos_table[],
+                            odp_cos_t cos_table[]);
+
+/**
+ * Request to override per-port class of service
+ * based on Layer-3 priority field if present.
+ *
+ * @param[in]  pktio_in        Ingress port identifier.
+ * @param[in]  num_qos         Number of allowed Layer-3 QoS levels.
+ * @param[in]  qos_table       Values of the Layer-3 QoS header field.
+ * @param[in]  cos_table       Class-of-service assigned to each of the
+ *                             allowed Layer-3 QOS levels.
+ * @param[in]  l3_preference   when true, Layer-3 QoS overrides
+ *                             L2 QoS when present.
+ *
+ * @return                     0 on success, -1 on error.
+ *
+ * @note Optional.
+ */
+int odp_cos_with_l3_qos(odp_pktio_t pktio_in,
+                       size_t num_qos,
+                       uint8_t qos_table[],
+                       odp_cos_t cos_table[],
+                       bool l3_preference);
+
+
+/**
+ * Set of header fields that take part in flow signature hash calculation:
+ * bit positions per 'odp_cos_hdr_flow_fields_e' enumeration.
+ */
+typedef uint16_t odp_cos_flow_set_t;
+
+/**
+ * Set a member of the flow signature fields data set
+ */
+static inline
+odp_cos_flow_set_t odp_cos_flow_set(odp_cos_flow_set_t set,
+                                   odp_cos_hdr_flow_fields_e field)
+{
+       return set | (1U << field);
+}
+
+/**
+ * Test a member of the flow signature fields data set
+ */
+static inline bool
+odp_cos_flow_is_set(odp_cos_flow_set_t set, odp_cos_hdr_flow_fields_e field)
+{
+       return (set & (1U << field)) != 0;
+}
+
+/**
+ * Set up set of headers used to calculate a flow signature
+ * based on class-of-service.
+ *
+ * @param[in]  cos_id          Class of service instance identifier
+ * @param[in]  req_data_set    Requested data-set for
+ *                             flow signature calculation
+ *
+ * @return                     Data-set that was successfully applied.
+ *                             All-zeros data set indicates a failure to
+ *                             assign any of the requested fields,
+ *                             or other error.
+ * @note Optional.
+ */
+odp_cos_flow_set_t
+odp_cos_class_flow_signature(odp_cos_t cos_id,
+                            odp_cos_flow_set_t req_data_set);
+
+/**
+ * Set up set of headers used to calculate a flow signature
+ * based on ingress port.
+ *
+ * @param[in]  pktio_in        Ingress port identifier
+ * @param[in]  req_data_set    Requested data-set for
+ *                             flow signature calculation
+ *
+ * @return                     Data-set that was successfully applied.
+ *                             An all-zeros data-set indicates a failure to
+ *                             assign any of the requested fields,
+ *                             or other error.
+ */
+odp_cos_flow_set_t
+odp_cos_port_flow_signature(odp_pktio_t pktio_in,
+                           odp_cos_flow_set_t req_data_set);
+
+/**
+ * PMR - Packet Matching Rule
+ * Up to 32 bit of ternary matching of one of the available header fields
+ */
+#define    ODP_PMR_INVAL ((odp_pmr_t)NULL)
+typedef struct odp_pmr_s *odp_pmr_t;
+
+/**
+ * Packet Matching Rule field enumeration
+ * for fields that may be used to calculate
+ * the PMR, if present in a packet.
+ */
+typedef enum odp_pmr_term {
+       ODP_PMR_LEN,            /**< Total length of received packet*/
+       ODP_PMR_ETHTYPE_0,      /**< Initial (outer)
+                               Ethertype only (*val=uint16_t)*/
+       ODP_PMR_ETHTYPE_X,      /**< Ethertype of most inner VLAN tag
+                               (*val=uint16_t)*/
+       ODP_PMR_VLAN_ID_0,      /**< First VLAN ID (outer) (*val=uint16_t) */
+       ODP_PMR_VLAN_ID_X,      /**< Last VLAN ID (inner) (*val=uint16_t) */
+       ODP_PMR_DMAC,           /**< destination MAC address (*val=uint64_t)*/
+       ODP_PMR_IPPROTO,        /**< IP Protocol or IPv6 Next Header
+                               (*val=uint8_t) */
+       ODP_PMR_UDP_DPORT,      /**< Destination UDP port, implies IPPROTO=17*/
+       ODP_PMR_TCP_DPORT,      /**< Destination TCP port implies IPPROTO=6*/
+       ODP_PMR_UDP_SPORT,      /**< Source UDP Port (*val=uint16_t)*/
+       ODP_PMR_TCP_SPORT,      /**< Source TCP port (*val=uint16_t)*/
+       ODP_PMR_SIP_ADDR,       /**< Source IP address (uint32_t)*/
+       ODP_PMR_DIP_ADDR,       /**< Destination IP address (uint32_t)*/
+       ODP_PMR_SIP6_ADDR,      /**< Source IP address (uint8_t[16])*/
+       ODP_PMR_DIP6_ADDR,      /**< Destination IP address (uint8_t[16])*/
+       ODP_PMR_IPSEC_SPI,      /**< IPsec session identifier(*val=uint32_t)*/
+       ODP_PMR_LD_VNI,         /**< NVGRE/VXLAN network identifier
+                               (*val=uint32_t)*/
+
+       /** Inner header may repeat above values with this offset */
+       ODP_PMR_INNER_HDR_OFF = 32
+} odp_pmr_term_e;
+
+/**
+ * Create a packet match rule with mask and value
+ *
+ * @param[in]  term    One of the enumerated values supported
+ * @param[in]  val     Value to match against the packet header
+ *                     in native byte order.
+ * @param[in]  mask    Mask to indicate which bits of the header
+ *                     should be matched ('1') and
+ *                     which should be ignored ('0')
+ * @param[in]  val_sz  Size of the ???val??? and ???mask??? arguments,
+ *                     that must match the value size requirement of the
+ *                     specific ???term???.
+ *
+ * @return             Handle of the matching rule or ODP_PMR_INVAL on error
+ */
+odp_pmr_t odp_pmr_create_match(odp_pmr_term_e term,
+                              const void *val,
+                              const void *mask,
+                              size_t val_sz);
+
+/**
+ * Create a packet match rule with value range
+ *
+ * @param[in]  term    One of the enumerated values supported
+ * @param[in]  val1    Lower bound of the header field range.
+ * @param[in]  val2    Upper bound of the header field range.
+ * @param[in]  val_sz  Size of the ???val1??? and ???val2??? arguments,
+ *                     that must match the value size requirement of the
+ *                     specific ???term???.
+ *
+ * @return             Handle of the matching rule or ODP_PMR_INVAL on error
+ * @note: Range is inclusive [val1..val2].
+ */
+odp_pmr_t odp_pmr_create_range(odp_pmr_term_e term,
+                              const void *val1,
+                              const void *val2,
+                              size_t val_sz);
+/**
+ * Invalidate a packet match rule and vacate its resources
+ *
+ * @param[in]  pmr_id  Identifier of the PMR to be destroyed
+ *
+ * @return             0 on success, -1 or error.
+ */
+int odp_pmr_destroy(odp_pmr_t pmr_id);
+
+/**
+ * Apply a PMR to a pktio to assign a CoS.
+ *
+ * @param[in]  pmr_id          PMR to be activated
+ * @param[in]  src_pktio       pktio to which this PMR is to be applied
+ * @param[in]  dst_cos         CoS to be assigned by this PMR
+ *
+ * @return                     0 on success, -1 or error.
+ */
+int odp_pktio_pmr_cos(odp_pmr_t pmr_id,
+                     odp_pktio_t src_pktio, odp_cos_t dst_cos);
+
+/**
+ * Cascade a PMR to refine packets from one CoS to another.
+ *
+ * @param[in]  pmr_id          PMR to be activated
+ * @param[in]  src_cos         CoS to be filtered
+ * @param[in]  dst_cos         CoS to be assigned to packets filtered
+ *                             from src_cos that match pmr_id.
+ *
+ * @return                     0 on success, -1 on error.
+ */
+int odp_cos_pmr_cos(odp_pmr_t pmr_id, odp_cos_t src_cos, odp_cos_t dst_cos);
+
+/**
+ * Retrieve packet matcher statistics
+ *
+ * @param[in]  pmr_id          PMR from which to retrieve the count
+ *
+ * @return                     Current number of matches for a given matcher 
instance.
+ */
+signed long odp_pmr_match_count(odp_pmr_t pmr_id);
+
+/**
+ * Inquire about matching terms supported by the classifier
+ *
+ * @return A mask one bit per enumerated term, one for each of op_pmr_term_e
+ */
+unsigned long long odp_pmr_terms_cap(void);
+
+/**
+ * Return the number of packet matching terms available for use
+ *
+ * @return A number of packet matcher resources available for use.
+ */
+unsigned odp_pmr_terms_avail(void);
+
+/**
+ * Packet Match Type field enumeration
+ * for fields that may be used to identify
+ * the different PMR match type.
+ */
+typedef enum odp_pmr_match_type {
+               ODP_PMR_MASK,       /**< Match a masked set of bits */
+               ODP_PMR_RANGE,      /**< Match an integer range */
+       } odp_pmr_match_type_e;
+
+/**
+ * Following structure is used to define composite packet matching rules
+ * in the form of an array of individual match or range rules.
+ * The underlying platform may not support all or any specific combination
+ * of value match or range rules, and the application should take care
+ * of inspecting the return value when installing such rules, and perform
+ * appropriate fallback action.
+ */
+typedef struct odp_pmr_match_t {
+       odp_pmr_match_type_e match_type;
+       union {
+               struct {
+                       odp_pmr_term_e  term;
+                       const void          *val;
+                       const void          *mask;
+                       unsigned int         val_sz;
+               } mask; /**< Match a masked set of bits */
+               struct {
+                       odp_pmr_term_e  term;
+                       const void          *val1;
+                       const void          *val2;
+                       unsigned int         val_sz;
+               } range; /**< Match an integer range */
+       };
+} odp_pmr_match_t;
+
+/** An opaque handle to a composite packet match rule-set */
+typedef struct odp_pmr_set_s *odp_pmr_set_t;
+
+/**
+ * Create a composite packet match rule
+ *
+ * @param[in]  num_terms       Number of terms in the match rule.
+ * @param[in]  terms           Array of num_terms entries, one entry per
+ *                             term desired.
+ * @param[in]  dst_cos         Class-of-service to be assigned to packets
+ *                             that match the compound rule-set,
+ *                             or a subset thereof, if partly applied.
+ * @param[in]  pmr_set_id      Returned handle to the composite rule set.
+ *
+ * @return                     Return value may be a positive number
+ *                             indicating the number of ???terms??? elements
+ *                             that have been successfully mapped to the
+ *                             underlying platform classification engine and
+ *                             may be in the range from 1 to ???num_terms???,
+ *                             or -1 for error.
+ */
+int odp_pmr_match_set_create(int num_terms, odp_pmr_match_t *terms,
+                            odp_pmr_set_t *pmr_set_id);
+
+/**
+ * Function to delete a composite packet match rule set
+ * Depending on the implementation details, destroying a rule-set
+ * may not guarantee the availability of hardware resources to create the
+ * same or essentially similar rule-set.
+ *
+ * All of the resources pertaining to the match set associated with the
+ * class-of-service will be released, but the class-of-service will
+ * remain intact.
+ *
+ * @param[in]  pmr_set_id      A composite rule-set handle
+ *                             returned when created.
+ *
+ * @return                     0 on success, -1 on error.
+ */
+int odp_pmr_match_set_destroy(odp_pmr_set_t pmr_set_id);
+
+/**
+ * Apply a PMR Match Set to a pktio to assign a CoS.
+ *
+ * @param[in]  pmr_set_id      PMR match set to be activated
+ * @param[in]  src_pktio       pktio to which this PMR match
+ *                             set is to be applied
+ * @param[in]  dst_cos         CoS to be assigned by this PMR match set
+ *
+ * @return                     0 on success, -1 or error.
+ */
+int odp_pktio_pmr_match_set_cos(odp_pmr_t pmr_id, odp_pktio_t src_pktio,
+                               odp_cos_t dst_cos);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/include/api/odp_packet_io.h 
b/platform/linux-generic/include/api/odp_packet_io.h
index 29fd105..b532927 100644
--- a/platform/linux-generic/include/api/odp_packet_io.h
+++ b/platform/linux-generic/include/api/odp_packet_io.h
@@ -30,6 +30,11 @@ typedef uint32_t odp_pktio_t;
 #define ODP_PKTIO_INVALID 0
 
 /**
+ * 'odp_pktio_t' value to indicate any port
+ */
+#define ODP_PKTIO_ANY ((odp_pktio_t)~0)
+
+/**
  * Open an ODP packet IO instance
  *
  * @param dev    Packet IO device
diff --git a/platform/linux-generic/include/api/odp_queue.h 
b/platform/linux-generic/include/api/odp_queue.h
index 5e083f1..6e8efa9 100644
--- a/platform/linux-generic/include/api/odp_queue.h
+++ b/platform/linux-generic/include/api/odp_queue.h
@@ -28,6 +28,11 @@ extern "C" {
  */
 typedef uint32_t odp_queue_t;
 
+/**
+ * Queue group instance type
+ */
+typedef uint32_t odp_queue_group_t;
+
 /** Invalid queue */
 #define ODP_QUEUE_INVALID  0
 
diff --git a/platform/linux-generic/odp_classification.c 
b/platform/linux-generic/odp_classification.c
new file mode 100644
index 0000000..bc71825
--- /dev/null
+++ b/platform/linux-generic/odp_classification.c
@@ -0,0 +1,235 @@
+#include <odp_classification.h>
+#include <odp_align.h>
+#include <odp_queue.h>
+#include <odp_debug.h>
+#include <odp_packet_io.h>
+
+odp_cos_t odp_cos_create(const char *name)
+{
+       (void) name;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_cos_destroy(odp_cos_t cos_id)
+{
+       (void)cos_id;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_cos_set_queue(odp_cos_t cos_id, odp_queue_t queue_id)
+{
+       (void)cos_id;
+       (void)queue_id;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_cos_set_queue_group(odp_cos_t cos_id, odp_queue_group_t queue_group_id)
+{
+       (void)cos_id;
+       (void)queue_group_id;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_cos_set_pool(odp_cos_t cos_id, odp_buffer_pool_t pool_id)
+{
+       (void)cos_id;
+       (void) pool_id;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+
+int odp_cos_set_drop(odp_cos_t cos_id, odp_drop_e drop_policy)
+{
+       (void)cos_id;
+       (void)drop_policy;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_pktio_set_default_cos(odp_pktio_t pktio_in, odp_cos_t default_cos)
+{
+       (void)pktio_in;
+       (void)default_cos;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+int odp_pktio_set_error_cos(odp_pktio_t pktio_in, odp_cos_t error_cos)
+{
+       (void)pktio_in;
+       (void)error_cos;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_pktio_set_skip(odp_pktio_t pktio_in, size_t offset)
+{
+       (void)pktio_in;
+       (void)offset;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_pktio_set_headroom(odp_pktio_t port_id, size_t headroom)
+{
+       (void)port_id;
+       (void)headroom;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+int odp_cos_set_headroom(odp_cos_t cos_id, size_t req_room)
+{
+       (void)cos_id;
+       (void)req_room;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_cos_with_l2_priority(odp_pktio_t pktio_in,
+                            size_t num_qos,
+                            uint8_t qos_table[],
+                            odp_cos_t cos_table[])
+{
+       (void)pktio_in;
+       (void)num_qos;
+       (void)qos_table;
+       (void)cos_table;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_cos_with_l3_qos(odp_pktio_t pktio_in,
+                       size_t num_qos,
+                       uint8_t qos_table[],
+                       odp_cos_t cos_table[],
+                       bool l3_preference)
+{
+       (void)pktio_in;
+       (void)num_qos;
+       (void)qos_table;
+       (void)cos_table;
+       (void)l3_preference;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+odp_cos_flow_set_t
+odp_cos_class_flow_signature(odp_cos_t cos_id,
+                            odp_cos_flow_set_t req_data_set)
+{
+       (void)cos_id;
+       (void)req_data_set;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+odp_cos_flow_set_t
+odp_cos_port_flow_signature(odp_pktio_t pktio_in,
+                           odp_cos_flow_set_t req_data_set)
+{
+       (void)pktio_in;
+       (void)req_data_set;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+odp_pmr_t odp_pmr_create_match(odp_pmr_term_e term,
+                              const void *val,
+                              const void *mask,
+                              size_t val_sz)
+{
+       (void)term;
+       (void)val;
+       (void)mask;
+       (void)val_sz;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+odp_pmr_t odp_pmr_create_range(odp_pmr_term_e term,
+                              const void *val1,
+                              const void *val2,
+                              size_t val_sz)
+{
+       (void)term;
+       (void)val1;
+       (void)val2;
+       (void)val_sz;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+int odp_pmr_destroy(odp_pmr_t pmr_id)
+{
+       (void)pmr_id;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_pktio_pmr_cos(odp_pmr_t pmr_id,
+                     odp_pktio_t src_pktio,
+                     odp_cos_t dst_cos)
+{
+       (void)pmr_id;
+       (void)src_pktio;
+       (void)dst_cos;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_cos_pmr_cos(odp_pmr_t pmr_id, odp_cos_t src_cos, odp_cos_t dst_cos)
+{
+       (void)pmr_id;
+       (void)src_cos;
+       (void)dst_cos;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+signed long odp_pmr_match_count(odp_pmr_t pmr_id)
+{
+       (void)pmr_id;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+unsigned long long odp_pmr_terms_cap(void)
+{
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+unsigned odp_pmr_terms_avail(void)
+{
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_pmr_match_set_create(int num_terms, odp_pmr_match_t *terms,
+                            odp_pmr_set_t *pmr_set_id)
+{
+       (void)num_terms;
+       (void)terms;
+       (void)pmr_set_id;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_pmr_match_set_destroy(odp_pmr_set_t pmr_set_id)
+{
+       (void)pmr_set_id;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
+
+int odp_pktio_pmr_match_set_cos(odp_pmr_t pmr_id, odp_pktio_t src_pktio,
+                               odp_cos_t dst_cos)
+{
+       (void)pmr_id;
+       (void)src_pktio;
+       (void)dst_cos;
+       ODP_UNIMPLEMENTED();
+       return 0;
+}
-- 
2.0.1.472.g6f92e5f


_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to