From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2B015A057B; Wed, 1 Apr 2020 07:48:02 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 675B91BEA6; Wed, 1 Apr 2020 07:48:01 +0200 (CEST) Received: from chi01-185.mxroute.com (chi01-185.mxroute.com [45.152.178.185]) by dpdk.org (Postfix) with ESMTP id 53C8F1BE95 for ; Wed, 1 Apr 2020 07:47:59 +0200 (CEST) Received: from filter003.mxroute.com ([168.235.111.26] 168-235-111-26.cloud.ramnode.com) (Authenticated sender: mN4UYu2MZsgR) by chi01-185.mxroute.com (ZoneMTA) with ESMTPSA id 17134482f340001c89.001 for (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256); Wed, 01 Apr 2020 05:47:58 +0000 X-Zone-Loop: 48c9e3310136e6695af14369005eb979228d6352d6dd X-Originating-IP: [168.235.111.26] Received: from galaxy.mxroute.com (unknown [23.92.70.113]) by filter003.mxroute.com (Postfix) with ESMTPS id C4C056106E; Wed, 1 Apr 2020 05:47:51 +0000 (UTC) Received: from [134.191.227.39] by galaxy.mxroute.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.91) (envelope-from ) id 1jJVqG-0001sS-2B; Wed, 01 Apr 2020 01:23:08 -0400 To: Vladimir Medvedkin , dev@dpdk.org Cc: konstantin.ananyev@intel.com, bruce.richardson@intel.com References: <1583757826-375246-1-git-send-email-vladimir.medvedkin@intel.com> <1583757826-375246-3-git-send-email-vladimir.medvedkin@intel.com> From: Ray Kinsella Autocrypt: addr=mdr@ashroe.eu; keydata= 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 Message-ID: <4994f785-9c48-8c34-e9d5-fd4a53d5321a@ashroe.eu> Date: Wed, 1 Apr 2020 06:47:45 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <1583757826-375246-3-git-send-email-vladimir.medvedkin@intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-AuthUser: mdr@ashroe.eu Subject: Re: [dpdk-dev] [PATCH 2/6] fib: make lookup function type configurable X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Vladimir, On 09/03/2020 12:43, Vladimir Medvedkin wrote: > Add type argument to dir24_8_get_lookup_fn() > Now it supports 3 different lookup implementations: > RTE_FIB_DIR24_8_SCALAR_MACRO > RTE_FIB_DIR24_8_SCALAR_INLINE > RTE_FIB_DIR24_8_SCALAR_UNI > > Add new rte_fib_set_lookup_fn() - user can change lookup > function type runtime. > > Signed-off-by: Vladimir Medvedkin > --- > lib/librte_fib/dir24_8.c | 32 ++++++++++++++++++++------------ > lib/librte_fib/dir24_8.h | 2 +- > lib/librte_fib/rte_fib.c | 20 +++++++++++++++++++- > lib/librte_fib/rte_fib.h | 22 ++++++++++++++++++++++ > lib/librte_fib/rte_fib_version.map | 1 + > 5 files changed, 63 insertions(+), 14 deletions(-) > > diff --git a/lib/librte_fib/dir24_8.c b/lib/librte_fib/dir24_8.c > index c9dce3c..825d061 100644 > --- a/lib/librte_fib/dir24_8.c > +++ b/lib/librte_fib/dir24_8.c > @@ -45,13 +45,6 @@ struct dir24_8_tbl { > > #define ROUNDUP(x, y) RTE_ALIGN_CEIL(x, (1 << (32 - y))) > > -enum lookup_type { > - MACRO, > - INLINE, > - UNI > -}; > -enum lookup_type test_lookup = MACRO; > - > static inline void * > get_tbl24_p(struct dir24_8_tbl *dp, uint32_t ip, uint8_t nh_sz) > { > @@ -253,11 +246,18 @@ dir24_8_lookup_bulk_uni(void *p, const uint32_t *ips, > } > > rte_fib_lookup_fn_t > -dir24_8_get_lookup_fn(struct rte_fib_conf *fib_conf) > +dir24_8_get_lookup_fn(void *p, enum rte_fib_dir24_8_lookup_type type) > { > - enum rte_fib_dir24_8_nh_sz nh_sz = fib_conf->dir24_8.nh_sz; > + enum rte_fib_dir24_8_nh_sz nh_sz; > + struct dir24_8_tbl *dp = p; > > - if (test_lookup == MACRO) { > + if (dp == NULL) > + return NULL; > + > + nh_sz = dp->nh_sz; > + > + switch (type) { > + case RTE_FIB_DIR24_8_SCALAR_MACRO: > switch (nh_sz) { > case RTE_FIB_DIR24_8_1B: > return dir24_8_lookup_bulk_1b; > @@ -267,8 +267,10 @@ dir24_8_get_lookup_fn(struct rte_fib_conf *fib_conf) > return dir24_8_lookup_bulk_4b; > case RTE_FIB_DIR24_8_8B: > return dir24_8_lookup_bulk_8b; > + default: > + return NULL; > } > - } else if (test_lookup == INLINE) { > + case RTE_FIB_DIR24_8_SCALAR_INLINE: > switch (nh_sz) { > case RTE_FIB_DIR24_8_1B: > return dir24_8_lookup_bulk_0; > @@ -278,9 +280,15 @@ dir24_8_get_lookup_fn(struct rte_fib_conf *fib_conf) > return dir24_8_lookup_bulk_2; > case RTE_FIB_DIR24_8_8B: > return dir24_8_lookup_bulk_3; > + default: > + return NULL; > } > - } else > + case RTE_FIB_DIR24_8_SCALAR_UNI: > return dir24_8_lookup_bulk_uni; > + default: > + return NULL; > + } > + > return NULL; > } > > diff --git a/lib/librte_fib/dir24_8.h b/lib/librte_fib/dir24_8.h > index 1ec437c..53c5dd2 100644 > --- a/lib/librte_fib/dir24_8.h > +++ b/lib/librte_fib/dir24_8.h > @@ -22,7 +22,7 @@ void > dir24_8_free(void *p); > > rte_fib_lookup_fn_t > -dir24_8_get_lookup_fn(struct rte_fib_conf *conf); > +dir24_8_get_lookup_fn(void *p, enum rte_fib_dir24_8_lookup_type type); > > int > dir24_8_modify(struct rte_fib *fib, uint32_t ip, uint8_t depth, > diff --git a/lib/librte_fib/rte_fib.c b/lib/librte_fib/rte_fib.c > index e090808..59120b5 100644 > --- a/lib/librte_fib/rte_fib.c > +++ b/lib/librte_fib/rte_fib.c > @@ -107,7 +107,8 @@ init_dataplane(struct rte_fib *fib, __rte_unused int socket_id, > fib->dp = dir24_8_create(dp_name, socket_id, conf); > if (fib->dp == NULL) > return -rte_errno; > - fib->lookup = dir24_8_get_lookup_fn(conf); > + fib->lookup = dir24_8_get_lookup_fn(fib->dp, > + RTE_FIB_DIR24_8_SCALAR_MACRO); > fib->modify = dir24_8_modify; > return 0; > default: > @@ -317,3 +318,20 @@ rte_fib_get_rib(struct rte_fib *fib) > { > return (fib == NULL) ? NULL : fib->rib; > } > + > +int > +rte_fib_set_lookup_fn(struct rte_fib *fib, int type) > +{ > + rte_fib_lookup_fn_t fn; > + > + switch (fib->type) { > + case RTE_FIB_DIR24_8: > + fn = dir24_8_get_lookup_fn(fib->dp, type); > + if (fn == NULL) > + return -EINVAL; > + fib->lookup = fn; > + return 0; > + default: > + return -EINVAL; > + } > +} > diff --git a/lib/librte_fib/rte_fib.h b/lib/librte_fib/rte_fib.h > index d06c5ef..0e98775 100644 > --- a/lib/librte_fib/rte_fib.h > +++ b/lib/librte_fib/rte_fib.h > @@ -47,6 +47,12 @@ enum rte_fib_dir24_8_nh_sz { > RTE_FIB_DIR24_8_8B > }; Do we provide the user guidance anywhere on the merits/advantages of each option? > +enum rte_fib_dir24_8_lookup_type { > + RTE_FIB_DIR24_8_SCALAR_MACRO, > + RTE_FIB_DIR24_8_SCALAR_INLINE, > + RTE_FIB_DIR24_8_SCALAR_UNI > +}; > + > /** FIB configuration structure */ > struct rte_fib_conf { > enum rte_fib_type type; /**< Type of FIB struct */ > @@ -185,4 +191,20 @@ __rte_experimental > struct rte_rib * > rte_fib_get_rib(struct rte_fib *fib); > > +/** > + * Set lookup function based on type > + * > + * @param fib > + * FIB object handle > + * @param type > + * type of lookup function > + * > + * @return > + * -EINVAL on failure > + * 0 on success > + */ > +__rte_experimental > +int > +rte_fib_set_lookup_fn(struct rte_fib *fib, int type); > + > #endif /* _RTE_FIB_H_ */ > diff --git a/lib/librte_fib/rte_fib_version.map b/lib/librte_fib/rte_fib_version.map > index 9527417..216af66 100644 > --- a/lib/librte_fib/rte_fib_version.map > +++ b/lib/librte_fib/rte_fib_version.map > @@ -9,6 +9,7 @@ EXPERIMENTAL { > rte_fib_lookup_bulk; > rte_fib_get_dp; > rte_fib_get_rib; > + rte_fib_set_lookup_fn; > > rte_fib6_add; > rte_fib6_create; >