From patchwork Wed May 3 09:25:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Balasubramanian Manoharan X-Patchwork-Id: 98474 Delivered-To: patch@linaro.org Received: by 10.140.89.200 with SMTP id v66csp204698qgd; Wed, 3 May 2017 02:25:18 -0700 (PDT) X-Received: by 10.237.48.66 with SMTP id 60mr34346641qte.25.1493803518469; Wed, 03 May 2017 02:25:18 -0700 (PDT) Return-Path: Received: from lists.linaro.org (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTP id n55si19962907qtf.332.2017.05.03.02.25.17; Wed, 03 May 2017 02:25:18 -0700 (PDT) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) client-ip=54.225.227.206; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id BDE8C609A5; Wed, 3 May 2017 09:25:17 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on ip-10-142-244-252 X-Spam-Level: X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, RCVD_IN_SORBS_WEB autolearn=disabled version=3.4.0 Received: from [127.0.0.1] (localhost [127.0.0.1]) by lists.linaro.org (Postfix) with ESMTP id 9CD5D60828; Wed, 3 May 2017 09:25:12 +0000 (UTC) X-Original-To: lng-odp@lists.linaro.org Delivered-To: lng-odp@lists.linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id 8BF1F6085E; Wed, 3 May 2017 09:25:10 +0000 (UTC) Received: from mail-pf0-f177.google.com (mail-pf0-f177.google.com [209.85.192.177]) by lists.linaro.org (Postfix) with ESMTPS id ADC046081E for ; Wed, 3 May 2017 09:25:08 +0000 (UTC) Received: by mail-pf0-f177.google.com with SMTP id q66so9990704pfi.3 for ; Wed, 03 May 2017 02:25:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=0omI71ITPGk4KfwtxzY6Dzhi2BQ3//brIS69U+Cj09M=; b=iEVtCHN8OMviHlR2h7n9cun33TApSrVXQRRjCHBjJutgb4kK0yxbF0m8BkfdCW0FRD ipg6yRFUBgEM8kaTshOk/Cw9z+2AnOuIH366pvvLYtDPCTr+L6vAA/cVW2y3l1L84PGI BbmkD/Ruw4IVevTII8Wq63FAaSBrbP6BzT+MpQjG+fiwpIrIj6vGRe/fWe0K6qGjKGDm Q2erm6rxc3oyWlQ6gDewvdI75Re2TJL6CJ6CgBcS1GzaZUqXv55UZt5de/VWsRyXyEDl ZHkE9k9qeUqVmDXTxksLR4RMe5nIJvI4sTdrqLc7RHuG+PX5+UZYeb2H+TTY4mYoPSaL x/5w== X-Gm-Message-State: AN3rC/6W/Wkhd11xJrNQB3DHnVjc9KH72iyFIfYcwRpu3VHpZXUqasuh jekm1eHXs4aIgqKUg6E= X-Received: by 10.98.194.69 with SMTP id l66mr3625919pfg.55.1493803507842; Wed, 03 May 2017 02:25:07 -0700 (PDT) Received: from bala-Vostro-2520.caveonetworks.com ([111.93.218.67]) by smtp.gmail.com with ESMTPSA id r77sm4024361pfe.105.2017.05.03.02.25.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 03 May 2017 02:25:07 -0700 (PDT) From: Balasubramanian Manoharan To: lng-odp@lists.linaro.org Date: Wed, 3 May 2017 14:55:00 +0530 Message-Id: <1493803502-4500-1-git-send-email-bala.manoharan@linaro.org> X-Mailer: git-send-email 1.9.1 Subject: [lng-odp] [PATCH 1/3] api: classification: add support for packet hashing in classification X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "The OpenDataPlane \(ODP\) List" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: lng-odp-bounces@lists.linaro.org Sender: "lng-odp" Enable packet hashing per CoS to be able to distribute incoming packets to multiple queues linked with a CoS. Signed-off-by: Balasubramanian Manoharan --- include/odp/api/spec/classification.h | 71 ++++++++++++++++++++++++++++++++--- include/odp/api/spec/packet_io.h | 21 +++++++++++ 2 files changed, 87 insertions(+), 5 deletions(-) -- 1.9.1 diff --git a/include/odp/api/spec/classification.h b/include/odp/api/spec/classification.h index 39831b2..b4b943a 100644 --- a/include/odp/api/spec/classification.h +++ b/include/odp/api/spec/classification.h @@ -4,7 +4,6 @@ * SPDX-License-Identifier: BSD-3-Clause */ - /** * @file * @@ -19,12 +18,13 @@ extern "C" { #endif +#include +#include /** @defgroup odp_classification ODP CLASSIFICATION * Classification operations. * @{ */ - /** * @typedef odp_cos_t * ODP Class of service handle @@ -126,6 +126,19 @@ typedef struct odp_cls_capability_t { /** Maximum number of CoS supported */ unsigned max_cos; + /* support mode for plain queue */ + odp_support_t plain_queue; + + /* support mode for sched queue */ + odp_support_t sched_queue; + + /** Maximun number of queue supported per CoS + * if the value is 1, then hashing is not supported*/ + unsigned max_queue_supported; + + /** Protocol header combination supported for Hashing */ + odp_pktin_hash_proto_t hash_supported; + /** A Boolean to denote support of PMR range */ odp_bool_t pmr_range_supported; } odp_cls_capability_t; @@ -164,9 +177,40 @@ typedef enum { * Used to communicate class of service creation options */ typedef struct odp_cls_cos_param { - odp_queue_t queue; /**< Queue associated with CoS */ - odp_pool_t pool; /**< Pool associated with CoS */ - odp_cls_drop_t drop_policy; /**< Drop policy associated with CoS */ + /* Number of queues to be linked to this CoS. + * If the number is greater than 1 then hashing has to be + * configured. If number is equal to 1 then hashing is disabled + * and queue has to be configured by the application. + * When hashing is enabled the queues are created by the implementation + * and application need not configure any queue to the class of service + * Depening on the implementation this number might be rounded-off to + * nearest supported value (e.g power of 2) + * */ + uint32_t num_queue; + + /** Queue type */ + odp_queue_type_t queue_type; + + /** ODP Queue dequeue mode + * This value is valid only for PLAIN queue types */ + odp_queue_op_mode_t deq_mode; + + /** Schedule parameters for the queue created */ + odp_schedule_param_t sched_param; + + /* Protocol header fields which are included in packet input + * hash calculation */ + odp_hash_proto_t hash_proto; + + /* If hashing is disabled, then application has to configure + * this queue and packets are delivered to this queue */ + odp_queue_t queue; + + /* Pool associated with CoS */ + odp_pool_t pool; + + /* Drop policy associated with CoS */ + odp_cls_drop_t drop_policy; } odp_cls_cos_param_t; /** @@ -209,6 +253,23 @@ int odp_cls_capability(odp_cls_capability_t *capability); odp_cos_t odp_cls_cos_create(const char *name, odp_cls_cos_param_t *param); /** + * Queue hash result + * Returns the queue within a CoS in which a particular packet will be enqueued + * based on the packet parameters and hash protocol field configured with the + * class of service. + * + * @param cos class of service + * @param packet Packet handle + * + * @retval Returns the queue handle on which this packet will be + * enqueued. + * @retval ODP_QUEUE_INVALID for error case + * + * @note The packet has to be updated with valid header pointers L2, L3 and L4. + */ +odp_queue_t odp_queue_hash_result(odp_cos_t cos, odp_packet_t packet); + +/** * Discard a class-of-service along with all its associated resources * * @param[in] cos_id class-of-service instance. diff --git a/include/odp/api/spec/packet_io.h b/include/odp/api/spec/packet_io.h index 8802089..1a40a1f 100644 --- a/include/odp/api/spec/packet_io.h +++ b/include/odp/api/spec/packet_io.h @@ -131,6 +131,27 @@ typedef union odp_pktin_hash_proto_t { } odp_pktin_hash_proto_t; /** + * Packet hash protocols + * + * The list of protocol header field combination in enum format, which are + * included in packet hash calculation. + */ +typedef enum odp_hash_proto_t { + /** IPv4 address and UDP port numbers */ + ODP_HASH_PROTO_IPV4_UDP, + /** IPv4 addresses and TCP port numbers */ + ODP_HASH_PROTO_IPV4_TCP, + /** IPv4 addresses */ + ODP_HASH_PROTO_IPV4, + /** IPv6 addresses and UDP port numbers */ + ODP_HASH_PROTO_IPV6_UDP, + /** IPv6 addresses and TCP port numbers */ + ODP_HASH_PROTO_IPV6_TCP, + /** IPv6 addresses */ + ODP_HASH_PROTO_IPV6 +} odp_hash_proto_t; + +/** * Packet IO operation mode */ typedef enum odp_pktio_op_mode_t {