NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
simple_fwd.c File Reference
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <rte_random.h>
#include <doca_flow.h>
#include <doca_log.h>
#include <doca_bitfield.h>
#include "app_vnf.h"
#include "simple_fwd.h"
#include "simple_fwd_ft.h"
#include "utils.h"
Include dependency graph for simple_fwd.c:

Go to the source code of this file.

Data Structures

struct  entries_status
 user context struct that will be used in entries process callback More...
 

Macros

#define BE_IPV4_ADDR(a, b, c, d)   (RTE_BE32(((uint32_t)a << 24) + (b << 16) + (c << 8) + d))
 
#define SET_MAC_ADDR(addr, a, b, c, d, e, f)
 
#define SET_L4_PORT(layer, port, value)
 
#define GET_FT_ENTRY(ctx)   container_of(ctx, struct simple_fwd_ft_entry, user_ctx)
 
#define PULL_TIME_OUT   10000 /* Maximum timeout for pulling */
 
#define NB_ACTION_ARRAY   (1) /* Used as the size of muti-actions array for DOCA Flow API */
 
#define NB_ACTION_DESC   (1) /* Used as the size of muti-action descs array for DOCA Flow API */
 
#define MAX_HANDLING_TIME_MS   10 /*ms*/
 

Functions

 DOCA_LOG_REGISTER (SIMPLE_FWD)
 
static void simple_fwd_check_for_valid_entry (struct doca_flow_pipe_entry *entry, uint16_t pipe_queue, enum doca_flow_entry_status status, enum doca_flow_entry_op op, void *user_ctx)
 
static int simple_fwd_init_doca_flow (int nb_queues, const char *mode, uint32_t nr_counters, uint32_t nr_meters)
 
static struct doca_flow_port * simple_fwd_create_doca_flow_port (int port_id)
 
static void simple_fwd_stop_doca_flow_ports (int nb_ports, struct doca_flow_port *ports[])
 
static int simple_fwd_init_doca_flow_ports (int nb_ports, struct doca_flow_port *ports[], bool is_hairpin)
 
static void simple_fwd_aged_flow_cb (struct simple_fwd_ft_user_ctx *ctx)
 
static int simple_fwd_destroy_ins (void)
 
static int simple_fwd_destroy (void)
 
static int simple_fwd_create_ins (struct simple_fwd_port_cfg *port_cfg)
 
static int simple_fwd_build_rss_flow (uint16_t port_id)
 
static int simple_fwd_build_hairpin_flow (uint16_t port_id)
 
static void simple_fwd_build_fwd (struct simple_fwd_port_cfg *port_cfg, struct doca_flow_fwd *fwd)
 
static void simple_fwd_build_pipe_common_match_fields (struct doca_flow_match *match)
 
static int simple_fwd_create_match_pipe (struct simple_fwd_port_cfg *port_cfg, enum doca_flow_tun_type type)
 
static int simple_fwd_create_control_pipe (struct simple_fwd_port_cfg *port_cfg)
 
static int simple_fwd_add_control_pipe_entries (struct simple_fwd_port_cfg *port_cfg)
 
static doca_error_t simple_fwd_create_vxlan_encap_pipe (struct simple_fwd_port_cfg *port_cfg)
 
static doca_error_t simple_fwd_add_vxlan_encap_pipe_entry (struct simple_fwd_port_cfg *port_cfg)
 
static int simple_fwd_init_ports_and_pipes (struct simple_fwd_port_cfg *port_cfg)
 
static int simple_fwd_init (void *p)
 
static void simple_fwd_match_set_tun (struct simple_fwd_pkt_info *pinfo, struct doca_flow_match *match)
 
static enum doca_flow_l4_type_ext simple_fwd_l3_type_transfer (uint8_t pkt_l4_type)
 
static void simple_fwd_build_entry_actions (struct doca_flow_actions *actions)
 
static void simple_fwd_build_entry_match (struct simple_fwd_pkt_info *pinfo, struct doca_flow_match *match)
 
