Customization of the components construction

Non default configurations can be defined in the yaml file whose path should be passed via the SPP_COMPONENT_CONF variable. For example, you will need the file for the following use cases:

  • Using a common core among the components.
  • Omitting forwarders.

Definition of the yaml

top level parameters

key value
vf array of spp_vf info

spp_vf info

key value
components array of component info

component info

key value
core core id
name component name
type component type
rx_port array of rx ports
tx_port array of tx ports

Example 1: core duplication

This example is that component construction is same as default but saving cores.

local.conf:

DPDK_PORT_MAPPINGS=00:04.0#phys1#2#0x3e,00:05.0#phys2#2#x3c02
SPP_COMPONENT_CONF=/usr/local/etc/sample_1.yaml

sample_1.yaml:

vf:
- components:
  - core: 2
    name: forward_0_tx
    rx_port: ['ring:0']
    tx_port: ['vhost:0']
    type: forward
  - core: 2
    name: forward_0_rx
    rx_port: ['vhost:0']
    tx_port: ['ring:1']
    type: forward
  - core: 3
    name: forward_1_tx
    rx_port: ['ring:2']
    tx_port: ['vhost:1']
    type: forward
  - core: 3
    name: forward_1_rx
    rx_port: ['vhost:1']
    tx_port: ['ring:3']
    type: forward
  - core: 4
    name: classifier
    rx_port: ['phy:0']
    tx_port: ['ring:0', 'ring:2']
    type: classifier_mac
  - core: 5
    name: merger
    rx_port: ['ring:1', 'ring:3']
    tx_port: ['phy:0']
    type: merge
- components:
  - core: 10
    name: forward_2_tx
    rx_port: ['ring:4']
    tx_port: ['vhost:2']
    type: forward
  - core: 10
    name: forward_2_rx
    rx_port: ['vhost:2']
    tx_port: ['ring:5']
    type: forward
  - core: 11
    name: forward_3_tx
    rx_port: ['ring:6']
    tx_port: ['vhost:3']
    type: forward
  - core: 11
    name: forward_3_rx
    rx_port: ['vhost:3']
    tx_port: ['ring:7']
    type: forward
  - core: 12
    name: classifier
    rx_port: ['phy:1']
    tx_port: ['ring:4', 'ring:6']
    type: classifier_mac
  - core: 13
    name: merger
    rx_port: ['ring:5', 'ring:7']
    tx_port: ['phy:1']
    type: merge

Example 2: omitting forwarders

This example is that there is no forwarder as shown the following diagram.

                                            +-----------+
                                            |           |
                                      +-----+> rx       |
                                      |     |           |
                                      |     | vhostuser |
+------+                              |     |           |
|      |          +------------+ -----+  +--+- tx       |
|  tx -+--------->| classifier |         |  |           |
|      |          +------------+ -----+  |  +-----------+
| NIC  |                              |  |
|      |          +------------+ <-------+  +-----------+
|  rx <+----------| merge      |      |     |           |
|      |          +------------+ <--+ +-----+> rx       |
+------+                            |       |           |
                                    |       | vhostuser |
                                    |       |           |
                                    +-------+- tx       |
                                            |           |
                                            +-----------+

local.conf:

DPDK_PORT_MAPPINGS=00:04.0#phys1#2#0xc2,00:05.0#phys2#2#xc002
SPP_COMPONENT_CONF=/usr/local/etc/sample_2.yaml

sample_2.yaml:

vf:
- components:
  - core: 6
    name: classifier
    rx_port: ['phy:0']
    tx_port: ['vhost:0', 'vhost:1']
    type: classifier_mac
  - core: 7
    name: merger
    rx_port: ['vhost:0', 'vhost:1']
    tx_port: ['phy:0']
    type: merge
- components:
  - core: 14
    name: classifier
    rx_port: ['phy:1']
    tx_port: ['vhost:2', 'vhost:3']
    type: classifier_mac
  - core: 15
    name: merger
    rx_port: ['vhost:2', 'vhost:3']
    tx_port: ['phy:1']
    type: merge