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,
        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,
 
        struct rte_fib_conf config;
 
        config.max_routes = MAX_ROUTES;
+       config.rib_ext_sz = 0;
        config.default_nh = 0;
        config.type = RTE_FIB_DUMMY;
 
        struct rte_fib_conf config;
        int32_t i;
 
+       config.rib_ext_sz = 0;
        config.default_nh = 0;
        config.type = RTE_FIB_DUMMY;
 
        struct rte_fib_conf config;
 
        config.max_routes = MAX_ROUTES;
+       config.rib_ext_sz = 0;
        config.default_nh = 0;
        config.type = RTE_FIB_DUMMY;
 
        uint8_t depth = 24;
 
        config.max_routes = MAX_ROUTES;
+       config.rib_ext_sz = 0;
        config.default_nh = 0;
        config.type = RTE_FIB_DUMMY;
 
        int ret;
 
        config.max_routes = MAX_ROUTES;
+       config.rib_ext_sz = 0;
        config.default_nh = def_nh;
        config.type = RTE_FIB_DUMMY;
 
 
        struct rte_fib6_conf config;
 
        config.max_routes = MAX_ROUTES;
+       config.rib_ext_sz = 0;
        config.default_nh = 0;
        config.type = RTE_FIB6_DUMMY;
 
        struct rte_fib6_conf config;
        int32_t i;
 
+       config.rib_ext_sz = 0;
        config.default_nh = 0;
        config.type = RTE_FIB6_DUMMY;
 
        struct rte_fib6_conf config;
 
        config.max_routes = MAX_ROUTES;
+       config.rib_ext_sz = 0;
        config.default_nh = 0;
        config.type = RTE_FIB6_DUMMY;
 
        uint8_t depth = 24;
 
        config.max_routes = MAX_ROUTES;
+       config.rib_ext_sz = 0;
        config.default_nh = 0;
        config.type = RTE_FIB6_DUMMY;
 
        int ret;
 
        config.max_routes = MAX_ROUTES;
+       config.rib_ext_sz = 0;
        config.default_nh = def_nh;
        config.type = RTE_FIB6_DUMMY;
 
 
        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);
 
 
        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;
 
 * 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
 -----------
 
        /* 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);
 
        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);
 
                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);
 
        /** 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;
 
                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);
 
        /** 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;