2. Design¶
2.1. Ports¶
Both of spp_vf and spp_mirror support three types of port,
phy, ring and vhost.
phy port is used to retrieve packets from specific physical NIC or sent to.
ring is basically used to connect a process or a thread to make a network
path between them.
vhost is used to forward packets from a VM or sent to.
2.2. spp_vf¶
spp_vf is a kind of secondary process and consists of several
threads called component.
There are three types of components, forwarder,
merger and classifier.
2.2.1. Forwarder¶
Simply forwards packets from rx to tx port.
2.2.2. Merger¶
Receives packets from multiple rx ports to aggregate packets and sends to a desctination port.
2.2.3. Classifier¶
Sends packets to multiple tx ports based on entries of MAC address and destination port in a classifier table. This component also supports VLAN tag.
For VLAN addressing, classifier has other tables than defalut. Classifier prepares tables for each of VLAN ID and decides which of table is referred if TPID (Tag Protocol Indetifier) is included in a packet and equals to 0x8100 as defined in IEEE 802.1Q standard.
2.3. spp_mirror¶
spp_mirror is another kind of secondary process. The keyword mirror
means that it duplicates incoming packets and forwards to additional
destination.
It supports only one type of component called mirror for duplicating.
In Fig. 2.2, incoming packets are duplicated with
mirror component and sent to original and additional destinations.
2.3.1. Mirror¶
mirror component has one rx port and two tx ports. Incoming packets
from rx port are duplicated and sent to each of tx ports.
In general, copying packet is time-consuming because it requires to make a new
region on memory space. Considering to minimize impact for performance,
spp_mirror provides a choice of copying methods, shallowocopy or
deepcopy.
The difference between those methods is shallowocopy does not copy whole of
packet data but share without header actually.
shallowcopy is to share mbuf between packets to get better performance
than deepcopy, but it should be used for read only for the packet.
Note
shallowcopy calls rte_pktmbuf_clone() internally and
deepcopy create a new mbuf region.
You should choose deepcopy if you use VLAN feature to make no change for
original packet while copied packet is modified.