On 7 October 2014 12:15, Balasubramanian Manoharan < [email protected]> wrote:
> v2: This patch incorporates mike's review comments > > Signed-off-by: Balasubramanian Manoharan <[email protected]> > Reviewed-by: MIke Holmes <[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 > > -- *Mike Holmes* Linaro Sr Technical Manager LNG - ODP
_______________________________________________ lng-odp mailing list [email protected] http://lists.linaro.org/mailman/listinfo/lng-odp
