2.3. spp_mirror¶
spp_mirror
is an implementation of TaaS feature as a SPP secondary process
for port mirroring.
Each of spp_mirror
processes is managed with mirror
command. Because
basic design of spp_mirror
is derived from spp_vf
, its commands are
almost similar to spp_vf
.
Secondary ID is referred as --client-id
which is given as an argument
while launching spp_mirror
. It should be unique among all of secondary
processes including spp_nfv
and others.
mirror
command takes an secondary ID and one of sub commands. Secondary ID
and sub command should be separated with delimiter ;
, or failed to a
command error. Some of sub commands take additional arguments for
configuration of the process or its resource management.
spp > mirror SEC_ID; SUB_CMD
In this example, SEC_ID
is a secondary ID and SUB_CMD
is one of the
following sub commands. Details of each of sub commands are described in the
next sections.
- status
- component
- port
spp_mirror
supports TAB completion. You can complete all of the name
of commands and its arguments. For instance, you find all of sub commands
by pressing TAB after mirror SEC_ID;
.
spp > mirror 1; # press TAB key
component port status
It tries to complete all of possible arguments. However, spp_mirror
takes
also an arbitrary parameter which cannot be predicted, for example, name of
component. In this cases, spp_mirror
shows capitalized keyword for
indicating it is an arbitrary parameter. Here is an exmaple of component
command to initialize a worker thread. Keyword NAME
should be replaced with
your favorite name for the worker of the role.
spp > mirror 1; component st # press TAB key to show args starting 'st'
start stop
spp > mirror 1; component start NAME # 'NAME' is shown with TAB after start
spp > mirror 1; component start mr1 # replace 'NAME' with favorite name
spp > mirror 1; component start mr1 # then, press TAB to show core IDs
5 6 7
It is another example of replacing keyword. port
is a sub command for
assigning a resource to a worker thread. RES_UID
is replaced with
resource UID which is a combination of port type and its ID such as
ring:0
or vhost:1
to assign it as RX port of forwarder mr1
.
spp > mirror 1; port add RES_UID
spp > mirror 1; port add ring:0 rx mr1
If you are reached to the end of arguments, no candidate keyword is displayed.
It is a completed statement of component
command, and TAB
completion does not work after mirror
because it is ready to run.
spp > mirror 1; component start mr1 5 mirror
Succeeded to start component 'mr1' on core:5
It is also completed secondary IDs of spp_mirror
and it is helpful if you run
several spp_mirror
processes.
spp > mirror # press TAB after space following 'mirror'
1; 3; # you find two spp_mirror processes of sec ID 1, 3
By the way, it is also a case of no candidate keyword is displayed if your command statement is wrong. You might be encountered an error if you run the wrong command. Please take care.
spp > mirror 1; compa # no candidate shown for wrong command
Invalid command "compa".
2.3.1. status¶
Show the information of worker threads and its resources. Status information consists of three parts.
spp > vf 1; status
Basic Information:
- client-id: 3
- ports: [phy:0, phy:1, ring:0, ring:1, ring:2, ring:3, ring:4]
Components:
- core:5 'mr1' (type: mirror)
- rx: ring:0
- tx: [ring:1, ring:2]
- core:6 'mr2' (type: mirror)
- rx: ring:3
- tx: [ring:4, ring:5]
- core:7 '' (type: unuse)
Basic Information
is for describing attributes of spp_mirror
itself.
client-id
is a secondary ID of the process and ports
is a list of
all of ports owned the process.
Components
is a list of all of worker threads. Each of workers has a
core ID running on, type of the worker and a list of resources.
Entry of no name with unuse
type means that no worker thread assigned to
the core. In other words, it is ready to be assinged.
2.3.2. component¶
Assing or release a role of forwarding to worker threads running on each of
cores which are reserved with -c
or -l
option while launching
spp_mirror
. Unlike spp_vf
, spp_mirror
only has one role, mirror
.
# assign 'ROLE' to worker on 'CORE_ID' with a 'NAME'
spp > mirror SEC_ID; component start NAME CORE_ID ROLE
# release worker 'NAME' from the role
spp > mirror SEC_ID; component stop NAME
Here is some examples of assigning roles with component
command.
# assign 'mirror' role with name 'mr1' on core 2
spp > mirror 2; component start mr1 2 mirror
Or examples of releasing roles.
# release mirror role
spp > vf 2; component stop mr1
2.3.3. port¶
Add or delete a port to a worker.
2.3.3.1. Adding port¶
spp > vf SEC_ID; port add RES_UID DIR NAME
RES_UID
is with replaced with resource UID such as ring:0
or
vhost:1
. spp_mirror
supports three types of port.
phy
: Physical NICring
: Ring PMDvhost
: Vhost PMD
DIR
means the direction of forwarding and it should be rx
or tx
.
NAME
is the same as for component
command.
This is an example for adding ports to mr1
. In this case, it is configured
to receive packets from ring:0
and send it to vhost:0
and vhost:1
by duplicating the packets.
# recieve from 'phy:0'
spp > mirror 2; port add ring:0 rx mr1
# send to 'ring:0' and 'ring:1'
spp > mirror 2; port add vhost:0 tx mr1
spp > mirror 2; port add vhost:1 tx mr1
2.3.3.2. Deleting port¶
Delete a port which is not used anymore. It is almost same as adding port.
spp > mirror SEC_ID; port del RES_UID DIR NAME
Here is an example.
# delete rx port 'ring:0' from 'mr1'
spp > mirror 2; port del ring:0 rx mr1
# delete tx port 'vhost:1' from 'mr1'
spp > mirror 2; port del vhost:1 tx mr1