1. Primary Commands

Primary process is managed with pri command.

pri command takes a sub command. They must be separated with delimiter ;. Some of sub commands take additional arguments.

spp > pri; SUB_CMD

All of Sub commands are referred with help command.

spp > help pri
Send a command to primary process.

    Show resources and statistics, or clear it.

        spp > pri; status  # show status

        spp > pri; clear   # clear statistics

    Launch secondary process..

        # Launch nfv:1
        spp > pri; launch nfv 1 -l 1,2 -m 512 -- -n 1 -s 192.168....

        # Launch vf:2
        spp > pri; launch vf 2 -l 1,4-7 -m 512 -- --client-id 2 -s ...

1.1. status

Show status fo spp_primary and forwarding statistics of each of ports.

spp > pri; status
- lcore_ids:
  - master: 0
- pipes:
  - pipe:0 ring:0 ring:1
- stats
  - physical ports:
      ID          rx          tx    tx_drop   rxq  txq mac_addr
       0           0           0           0   16   16 3c:fd:fe:b6:c4:28
       1           0           0           0 1024 1024 3c:fd:fe:b6:c4:29
       2           0           0           0    1    1 3c:fd:fe:b6:c4:30
  - ring ports:
      ID          rx          tx     rx_drop     tx_drop
       0           0           0           0           0
       1           0           0           0           0
       2           0           0           0           0
       ...

If you run spp_primary with forwarder thread, status of the forwarder is also displayed.

spp > pri; status
- lcore_ids:
  - master: 0
  - slave: 1
- forwarder:
  - status: idling
  - ports:
    - phy:0
    - phy:1
- pipes:
- stats
  - physical ports:
      ID          rx          tx    tx_drop  mac_addr
       0           0           0           0  56:48:4f:53:54:00
       1           0           0           0  56:48:4f:53:54:01
  - ring ports:
      ID          rx          tx     rx_drop     tx_drop
       0           0           0           0           0
       1           0           0           0           0
       ...

1.2. clear

Clear statistics.

spp > pri; clear
Clear port statistics.

1.3. add

Add a port with resource ID.

If the type of a port is other than pipe, specify port only. For example, adding ring:0 by

spp > pri; add ring:0
Add ring:0.

Or adding vhost:0 by

spp > pri; add vhost:0
Add vhost:0.

If the type of a port is pipe, specify a ring for rx and a ring for tx following a port. For example,

spp > pri; add pipe:0 ring:0 ring:1
Add pipe:0.

Note

pipe is independent of the forwarder and can be added even if the forwarder does not exist.

1.4. patch

Create a path between two ports, source and destination ports. This command just creates a path and does not start forwarding.

spp > pri; patch phy:0 ring:0
Patch ports (phy:0 -> ring:0).

1.5. forward

Start forwarding.

spp > pri; forward
Start forwarding.

Running status is changed from idling to running by executing it.

spp > pri; status
- lcore_ids:
  - master: 0
  - slave: 1
- forwarder:
  - status: running
  - ports:
    - phy:0
    - phy:1
...

1.6. stop

Stop forwarding.

spp > pri; stop
Stop forwarding.

Running status is changed from running to idling by executing it.

spp > pri; status
- lcore_ids:
  - master: 0
  - slave: 1
- forwarder:
  - status: idling
  - ports:
    - phy:0
    - phy:1
...

1.7. del

Delete a port of given resource UID.

spp > pri; del ring:0
Delete ring:0.

1.8. launch

Launch a secondary process.

Spp_primary is able to launch a secondary process with given type, secondary ID and options of EAL and application itself. This is a list of supported type of secondary processes.

  • nfv
  • vf
  • mirror
  • pcap
# spp_nfv with sec ID 1
spp > pri; launch nfv 1 -l 1,2 -m 512 -- -n -s 192.168.1.100:6666

# spp_vf with sec ID 2
spp > pri; launch vf 2 -l 1,3-5 -m 512 -- --client-id -s 192.168.1.100:6666

You notice that --proc-type secondary is not given for launching secondary processes. launch command adds this option before requesting to launch the process so that you do not need to input this option by yourself.

launch command supports TAB completion for type, secondary ID and the rest of options. Some of EAL and application options are just a template, so you should edit them before launching. Some of default params of options, for instance, the number of lcores or the amount of memory, are changed from config command of Common Commands.

In terms of log, each of secondary processes are output its log messages to files under log directory of project root. The name of log file is defined with type of process and secondary ID. For instance, nfv 2, the path of log file is log/spp_nfv-2.log.

1.9. flow

Manipulate flow rules.

You can request validate before creating flow rule.

spp > pri; flow validate phy:0 ingress group 1 pattern eth dst is
      10:22:33:44:55:66 / vlan vid is 100 / end actions queue index 0 /
      of_pop_vlan / end
Flow rule validated

You can create rules by using create request.

spp > pri; flow create phy:0 ingress group 1 pattern eth dst is
      10:22:33:44:55:66 / vlan vid is 100 / end actions queue index 0 /
      of_pop_vlan / end
Flow rule #0 created

Note

validate and/or create in flow command tends to take long parameters. But you should enter it as one line. CLI assumes that new line means command is entered. So command should be entered without using new line.

You can delete specific flow rule.

spp > pri; flow destroy phy:0 0
Flow rule #0 destroyed

Listing flow rules per physical port is supported.

spp > pri; flow list phy:0
ID      Group   Prio    Attr    Rule
0       1       0       -e-     ETH => OF_PUSH_VLAN OF_SET_VLAN_VID OF_SET_VLAN_PCP
1       1       0       i--     ETH VLAN => QUEUE OF_POP_VLAN
2       0       0       i--     ETH => JUMP

The following is the parameters to be displayed.

  • ID: Identifier of the rule which is unique per physical port.
  • Group: Group number the rule belongs.
  • Prio: Priority value of the rule.
  • Attr: Attributes for the rule which is independent each other. The possible values of Attr are i or e or t. i means ingress. e means egress and t means transfer.
  • Rule: Rule notation.

Flow detail can be listed.

spp > pri; flow status phy:0 0
Attribute:
  Group   Priority Ingress Egress Transfer
  1       0        true    false  false
Patterns:
  - eth:
    - spec:
      - dst: 10:22:33:44:55:66
      - src: 00:00:00:00:00:00
      - type: 0xffff
    - last:
    - mask:
      - dst: ff:ff:ff:ff:ff:ff
      - src: 00:00:00:00:00:00
      - type: 0xffff
  - vlan:
    - spec:
      - tci: 0x0064
      - inner_type: 0x0000
    - last:
    - mask:
      - tci: 0xffff
      - inner_type: 0x0000
Actions:
  - queue:
    - index: 0
  - of_pop_vlan: