]> git.droids-corp.org - dpdk.git/commitdiff
fib: add RIB extension size parameter
authorVladimir Medvedkin <vladimir.medvedkin@intel.com>
Wed, 27 Oct 2021 15:49:40 +0000 (16:49 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 4 Nov 2021 11:38:03 +0000 (12:38 +0100)
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 <vladimir.medvedkin@intel.com>
Tested-by: Conor Walsh <conor.walsh@intel.com>
app/test-fib/main.c
app/test/test_fib.c
app/test/test_fib6.c
app/test/test_fib6_perf.c
app/test/test_fib_perf.c
doc/guides/rel_notes/release_21_11.rst
examples/l3fwd/l3fwd_fib.c
lib/fib/rte_fib.c
lib/fib/rte_fib.h
lib/fib/rte_fib6.c
lib/fib/rte_fib6.h

index b0a97b0d7e741cab3545b8aeb97271dc8512704a..ecd420116a0bcfdfbbee995c8e055f868fb1cb31 100644 (file)
@@ -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,
index e46b9934fe700467deb7e0f33f36a6fb60cb7b93..eb69d6e2fd4ca720b3ab9d902b8961acff8ee070 100644 (file)
@@ -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;
 
index 74abfc7a5d3fa712a7034e17794c4d323b906e9d..15ad09178ae2c6629b6440f8cbc0bb572eec8d34 100644 (file)
@@ -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;
 
index 56c799b2e95decd32871de87308d16d60404ed17..e565799155d9f06b3a351a606671c5cf973bb782 100644 (file)
@@ -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);
 
index dd2e54db8bdbb0ac0c47e3ac9b66842465e6dab1..86b2f832b886b7430f55deba6ee90b203157c952 100644 (file)
@@ -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;
index 004478326ac0e8ba1483d412ea06ec683f496282..d95bab5582305cb5b7ab7831ae00e0082dea3a30 100644 (file)
@@ -462,6 +462,9 @@ API Changes
 * eventdev: Moved memory used by timer adapters to hugepage. This will prevent
   TLB misses if any and aligns to memory structure of other subsystems.
 
+* fib: 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.
+
 
 ABI Changes
 -----------
index ca0f3509a051f828b3c0c3b597fb0ca43e21f1e2..f5c685a4f3c9de9040d8246c14f51bea3f8a92ef 100644 (file)
@@ -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);
index b354d4bfd07570f1ed2be09d4a31c31efdd98c00..6ca180d7e711b2031b719f88af51173d9b966fba 100644 (file)
@@ -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);
index ac54f83cabce209ebbfaa539527c8817b7565462..b3c59dfaaa4124cbeaecac74d3c632f5941f75ee 100644 (file)
@@ -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;
index 44cc0c954debbbc33521c314197f13d840cfab29..be79efe0043bf023e5e3294949edc89e067e29fb 100644 (file)
@@ -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);
index f9d7812d6b0f2fd51d893715713de9fea5ff7836..95879af96d83df029457a0f1478ad7624175d5fb 100644 (file)
@@ -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;