rte_flow_ops(3)
β¨ rte_flow_ops β the flow-ops struct, explained by your fav Unix bestie π
okay so bestie, you're looking at rte_flow_ops(3) out of the Library Functions Manual, and it's genuinely iconic. It's a big ol' struct full of callback function pointers, and honestly the whole thing is giving "backstage pass, not front-of-house" energy. There's like 38 fields in here and we're doing them all, no skipping, no cap. Let's get into it π«Ά
πΈ SYNOPSIS πΈ
first things first, the include:
#include <rte_flow_driver.h>
π Data Fields π
okay so here's the whole lineup, one by one, exactly as it's declared. No summaries, no "etc." β we're listing every single one because I refuse to leave you out of the loop π
validate
int(* validate )(struct rte_eth_dev *, const struct rte_flow_attr *, const struct rte_flow_item[], const struct rte_flow_action[], struct rte_flow_error *)
create
struct rte_flow *(* create )(struct rte_eth_dev *, const struct rte_flow_attr *, const struct rte_flow_item[], const struct rte_flow_action[], struct rte_flow_error *)
destroy
int(* destroy )(struct rte_eth_dev *, struct rte_flow *, struct rte_flow_error *)
flush
int(* flush )(struct rte_eth_dev *, struct rte_flow_error *)
query
int(* query )(struct rte_eth_dev *, struct rte_flow *, const struct rte_flow_action *, void *, struct rte_flow_error *)
isolate
int(* isolate )(struct rte_eth_dev *, int, struct rte_flow_error *)
dev_dump
int(* dev_dump )(struct rte_eth_dev *dev, struct rte_flow *flow, FILE *file, struct rte_flow_error *error)
get_aged_flows
int(* get_aged_flows )(struct rte_eth_dev *dev, void **context, uint32_t nb_contexts, struct rte_flow_error *err)
get_q_aged_flowsβ same vibe as the one above but it's got aqueue_idin there, she's specific β¨
int(* get_q_aged_flows )(struct rte_eth_dev *dev, uint32_t queue_id, void **contexts, uint32_t nb_contexts, struct rte_flow_error *error)
action_handle_create
struct rte_flow_action_handle *(* action_handle_create )(struct rte_eth_dev *dev, const struct rte_flow_indir_action_conf *conf, const struct rte_flow_action *action, struct rte_flow_error *error)
action_handle_destroy
int(* action_handle_destroy )(struct rte_eth_dev *dev, struct rte_flow_action_handle *handle, struct rte_flow_error *error)
action_handle_update
int(* action_handle_update )(struct rte_eth_dev *dev, struct rte_flow_action_handle *handle, const void *update, struct rte_flow_error *error)
action_handle_query
int(* action_handle_query )(struct rte_eth_dev *dev, const struct rte_flow_action_handle *handle, void *data, struct rte_flow_error *error)
action_handle_query_updateβ the combo meal, note theenum rte_flow_query_update_mode qu_modeπ
int(* action_handle_query_update )(struct rte_eth_dev *dev, struct rte_flow_action_handle *handle, const void *update, void *query, enum rte_flow_query_update_mode qu_mode, struct rte_flow_error *error)
action_list_handle_createβ list flavoured, and theactionsparam is an array[]
struct rte_flow_action_list_handle *(* action_list_handle_create )(struct rte_eth_dev *dev, const struct rte_flow_indir_action_conf *conf, const struct rte_flow_action actions[], struct rte_flow_error *error)
action_list_handle_destroy
int(* action_list_handle_destroy )(struct rte_eth_dev *dev, struct rte_flow_action_list_handle *handle, struct rte_flow_error *error)
tunnel_decap_setβ tunnel girlies rise π§
int(* tunnel_decap_set )(struct rte_eth_dev *dev, struct rte_flow_tunnel *tunnel, struct rte_flow_action **pmd_actions, uint32_t *num_of_actions, struct rte_flow_error *err)
tunnel_match
int(* tunnel_match )(struct rte_eth_dev *dev, struct rte_flow_tunnel *tunnel, struct rte_flow_item **pmd_items, uint32_t *num_of_items, struct rte_flow_error *err)
get_restore_infoβ note it takes astruct rte_mbuf *m
int(* get_restore_info )(struct rte_eth_dev *dev, struct rte_mbuf *m, struct rte_flow_restore_info *info, struct rte_flow_error *err)
tunnel_action_decap_release
int(* tunnel_action_decap_release )(struct rte_eth_dev *dev, struct rte_flow_action *pmd_actions, uint32_t num_of_actions, struct rte_flow_error *err)
tunnel_item_release
int(* tunnel_item_release )(struct rte_eth_dev *dev, struct rte_flow_item *pmd_items, uint32_t num_of_items, struct rte_flow_error *err)
pick_transfer_proxyβ hands you back auint16_t *proxy_port_id, cute
int(* pick_transfer_proxy )(struct rte_eth_dev *dev, uint16_t *proxy_port_id, struct rte_flow_error *error)
info_get
int(* info_get )(struct rte_eth_dev *dev, struct rte_flow_port_info *port_info, struct rte_flow_queue_info *queue_info, struct rte_flow_error *err)
configureβ takesnb_queueplus aconst struct rte_flow_queue_attr *queue_attr[]array
int(* configure )(struct rte_eth_dev *dev, const struct rte_flow_port_attr *port_attr, uint16_t nb_queue, const struct rte_flow_queue_attr *queue_attr[], struct rte_flow_error *err)
pattern_template_create
struct rte_flow_pattern_template *(* pattern_template_create )(struct rte_eth_dev *dev, const struct rte_flow_pattern_template_attr *template_attr, const struct rte_flow_item pattern[], struct rte_flow_error *err)
pattern_template_destroy
int(* pattern_template_destroy )(struct rte_eth_dev *dev, struct rte_flow_pattern_template *pattern_template, struct rte_flow_error *err)
actions_template_createβ she's got bothactions[]and amasks[], obsessed β¨
struct rte_flow_actions_template *(* actions_template_create )(struct rte_eth_dev *dev, const struct rte_flow_actions_template_attr *template_attr, const struct rte_flow_action actions[], const struct rte_flow_action masks[], struct rte_flow_error *err)
actions_template_destroy
int(* actions_template_destroy )(struct rte_eth_dev *dev, struct rte_flow_actions_template *actions_template, struct rte_flow_error *err)
template_table_createβ the big one, two template arrays and twouint8_tcounts, she ate π₯
struct rte_flow_template_table *(* template_table_create )(struct rte_eth_dev *dev, const struct rte_flow_template_table_attr *table_attr, struct rte_flow_pattern_template *pattern_templates[], uint8_t nb_pattern_templates, struct rte_flow_actions_template *actions_templates[], uint8_t nb_actions_templates, struct rte_flow_error *err)
template_table_destroy
int(* template_table_destroy )(struct rte_eth_dev *dev, struct rte_flow_template_table *template_table, struct rte_flow_error *err)
group_set_miss_actionsβ got auint32_t group_idand aconst struct rte_flow_group_attr *attrup in there
int(* group_set_miss_actions )(struct rte_eth_dev *dev, uint32_t group_id, const struct rte_flow_group_attr *attr, const struct rte_flow_action actions[], struct rte_flow_error *err)
actions_update
int(* actions_update )(struct rte_eth_dev *dev, struct rte_flow *flow, const struct rte_flow_action actions[], struct rte_flow_error *error)
action_list_handle_query_updateβ the list-handle twin of the query+update combo, and here the mode param is just namedmodeπ
int(* action_list_handle_query_update )(struct rte_eth_dev *dev, const struct rte_flow_action_list_handle *handle, const void **update, void **query, enum rte_flow_query_update_mode mode, struct rte_flow_error *error)
flow_calc_table_hashβ hash time, takes auint8_t pattern_template_indexand writes intouint32_t *hash
int(* flow_calc_table_hash )(struct rte_eth_dev *dev, const struct rte_flow_template_table *table, const struct rte_flow_item pattern[], uint8_t pattern_template_index, uint32_t *hash, struct rte_flow_error *error)
flow_calc_encap_hashβ encap flavoured hash, with anenum rte_flow_encap_hash_field dest_fieldand auint8_t *hash
int(* flow_calc_encap_hash )(struct rte_eth_dev *dev, const struct rte_flow_item pattern[], enum rte_flow_encap_hash_field dest_field, uint8_t *hash, struct rte_flow_error *error)
flow_template_table_resizeβ resize szn, takesuint32_t nb_rules
int(* flow_template_table_resize )(struct rte_eth_dev *dev, struct rte_flow_template_table *table, uint32_t nb_rules, struct rte_flow_error *error)
flow_update_resizedβ note theuint32_t queue,const struct rte_flow_op_attr *attr,struct rte_flow *ruleandvoid *user_datalineup
int(* flow_update_resized )(struct rte_eth_dev *dev, uint32_t queue, const struct rte_flow_op_attr *attr, struct rte_flow *rule, void *user_data, struct rte_flow_error *error)
flow_template_table_resize_completeβ the little "and we're done" follow-up to the resize π
int(* flow_template_table_resize_complete )(struct rte_eth_dev *dev, struct rte_flow_template_table *table, struct rte_flow_error *error)
π¦ Detailed Description π¦
okay so what IS this thing? It's the generic flow operations structure, implemented and returned by PMDs. That's the whole personality.
big warning bestie, and I need you to actually read this one:
These callback functions are not supposed to be used by applications directly. Applications must rely on the API defined in rte_flow.h. So like, don't go poking the callbacks yourself, that's not the vibe π
and here's the good part β the public-facing wrapper functions perform a few consistency checks so that unimplemented (i.e. NULL) callbacks simply return -ENOTSUP. So a missing hook isn't a whole crisis, it just says "not supported" and moves on. Iconic behaviour honestly.
Other than that, these callbacks only differ by their first argument β and that first argument is the port ID, already resolved to a pointer to struct rte_eth_dev. So the wrapper does the port-ID homework for you and hands over the pointer. Slay.
one last lil detail for the completionists:
Definition at line 39 of file rte_flow_driver.h.
part 1 done and honestly we ATE π but there's more coming β do not close the tab, bestie, part 2 is right there π
β¨ Field Documentation β¨
okay bestie, this is the driver-ops field list from rte_flow_driver.h β every single one, no crumbs left behind. Each field is a function-pointer slot, and its docs point at the matching API. Vibe check: complete. π
validateβint(* validate) (struct rte_eth_dev *, const struct rte_flow_attr *, const struct rte_flow_item[], const struct rte_flow_action[], struct rte_flow_error *)β seerte_flow_validate(). Definition at line41of filerte_flow_driver.h.createβstruct rte_flow *(* create) (struct rte_eth_dev *, const struct rte_flow_attr *, const struct rte_flow_item[], const struct rte_flow_action[], struct rte_flow_error *)β seerte_flow_create(). Definition at line41of filerte_flow_driver.h.destroyβint(* destroy) (struct rte_eth_dev *, struct rte_flow *, struct rte_flow_error *)β seerte_flow_destroy(). Definition at line55of filerte_flow_driver.h.flushβint(* flush) (struct rte_eth_dev *, struct rte_flow_error *)β seerte_flow_flush(). Definition at line60of filerte_flow_driver.h.queryβint(* query) (struct rte_eth_dev *, struct rte_flow *, const struct rte_flow_action *, void *, struct rte_flow_error *)β seerte_flow_query(). Definition at line64of filerte_flow_driver.h.isolateβint(* isolate) (struct rte_eth_dev *, int, struct rte_flow_error *)β seerte_flow_isolate(). Definition at line71of filerte_flow_driver.h.dev_dumpβint(* dev_dump) (struct rte_eth_dev *dev, struct rte_flow *flow, FILE *file, struct rte_flow_error *error)β seerte_flow_dev_dump(). Definition at line76of filerte_flow_driver.h.get_aged_flowsβint(* get_aged_flows) (struct rte_eth_dev *dev, void **context, uint32_t nb_contexts, struct rte_flow_error *err)β seerte_flow_get_aged_flows(). Definition at line82of filerte_flow_driver.h.get_q_aged_flowsβint(* get_q_aged_flows) (struct rte_eth_dev *dev, uint32_t queue_id, void **contexts, uint32_t nb_contexts, struct rte_flow_error *error)β seerte_flow_get_q_aged_flows(). Definition at line88of filerte_flow_driver.h.action_handle_createβstruct rte_flow_action_handle *(* action_handle_create) (struct rte_eth_dev *dev, const struct rte_flow_indir_action_conf *conf, const struct rte_flow_action *action, struct rte_flow_error *error)β seerte_flow_action_handle_create(). Definition at line88of filerte_flow_driver.h.action_handle_destroyβint(* action_handle_destroy) (struct rte_eth_dev *dev, struct rte_flow_action_handle *handle, struct rte_flow_error *error)β seerte_flow_action_handle_destroy(). Definition at line101of filerte_flow_driver.h.action_handle_updateβint(* action_handle_update) (struct rte_eth_dev *dev, struct rte_flow_action_handle *handle, const void *update, struct rte_flow_error *error)β seerte_flow_action_handle_update(). Definition at line106of filerte_flow_driver.h.action_handle_queryβint(* action_handle_query) (struct rte_eth_dev *dev, const struct rte_flow_action_handle *handle, void *data, struct rte_flow_error *error)β seerte_flow_action_handle_query(). Definition at line112of filerte_flow_driver.h.action_handle_query_updateβint(* action_handle_query_update) (struct rte_eth_dev *dev, struct rte_flow_action_handle *handle, const void *update, void *query, enum rte_flow_query_update_mode qu_mode, struct rte_flow_error *error)β seerte_flow_action_handle_query_update(). Definition at line118of filerte_flow_driver.h.action_list_handle_createβstruct rte_flow_action_list_handle *(* action_list_handle_create) (struct rte_eth_dev *dev, const struct rte_flow_indir_action_conf *conf, const struct rte_flow_action actions[], struct rte_flow_error *error)β see alsorte_flow_action_list_handle_create(). Definition at line118of filerte_flow_driver.h.action_list_handle_destroyβint(* action_list_handle_destroy) (struct rte_eth_dev *dev, struct rte_flow_action_list_handle *handle, struct rte_flow_error *error)β see alsorte_flow_action_list_handle_destroy(). Definition at line131of filerte_flow_driver.h.tunnel_decap_setβint(* tunnel_decap_set) (struct rte_eth_dev *dev, struct rte_flow_tunnel *tunnel, struct rte_flow_action **pmd_actions, uint32_t *num_of_actions, struct rte_flow_error *err)β seerte_flow_tunnel_decap_set(). Definition at line136of filerte_flow_driver.h.tunnel_matchβint(* tunnel_match) (struct rte_eth_dev *dev, struct rte_flow_tunnel *tunnel, struct rte_flow_item **pmd_items, uint32_t *num_of_items, struct rte_flow_error *err)β seerte_flow_tunnel_match(). Definition at line143of filerte_flow_driver.h.get_restore_infoβint(* get_restore_info) (struct rte_eth_dev *dev, struct rte_mbuf *m, struct rte_flow_restore_info *info, struct rte_flow_error *err)β seerte_flow_get_rte_flow_restore_info(). Definition at line150of filerte_flow_driver.h.tunnel_action_decap_releaseβint(* tunnel_action_decap_release) (struct rte_eth_dev *dev, struct rte_flow_action *pmd_actions, uint32_t num_of_actions, struct rte_flow_error *err)β seerte_flow_action_tunnel_decap_release(). Definition at line156of filerte_flow_driver.h.tunnel_item_releaseβint(* tunnel_item_release) (struct rte_eth_dev *dev, struct rte_flow_item *pmd_items, uint32_t num_of_items, struct rte_flow_error *err)β seerte_flow_item_release(). Definition at line162of filerte_flow_driver.h.pick_transfer_proxyβint(* pick_transfer_proxy) (struct rte_eth_dev *dev, uint16_t *proxy_port_id, struct rte_flow_error *error)β seerte_flow_pick_transfer_proxy(). Definition at line168of filerte_flow_driver.h.info_getβint(* info_get) (struct rte_eth_dev *dev, struct rte_flow_port_info *port_info, struct rte_flow_queue_info *queue_info, struct rte_flow_error *err)β seerte_flow_info_get(). Definition at line181of filerte_flow_driver.h.configureβint(* configure) (struct rte_eth_dev *dev, const struct rte_flow_port_attr *port_attr, uint16_t nb_queue, const struct rte_flow_queue_attr *queue_attr[], struct rte_flow_error *err)β seerte_flow_configure(). Definition at line187of filerte_flow_driver.h.pattern_template_createβstruct rte_flow_pattern_template *(* pattern_template_create) (struct rte_eth_dev *dev, const struct rte_flow_pattern_template_attr *template_attr, const struct rte_flow_item pattern[], struct rte_flow_error *err)β seerte_flow_pattern_template_create(). Definition at line187of filerte_flow_driver.h.pattern_template_destroyβint(* pattern_template_destroy) (struct rte_eth_dev *dev, struct rte_flow_pattern_template *pattern_template, struct rte_flow_error *err)β seerte_flow_pattern_template_destroy(). Definition at line200of filerte_flow_driver.h.actions_template_createβstruct rte_flow_actions_template *(* actions_template_create) (struct rte_eth_dev *dev, const struct rte_flow_actions_template_attr *template_attr, const struct rte_flow_action actions[], const struct rte_flow_action masks[], struct rte_flow_error *err)β seerte_flow_actions_template_create(). Definition at line200of filerte_flow_driver.h.actions_template_destroyβint(* actions_template_destroy) (struct rte_eth_dev *dev, struct rte_flow_actions_template *actions_template, struct rte_flow_error *err)β seerte_flow_actions_template_destroy(). Definition at line212of filerte_flow_driver.h.template_table_createβstruct rte_flow_template_table *(* template_table_create) (struct rte_eth_dev *dev, const struct rte_flow_template_table_attr *table_attr, struct rte_flow_pattern_template *pattern_templates[], uint8_t nb_pattern_templates, struct rte_flow_actions_template *actions_templates[], uint8_t nb_actions_templates, struct rte_flow_error *err)β seerte_flow_template_table_create(). Definition at line212of filerte_flow_driver.h.template_table_destroyβint(* template_table_destroy) (struct rte_eth_dev *dev, struct rte_flow_template_table *template_table, struct rte_flow_error *err)β seerte_flow_template_table_destroy(). Definition at line226of filerte_flow_driver.h.group_set_miss_actionsβint(* group_set_miss_actions) (struct rte_eth_dev *dev, uint32_t group_id, const struct rte_flow_group_attr *attr, const struct rte_flow_action actions[], struct rte_flow_error *err)β seerte_flow_group_set_miss_actions(). Definition at line231of filerte_flow_driver.h.actions_updateβint(* actions_update) (struct rte_eth_dev *dev, struct rte_flow *flow, const struct rte_flow_action actions[], struct rte_flow_error *error)β seerte_flow_actions_update(). Definition at line238of filerte_flow_driver.h.action_list_handle_query_updateβint(* action_list_handle_query_update) (struct rte_eth_dev *dev, const struct rte_flow_action_list_handle *handle, const void **update, void **query, enum rte_flow_query_update_mode mode, struct rte_flow_error *error)β see alsorte_flow_action_list_handle_query_update(). Definition at line244of filerte_flow_driver.h.flow_calc_table_hashβint(* flow_calc_table_hash) (struct rte_eth_dev *dev, const struct rte_flow_template_table *table, const struct rte_flow_item pattern[], uint8_t pattern_template_index, uint32_t *hash, struct rte_flow_error *error)β see alsorte_flow_calc_table_hash(). Definition at line251of filerte_flow_driver.h.flow_calc_encap_hashβint(* flow_calc_encap_hash) (struct rte_eth_dev *dev, const struct rte_flow_item pattern[], enum rte_flow_encap_hash_field dest_field, uint8_t *hash, struct rte_flow_error *error)β see alsorte_flow_calc_encap_hash(). Definition at line256of filerte_flow_driver.h.flow_template_table_resizeβint(* flow_template_table_resize) (struct rte_eth_dev *dev, struct rte_flow_template_table *table, uint32_t nb_rules, struct rte_flow_error *error)β see alsorte_flow_template_table_resize(). Definition at line261of filerte_flow_driver.h.flow_update_resizedβint(* flow_update_resized) (struct rte_eth_dev *dev, uint32_t queue, const struct rte_flow_op_attr *attr, struct rte_flow *rule, void *user_data, struct rte_flow_error *error)β see alsorte_flow_async_update_resized(). Definition at line266of filerte_flow_driver.h.flow_template_table_resize_completeβint(* flow_template_table_resize_complete) (struct rte_eth_dev *dev, struct rte_flow_template_table *table, struct rte_flow_error *error)β see alsorte_flow_template_table_resize_complete(). Definition at line271of filerte_flow_driver.h.
π Author π
Generated automatically by Doxygen for DPDK from the source code.
byeee bestie π this page is from DPDK, version 26.03.0, and itβs the rte_flow_ops(3) page β thatβs the source/version/date footer vibe, kept cute and not copied line-for-line. mwah β¨π
π¦ where this page comes from
- nixos 26.05: dpdk 26.03
- nixpkgs unstable: dpdk 26.03
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms