rte_swx_ipsec.h(3)
π rte_swx_ipsec.h π
okay bestie, gather round, because we're doing the RTE SWX Internet Protocol Security header file and it's genuinely iconic β¨ It's a Library Functions Manual page, DPDK's own, and I'm gonna walk you through every single line like we're decoding a group chat at 2am π«Ά
β¨ NAME β¨
rte_swx_ipsec.h β the header, the moment, the whole vibe π
π¦ SYNOPSIS π¦
So first things first, you gotta pull in your includes, no cap:
#include <stdint.h>
#include <stdio.h>
#include <netinet/in.h>
#include <rte_compat.h>
#include <rte_crypto_sym.h>
#include <rte_ip6.h>
πΈ Data Structures πΈ
these are the little structs, the building blocks, the main characters:
struct rte_swx_ipsec_burst_sizestruct rte_swx_ipsec_paramsstruct rte_swx_ipsec_input_packet_metadatastruct rte_swx_ipsec_sa_cipher_paramsstruct rte_swx_ipsec_sa_authentication_paramsstruct rte_swx_ipsec_sa_aead_paramsstruct rte_swx_ipsec_sa_encap_paramsstruct rte_swx_ipsec_sa_params
π Macros π
the defined constants, short and sweet:
#define RTE_SWX_IPSEC_NAME_SIZE 64
#define RTE_SWX_IPSEC_BURST_SIZE_MAX 256
#define RTE_SWX_IPSEC_KEY_SIZE_MAX 64
β Functions β
and the functions!! every one of them tagged __rte_experimental (iykyk, that means "try it but don't be shocked if the API shifts"):
__rte_experimental struct rte_swx_ipsec * rte_swx_ipsec_find (const char *name)
__rte_experimental int rte_swx_ipsec_create (struct rte_swx_ipsec **ipsec, const char *name, struct rte_swx_ipsec_params *params, int numa_node)
__rte_experimental void rte_swx_ipsec_free (struct rte_swx_ipsec *ipsec)
__rte_experimental void rte_swx_ipsec_run (struct rte_swx_ipsec *ipsec)
__rte_experimental int rte_swx_ipsec_sa_add (struct rte_swx_ipsec *ipsec, struct rte_swx_ipsec_sa_params *sa_params, uint32_t *sa_id)
__rte_experimental void rte_swx_ipsec_sa_delete (struct rte_swx_ipsec *ipsec, uint32_t sa_id)
__rte_experimental struct rte_swx_ipsec_sa_params * rte_swx_ipsec_sa_read (struct rte_swx_ipsec *ipsec, const char *string, int *is_blank_or_comment, const char **errmsg)
π Detailed Description π
RTE SWX Internet Protocol Security (IPsec)
bestie. the IPsec block is the companion block for the SWX pipeline, and its whole job is to give that pipeline IPsec support π It lives outside the pipeline, which means you β yes you, the user β have to explicitly instantiate it and then wire it up to a pipeline instance through the pipeline I/O ports. no shortcuts, no autopilot, that's just how it is.
Main features:
- IPsec inbound (encrypted input packets β clear text output packets) and outbound (clear text input packets β encrypted output packets) processing support, for both tunnel and transport modes. both modes, bestie, we contain multitudes π¦
Security Association (SA):
- Every IPsec block instance rolls with its own set of SAs used to process the input packets. Each SA is identified by its own unique SA ID. And here's the tea: the IPsec inbound and outbound SAs share the same ID space. one space, no overlap, periodt.
- Every input packet gets mapped to one of the existing SAs first, using the SA ID, and then it's processed according to whichever SA got identified. The SA ID is read from the input packet itself. Usually the pipeline writes that SA ID field before it hands the packet over to the IPsec block β so the SA ID is basically the packet's β¨name tagβ¨ at the door.
Packet format:
- IPsec block input packet (i.e. pipeline output packet):
- IPsec block meta-data header:
See also: struct rte_swx_ipsec_input_packet_metadata.
- IPv4 header.
- IPv4 payload: on the inbound path, it includes the encrypted ESP packet.
- IPsec block output packet (i.e. pipeline input packet):
- IPv4 header.
- IPv4 payload: on the outbound path, it includes the encrypted ESP packet.
SA update procedure:
- To add a new SA β
See also: function rte_swx_ipsec_sa_add().
- To delete an existing SA β
See also: function rte_swx_ipsec_sa_delete().
- To update an existing SA, the control plane has to follow these steps, in order, no skipping π«Ά:
- Add a new SA with potentially a different set of configuration parameters. Heads up: this step can fail β for example when the SA table is full π
- Wait until no more packets are using the old SA.
- Delete the old SA.
Definition in file rte_swx_ipsec.h.
π Macro Definition Documentation π
#define RTE_SWX_IPSEC_NAME_SIZE 64
Name size.
Definition at line 66 of file rte_swx_ipsec.h.
#define RTE_SWX_IPSEC_BURST_SIZE_MAX 256
Maximum burst size.
Definition at line 71 of file rte_swx_ipsec.h.
#define RTE_SWX_IPSEC_KEY_SIZE_MAX 64
Maximum key size in bytes.
Definition at line 186 of file rte_swx_ipsec.h.
π Function Documentation π
__rte_experimental struct rte_swx_ipsec * rte_swx_ipsec_find (const char * name)
IPsec instance find π β go look up the instance, bestie.
Parameters
nameβ IPsec instance name.
Returns
A valid IPsec instance handle if it's found, or NULL otherwise.
__rte_experimental int rte_swx_ipsec_create (struct rte_swx_ipsec ** ipsec, const char * name, struct rte_swx_ipsec_params * params, int numa_node)
IPsec instance create β¨ β make the whole thing exist.
Parameters
ipsecβ IPsec instance handle. Must point to valid memory. Contains a valid pipeline handle once this function returns successfully.nameβ IPsec instance unique name.paramsβ IPsec instance configuration parameters.numa_nodeβ Non-Uniform Memory Access (NUMA) node.
Returns
0 on success, or one of these error codes otherwise:
-EINVAL: Invalid argument;-ENOMEM: Not enough space / cannot allocate memory;-EEXIST: Pipeline with this name already exists.
__rte_experimental void rte_swx_ipsec_free (struct rte_swx_ipsec * ipsec)
IPsec instance free ποΈ β let it go, it's free now.
Parameters
ipsecβ IPsec instance handle.
__rte_experimental void rte_swx_ipsec_run (struct rte_swx_ipsec * ipsec)
IPsec Data Plane API IPsec instance run π₯ β the data plane doing its thing.
Parameters
ipsecβ IPsec instance handle.
__rte_experimental int rte_swx_ipsec_sa_add (struct rte_swx_ipsec * ipsec, struct rte_swx_ipsec_sa_params * sa_params, uint32_t * sa_id)
IPsec SA add πΈ β new SA, who dis.
Parameters
ipsecβ IPsec instance handle.sa_paramsβ SA parameters.sa_idβ On success, the SA ID.
Returns
0 on success or an error code otherwise.
__rte_experimental void rte_swx_ipsec_sa_delete (struct rte_swx_ipsec * ipsec, uint32_t sa_id)
IPsec SA delete π β bye bye SA.
It is the responsibility of the Control Plane to make sure the SA to be deleted is no longer used by the Data Plane. no, seriously, this one's on you. delete a live SA and it's giving undefined behaviour energy π
Parameters
ipsecβ IPsec instance handle.sa_idβ The SA ID.
__rte_experimental struct rte_swx_ipsec_sa_params * rte_swx_ipsec_sa_read (struct rte_swx_ipsec * ipsec, const char * string, int * is_blank_or_comment, const char ** errmsg)
IPsec SA read from string π β hand it a string, get params back.
IPsec SA syntax:
<sa> : encrypt <crypto_params> <encap_params> | decrypt <crypto_params> <encap_params> ;
<crypto_params> : <cipher> <auth> | <aead> ;
<cipher> : cipher <ciher_alg> key <cipher_key> | cipher <cipher_alg> ;
<auth> : auth <authentication_alg> key <authentication_key> | auth <authentication_alg> ;
<aead> : aead <aead_alg> key <aead_key> ;
<encap_params> : esp spi <spi> tunnel ipv4 srcaddr <ipv4_src_addr> dstaddr <ipv4_dst_addr> | esp spi <spi> tunnel ipv6 srcaddr <ipv6_src_addr> dstaddr <ipv6_dst_addr> | esp spi <spi> transport ;
ngl, yes, <ciher_alg> right there is spelled exactly like the original says it. it's giving typo but it's also giving canon, so we keep it character for character π
Parameters
ipsecβ IPsec instance handle.stringβ String containing the SA.is_blank_or_commentβ On error, when its input value is notNULL, this argument is set to a non-zero value whenstringcontains a blank or comment line and to zero otherwise.errmsgβ On error, when its input value is notNULL, this argument points to a string with details on the detected error.
Returns
Pointer to a valid IPsec SA parameters data structure on success, or NULL on error.
π Author π
Generated automatically by Doxygen for DPDK from the source code. yes bestie, the robots wrote the docs, we just gave them the vibe check π«Ά
okay that's the whole page, you ate π This was DPDK Version 25.11.3, page rte_swx_ipsec.h(3), and it's been a pleasure, mwah πβ¨π¦
π¦ where this page comes from
- ubuntu resolute: dpdk-doc 25.11.3-0ubuntu0.26.04.1 Β· BSD-3-Clause
- ubuntu stonking: dpdk-doc 25.11.3-1 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms