net/hns3: fix flow director rule residue on malloc failure
[dpdk.git] / lib / librte_fib / rte_fib.h
index a58ac3c..acad209 100644 (file)
@@ -19,6 +19,8 @@
  * for IPv4 Longest Prefix Match
  */
 
+#include <stdint.h>
+
 #include <rte_compat.h>
 
 #ifdef __cplusplus
@@ -57,6 +59,25 @@ enum rte_fib_dir24_8_nh_sz {
        RTE_FIB_DIR24_8_8B
 };
 
+/** Type of lookup function implementation */
+enum rte_fib_lookup_type {
+       RTE_FIB_LOOKUP_DEFAULT,
+       /**< Selects the best implementation based on the max simd bitwidth */
+       RTE_FIB_LOOKUP_DIR24_8_SCALAR_MACRO,
+       /**< Macro based lookup function */
+       RTE_FIB_LOOKUP_DIR24_8_SCALAR_INLINE,
+       /**<
+        * Lookup implementation using inlined functions
+        * for different next hop sizes
+        */
+       RTE_FIB_LOOKUP_DIR24_8_SCALAR_UNI,
+       /**<
+        * Unified lookup function for all next hop sizes
+        */
+       RTE_FIB_LOOKUP_DIR24_8_VECTOR_AVX512
+       /**< Vector implementation using AVX512 */
+};
+
 /** FIB configuration structure */
 struct rte_fib_conf {
        enum rte_fib_type type; /**< Type of FIB struct */
@@ -195,6 +216,22 @@ __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
+ *   0 on success
+ *   -EINVAL on failure
+ */
+__rte_experimental
+int
+rte_fib_select_lookup(struct rte_fib *fib, enum rte_fib_lookup_type type);
+
 #ifdef __cplusplus
 }
 #endif