NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
flow_switch_rss_sample.c File Reference
#include <string.h>
#include <unistd.h>
#include <rte_byteorder.h>
#include <rte_ethdev.h>
#include <rte_mempool.h>
#include <rte_mbuf.h>
#include <rte_net.h>
#include <doca_log.h>
#include <doca_flow.h>
#include <doca_dev.h>
#include "flow_common.h"
#include "flow_switch_common.h"
Include dependency graph for flow_switch_rss_sample.c:

Go to the source code of this file.

Macros

#define NB_EGRESS_ENTRIES   (SWITCH_RSS_BASIC_PIPE_MAX + SWITCH_RSS_CONTROL_MAX)
 
#define NB_INGRESS_ENTRIES   INGRESS_ROOT_TO_MAX
 
#define NB_VPORT_ENTRIES   INGRESS_TO_PORT_MAX
 
#define NB_TOTAL_ENTRIES
 
#define MAX_PKTS   16
 
#define WAIT_SECS   15
 
#define MAX_RSS_QUEUE   10
 

Enumerations

enum  ingress_vport_entry_type { INGRESS_TO_PORT0 , INGRESS_TO_PORT1 , INGRESS_TO_PORT2 , INGRESS_TO_PORT_MAX }
 
enum  switch_rss_basic_pipe_type { SWITCH_RSS_BASIC_PIPE_CONST_RSS , SWITCH_RSS_BASIC_PIPE_DYN_RSS , SWITCH_RSS_BASIC_PIPE_SHARED_RSS , SWITCH_RSS_BASIC_PIPE_MAX }
 
enum  switch_rss_control_entry_type { SWITCH_RSS_CONTROL_IMM_RSS , SWITCH_RSS_CONTROL_SHARED_RSS , SWITCH_RSS_CONTROL_MAX }
 
enum  ingress_root_entry_type {
  INGRESS_ROOT_TO_BASIC = SWITCH_RSS_BASIC_PIPE_MAX , INGRESS_ROOT_TO_CONTROL = INGRESS_ROOT_TO_BASIC + SWITCH_RSS_CONTROL_MAX , INGRESS_ROOT_TO_EGRESS = INGRESS_ROOT_TO_CONTROL * 2 , INGRESS_ROOT_TO_VPORT = INGRESS_ROOT_TO_EGRESS + 1 ,
  INGRESS_ROOT_TO_MAX = INGRESS_ROOT_TO_VPORT
}
 
enum  switch_rss_pipe_dir_type { SWITCH_RSS_PIPE_DIR_N2H , SWITCH_RSS_PIPE_DIR_BI , SWITCH_RSS_PIPE_DIR_MAX }
 

Functions

 DOCA_LOG_REGISTER (FLOW_SWITCH_SWITCH_RSS)
 
static void handle_rx_tx_pkts (uint32_t port_id, uint16_t nb_queues)
 
static doca_error_t create_rss_pipe (struct doca_flow_port *port, struct doca_flow_pipe **pipe)
 
static doca_error_t add_rss_pipe_entry (struct doca_flow_pipe *pipe, struct entries_status *status)
 
static doca_error_t create_switch_rss_control_pipe (struct doca_flow_port *port, enum switch_rss_pipe_dir_type dir, struct doca_flow_pipe **pipe)
 
static doca_error_t create_switch_rss_pipe (struct doca_flow_port *port, enum switch_rss_pipe_dir_type dir, enum switch_rss_basic_pipe_type type, struct doca_flow_pipe **pipe)
 
static doca_error_t create_switch_egress_pipe (struct doca_flow_port *sw_port, struct doca_flow_pipe **pipe)
 
static doca_error_t create_switch_ingress_pipe (struct doca_flow_port *sw_port, struct doca_flow_pipe **pipe)
 
static doca_error_t create_switch_vport_pipe (struct doca_flow_port *sw_port, struct doca_flow_pipe **pipe)
 
static doca_error_t add_switch_egress_pipe_entries (struct doca_flow_pipe *pipe, struct entries_status *status)
 
