rte_acl.h(3)

πŸ’– rte_acl.h(3) πŸ’–

okay so bestie, gather round, because this is the manual page for rte_acl.h β€” it lives in the Library Functions Manual section (that's the (3) btw, that's the vibe) and it's all about the RTE Classifier. no cap, it's a lot, but we're gonna get through it together 🫢


✨ NAME ✨

rte_acl.h β€” the header, the whole header, nothing but the header πŸ’…


✨ SYNOPSIS ✨

#include <rte_common.h>
#include <rte_acl_osdep.h>

🌸 Data Structures 🌸

lowkey the whole cast of characters:

  • struct rte_acl_field_def
  • struct rte_acl_config
  • struct rte_acl_field
  • struct rte_acl_rule_data
  • struct rte_acl_param

πŸŽ€ Macros πŸŽ€

#define RTE_ACL_RULE_DEF(name,  fld_num)
#define RTE_ACL_NAMESIZE   32

πŸ¦‹ Enumerations πŸ¦‹

enum rte_acl_classify_alg {  }

🌈 Functions 🌈

every single one, verbatim, no skipping, we don't do that here:

void rte_acl_free (struct rte_acl_ctx *ctx)
struct rte_acl_ctx * rte_acl_create (const struct rte_acl_param *param)
    __rte_malloc __rte_dealloc(rte_acl_free
struct rte_acl_ctx struct rte_acl_ctx * rte_acl_find_existing (const
    char *name)
int rte_acl_add_rules (struct rte_acl_ctx *ctx, const struct
    rte_acl_rule *rules, uint32_t num)
void rte_acl_reset_rules (struct rte_acl_ctx *ctx)
int rte_acl_build (struct rte_acl_ctx *ctx, const struct rte_acl_config
    *cfg)
void rte_acl_reset (struct rte_acl_ctx *ctx)
int rte_acl_classify (const struct rte_acl_ctx *ctx, const uint8_t
    **data, uint32_t *results, uint32_t num, uint32_t categories)
int rte_acl_classify_alg (const struct rte_acl_ctx *ctx, const uint8_t
    **data, uint32_t *results, uint32_t num, uint32_t categories, enum
    rte_acl_classify_alg alg)
void rte_acl_dump (const struct rte_acl_ctx *ctx)
void rte_acl_list_dump (void)

πŸ’œ Detailed Description πŸ’œ

🌟 RTE Classifier.

and that's it. that's the description. short king behavior honestly πŸ‘‘

Definition in file rte_acl.h.


πŸ“ Macro Definition Documentation πŸ“

✨ #define RTE_ACL_RULE_DEF( name, fld_num)

Value:

struct name {\
struct rte_acl_rule_data data;               \
struct rte_acl_field field[fld_num];         \
}

ok so this macro defines a single ACL rule. data is the miscellaneous data for the rule, and field[] holds the value and mask or range for each field. it's giving "build me a struct" energy fr fr.

Definition at line 112 of file rte_acl.h.


✨ #define RTE_ACL_NAMESIZE 32

Max number of characters in name. that's 32, bestie, not 31, not 33. iconic.

Definition at line 124 of file rte_acl.h.


πŸ”₯ Enumeration Type Documentation πŸ”₯

πŸ’… enum rte_acl_classify_alg

Available implementations of ACL classify. pick your fighter:

Enumerator

  • RTE_ACL_CLASSIFY_SCALAR β€” generic implementation. the reliable one, the one that shows up for everyone πŸ’–
  • RTE_ACL_CLASSIFY_SSE β€” requires SSE4.1 support.
  • RTE_ACL_CLASSIFY_AVX2 β€” requires AVX2 support.
  • RTE_ACL_CLASSIFY_NEON β€” requires NEON support.
  • RTE_ACL_CLASSIFY_ALTIVEC β€” requires ALTIVEC support.
  • RTE_ACL_CLASSIFY_AVX512X16 β€” requires AVX512 support.
  • RTE_ACL_CLASSIFY_AVX512X32 β€” requires AVX512 support.

Definition at line 242 of file rte_acl.h.


🧚 Function Documentation 🧚

🌸 void rte_acl_free (struct rte_acl_ctx * ctx)

De-allocate all memory used by ACL context. bye bestie, it was real 🫢

Parameters

  • ctx β€” ACL context to free. If ctx is NULL, no operation is performed. (yes, it's polite like that.)

🌸 struct rte_acl_ctx * rte_acl_create (const struct rte_acl_param * param)

Create a new ACL context. brand new, fresh out the box, main character energy ✨

Parameters

  • param β€” Parameters used to create and initialise the ACL context.

Returns

Pointer to ACL context structure that is used in future ACL operations, or NULL on error, with error code set in rte_errno. Possible rte_errno errors include:

  • EINVAL - invalid parameter passed to function

🌸 struct rte_acl_ctx struct rte_acl_ctx * rte_acl_find_existing (const char * name)

Find an existing ACL context object and return a pointer to it. like, you already made one, now go find it πŸ”πŸ’–

Parameters

  • name β€” Name of the ACL context as passed to rte_acl_create()

Returns

Pointer to ACL context or NULL if object not found with rte_errno set appropriately. Possible rte_errno values include:

  • ENOENT - value not available for return

🌸 int rte_acl_add_rules (struct rte_acl_ctx * ctx, const struct rte_acl_rule * rules, uint32_t num)

Add rules to an existing ACL context. This function is not multi-thread safe. ⚠️ (say it with me: not multi-thread safe, do not let your threads fight over it.)

Parameters

  • ctx β€” ACL context to add patterns to.
  • rules β€” Array of rules to add to the ACL context. Note that all fields in rte_acl_rule structures are expected to be in host byte order. Each rule expected to be in the same format and not exceed size specified at ACL context creation time.
  • num β€” Number of elements in the input array of rules.

Returns

  • -ENOMEM if there is no space in the ACL context for these rules.
  • -EINVAL if the parameters are invalid.
  • Zero if operation completed successfully.

🌸 void rte_acl_reset_rules (struct rte_acl_ctx * ctx)

Delete all rules from the ACL context. This function is not multi-thread safe. Note that internal run-time structures are not affected. so the rules dip out but the structures stay, love that for them πŸ’…

Parameters

  • ctx β€” ACL context to delete rules from.

🌸 int rte_acl_build (struct rte_acl_ctx * ctx, const struct rte_acl_config * cfg)

Analyze set of rules and build required internal run-time structures. This function is not multi-thread safe.

Parameters

  • ctx β€” ACL context to build.
  • cfg β€” Pointer to struct rte_acl_config - defines build parameters.

Returns

  • -ENOMEM if couldn't allocate enough memory.
  • -EINVAL if the parameters are invalid.
  • Negative error code if operation failed.
  • Zero if operation completed successfully.

🌸 void rte_acl_reset (struct rte_acl_ctx * ctx)

Delete all rules from the ACL context and destroy all internal run-time structures. This function is not multi-thread safe. it's the full reset, the glow-down, the everything-must-go 😭

Parameters

  • ctx β€” ACL context to reset.

🌸 int rte_acl_classify (const struct rte_acl_ctx * ctx, const uint8_t ** data, uint32_t * results, uint32_t num, uint32_t categories) [extern]

Perform search for a matching ACL rule for each input data buffer. Each input data buffer can have up to categories matches. That implies that results array should be big enough to hold (categories * num) elements. Also categories parameter should be either one or multiple of RTE_ACL_RESULTS_MULTIPLIER and can't be bigger than RTE_ACL_MAX_CATEGORIES. If more than one rule is applicable for given input buffer and given category, then rule with highest priority will be returned as a match. Note, that it is a caller's responsibility to ensure that input parameters are valid and point to correct memory locations. that last bit is on YOU bestie, not on us πŸ™ˆ

Parameters

  • ctx β€” ACL context to search with.
  • data β€” Array of pointers to input data buffers to perform search. Note that all fields in input data buffers supposed to be in network byte order (MSB).
  • results β€” Array of search results, categories results per each input data buffer.
  • num β€” Number of elements in the input data buffers array.
  • categories β€” Number of maximum possible matches for each input buffer, one possible match per category.

Returns

zero on successful completion. -EINVAL for incorrect arguments.


🌸 int rte_acl_classify_alg (const struct rte_acl_ctx * ctx, const uint8_t ** data, uint32_t * results, uint32_t num, uint32_t categories, enum rte_acl_classify_alg alg) [extern]

Perform search using specified algorithm for a matching ACL rule for each input data buffer. Each input data buffer can have up to categories matches. That implies that results array should be big enough to hold (categories * num) elements. Also categories parameter should be either one or multiple of RTE_ACL_RESULTS_MULTIPLIER and can't be bigger than RTE_ACL_MAX_CATEGORIES. If more than one rule is applicable for given input buffer and given category, then rule with highest priority will be returned as a match. Note, that it is a caller's responsibility to ensure that input parameters are valid and point to correct memory locations.

Parameters

  • ctx β€” ACL context to search with.
  • data β€” Array of pointers to input data buffers to perform search. Note that all fields in input data buffers supposed to be in network byte order (MSB).
  • results β€” Array of search results, categories results per each input data buffer.
  • num β€” Number of elements in the input data buffers array.
  • categories β€” Number of maximum possible matches for each input buffer, one possible match per category.
  • alg β€” Algorithm to be used for the search. It is the caller responsibility to ensure that the value refers to the existing algorithm, and that it could be run on the given CPU. so like, double-check your CPU actually eats that algorithm, ok? πŸ’€

Returns

zero on successful completion. -EINVAL for incorrect arguments.


🌸 void rte_acl_dump (const struct rte_acl_ctx * ctx)

Dump an ACL context structure to the console. spill the tea, ctx β˜•

Parameters

  • ctx β€” ACL context to dump.

🌸 void rte_acl_list_dump (void )

Dump all ACL context structures to the console. all of them. every last one. no survivors πŸ”₯


πŸ‘‘ Author πŸ‘‘

Generated automatically by Doxygen for DPDK from the source code. so technically the author is a robot and it ate, we love a generated king πŸ€–πŸ’–


and that's the whole page bestie!! you made it, I'm so proud, go touch some grass and then go build something iconic with your ACL contexts ✨

DPDK, Version 25.11.3, rte_acl.h(3) β€” mwah, bye, stay slay, read your man pages, hydrate πŸ’…πŸŽ€πŸ’–

πŸ“¦ where this page comes from