From patchwork Thu Jul 20 02:37:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Balasubramanian Manoharan X-Patchwork-Id: 108566 Delivered-To: patch@linaro.org Received: by 10.182.45.195 with SMTP id p3csp3861603obm; Mon, 24 Jul 2017 06:36:21 -0700 (PDT) X-Received: by 10.55.133.69 with SMTP id h66mr19928228qkd.153.1500903381223; Mon, 24 Jul 2017 06:36:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1500903381; cv=none; d=google.com; s=arc-20160816; b=pFEvJ/NO/jkk5bTlIunaKIf+WGuyHln8Lua8de3jf5wW8pJNwpXeIcxa35FWLkOw4P jT7nHWsAjmB4k2pOIIfo4NNIUybOPg2MPTYzw5FbSyU3M/BUS0PDJizl74WA65+HuMVn ewrAItAxIuAclA2VhT5LE1VJxnx75wDk6YEhkplEC0UIPVJWv/6F3hiG/KzDHajl+8oT sdMfIdBVlhFeR332zOEfSzWTEa1Db/4fGQqhTvqehtSHh8aeVmkfyeAMPGH0k5ZSE7vr vnAFcTZ+57mencvf2Ixov7AXWRDTsLxWtzf+fh+CtWNrJ3FGUqxr3t7Jm+isbnKtdQvk ODIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:message-id:date:to:from :delivered-to:arc-authentication-results; bh=ywRStwgsQtSDO99jbgZxpktRowftCp5zm7oouSnG8lQ=; b=uXF+n4Fln3pPCyGWLV8pC8KVkQrCb0o4Zzq8z+bPdOu9ngQ380bVyLFAz96shqv+YJ OTLxbTW7T0eXnLcasrQUb/TNqxLpVZTzb9ZzFGoFSLUbx10ogHUFAGBcmPQWE3W6iJXd ub3mUm/A0/jT6t+PM25CEAmxzUONujL0DwJtiKhDf4L11TIt7A/JX74HRAPzQ47s/npc L/Dx4vtweEqf+2KiT2+tmVyz5uQgXLwmfadsyV8ByZ5Rna6se7IpPsjt/BKgyo/R+AJs sDNyTU9nu7svKF5O2o0017E10gUPeMryfsRNT+8QJy0Xwc29l94QHZedV1uMsh+S6Usa 0FsQ== ARC-Authentication-Results: i=1; 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 Return-Path: Received: from lists.linaro.org (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTP id x188si8954029qkd.218.2017.07.24.06.36.20; Mon, 24 Jul 2017 06:36:21 -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 77FEB64477; Mon, 24 Jul 2017 13:36:20 +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=1.5 required=5.0 tests=BAYES_00, DATE_IN_PAST_96_XX, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, URIBL_BLOCKED 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 57AEC60B2B; Mon, 24 Jul 2017 13:36:15 +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 654A760BFF; Mon, 24 Jul 2017 13:36:13 +0000 (UTC) Received: from mail-pg0-f45.google.com (mail-pg0-f45.google.com [74.125.83.45]) by lists.linaro.org (Postfix) with ESMTPS id 5D56A60B17 for ; Mon, 24 Jul 2017 13:36:12 +0000 (UTC) Received: by mail-pg0-f45.google.com with SMTP id 125so57301665pgi.3 for ; Mon, 24 Jul 2017 06:36:12 -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=ywRStwgsQtSDO99jbgZxpktRowftCp5zm7oouSnG8lQ=; b=JC9pxGYR5EyNnZDFr1yPgYXG+QLOifWaa2IGmLcgWvEVktQfRTczxBrM0rPrM8pSdK TfM52hg77u9rBu5upwyQA6TEpoQVe10INkZ+/fexSzouKVH3C7vuwYz2THn5AUtpWu2x lbDjil4UntArMsNpbNtBphMFA9Z4o3E7gvlTau8QHoyW98IRXmLci89VluT15JW9qglg LF7sJVX2nFrieg93LdvfMiJa3hWXt5nLeluP54vRCfLvNmJGhmqMMuyC1ZinoF78r2XC UHQJ6S041dxB+LC1vreoSy3W1zSSa0srHl4rSeGZO5VNa3dEdA3NSrlQ5cK2vQT5Y19H kqkg== X-Gm-Message-State: AIVw112TBxlZi9A4fO/ZcLGon/Wx8KTrF8sKWRwtugdYI2NK8W3aXy04 UpQvyyvZWK9m9f5yB4lJFp77 X-Received: by 10.98.67.208 with SMTP id l77mr16235519pfi.333.1500903371326; Mon, 24 Jul 2017 06:36:11 -0700 (PDT) Received: from localhost.localdomain ([122.171.79.37]) by smtp.gmail.com with ESMTPSA id j193sm21955917pfc.95.2017.07.24.06.36.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 24 Jul 2017 06:36:10 -0700 (PDT) From: Balasubramanian Manoharan To: lng-odp@lists.linaro.org Date: Wed, 19 Jul 2017 19:37:20 -0700 Message-Id: <1500518242-8898-1-git-send-email-bala.manoharan@linaro.org> X-Mailer: git-send-email 1.9.1 Subject: [lng-odp] [API-NEXTv4 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 --- v4: incorporates review comments from Petri include/odp/api/spec/classification.h | 83 ++++++++++++++++++++++++++++++++--- 1 file changed, 78 insertions(+), 5 deletions(-) -- 1.9.1 Signed-off-by: Balasubramanian Manoharan diff --git a/include/odp/api/spec/classification.h b/include/odp/api/spec/classification.h index 39831b2..315afaa 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,13 @@ typedef struct odp_cls_capability_t { /** Maximum number of CoS supported */ unsigned max_cos; + /** Maximun number of queue supported per CoS + * if the value is 1, then hashing is not supported*/ + unsigned max_hash_queues; + + /** Protocol header combination supported for Hashing */ + odp_pktin_hash_proto_t hash_protocols; + /** A Boolean to denote support of PMR range */ odp_bool_t pmr_range_supported; } odp_cls_capability_t; @@ -164,9 +171,33 @@ 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 + * then 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 parameters */ + odp_queue_param_t queue_param; + + /* Protocol header fields which are included in packet input + * hash calculation */ + odp_pktin_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 +240,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. @@ -245,6 +293,31 @@ int odp_cos_queue_set(odp_cos_t cos_id, odp_queue_t queue_id); odp_queue_t odp_cos_queue(odp_cos_t cos_id); /** + * Get the number of queues linked with the specific class-of-service + * + * @param cos_id class-of-service instance. + * + * @return Number of queues linked with the class-of-service. + */ +uint32_t odp_cos_num_queue(odp_cos_t cos_id); + +/** + * Get the list of queue associated with the specific class-of-service + * + * @param[in] cos_id class-of-service instance. + * + * @param[out] queue Array of queue handles associated + * with the class-of-service. + * + * @param[in] num Maximum number of queue handles to output. + * + * @return Number of queues linked with CoS + * @retval <0 on failure + */ +uint32_t odp_cos_queue_multi(odp_cos_t cos_id, odp_queue_t queue[], + uint32_t num); + +/** * Assign packet drop policy for specific class-of-service * * @param[in] cos_id class-of-service instance.