rte_flow_ops(3)

πŸ“¦ version 26.03, in nixos 26.05, nixpkgs unstable

✨ 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 a queue_id in 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 the enum 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 the actions param 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 a struct 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 a uint16_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 β€” takes nb_queue plus a const 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 both actions[] and a masks[], 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 two uint8_t counts, 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 a uint32_t group_id and a const struct rte_flow_group_attr *attr up 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 named mode πŸ‘‘
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 a uint8_t pattern_template_index and writes into uint32_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 an enum rte_flow_encap_hash_field dest_field and a uint8_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, takes uint32_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 the uint32_t queue, const struct rte_flow_op_attr *attr, struct rte_flow *rule and void *user_data lineup
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 *) β€” see rte_flow_validate(). Definition at line 41 of file rte_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 *) β€” see rte_flow_create(). Definition at line 41 of file rte_flow_driver.h.
  • destroy β€” int(* destroy) (struct rte_eth_dev *, struct rte_flow *, struct rte_flow_error *) β€” see rte_flow_destroy(). Definition at line 55 of file rte_flow_driver.h.
  • flush β€” int(* flush) (struct rte_eth_dev *, struct rte_flow_error *) β€” see rte_flow_flush(). Definition at line 60 of file rte_flow_driver.h.
  • query β€” int(* query) (struct rte_eth_dev *, struct rte_flow *, const struct rte_flow_action *, void *, struct rte_flow_error *) β€” see rte_flow_query(). Definition at line 64 of file rte_flow_driver.h.
  • isolate β€” int(* isolate) (struct rte_eth_dev *, int, struct rte_flow_error *) β€” see rte_flow_isolate(). Definition at line 71 of file rte_flow_driver.h.
  • dev_dump β€” int(* dev_dump) (struct rte_eth_dev *dev, struct rte_flow *flow, FILE *file, struct rte_flow_error *error) β€” see rte_flow_dev_dump(). Definition at line 76 of file rte_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) β€” see rte_flow_get_aged_flows(). Definition at line 82 of file rte_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) β€” see rte_flow_get_q_aged_flows(). Definition at line 88 of file rte_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) β€” see rte_flow_action_handle_create(). Definition at line 88 of file rte_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) β€” see rte_flow_action_handle_destroy(). Definition at line 101 of file rte_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) β€” see rte_flow_action_handle_update(). Definition at line 106 of file rte_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) β€” see rte_flow_action_handle_query(). Definition at line 112 of file rte_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) β€” see rte_flow_action_handle_query_update(). Definition at line 118 of file rte_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 also rte_flow_action_list_handle_create(). Definition at line 118 of file rte_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 also rte_flow_action_list_handle_destroy(). Definition at line 131 of file rte_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) β€” see rte_flow_tunnel_decap_set(). Definition at line 136 of file rte_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) β€” see rte_flow_tunnel_match(). Definition at line 143 of file rte_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) β€” see rte_flow_get_rte_flow_restore_info(). Definition at line 150 of file rte_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) β€” see rte_flow_action_tunnel_decap_release(). Definition at line 156 of file rte_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) β€” see rte_flow_item_release(). Definition at line 162 of file rte_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) β€” see rte_flow_pick_transfer_proxy(). Definition at line 168 of file rte_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) β€” see rte_flow_info_get(). Definition at line 181 of file rte_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) β€” see rte_flow_configure(). Definition at line 187 of file rte_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) β€” see rte_flow_pattern_template_create(). Definition at line 187 of file rte_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) β€” see rte_flow_pattern_template_destroy(). Definition at line 200 of file rte_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) β€” see rte_flow_actions_template_create(). Definition at line 200 of file rte_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) β€” see rte_flow_actions_template_destroy(). Definition at line 212 of file rte_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) β€” see rte_flow_template_table_create(). Definition at line 212 of file rte_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) β€” see rte_flow_template_table_destroy(). Definition at line 226 of file rte_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) β€” see rte_flow_group_set_miss_actions(). Definition at line 231 of file rte_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) β€” see rte_flow_actions_update(). Definition at line 238 of file rte_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 also rte_flow_action_list_handle_query_update(). Definition at line 244 of file rte_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 also rte_flow_calc_table_hash(). Definition at line 251 of file rte_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 also rte_flow_calc_encap_hash(). Definition at line 256 of file rte_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 also rte_flow_template_table_resize(). Definition at line 261 of file rte_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 also rte_flow_async_update_resized(). Definition at line 266 of file rte_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 also rte_flow_template_table_resize_complete(). Definition at line 271 of file rte_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