static doca_error_t add_switch_ingress_pipe_entries (struct doca_flow_pipe *pipe, struct entries_status *status)
 
static doca_error_t add_switch_vport_pipe_entries (struct doca_flow_pipe *pipe, struct entries_status *status)
 
static int create_switch_rss_pipes (struct doca_flow_port *port, enum switch_rss_pipe_dir_type dir)
 
static int add_switch_rss_pipe_entries (enum switch_rss_pipe_dir_type dir, struct entries_status *status)
 
doca_error_t flow_switch_rss (int nb_queues, int nb_ports, struct flow_switch_ctx *ctx)
 

Variables

static struct doca_flow_pipe * pipe_egress
 
static struct doca_flow_pipe * pipe_ingress
 
static struct doca_flow_pipe * pipe_vport
 
static struct doca_flow_pipe * pipe_rss
 
static struct doca_flow_pipe * pipe_basic_switch_rss [SWITCH_RSS_PIPE_DIR_MAX][SWITCH_RSS_BASIC_PIPE_MAX]
 
static struct doca_flow_pipe * pipe_control_switch_rss [SWITCH_RSS_PIPE_DIR_MAX]
 
static struct doca_flow_pipe_entry * entry_basic_switch_rss [SWITCH_RSS_PIPE_DIR_MAX][SWITCH_RSS_BASIC_PIPE_MAX]
 
static struct doca_flow_pipe_entry * entry_control_switch_rss [SWITCH_RSS_PIPE_DIR_MAX][SWITCH_RSS_CONTROL_MAX]
 
static struct doca_flow_pipe_entry * rss_entry
 
static uint16_t basic_queue_map [SWITCH_RSS_PIPE_DIR_MAX][SWITCH_RSS_BASIC_PIPE_MAX]
 
static uint16_t control_queue_map [SWITCH_RSS_PIPE_DIR_MAX][SWITCH_RSS_CONTROL_MAX]
 
static struct doca_flow_pipe_entry * egress_entries [NB_EGRESS_ENTRIES]
 
static struct doca_flow_pipe_entry * ingress_entries [NB_INGRESS_ENTRIES]
 
static struct doca_flow_pipe_entry * vport_entries [NB_VPORT_ENTRIES]
 

Macro Definition Documentation

◆ MAX_PKTS

#define MAX_PKTS   16

Definition at line 88 of file flow_switch_rss_sample.c.

◆ MAX_RSS_QUEUE

#define MAX_RSS_QUEUE   10

Definition at line 127 of file flow_switch_rss_sample.c.

◆ NB_EGRESS_ENTRIES

#define NB_EGRESS_ENTRIES   (SWITCH_RSS_BASIC_PIPE_MAX + SWITCH_RSS_CONTROL_MAX)

Definition at line 78 of file flow_switch_rss_sample.c.

◆ NB_INGRESS_ENTRIES

#define NB_INGRESS_ENTRIES   INGRESS_ROOT_TO_MAX

Definition at line 80 of file flow_switch_rss_sample.c.

◆ NB_TOTAL_ENTRIES

#define NB_TOTAL_ENTRIES
Value:

Definition at line 84 of file flow_switch_rss_sample.c.

◆ NB_VPORT_ENTRIES

#define NB_VPORT_ENTRIES   INGRESS_TO_PORT_MAX

Definition at line 82 of file flow_switch_rss_sample.c.

◆ WAIT_SECS

#define WAIT_SECS   15

Definition at line 90 of file flow_switch_rss_sample.c.

Enumeration Type Documentation

◆ ingress_root_entry_type

Enumerator
INGRESS_ROOT_TO_BASIC 
INGRESS_ROOT_TO_CONTROL 
INGRESS_ROOT_TO_EGRESS 
INGRESS_ROOT_TO_VPORT 
INGRESS_ROOT_TO_MAX 

Definition at line 64 of file flow_switch_rss_sample.c.

◆ ingress_vport_entry_type