static void simple_fwd_build_entry_monitor (struct simple_fwd_pkt_info *pinfo, struct doca_flow_monitor *monitor)
 
static struct doca_flow_pipe * simple_fwd_select_pipe (struct simple_fwd_pkt_info *pinfo)
 
static struct doca_flow_pipe_entry * simple_fwd_pipe_add_entry (struct simple_fwd_pkt_info *pinfo, void *user_ctx, uint32_t *age_sec)
 
static int simple_fwd_handle_new_flow (struct simple_fwd_pkt_info *pinfo, struct simple_fwd_ft_user_ctx **ctx)
 
static bool simple_fwd_need_new_ft (struct simple_fwd_pkt_info *pinfo)
 
static int simple_fwd_handle_packet (struct simple_fwd_pkt_info *pinfo)
 
static void simple_fwd_handle_aging (uint32_t port_id, uint16_t queue)
 
static int simple_fwd_dump_stats (uint32_t port_id)
 
struct app_vnfsimple_fwd_get_vnf (void)
 

Variables

static struct simple_fwd_appsimple_fwd_ins
 
static struct app_vnf simple_fwd_vnf
 

Macro Definition Documentation

◆ BE_IPV4_ADDR

#define BE_IPV4_ADDR (   a,
  b,
  c,
 
)    (RTE_BE32(((uint32_t)a << 24) + (b << 16) + (c << 8) + d))

Definition at line 45 of file simple_fwd.c.

◆ GET_FT_ENTRY

#define GET_FT_ENTRY (   ctx)    container_of(ctx, struct simple_fwd_ft_entry, user_ctx)

Definition at line 71 of file simple_fwd.c.

◆ MAX_HANDLING_TIME_MS

#define MAX_HANDLING_TIME_MS   10 /*ms*/

◆ NB_ACTION_ARRAY

#define NB_ACTION_ARRAY   (1) /* Used as the size of muti-actions array for DOCA Flow API */

Definition at line 74 of file simple_fwd.c.

◆ NB_ACTION_DESC

#define NB_ACTION_DESC   (1) /* Used as the size of muti-action descs array for DOCA Flow API */

Definition at line 75 of file simple_fwd.c.

◆ PULL_TIME_OUT

#define PULL_TIME_OUT   10000 /* Maximum timeout for pulling */

Definition at line 73 of file simple_fwd.c.

◆ SET_L4_PORT

#define SET_L4_PORT (   layer,
  port,
  value 
)
Value:
do { \
if (match->layer.l4_type_ext == DOCA_FLOW_L4_TYPE_EXT_TCP) \
match->layer.tcp.l4_port.port = (value); \
else if (match->layer.l4_type_ext == DOCA_FLOW_L4_TYPE_EXT_UDP) \
match->layer.udp.l4_port.port = (value); \
} while (0)
@ DOCA_FLOW_L4_TYPE_EXT_TCP
@ DOCA_FLOW_L4_TYPE_EXT_UDP
type value

Definition at line 59 of file simple_fwd.c.

◆ SET_MAC_ADDR

#define SET_MAC_ADDR (   addr,
  a,
  b,
  c,
  d,
  e,
 
)
Value:
do { \
addr[0] = a & 0xff; \
addr[1] = b & 0xff; \
addr[2] = c & 0xff; \
addr[3] = d & 0xff; \
addr[4] = e & 0xff; \
addr[5] = f & 0xff; \
} while (0)

Definition at line 48 of file simple_fwd.c.

Function Documentation

◆ DOCA_LOG_REGISTER()

DOCA_LOG_REGISTER ( SIMPLE_FWD  )

◆ simple_fwd_add_control_pipe_entries()

static int simple_fwd_add_control_pipe_entries ( struct simple_fwd_port_cfg port_cfg)
static

Definition at line 812 of file simple_fwd.c.

◆ simple_fwd_add_vxlan_encap_pipe_entry()

static doca_error_t simple_fwd_add_vxlan_encap_pipe_entry ( struct simple_fwd_port_cfg port_cfg)
static

