rte_graph.h(3)
π rte_graph.h(3) π
okay so bestie, welcome to the Library Functions Manual page for rte_graph.h(3) β the graph-framework header with main-character energy. It's giving data structures, macros, typedefs, and a whole lineup of functions. Let's get into it π
πΈ NAME πΈ
rte_graph.h β that's the manual name, periodt.
β¨ SYNOPSIS β¨
First, the includes, exactly like this:
#include <stdbool.h>
#include <stdio.h>
#include <rte_common.h>
#include <rte_compat.h>
π Data Structures π
struct rte_graph_paramstruct rte_graph_cluster_stats_paramstruct rte_graph_cluster_node_statsstruct rte_node_xstatsstruct rte_node_register
πΈ Macros πΈ
#define RTE_GRAPH_NAMESIZE 64β max graph-name length, no cap.#define RTE_NODE_NAMESIZE 64β max node-name length.#define RTE_NODE_XSTAT_DESC_SIZE 64β max node xstat description length.#define RTE_GRAPH_PCAP_FILE_SZ 64β max pcap file name length.#define RTE_GRAPH_OFF_INVALID UINT32_MAXβ the invalid graph offset marker.#define RTE_NODE_ID_INVALID UINT32_MAXβ the invalid node id marker.#define RTE_EDGE_ID_INVALID UINT16_MAXβ the invalid edge id marker.#define RTE_GRAPH_ID_INVALID UINT16_MAXβ the invalid graph id marker.#define RTE_GRAPH_FENCE 0xdeadbeef12345678ULLβ graph fence data, iconic.#define rte_graph_foreach_node(count, off, graph, node)β macro to browserte_nodeobjects after graph creation, iykyk.#define RTE_NODE_SOURCE_F (1ULL << 0)β node type is source.#define RTE_NODE_REGISTER(node)β register a static node.
π¦ Typedefs π¦
typedef uint32_t rte_graph_off_t
typedef uint32_t rte_node_t
typedef uint16_t rte_edge_t
typedef uint16_t rte_graph_t
typedef uint16_t(* rte_node_process_t) (struct rte_graph *graph, struct rte_node *node, void **objs, uint16_t nb_objs)
typedef int(* rte_node_init_t) (const struct rte_graph *graph, struct rte_node *node)
typedef void(* rte_node_fini_t) (const struct rte_graph *graph, struct rte_node *node)
typedef int(* rte_graph_cluster_stats_cb_t) (bool is_first, bool is_last, void *cookie, const struct rte_graph_cluster_node_stats *stats)
typedef void(* packets_enqueued_cb) (struct rte_graph *graph, uint64_t cb_priv)
β Functions β
rte_graph_t rte_graph_create (const char *name, struct rte_graph_param *prm)
int rte_graph_destroy (rte_graph_t id)
rte_graph_t rte_graph_clone (rte_graph_t id, const char *name, struct rte_graph_param *prm)
rte_graph_t rte_graph_from_name (const char *name)
char * rte_graph_id_to_name (rte_graph_t id)
int rte_graph_export (const char *name, FILE *f)
int rte_graph_model_mcore_dispatch_core_bind (rte_graph_t id, int lcore)
void rte_graph_model_mcore_dispatch_core_unbind (rte_graph_t id)
struct rte_graph * rte_graph_lookup (const char *name)
rte_graph_t rte_graph_max_count (void)
void rte_graph_dump (FILE *f, rte_graph_t id)
void rte_graph_list_dump (FILE *f)
void rte_graph_obj_dump (FILE *f, struct rte_graph *graph, bool all)
struct rte_node * rte_graph_node_get (rte_graph_t graph_id, rte_node_t node_id)
struct rte_node * rte_graph_node_get_by_name (const char *graph, const char *name)
struct rte_graph_cluster_stats * rte_graph_cluster_stats_create (const struct rte_graph_cluster_stats_param *prm)
void rte_graph_cluster_stats_destroy (struct rte_graph_cluster_stats *stat)
void rte_graph_cluster_stats_get (struct rte_graph_cluster_stats *stat, bool skip_cb)
void rte_graph_cluster_stats_reset (struct rte_graph_cluster_stats *stat)
rte_node_t __rte_node_register (const struct rte_node_register *node)
rte_node_t rte_node_clone (rte_node_t id, const char *name)
rte_node_t rte_node_from_name (const char *name)
char * rte_node_id_to_name (rte_node_t id)
rte_edge_t rte_node_edge_count (rte_node_t id)
rte_edge_t rte_node_edge_update (rte_node_t id, rte_edge_t from, const char **next_nodes, uint16_t nb_edges)
rte_edge_t rte_node_edge_shrink (rte_node_t id, rte_edge_t size)
rte_node_t rte_node_edge_get (rte_node_t id, char *next_nodes[])
rte_node_t rte_node_max_count (void)
void rte_node_dump (FILE *f, rte_node_t id)
void rte_node_list_dump (FILE *f)
static __rte_always_inline int rte_node_is_invalid (rte_node_t id)
__rte_experimental int rte_node_free (rte_node_t id)
static __rte_always_inline int rte_edge_is_invalid (rte_edge_t id)
static __rte_always_inline int rte_graph_is_invalid (rte_graph_t id)
static __rte_always_inline int rte_graph_has_stats_feature (void)
π Detailed Description π
Graph architecture is the moment when data processing functions get abstracted as "node" and "link"-ed together to create a complex "graph" β enabling reusable/modular data processing functions. So yes, the whole vibe is modular, bestie.
This API enables graph framework operations such as create, lookup, dump and destroy on graph, plus node operations such as clone, edge update, and edge shrink, etc. The API also allows you to create the stats cluster to monitor per-graph and per-node stats.
Definition in file rte_graph.h.
π₯ Macro Definition Documentation π₯
#define RTE_GRAPH_NAMESIZE 64
This is the max length of a graph name β 64, periodt.
Definition at line 31 of file rte_graph.h.
#define RTE_NODE_NAMESIZE 64
Max length of a node name, bestie. It's 64.
Definition at line 32 of file rte_graph.h.
#define RTE_NODE_XSTAT_DESC_SIZE 64
Max length of a node xstat description. Yep, 64 again.
Definition at line 33 of file rte_graph.h.
#define RTE_GRAPH_PCAP_FILE_SZ 64
Max length of a pcap file name. 64, no cap.
Definition at line 34 of file rte_graph.h.
#define RTE_GRAPH_OFF_INVALID UINT32_MAX
This one means the graph offset is invalid, periodt.
Definition at line 35 of file rte_graph.h.
#define RTE_NODE_ID_INVALID UINT32_MAX
This is the invalid node id marker.
Definition at line 36 of file rte_graph.h.
#define RTE_EDGE_ID_INVALID UINT16_MAX
This is the invalid edge id marker.
Definition at line 37 of file rte_graph.h.
#define RTE_GRAPH_ID_INVALID UINT16_MAX
This is the invalid graph id marker.
Definition at line 38 of file rte_graph.h.
#define RTE_GRAPH_FENCE 0xdeadbeef12345678ULL
Graph fence data. It's giving 0xdeadbeef12345678ULL, literally iconic.
Definition at line 39 of file rte_graph.h.
#define rte_graph_foreach_node(count, off, graph, node)
Value:
for (count = 0, off = graph->nodes_start, \
node = RTE_PTR_ADD(graph, off); \
count < graph->nb_nodes; \
off = node->next, node = RTE_PTR_ADD(graph, off), count++)
Macro to browse rte_node object after the graph creation. Slay.
Definition at line 408 of file rte_graph.h.
#define RTE_NODE_SOURCE_F (1ULL << 0)
Node type is source. That's the whole vibe.
Definition at line 498 of file rte_graph.h.
#define RTE_NODE_REGISTER(node)
Value:
RTE_INIT(rte_node_register_##node) \
{ \
node.parent_id = RTE_NODE_ID_INVALID; \
node.id = __rte_node_register(&node); \
}
Register a static node.
The static node is registered through the constructor scheme, thereby, it can be used in a multi-process scenario.
Parameters
- node β valid node pointer with name, process function, and
next_nodes.
Definition at line 533 of file rte_graph.h.
π¦ Typedef Documentation π¦
typedef uint32_t rte_graph_off_t
Graph offset type.
Definition at line 41 of file rte_graph.h.
typedef uint32_t rte_node_t
Node id type.
Definition at line 42 of file rte_graph.h.
typedef uint16_t rte_edge_t
Edge id type.
Definition at line 43 of file rte_graph.h.
typedef uint16_t rte_graph_t
Graph id type.
Definition at line 44 of file rte_graph.h.
typedef uint16_t(* rte_node_process_t) (struct rte_graph *graph, struct rte_node *node, void **objs, uint16_t nb_objs)
Node stats within cluster of graphs Node process function.
The function invoked when the worker thread walks on nodes using rte_graph_walk().
Parameters
- graph β pointer to the graph object.
- node β pointer to the node object.
- objs β pointer to an array of objects to be processed.
- nb_objs β number of objects in the array.
Returns
- Number of objects processed.
See also: rte_graph_walk()
Definition at line 95 of file rte_graph.h.
typedef int(* rte_node_init_t) (const struct rte_graph *graph, struct rte_node *node)
Node initialization function.
The function invoked when the user creates the graph using rte_graph_create().
Parameters
- graph β pointer to the graph object.
- node β pointer to the node object.
Returns
0: Success.-<0: Failure.
See also: rte_graph_create()
Definition at line 115 of file rte_graph.h.
typedef void(* rte_node_fini_t) (const struct rte_graph *graph, struct rte_node *node)
Node finalization function.
The function invoked when the user destroys the graph using rte_graph_destroy().
Parameters
- graph β pointer to the graph object.
- node β pointer to the node object.
See also: rte_graph_destroy()
Definition at line 131 of file rte_graph.h.
typedef int(* rte_graph_cluster_stats_cb_t) (bool is_first, bool is_last, void *cookie, const struct rte_graph_cluster_node_stats *stats)
Graph cluster stats callback.
Parameters
- is_first β flag to denote that stats are of the first node.
- is_last β flag to denote that stats are of the last node.
- cookie β cookie supplied during stats creation.
- stats β node cluster stats data.
Returns
0: Success.-<0: Failure.
Definition at line 150 of file rte_graph.h.
typedef void(* packets_enqueued_cb) (struct rte_graph *graph, uint64_t cb_priv)
Graph dispatch enqueue notification callback.
Parameters
- graph β current graph.
- cb_priv β opaque argument given to the callback.
Definition at line 161 of file rte_graph.h.
β¨ FUNCTION DOCUMENTATION β¨
πΈ rte_graph_t rte_graph_create(const char *name, struct rte_graph_param *prm)
Create Graph β bestie, this is where a graph gets born π«
It creates the memory reel, detects loops, and finds isolated nodes (yes, it does a whole vibe check on your topology).
Parameters
nameβ unique name for this graph. Pick a good one, it's the graph's whole identity πprmβ the graph parameter, which includes the node names and the count of nodes to be included in this graph.
Returns
The unique graph id on success, or RTE_GRAPH_ID_INVALID otherwise. π
int rte_graph_destroy(rte_graph_t id)
Destroy Graph β it frees the Graph memory reel. So long, farewell, iconic run π¦
Parameters
idβ id of the graph to destroy.
Returns
0 on success, error otherwise.
rte_graph_t rte_graph_clone(rte_graph_t id, const char *name, struct rte_graph_param *prm)
Clone Graph β making a whole new graph that's lowkey a copy of a static one, no big deal β¨
It clones a graph from a static graph (a graph created from rte_graph_create()).
β οΈ Real talk: all cloned graphs attached to the parent graph MUST be destroyed together, because of the fast schedule design limitation (stop ALL graph walk firstly). Like, all of them, together, or it's a whole situation π.
Parameters
idβ the static graph id to clone from.nameβ name of the new graph. The library prepends the parent graph name to the user-specified name, so the final graph name will be"parent graph name"+"-"+name.prmβ graph parameter, includes model-specific parameters in this graph.
Returns
A valid graph id on success, RTE_GRAPH_ID_INVALID otherwise.
rte_graph_t rte_graph_from_name(const char *name)
Get graph id from graph name β reverse lookup era π
Parameters
nameβ name of the graph to get id.
Returns
Graph id on success, RTE_GRAPH_ID_INVALID otherwise.
char * rte_graph_id_to_name(rte_graph_t id)
Get graph name from graph id β the other direction, we stan a symmetrical queen π
Parameters
idβ id of the graph to get name.
Returns
Graph name on success, NULL otherwise.
int rte_graph_export(const char *name, FILE *f)
Export the graph as graph viz dot file β for the pretty pictures π¨
Parameters
nameβ name of the graph to export.fβ file pointer to export the graph.
Returns
0 on success, error otherwise.
int rte_graph_model_mcore_dispatch_core_bind(rte_graph_t id, int lcore)
Bind graph with specific lcore for mcore dispatch model β it's giving commitment π«Ά
Parameters
idβ graph id to get the pointer of the graph object.lcoreβ the lcore where the graph will run on.
Returns
0 on success, error otherwise.
void rte_graph_model_mcore_dispatch_core_unbind(rte_graph_t id)
Unbind graph with lcore for mcore dispatch model β the breakup arc π
Parameters
idβ graph id to get the pointer of the graph object.
struct rte_graph *rte_graph_lookup(const char *name)
Get graph object from its name β the classic π
The typical usage of this API is to get graph objects in the worker thread, followed by calling rte_graph_walk() in a loop. That's the whole main-character routine right there π₯
Parameters
nameβ name of the graph.
Returns
Graph pointer on success, NULL otherwise.
See also: rte_graph_walk()
rte_graph_t rte_graph_max_count(void)
Get maximum number of graph available β how many graphs can we even have?? π
Returns
Maximum graph count.
void rte_graph_dump(FILE *f, rte_graph_t id)
Dump the graph information to file β spill the tea, but into a file β
Parameters
fβ file pointer to dump graph info.idβ graph id to get graph info.
void rte_graph_list_dump(FILE *f)
Dump all graphs information to file β everyone gets a mention π
Parameters
fβ file pointer to dump graph info.
void rte_graph_obj_dump(FILE *f, struct rte_graph *graph, bool all)
Dump graph information along with node info to file β full lore drop, nodes included π
Parameters
fβ file pointer to dump graph info.graphβ graph pointer to get graph info.allβtrueto dump nodes in the graph.
struct rte_node *rte_graph_node_get(rte_graph_t graph_id, rte_node_t node_id)
Get node object with in graph from id β finding the node inside its graph, iykyk π§
Parameters
graph_idβ graph id to get node pointer from.node_idβ node id to get node pointer.
Returns
Node pointer on success, NULL otherwise.
struct rte_node *rte_graph_node_get_by_name(const char *graph, const char *name)
Get node pointer with in graph from name β same energy, name edition π
Parameters
graphβ graph name to get node pointer from.nameβ node name to get the node pointer.
Returns
Node pointer on success, NULL otherwise.
struct rte_graph_cluster_stats *rte_graph_cluster_stats_create(const struct rte_graph_cluster_stats_param *prm)
Create graph stats cluster to aggregate runtime node stats β numbers, aggregated, gorgeous π
Parameters
prmβ parameters including file pointer to dump stats, Graph pattern to create cluster and callback function.
Returns
A valid pointer on success, NULL otherwise.
void rte_graph_cluster_stats_destroy(struct rte_graph_cluster_stats *stat)
Destroy cluster stats β bye-bye little stats cluster π
Parameters
statβ valid cluster pointer to destroy.
void rte_graph_cluster_stats_get(struct rte_graph_cluster_stats *stat, bool skip_cb)
Get stats to application β hand over the receipts π§Ύ
Parameters
statβ cluster status.skip_cbβtrueto skip callback function invocation.
void rte_graph_cluster_stats_reset(struct rte_graph_cluster_stats *stat)
Reset cluster stats to zero β fresh start, clean slate, new me β¨
Parameters
statβ valid cluster stats pointer.
rte_node_t __rte_node_register(const struct rte_node_register *node)
Register new packet processing node β new node just dropped π
Nodes can be registered dynamically via this call, or statically via the RTE_NODE_REGISTER macro. Both paths slay, pick your lane.
Parameters
nodeβ valid node pointer with name, process function and next_nodes.
Returns
A valid node id on success, RTE_NODE_ID_INVALID otherwise.
See also: RTE_NODE_REGISTER()
rte_node_t rte_node_clone(rte_node_t id, const char *name)
Clone a node from static node (node created from RTE_NODE_REGISTER) β twin where? twin here π«Ά
Parameters
idβ static node id to clone from.nameβ name of the new node. The library prepends the parent node name to the user-specified name, so the final node name will be"parent node name"+"-"+name.
Returns
A valid node id on success, RTE_NODE_ID_INVALID otherwise.
rte_node_t rte_node_from_name(const char *name)
Get node id from node name β name in, id out π
Parameters
nameβ valid node name. In the case of the cloned node, the name will be"parent node name"+"-"+name.
Returns
A valid node id on success, RTE_NODE_ID_INVALID otherwise.
char * rte_node_id_to_name(rte_node_t id)
Get node name from node id β the remix π
Parameters
idβ valid node id.
Returns
A valid node name on success, NULL otherwise.
rte_edge_t rte_node_edge_count(rte_node_t id)
Get the number of edges (next-nodes) for a node from node id β count 'em π’
Parameters
idβ valid node id.
Returns
A valid edge count on success, RTE_EDGE_ID_INVALID otherwise.
rte_edge_t rte_node_edge_update(rte_node_t id, rte_edge_t from, const char **next_nodes, uint16_t nb_edges)
Update the edges for a node from node id β edge glow-up in progress β¨
Parameters
idβ valid node id.fromβ index to update the edges from.RTE_EDGE_ID_INVALIDis valid β in that case, it will be added to the end of the list.next_nodesβ name of the edges to update.nb_edgesβ number of edges to update.
Returns
A valid edge count on success, 0 otherwise.
rte_edge_t rte_node_edge_shrink(rte_node_t id, rte_edge_t size)
Shrink the edges to a given size β minimalism, but for edges π¦
Parameters
idβ valid node id.sizeβ new size to shrink the edges.
Returns
New size on success, RTE_EDGE_ID_INVALID otherwise.
rte_node_t rte_node_edge_get(rte_node_t id, char *next_nodes[])
Get the edge names from a given node β collecting the names, no stress πΈ
Parameters
idβ valid node id.next_nodesβ buffer to copy the edge names. TheNULLvalue is allowed; in that case, the function returns the size of the array that needs to be allocated. Very "tell me how much space I need first" of it.
Returns
When next_nodes == NULL, it returns the size of the array; else the number of items copied.
rte_node_t rte_node_max_count(void)
Get maximum nodes available β the ceiling, the limit, the cap π§’
Returns
Maximum nodes count.
void rte_node_dump(FILE *f, rte_node_t id)
Dump node info to file β node lore, archived π
Parameters
fβ file pointer to dump the node info.idβ node id to get the info.
void rte_node_list_dump(FILE *f)
Dump all node info to file β the whole friend group, documented π
Parameters
fβ file pointer to dump the node info.
π __rte_always_inline int rte_node_is_invalid(rte_node_t id) [static]
Test the validity of node id β vibe check for ids π
Parameters
idβ node id to check.
Returns
1 if valid id, 0 otherwise.
Definition at line 672 of file rte_graph.h.
__rte_experimental int rte_node_free(rte_node_t id)
Release the memory allocated for a node created using RTE_NODE_REGISTER or rte_node_clone, if it is not linked to any graphs. So yeah β only free it when it's not attached to anything, okay? π
Parameters
idβ node id to check.
Returns
0: Success.-<0: Failure.
__rte_always_inline int rte_edge_is_invalid(rte_edge_t id) [static]
Test the validity of edge id β edge got the same vibe check treatment β¨
Parameters
idβ edge node id to check.
Returns
1 if valid id, 0 otherwise.
Definition at line 701 of file rte_graph.h.
__rte_always_inline int rte_graph_is_invalid(rte_graph_t id) [static]
Test the validity of graph id β and the graphs too, everyone gets checked π
Parameters
idβ graph id to check.
Returns
1 if valid id, 0 otherwise.
Definition at line 716 of file rte_graph.h.
__rte_always_inline int rte_graph_has_stats_feature(void) [static]
Test stats feature support β do we have stats or not, that is the question π
Returns
1 if stats enabled, 0 otherwise.
Definition at line 728 of file rte_graph.h.
π AUTHOR π
Generated automatically by Doxygen for DPDK from the source code. Not a human, just a very diligent little doc generator doing its thing π«Ά
And that's the whole page, bestie!! π This gorgeousness came from DPDK, Version 26.03.0, and it's the rte_graph.h(3) page β go forth and build graphs responsibly β¨ππ¦
π¦ 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