Enumerator
INGRESS_TO_PORT0 
INGRESS_TO_PORT1 
INGRESS_TO_PORT2 
INGRESS_TO_PORT_MAX 

Definition at line 44 of file flow_switch_rss_sample.c.

◆ switch_rss_basic_pipe_type

Enumerator
SWITCH_RSS_BASIC_PIPE_CONST_RSS 
SWITCH_RSS_BASIC_PIPE_DYN_RSS 
SWITCH_RSS_BASIC_PIPE_SHARED_RSS 
SWITCH_RSS_BASIC_PIPE_MAX 

Definition at line 51 of file flow_switch_rss_sample.c.

◆ switch_rss_control_entry_type

Enumerator
SWITCH_RSS_CONTROL_IMM_RSS 
SWITCH_RSS_CONTROL_SHARED_RSS 
SWITCH_RSS_CONTROL_MAX 

Definition at line 58 of file flow_switch_rss_sample.c.

◆ switch_rss_pipe_dir_type

Enumerator
SWITCH_RSS_PIPE_DIR_N2H 
SWITCH_RSS_PIPE_DIR_BI 
SWITCH_RSS_PIPE_DIR_MAX 

Definition at line 72 of file flow_switch_rss_sample.c.

Function Documentation

◆ add_rss_pipe_entry()

static doca_error_t add_rss_pipe_entry ( struct doca_flow_pipe *  pipe,
struct entries_status status 
)
static

Definition at line 247 of file flow_switch_rss_sample.c.

◆ add_switch_egress_pipe_entries()

static doca_error_t add_switch_egress_pipe_entries ( struct doca_flow_pipe *  pipe,
struct entries_status status 
)
static

Definition at line 621 of file flow_switch_rss_sample.c.

◆ add_switch_ingress_pipe_entries()

static doca_error_t add_switch_ingress_pipe_entries ( struct doca_flow_pipe *  pipe,
struct entries_status status 
)
static

Definition at line 671 of file flow_switch_rss_sample.c.

◆ add_switch_rss_pipe_entries()

static int add_switch_rss_pipe_entries ( enum switch_rss_pipe_dir_type  dir,
struct entries_status status 
)
static

Definition at line 805 of file flow_switch_rss_sample.c.

◆ add_switch_vport_pipe_entries()

static doca_error_t add_switch_vport_pipe_entries ( struct doca_flow_pipe *  pipe,
struct entries_status status 
)
static

Definition at line 725 of file flow_switch_rss_sample.c.

◆ create_rss_pipe()

static doca_error_t create_rss_pipe ( struct doca_flow_port *  port,
struct doca_flow_pipe **  pipe 
)
static

Definition at line 186 of file flow_switch_rss_sample.c.

◆ create_switch_egress_pipe()

static doca_error_t create_switch_egress_pipe ( struct doca_flow_port *  sw_port,
struct doca_flow_pipe **  pipe 
)
static

Definition at line 411 of file flow_switch_rss_sample.c.

◆ create_switch_ingress_pipe()

static doca_error_t create_switch_ingress_pipe ( struct doca_flow_port *  sw_port,
struct doca_flow_pipe **  pipe 
)
static

Definition at line 480 of file flow_switch_rss_sample.c.

◆ create_switch_rss_control_pipe()

static doca_error_t create_switch_rss_control_pipe ( struct doca_flow_port *  port,
enum switch_rss_pipe_dir_type  dir,
struct doca_flow_pipe **  pipe 
)
static

Definition at line 273 of file flow_switch_rss_sample.c.

◆ create_switch_rss_pipe()

static doca_error_t create_switch_rss_pipe ( struct doca_flow_port *  port,
enum switch_rss_pipe_dir_type  dir,
enum switch_rss_basic_pipe_type  type,
struct doca_flow_pipe **  pipe 
)
static

Definition at line 321 of file flow_switch_rss_sample.c.

◆ create_switch_rss_pipes()

static int create_switch_rss_pipes ( struct doca_flow_port *  port,
enum switch_rss_pipe_dir_type  dir 
)
static