Definition at line 1040 of file simple_fwd.c.

◆ simple_fwd_aged_flow_cb()

static void simple_fwd_aged_flow_cb ( struct simple_fwd_ft_user_ctx ctx)
static

Definition at line 306 of file simple_fwd.c.

◆ simple_fwd_build_entry_actions()

static void simple_fwd_build_entry_actions ( struct doca_flow_actions actions)
static

Definition at line 1276 of file simple_fwd.c.

◆ simple_fwd_build_entry_match()

static void simple_fwd_build_entry_match ( struct simple_fwd_pkt_info pinfo,
struct doca_flow_match match 
)
static

Definition at line 1288 of file simple_fwd.c.

◆ simple_fwd_build_entry_monitor()

static void simple_fwd_build_entry_monitor ( struct simple_fwd_pkt_info pinfo,
struct doca_flow_monitor monitor 
)
static

Definition at line 1317 of file simple_fwd.c.

◆ simple_fwd_build_fwd()

static void simple_fwd_build_fwd ( struct simple_fwd_port_cfg port_cfg,
struct doca_flow_fwd fwd 
)
static

Definition at line 589 of file simple_fwd.c.

◆ simple_fwd_build_hairpin_flow()

static int simple_fwd_build_hairpin_flow ( uint16_t  port_id)
static

Definition at line 492 of file simple_fwd.c.

◆ simple_fwd_build_pipe_common_match_fields()

static void simple_fwd_build_pipe_common_match_fields ( struct doca_flow_match match)
static

Definition at line 607 of file simple_fwd.c.

◆ simple_fwd_build_rss_flow()

static int simple_fwd_build_rss_flow ( uint16_t  port_id)
static

Definition at line 392 of file simple_fwd.c.

◆ simple_fwd_check_for_valid_entry()

static void simple_fwd_check_for_valid_entry ( struct doca_flow_pipe_entry *  entry,
uint16_t  pipe_queue,
enum doca_flow_entry_status  status,
enum doca_flow_entry_op  op,
void *  user_ctx 
)
static

Definition at line 95 of file simple_fwd.c.

◆ simple_fwd_create_control_pipe()

static int simple_fwd_create_control_pipe ( struct simple_fwd_port_cfg port_cfg)
static

Definition at line 765 of file simple_fwd.c.

◆ simple_fwd_create_doca_flow_port()

static struct doca_flow_port* simple_fwd_create_doca_flow_port ( int  port_id)
static

Definition at line 204 of file simple_fwd.c.

◆ simple_fwd_create_ins()

static int simple_fwd_create_ins ( struct simple_fwd_port_cfg port_cfg)
static

Definition at line 357 of file simple_fwd.c.

◆ simple_fwd_create_match_pipe()

static int simple_fwd_create_match_pipe ( struct simple_fwd_port_cfg port_cfg,
enum doca_flow_tun_type  type 
)
static

Definition at line 633 of file simple_fwd.c.

◆ simple_fwd_create_vxlan_encap_pipe()

static doca_error_t simple_fwd_create_vxlan_encap_pipe ( struct simple_fwd_port_cfg port_cfg)
static

Definition at line 953 of file simple_fwd.c.

◆ simple_fwd_destroy()

static int simple_fwd_destroy ( void  )
static

Definition at line 344 of file simple_fwd.c.

◆ simple_fwd_destroy_ins()

static int simple_fwd_destroy_ins ( void  )
static

Definition at line 321 of file simple_fwd.c.

◆ simple_fwd_dump_stats()

static int simple_fwd_dump_stats ( uint32_t  port_id)
static

Definition at line 1519 of file simple_fwd.c.

◆ simple_fwd_get_vnf()

struct app_vnf* simple_fwd_get_vnf ( void  )

Definition at line 1536 of file simple_fwd.c.

◆ simple_fwd_handle_aging()

static void simple_fwd_handle_aging ( uint32_t  port_id,
uint16_t  queue 
)
static

