From patchwork Wed Oct 27 15:49:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Medvedkin X-Patchwork-Id: 103062 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0F2C4A0C47; Wed, 27 Oct 2021 17:49:57 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E98F54114E; Wed, 27 Oct 2021 17:49:56 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mails.dpdk.org (Postfix) with ESMTP id ADC28410F7 for ; Wed, 27 Oct 2021 17:49:55 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10150"; a="316396161" X-IronPort-AV: E=Sophos;i="5.87,187,1631602800"; d="scan'208";a="316396161" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Oct 2021 08:49:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,187,1631602800"; d="scan'208";a="497920638" Received: from silpixa00400072.ir.intel.com ([10.237.222.213]) by orsmga008.jf.intel.com with ESMTP; 27 Oct 2021 08:49:51 -0700 From: Vladimir Medvedkin To: dev@dpdk.org Cc: konstantin.ananyev@intel.com, conor.walsh@intel.com, thomas@monjalon.net Date: Wed, 27 Oct 2021 16:49:40 +0100 Message-Id: <1635349780-167920-1-git-send-email-vladimir.medvedkin@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1630943759-362969-1-git-send-email-vladimir.medvedkin@intel.com> References: <1630943759-362969-1-git-send-email-vladimir.medvedkin@intel.com> Subject: [dpdk-dev] [PATCH v2] fib: add rib extension size parameter X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" This patch adds a new parameter to the fib configuration to specify the size of the extension for internal RIB structure. Signed-off-by: Vladimir Medvedkin Tested-by: Conor Walsh --- app/test-fib/main.c | 2 ++ app/test/test_fib.c | 5 +++++ app/test/test_fib6.c | 5 +++++ app/test/test_fib6_perf.c | 1 + app/test/test_fib_perf.c | 1 + doc/guides/rel_notes/release_21_11.rst | 5 +++++ examples/l3fwd/l3fwd_fib.c | 2 ++ lib/fib/rte_fib.c | 2 +- lib/fib/rte_fib.h | 2 ++ lib/fib/rte_fib6.c | 2 +- lib/fib/rte_fib6.h | 2 ++ 11 files changed, 27 insertions(+), 2 deletions(-) diff --git a/app/test-fib/main.c b/app/test-fib/main.c index b0a97b0..ecd4201 100644 --- a/app/test-fib/main.c +++ b/app/test-fib/main.c @@ -857,6 +857,7 @@ run_v4(void) conf.type = get_fib_type(); conf.default_nh = def_nh; conf.max_routes = config.nb_routes * 2; + conf.rib_ext_sz = 0; if (conf.type == RTE_FIB_DIR24_8) { conf.dir24_8.nh_sz = __builtin_ctz(config.ent_sz); conf.dir24_8.num_tbl8 = RTE_MIN(config.tbl8, @@ -1057,6 +1058,7 @@ run_v6(void) conf.type = get_fib_type(); conf.default_nh = def_nh; conf.max_routes = config.nb_routes * 2; + conf.rib_ext_sz = 0; if (conf.type == RTE_FIB6_TRIE) { conf.trie.nh_sz = __builtin_ctz(config.ent_sz); conf.trie.num_tbl8 = RTE_MIN(config.tbl8, diff --git a/app/test/test_fib.c b/app/test/test_fib.c index e46b993..eb69d6e 100644 --- a/app/test/test_fib.c +++ b/app/test/test_fib.c @@ -36,6 +36,7 @@ test_create_invalid(void) struct rte_fib_conf config; config.max_routes = MAX_ROUTES; + config.rib_ext_sz = 0; config.default_nh = 0; config.type = RTE_FIB_DUMMY; @@ -94,6 +95,7 @@ test_multiple_create(void) struct rte_fib_conf config; int32_t i; + config.rib_ext_sz = 0; config.default_nh = 0; config.type = RTE_FIB_DUMMY; @@ -120,6 +122,7 @@ test_free_null(void) struct rte_fib_conf config; config.max_routes = MAX_ROUTES; + config.rib_ext_sz = 0; config.default_nh = 0; config.type = RTE_FIB_DUMMY; @@ -146,6 +149,7 @@ test_add_del_invalid(void) uint8_t depth = 24; config.max_routes = MAX_ROUTES; + config.rib_ext_sz = 0; config.default_nh = 0; config.type = RTE_FIB_DUMMY; @@ -320,6 +324,7 @@ test_lookup(void) int ret; config.max_routes = MAX_ROUTES; + config.rib_ext_sz = 0; config.default_nh = def_nh; config.type = RTE_FIB_DUMMY; diff --git a/app/test/test_fib6.c b/app/test/test_fib6.c index 74abfc7..15ad091 100644 --- a/app/test/test_fib6.c +++ b/app/test/test_fib6.c @@ -38,6 +38,7 @@ test_create_invalid(void) struct rte_fib6_conf config; config.max_routes = MAX_ROUTES; + config.rib_ext_sz = 0; config.default_nh = 0; config.type = RTE_FIB6_DUMMY; @@ -96,6 +97,7 @@ test_multiple_create(void) struct rte_fib6_conf config; int32_t i; + config.rib_ext_sz = 0; config.default_nh = 0; config.type = RTE_FIB6_DUMMY; @@ -122,6 +124,7 @@ test_free_null(void) struct rte_fib6_conf config; config.max_routes = MAX_ROUTES; + config.rib_ext_sz = 0; config.default_nh = 0; config.type = RTE_FIB6_DUMMY; @@ -149,6 +152,7 @@ test_add_del_invalid(void) uint8_t depth = 24; config.max_routes = MAX_ROUTES; + config.rib_ext_sz = 0; config.default_nh = 0; config.type = RTE_FIB6_DUMMY; @@ -338,6 +342,7 @@ test_lookup(void) int ret; config.max_routes = MAX_ROUTES; + config.rib_ext_sz = 0; config.default_nh = def_nh; config.type = RTE_FIB6_DUMMY; diff --git a/app/test/test_fib6_perf.c b/app/test/test_fib6_perf.c index 56c799b..e565799 100644 --- a/app/test/test_fib6_perf.c +++ b/app/test/test_fib6_perf.c @@ -78,6 +78,7 @@ test_fib6_perf(void) conf.type = RTE_FIB6_TRIE; conf.default_nh = 0; conf.max_routes = 1000000; + conf.rib_ext_sz = 0; conf.trie.nh_sz = RTE_FIB6_TRIE_4B; conf.trie.num_tbl8 = RTE_MIN(get_max_nh(conf.trie.nh_sz), 1000000U); diff --git a/app/test/test_fib_perf.c b/app/test/test_fib_perf.c index dd2e54d..86b2f83 100644 --- a/app/test/test_fib_perf.c +++ b/app/test/test_fib_perf.c @@ -323,6 +323,7 @@ test_fib_perf(void) struct rte_fib_conf config; config.max_routes = 2000000; + config.rib_ext_sz = 0; config.type = RTE_FIB_DIR24_8; config.default_nh = 0; config.dir24_8.nh_sz = RTE_FIB_DIR24_8_4B; diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst index 1ccac87..f4d4444 100644 --- a/doc/guides/rel_notes/release_21_11.rst +++ b/doc/guides/rel_notes/release_21_11.rst @@ -305,6 +305,11 @@ New Features * Pcapng format with timestamps and meta-data. * Fixes packet capture with stripped VLAN tags. +* **Updated FIB library API.** + + Added the ``rib_ext_sz`` field to ``rte_fib_conf`` and ``rte_fib6_conf`` + so that user can specify the size of the rib extension inside the fib. + Removed Items ------------- diff --git a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c index ca0f350..f5c685a 100644 --- a/examples/l3fwd/l3fwd_fib.c +++ b/examples/l3fwd/l3fwd_fib.c @@ -590,6 +590,7 @@ setup_fib(const int socketid) /* Create the fib IPv4 table. */ config_ipv4.type = RTE_FIB_DIR24_8; config_ipv4.max_routes = (1 << 16); + config_ipv4.rib_ext_sz = 0; config_ipv4.default_nh = FIB_DEFAULT_HOP; config_ipv4.dir24_8.nh_sz = RTE_FIB_DIR24_8_4B; config_ipv4.dir24_8.num_tbl8 = (1 << 15); @@ -639,6 +640,7 @@ setup_fib(const int socketid) config.type = RTE_FIB6_TRIE; config.max_routes = (1 << 16) - 1; + config.rib_ext_sz = 0; config.default_nh = FIB_DEFAULT_HOP; config.trie.nh_sz = RTE_FIB6_TRIE_4B; config.trie.num_tbl8 = (1 << 15); diff --git a/lib/fib/rte_fib.c b/lib/fib/rte_fib.c index b354d4b..6ca180d 100644 --- a/lib/fib/rte_fib.c +++ b/lib/fib/rte_fib.c @@ -164,7 +164,7 @@ rte_fib_create(const char *name, int socket_id, struct rte_fib_conf *conf) return NULL; } - rib_conf.ext_sz = 0; + rib_conf.ext_sz = conf->rib_ext_sz; rib_conf.max_nodes = conf->max_routes * 2; rib = rte_rib_create(name, socket_id, &rib_conf); diff --git a/lib/fib/rte_fib.h b/lib/fib/rte_fib.h index ac54f83..b3c59df 100644 --- a/lib/fib/rte_fib.h +++ b/lib/fib/rte_fib.h @@ -80,6 +80,8 @@ struct rte_fib_conf { /** Default value returned on lookup if there is no route */ uint64_t default_nh; int max_routes; + /** Size of the node extension in the internal RIB struct */ + unsigned int rib_ext_sz; union { struct { enum rte_fib_dir24_8_nh_sz nh_sz; diff --git a/lib/fib/rte_fib6.c b/lib/fib/rte_fib6.c index 44cc0c9..be79efe 100644 --- a/lib/fib/rte_fib6.c +++ b/lib/fib/rte_fib6.c @@ -165,7 +165,7 @@ rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf) return NULL; } - rib_conf.ext_sz = 0; + rib_conf.ext_sz = conf->rib_ext_sz; rib_conf.max_nodes = conf->max_routes * 2; rib = rte_rib6_create(name, socket_id, &rib_conf); diff --git a/lib/fib/rte_fib6.h b/lib/fib/rte_fib6.h index f9d7812..95879af 100644 --- a/lib/fib/rte_fib6.h +++ b/lib/fib/rte_fib6.h @@ -71,6 +71,8 @@ struct rte_fib6_conf { /** Default value returned on lookup if there is no route */ uint64_t default_nh; int max_routes; + /** Size of the node extension in the internal RIB struct */ + unsigned int rib_ext_sz; union { struct { enum rte_fib_trie_nh_sz nh_sz;