Definition at line 776 of file flow_switch_rss_sample.c.

◆ create_switch_vport_pipe()

static doca_error_t create_switch_vport_pipe ( struct doca_flow_port *  sw_port,
struct doca_flow_pipe **  pipe 
)
static

Definition at line 551 of file flow_switch_rss_sample.c.

◆ DOCA_LOG_REGISTER()

DOCA_LOG_REGISTER ( FLOW_SWITCH_SWITCH_RSS  )

◆ flow_switch_rss()

doca_error_t flow_switch_rss ( int  nb_queues,
int  nb_ports,
struct flow_switch_ctx ctx 
)

Definition at line 905 of file flow_switch_rss_sample.c.

◆ handle_rx_tx_pkts()

static void handle_rx_tx_pkts ( uint32_t  port_id,
uint16_t  nb_queues 
)
static

Definition at line 144 of file flow_switch_rss_sample.c.

Variable Documentation

◆ basic_queue_map

uint16_t basic_queue_map[SWITCH_RSS_PIPE_DIR_MAX][SWITCH_RSS_BASIC_PIPE_MAX]
static
Initial value:
= {
{
0,
1,
2,
},
{
3,
4,
5,
},
}

Definition at line 104 of file flow_switch_rss_sample.c.

◆ control_queue_map

uint16_t control_queue_map[SWITCH_RSS_PIPE_DIR_MAX][SWITCH_RSS_CONTROL_MAX]
static
Initial value:
= {
{
6,
7,
},
{
8,
9,
},
}

Definition at line 116 of file flow_switch_rss_sample.c.

◆ egress_entries

struct doca_flow_pipe_entry* egress_entries[NB_EGRESS_ENTRIES]
static

Definition at line 130 of file flow_switch_rss_sample.c.

◆ entry_basic_switch_rss

struct doca_flow_pipe_entry* entry_basic_switch_rss[SWITCH_RSS_PIPE_DIR_MAX][SWITCH_RSS_BASIC_PIPE_MAX]
static

Definition at line 100 of file flow_switch_rss_sample.c.

◆ entry_control_switch_rss

struct doca_flow_pipe_entry* entry_control_switch_rss[SWITCH_RSS_PIPE_DIR_MAX][SWITCH_RSS_CONTROL_MAX]
static

Definition at line 101 of file flow_switch_rss_sample.c.

◆ ingress_entries

struct doca_flow_pipe_entry* ingress_entries[NB_INGRESS_ENTRIES]
static

Definition at line 133 of file flow_switch_rss_sample.c.

◆ pipe_basic_switch_rss

struct doca_flow_pipe* pipe_basic_switch_rss[SWITCH_RSS_PIPE_DIR_MAX][SWITCH_RSS_BASIC_PIPE_MAX]
static

Definition at line 97 of file flow_switch_rss_sample.c.

◆ pipe_control_switch_rss

struct doca_flow_pipe* pipe_control_switch_rss[SWITCH_RSS_PIPE_DIR_MAX]
static

Definition at line 98 of file flow_switch_rss_sample.c.

◆ pipe_egress

struct doca_flow_pipe* pipe_egress
static

Definition at line 92 of file flow_switch_rss_sample.c.

◆ pipe_ingress

struct doca_flow_pipe* pipe_ingress
static

Definition at line 93 of file flow_switch_rss_sample.c.

◆ pipe_rss

struct doca_flow_pipe* pipe_rss
static

Definition at line 95 of file flow_switch_rss_sample.c.

◆ pipe_vport

struct doca_flow_pipe* pipe_vport
static

Definition at line 94 of file flow_switch_rss_sample.c.

◆ rss_entry

struct doca_flow_pipe_entry* rss_entry
static

Definition at line 102 of file flow_switch_rss_sample.c.

◆ vport_entries

struct doca_flow_pipe_entry* vport_entries[NB_VPORT_ENTRIES]
static

Definition at line 136 of file flow_switch_rss_sample.c.