Definition at line 1504 of file simple_fwd.c.

◆ simple_fwd_handle_new_flow()

static int simple_fwd_handle_new_flow ( struct simple_fwd_pkt_info pinfo,
struct simple_fwd_ft_user_ctx **  ctx 
)
static

Definition at line 1428 of file simple_fwd.c.

◆ simple_fwd_handle_packet()

static int simple_fwd_handle_packet ( struct simple_fwd_pkt_info pinfo)
static

Definition at line 1481 of file simple_fwd.c.

◆ simple_fwd_init()

static int simple_fwd_init ( void *  p)
static

Definition at line 1209 of file simple_fwd.c.

◆ simple_fwd_init_doca_flow()

static int simple_fwd_init_doca_flow ( int  nb_queues,
const char *  mode,
uint32_t  nr_counters,
uint32_t  nr_meters 
)
static

Definition at line 133 of file simple_fwd.c.

◆ simple_fwd_init_doca_flow_ports()

static int simple_fwd_init_doca_flow_ports ( int  nb_ports,
struct doca_flow_port *  ports[],
bool  is_hairpin 
)
static

Definition at line 276 of file simple_fwd.c.

◆ simple_fwd_init_ports_and_pipes()

static int simple_fwd_init_ports_and_pipes ( struct simple_fwd_port_cfg port_cfg)
static

Definition at line 1116 of file simple_fwd.c.

◆ simple_fwd_l3_type_transfer()

static enum doca_flow_l4_type_ext simple_fwd_l3_type_transfer ( uint8_t  pkt_l4_type)
static

Definition at line 1227 of file simple_fwd.c.

◆ simple_fwd_match_set_tun()

static void simple_fwd_match_set_tun ( struct simple_fwd_pkt_info pinfo,
struct doca_flow_match match 
)
inlinestatic

Definition at line 1227 of file simple_fwd.c.

◆ simple_fwd_need_new_ft()

static bool simple_fwd_need_new_ft ( struct simple_fwd_pkt_info pinfo)
static

Definition at line 1461 of file simple_fwd.c.

◆ simple_fwd_pipe_add_entry()

static struct doca_flow_pipe_entry* simple_fwd_pipe_add_entry ( struct simple_fwd_pkt_info pinfo,
void *  user_ctx,
uint32_t *  age_sec 
)
static

Definition at line 1351 of file simple_fwd.c.

◆ simple_fwd_select_pipe()

static struct doca_flow_pipe* simple_fwd_select_pipe ( struct simple_fwd_pkt_info pinfo)
static

Definition at line 1332 of file simple_fwd.c.

◆ simple_fwd_stop_doca_flow_ports()

static void simple_fwd_stop_doca_flow_ports ( int  nb_ports,
struct doca_flow_port *  ports[] 
)
static

Definition at line 258 of file simple_fwd.c.

Variable Documentation

◆ simple_fwd_ins

struct simple_fwd_app* simple_fwd_ins
static

Definition at line 77 of file simple_fwd.c.

◆ simple_fwd_vnf

struct app_vnf simple_fwd_vnf
static
Initial value:
= {
.vnf_init = &simple_fwd_init,
.vnf_process_pkt = &simple_fwd_handle_packet,
.vnf_flow_age = &simple_fwd_handle_aging,
.vnf_dump_stats = &simple_fwd_dump_stats,
.vnf_destroy = &simple_fwd_destroy,
}
static int simple_fwd_destroy(void)
Definition: simple_fwd.c:344
static int simple_fwd_dump_stats(uint32_t port_id)
Definition: simple_fwd.c:1519
static int simple_fwd_init(void *p)
Definition: simple_fwd.c:1209
static int simple_fwd_handle_packet(struct simple_fwd_pkt_info *pinfo)
Definition: simple_fwd.c:1481
static void simple_fwd_handle_aging(uint32_t port_id, uint16_t queue)
Definition: simple_fwd.c:1504

Definition at line 1519 of file simple_fwd.c.