Added input queue configuration parameters and functions to setup multiple input queue and hashing. Added also odp_pktio_input_queues to query the number of queues and queue handles. Direct receive does not use queue handles, but indexes.
Signed-off-by: Petri Savolainen <petri.savolai...@nokia.com> --- include/odp/api/packet_io.h | 88 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/include/odp/api/packet_io.h b/include/odp/api/packet_io.h index 264fa75..bb0e67c 100644 --- a/include/odp/api/packet_io.h +++ b/include/odp/api/packet_io.h @@ -19,6 +19,7 @@ extern "C" { #endif #include <odp/api/packet_io_stats.h> +#include <odp/api/queue.h> /** @defgroup odp_packet_io ODP PACKET IO * Operations on a packet Input/Output interface. @@ -85,6 +86,43 @@ typedef enum odp_pktio_output_mode_t { } odp_pktio_output_mode_t; /** + * Packet input hash protocols + * + * The list of protocol header field combinations, which are included into + * packet input hash calculation. + */ +typedef enum odp_pktin_hash_proto_t { + /** IPv4 addresses and UDP port numbers, non-fragmented packets */ + ODP_PKTIN_HASH_IPV4_UDP = 0, + /** IPv4 addresses and TCP port numbers, non-fragmented packets */ + ODP_PKTIN_HASH_IPV4_TCP +} odp_pktin_hash_proto_t; + +/** + * Packet input queue parameters + */ +typedef struct odp_pktio_input_queue_param_t { + /** Enable lock-free receive operation per queue + * 0: Receive is multi-thread safe, 1: Receive is lock-free */ + odp_bool_t lock_free; + + /** Select protocol fields used for hashing */ + odp_pktin_hash_proto_t hash_proto; + + /** Number of input queues to be created. More than one input queue + * require input hashing. Hash_proto is ignore when num_queues is one. + * The value must be between 1 and interface capability. Queue type is + * defined by the input mode. */ + unsigned num_queues; + + /** Queue parameters for creating input queues in ODP_PKTIN_MODE_POLL + * or ODP_PKTIN_MODE_SCHED modes. Scheduler parameters are considered + * only in ODP_PKTIN_MODE_SCHED mode. */ + odp_queue_param_t queue_param; + +} odp_pktio_input_queue_param_t; + +/** * Packet IO parameters * * In minimum, user must select input and output modes. Use 0 for defaults. @@ -158,6 +196,47 @@ odp_pktio_t odp_pktio_open(const char *dev, odp_pool_t pool, int odp_pktio_capability(odp_pktio_t pktio, odp_pktio_capability_t *capa); /** + * Configure packet input queues + * + * Setup a number of packet input queues and configure those. The maximum number + * of queues is platform dependent and can be queried with + * odp_pktio_capability(). Queue handles for input queues can be requested with + * odp_pktio_input_queues() after this call. All requested queues are setup on + * success, no queues are setup on failure. + * + * @param pktio Packet IO handle + * @param param Packet input queue configuration parameters + * + * @retval 0 on success + * @retval <0 on failure + * + * @see odp_pktio_capability(), odp_pktio_input_queues() + */ +int odp_pktio_input_queues_config(odp_pktio_t pktio, + const odp_pktio_input_queue_param_t *param); + +/** + * Packet input queues + * + * Returns the number of input queues configured for the interface. Outputs also + * up to 'num' queue handles created for ODP_PKTIN_MODE_POLL and + * ODP_PKTIN_MODE_SCHED modes. If return value is larger than 'num', there are + * more queues than the function was allowed to output handles. + * + * Depending on the input mode, packets (or events) from these queues are + * received using odp_pktio_recv_queue(), odp_queue_deq(), odp_schedule(), etc + * calls. + * + * @param pktio Packet IO handle + * @param[out] queues Points to an array of queue handles for output + * @param num Maximum number of queue handles to output + * + * @return Number of packet input queues + * @retval <0 on failure + */ +int odp_pktio_input_queues(odp_pktio_t pktio, odp_queue_t queues[], int num); + +/** * Start packet receive and transmit * * Activate packet receive and transmit on a previously opened or stopped @@ -411,6 +490,15 @@ uint64_t odp_pktio_to_u64(odp_pktio_t pktio); void odp_pktio_param_init(odp_pktio_param_t *param); /** + * Initialize packet input queue parameters + * + * Initialize an odp_pktio_input_queue_param_t to its default values. + * + * @param param Input queue parameter structure to be initialized + */ +void odp_pktio_input_queue_param_init(odp_pktio_input_queue_param_t *param); + +/** * Print pktio info to the console * * Print implementation-defined pktio debug information to the console. -- 2.6.2 _______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp