* [spp] [PATCH 01/10] docs: add spp_mirror in overview section
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
@ 2018-11-30 5:41 ` x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 02/10] docs: add overview image of spp_mirror x-fn-spp
` (8 subsequent siblings)
9 siblings, 0 replies; 10+ messages in thread
From: x-fn-spp @ 2018-11-30 5:41 UTC (permalink / raw)
To: ferruh.yigit, ogawa.yasufumi; +Cc: spp
From: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Add overview of spp_mirror beside spp_vf.
Signed-off-by: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
docs/guides/spp_vf/overview.rst | 71 +++++++++++++++++++++++++++++++++--------
1 file changed, 58 insertions(+), 13 deletions(-)
diff --git a/docs/guides/spp_vf/overview.rst b/docs/guides/spp_vf/overview.rst
index 4773213..dd957d4 100644
--- a/docs/guides/spp_vf/overview.rst
+++ b/docs/guides/spp_vf/overview.rst
@@ -6,24 +6,44 @@
Overview
========
-SPP_VF provides SR-IOV like network functionality using DPDK for NFV.
+This section describes an overview of SPP's extensions, ``spp_vf`` and
+``spp_mirror``.
+SPP provides a connectivity between DPDK processes as a virtual patch panel.
+However, It is not sufficient considering more practical usecases.
+For instance, you might need a classification for incoming packets if you have
+multiple processes as destinations. You might also need to duplicate packets
+for monitoring or inspection.
-PP_VF distributes incoming packets to VMs with referring to virtual
-MAC address like Virtual Function(VF) of SR-IOV.
-Virtual MAC address can be defined by commands from spp
-controller(``spp_vf.py``).
+``spp_vf`` is a SPP secondary process for forwarding packets to multiple
+destination ports with a MAC address classification. It is also supported to
+merge from several source ports to aggregate packets to a destination port.
-SPP_VF is multi-process and multi-thread applications. A SPP_VF process
-is referred to as ``spp_vf`` in this document. Each ``spp_vf`` has
-one manager thread and component threads. The manager thread provides
-function for command processing and creating the component threads.
-The component threads have its own multiple components, ports and
-classifier tables including Virtual MAC address.
+``spp_mirror`` is an another kind of secondary process to duplicate incoming
+packets. This feature is intended to use as a
+`TaaS
+<https://docs.openstack.org/dragonflow/latest/specs/tap_as_a_service.html>`_
+feature for port mirroring introduced in OpenStack.
+spp_vf
+------
+
+``spp_vf`` provides a SR-IOV like network feature.
+
+``spp_vf`` forwards incoming packets to several destination VMs by referring
+MAC address like as a Virtual Function (VF) of SR-IOV.
+
+``spp_vf`` is a multi-process and multi-thread application.
+Each of ``spp_vf`` has one manager thread and worker threads called as
+components.
+The manager thread provides a function for parsing a command and creating the
+components.
+The component threads have its own multiple components, ports and classifier
+tables including Virtual MAC address.
+
This is an example of network configuration, in which one
``classifier_mac``,
-one merger and four forwarders are running in SPP_VF process
+one merger and four forwarders are running in ``spp_vf`` process
for two destinations of vhost interface.
Incoming packets from rx on host1 are sent to each of vhosts of VM
by looking up destination MAC address in the packet.
@@ -31,4 +51,29 @@ by looking up destination MAC address in the packet.
.. figure:: ../images/spp_vf/spp_vf_overview.*
:width: 70%
- Overview of SPP VF
+ Overview of spp_vf
+
+
+SPP Mirror
+----------
+
+``spp_mirror`` is an implementation of
+`TaaS
+<https://docs.openstack.org/dragonflow/latest/specs/tap_as_a_service.html>`_
+as a SPP secondary process for port mirroring.
+TaaS stands for TAP as a Service.
+
+``spp_mirror`` consists of one manager thread and worker threads as similar to
+``spp_vf``, but just one worker role for mirroring.
+:numref:`figure_spp_mirror_overview` shows an overview of use of ``spp_mirror``
+in which ``spp_mirror`` process receives packets from ``ring:0`` in ``spp_vf``
+for duplicating the packets for monitoring.
+Worker thread ``mirror`` has two of tx rings for forwaring the packets to the
+destination and a monitor application running on VM3.
+
+.. _figure_spp_mirror_overview:
+
+.. figure:: ../images/spp_vf/spp_mirror_overview.*
+ :width: 70%
+
+ Overview of spp_mirror
--
2.7.4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [spp] [PATCH 02/10] docs: add overview image of spp_mirror
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
2018-11-30 5:41 ` [spp] [PATCH 01/10] docs: add spp_mirror in overview section x-fn-spp
@ 2018-11-30 5:41 ` x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 03/10] docs: add design for spp_mirror x-fn-spp
` (7 subsequent siblings)
9 siblings, 0 replies; 10+ messages in thread
From: x-fn-spp @ 2018-11-30 5:41 UTC (permalink / raw)
To: ferruh.yigit, ogawa.yasufumi; +Cc: spp
From: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Add an overview image of spp_mirror.
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Signed-off-by: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
---
docs/guides/images/spp_vf/spp_mirror_overview.svg | 1433 +++++++++++++++++++++
1 file changed, 1433 insertions(+)
create mode 100644 docs/guides/images/spp_vf/spp_mirror_overview.svg
diff --git a/docs/guides/images/spp_vf/spp_mirror_overview.svg b/docs/guides/images/spp_vf/spp_mirror_overview.svg
new file mode 100644
index 0000000..9414fdf
--- /dev/null
+++ b/docs/guides/images/spp_vf/spp_mirror_overview.svg
@@ -0,0 +1,1433 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="260mm"
+ height="185mm"
+ viewBox="0 0 921.25999 655.51182"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="spp_mirror_overview.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker19529"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path19531" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker15913"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path15915"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker10517"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path10519"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker5786"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path5788" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6787"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6789"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6621"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path6623" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6461"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path6463"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6319"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6321"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6171"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path6173" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6041"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path6043" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5905"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path5907"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5787"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5789"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker5663"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path5665" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5545"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path5547"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5445"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5447"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5351"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5353"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5263"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5265"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5181"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5183"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5105"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5107"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5035"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5037"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4971"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4973"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4901"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4903" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4849"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4851" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4803"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4805" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4763"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4765" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4673"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path4675"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4633"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4635" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4250"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5787-7"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5789-5"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker5663-6"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path5665-2" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4849-0"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4851-9" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4849-0-6"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4851-9-0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6621-2"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path6623-6" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker5663-1"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path5665-8" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5787-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5789-2"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.7"
+ inkscape:cx="526.8054"
+ inkscape:cy="384.32605"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer9"
+ showgrid="false"
+ inkscape:window-width="1685"
+ inkscape:window-height="882"
+ inkscape:window-x="77"
+ inkscape:window-y="110"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Host"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-396.85038)">
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.16076422;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4136"
+ width="874.76562"
+ height="619.90771"
+ x="38.987026"
+ y="416.33774" />
+ <rect
+ style="opacity:1;fill:#ffffaa;fill-opacity:1;stroke:#000000;stroke-width:0.88310295;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4218"
+ width="59.116898"
+ height="79.116898"
+ x="39.646317"
+ y="813.69037" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer12"
+ inkscape:label="Network"
+ transform="translate(0,17.716539)" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer8"
+ inkscape:label="VM"
+ transform="translate(0,17.716539)">
+ <rect
+ style="opacity:1;fill:#eafdff;fill-opacity:1;stroke:#000000;stroke-width:1.03412473;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4548"
+ width="194.82837"
+ height="138.99298"
+ x="697.48883"
+ y="286.62894"
+ ry="0" />
+ <rect
+ style="opacity:1;fill:#eafdff;fill-opacity:1;stroke:#000000;stroke-width:1.06098545;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4550"
+ width="194.80276"
+ height="138.96742"
+ x="698.70312"
+ y="454.84845" />
+ <rect
+ style="opacity:1;fill:#ffffaa;fill-opacity:1;stroke:#000000;stroke-width:1.21666884;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4552"
+ width="68.78334"
+ height="68.78334"
+ x="697.62036"
+ y="328.59973" />
+ <rect
+ style="opacity:1;fill:#ffffaa;fill-opacity:1;stroke:#000000;stroke-width:1.17093265;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4554"
+ width="68.829086"
+ height="68.829079"
+ x="698.90717"
+ y="496.48553" />
+ <rect
+ style="opacity:1;fill:#eafdff;fill-opacity:1;stroke:#000000;stroke-width:1.14507902;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4548-9"
+ width="239.11613"
+ height="138.85497"
+ x="653.53564"
+ y="30.367794"
+ ry="0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Processes"
+ transform="translate(0,17.716539)">
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:2.11768031;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4174"
+ width="411.53824"
+ height="368.88412"
+ x="131.17735"
+ y="227.75409"
+ ry="21.405918" />
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:0.86535329;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4556"
+ width="78.088539"
+ height="63.050102"
+ x="798.37872"
+ y="332.40717"
+ ry="31.525051" />
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:1.28600001;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4612"
+ width="77.14286"
+ height="54.285713"
+ x="800.28571"
+ y="513.50952"
+ ry="27.142857" />
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:1.02278769;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4556-2"
+ width="109.3597"
+ height="62.892681"
+ x="764.44849"
+ y="76.169632"
+ ry="31.446341" />
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:1.26175213;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4174-2"
+ width="332.19119"
+ height="162.23318"
+ x="130.66011"
+ y="46.107227"
+ ry="15.189577" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="Threads"
+ transform="translate(0,17.716539)">
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.08361697;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4534"
+ width="128.91641"
+ height="48.916386"
+ x="144.74155"
+ y="364.53329"
+ ry="24.458193" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.18673563;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4536"
+ width="128.81329"
+ height="48.813263"
+ x="140.73215"
+ y="463.6001"
+ ry="24.406631" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.11390722;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4538"
+ width="128.88611"
+ height="48.921562"
+ x="400.50293"
+ y="316.24387"
+ ry="22.773815" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.40811193;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4540"
+ width="128.5798"
+ height="48.638973"
+ x="400.65607"
+ y="387.75711"
+ ry="24.319487" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.19797981;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4542"
+ width="128.79857"
+ height="48.840809"
+ x="400.54669"
+ y="459.0282"
+ ry="24.420404" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.163082;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4544"
+ width="128.83492"
+ height="48.874329"
+ x="400.5285"
+ y="530.38336"
+ ry="24.437164" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.08361697;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4534-6"
+ width="128.91644"
+ height="48.916393"
+ x="170.68469"
+ y="116.19418"
+ ry="24.458197" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.11390722;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4538-1"
+ width="128.88614"
+ height="48.92157"
+ x="400.02924"
+ y="242.73033"
+ ry="22.773819" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="DPDK-Resources"
+ transform="translate(0,17.716539)">
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:0.91584492;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4558"
+ cx="331.75546"
+ cy="341.86963"
+ rx="40.042084"
+ ry="19.542076" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.38332129;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4585"
+ cx="331.75562"
+ cy="413.12515"
+ rx="39.808346"
+ ry="19.308342" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.34181738;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4587"
+ cx="331.75562"
+ cy="484.38062"
+ rx="39.829098"
+ ry="19.329096" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.18107522;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4589"
+ cx="331.75562"
+ cy="555.63617"
+ rx="39.90947"
+ ry="19.409466" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.028548;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4591"
+ cx="615.28491"
+ cy="342.29538"
+ rx="43.985737"
+ ry="24.485731" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:0.91791457;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4593"
+ cx="615.85687"
+ cy="487.43823"
+ rx="44.04105"
+ ry="24.541048" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:0.91584492;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4558-3"
+ cx="368.85724"
+ cy="110.08095"
+ rx="40.042091"
+ ry="19.54208" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:0.91584492;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4558-3-6"
+ cx="368.00006"
+ cy="172.9381"
+ rx="40.042099"
+ ry="19.542084" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.028548;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4591-3"
+ cx="616.00012"
+ cy="399.50955"
+ rx="43.985744"
+ ry="24.485735" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.028548;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4591-3-6"
+ cx="616.00012"
+ cy="547.50958"
+ rx="43.985752"
+ ry="24.485739" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer11"
+ inkscape:label="Path"
+ transform="translate(0,17.716539)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4673)"
+ d="m 97.999997,414.65237 47.428573,-20"
+ id="path4623"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4633)"
+ d="M 139.71429,486.93809 97.999997,460.36666"
+ id="path4625"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4849)"
+ d="m 266.85714,373.2238 30,-22.85714"
+ id="path4713"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4803)"
+ d="m 269.71429,398.93808 22.85714,11.42858"
+ id="path4715"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5351)"
+ d="m 371.71429,413.2238 28.57142,0"
+ id="path4719"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5263)"
+ d="m 398.85714,483.2238 -27.14285,0"
+ id="path4721"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5181)"
+ d="m 402.28571,553.50951 -30,1.42858"
+ id="path4723"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4763)"
+ d="m 291.14286,484.65237 -22.85715,1.42857"
+ id="path4725"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4901)"
+ d="m 291.14286,551.79523 -30,-42.85714"
+ id="path4727"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5105)"
+ d="m 529.42857,341.50951 38.85714,-0.28571"
+ id="path4729"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4971)"
+ d="m 524.57143,424.65237 58,45.99999"
+ id="path4731"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5035)"
+ d="m 578.57143,411.79524 -54.85714,54.2857"
+ id="path4733"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5545)"
+ d="M 571.14286,548.08094 530,548.93809"
+ id="path4735"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5663)"
+ d="m 661.14286,342.65237 36.28571,0"
+ id="path4737"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6621)"
+ d="m 695.42857,377.50951 -34.28571,18"
+ id="path4739"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6319)"
+ d="m 659.71429,486.08094 37.71428,26"
+ id="path4741"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6461)"
+ d="m 699.42857,547.79523 -39.14286,0"
+ id="path4743"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5787)"
+ d="m 766,348.08094 31.42857,1.42857"
+ id="path4745"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5905)"
+ d="m 799.42857,379.2238 -31.42857,0"
+ id="path4747"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6041)"
+ d="m 767.42857,523.50951 32.85714,0"
+ id="path4749"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6171)"
+ d="m 803.71428,553.50952 -34.28571,-10e-6"
+ id="path4751"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5663-6)"
+ d="m 603.13388,100.33612 46.28571,0"
+ id="path4737-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5786)"
+ d="M 332.46712,323.19106 C 333.95667,200.23262 225.6988,294.05727 225.69551,167.62756"
+ id="path5778"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4849-0)"
+ d="m 296.92402,150.75332 33.13199,13.58958"
+ id="path4713-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4849-0-6)"
+ d="m 298.34489,131.32767 31.13199,-14.41043"
+ id="path4713-3-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10517)"
+ d="m 369.80215,191.89153 c -0.4245,62.70565 -6.10872,86.69137 35.37565,131.34014"
+ id="path10509"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker15913)"
+ d="m 525.36565,254.48038 c 23.79385,-23.59875 35.80283,-72.86224 34.38579,-122.10663"
+ id="path15905"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker19529)"
+ d="m 406.18795,118.1707 c 34.98079,25.29124 -1.59394,83.85895 33.51778,124.22846"
+ id="path20649"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5663-1)"
+ d="m -0.14272304,417.93813 38.28571304,0"
+ id="path4737-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6621-2)"
+ d="m 38.14299,458.79528 -36.2857117,0"
+ id="path4739-92"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5787-0)"
+ d="m 722.46751,104.52397 41.42857,-0.57143"
+ id="path4745-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Label-Host"
+ transform="translate(0,-396.85038)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="70.455467"
+ y="448.5798"
+ id="text4160"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4162"
+ x="70.455467"
+ y="448.5798">host</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="49.94928"
+ y="862.11847"
+ id="text4220"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4222"
+ x="49.94928"
+ y="862.11847">NIC</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer10"
+ inkscape:label="Label-VM"
+ transform="translate(0,17.716539)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="712.57147"
+ y="370.65237"
+ id="text4596"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4598"
+ x="712.57147"
+ y="370.65237">NIC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="710"
+ y="539.50952"
+ id="text4600"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4602"
+ x="710"
+ y="539.50952">NIC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="706.85712"
+ y="482.36667"
+ id="text4604"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4606"
+ x="706.85712"
+ y="482.36667">VM2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="705.42859"
+ y="314.93811"
+ id="text4608"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4610"
+ x="705.42859"
+ y="314.93811">VM1</tspan></text>
+ <rect
+ style="opacity:1;fill:#ffffaa;fill-opacity:1;stroke:#000000;stroke-width:1.21666873;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4552-1"
+ width="68.783356"
+ height="68.78334"
+ x="653.61139"
+ y="71.712051" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.12711251;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4591-7"
+ cx="559.27594"
+ cy="100.97913"
+ rx="43.936462"
+ ry="29.436449" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="668.5625"
+ y="114.33612"
+ id="text4596-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4598-6"
+ x="668.5625"
+ y="114.33612">NIC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="661.41962"
+ y="58.621857"
+ id="text4608-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4610-6"
+ x="661.41962"
+ y="58.621857">VM3</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="Label-Processes"
+ transform="translate(0,17.716539)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="146.94424"
+ y="260.51596"
+ id="text4208"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4210"
+ x="146.94424"
+ y="260.51596">spp_vf</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="812.28571"
+ y="369.50952"
+ id="text4614"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4616"
+ x="812.28571"
+ y="369.50952">App1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="812.28571"
+ y="546.08093"
+ id="text4618"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4620"
+ x="812.28571"
+ y="546.08093">App2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="778.27673"
+ y="113.19327"
+ id="text4614-1"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4616-8"
+ x="778.27673"
+ y="113.19327">Monitor</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="152.66794"
+ y="78.74424"
+ id="text4208-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4210-2"
+ x="152.66794"
+ y="78.74424">spp_mirror</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="Label-Threads"
+ transform="translate(0,17.716539)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="406.6297"
+ y="348.63785"
+ id="text4184"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4186"
+ x="406.6297"
+ y="348.63785">forwarder0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="404.60938"
+ y="421.36884"
+ id="text4188"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4190"
+ x="404.60938"
+ y="421.36884">forwarder1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="406.6297"
+ y="494.09982"
+ id="text4192"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4194"
+ x="406.6297"
+ y="494.09982">forwarder2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="408.64984"
+ y="562.79022"
+ id="text4196"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4198"
+ x="408.64984"
+ y="562.79022">forwarde3</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="160.98486"
+ y="494.12006"
+ id="text4200"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4202"
+ x="160.98486"
+ y="494.12006">merger0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="162.96454"
+ y="397.12512"
+ id="text4204"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4206"
+ x="162.96454"
+ y="397.12512">classifier</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="202.85202"
+ y="147.39758"
+ id="text4204-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4206-9"
+ x="202.85202"
+ y="147.39758">mirror</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="421.7359"
+ y="274.54684"
+ id="text4200-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4202-7"
+ x="421.7359"
+ y="274.54684">merger1</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer9"
+ inkscape:label="Label-Resources"
+ transform="translate(0,17.716539)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="299.62445"
+ y="490.98001"
+ id="text4561"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4563"
+ x="299.62445"
+ y="490.98001">ring:2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="300.80792"
+ y="418.14172"
+ id="text4565"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4567"
+ x="300.80792"
+ y="418.14172">ring:1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="301.57806"
+ y="561.12506"
+ id="text4569"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4571"
+ x="301.57806"
+ y="561.12506">ring:3</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="300.16257"
+ y="348.63779"
+ id="text4573"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4575"
+ x="300.16257"
+ y="348.63779">ring:0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="576.16406"
+ y="348.16635"
+ id="text4577"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4579"
+ x="576.16406"
+ y="348.16635">vhost:0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="576.25977"
+ y="406.18378"
+ id="text4581"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4583"
+ x="576.25977"
+ y="406.18378">vhost:1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="520.15509"
+ y="107.8501"
+ id="text4577-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4579-9"
+ x="520.15509"
+ y="107.8501">vhost:4</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="337.0242"
+ y="180.4696"
+ id="text4573-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4575-5"
+ x="337.0242"
+ y="180.4696">ring:5</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="338.73846"
+ y="117.04106"
+ id="text4573-7-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4575-5-5"
+ x="338.73846"
+ y="117.04106">ring:4</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="576.40454"
+ y="494.16687"
+ id="text4581-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4583-5"
+ x="576.40454"
+ y="494.16687">vhost:2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="578.40454"
+ y="556.16687"
+ id="text4581-7-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4583-5-5"
+ x="578.40454"
+ y="556.16687">vhost:3</tspan></text>
+ </g>
+</svg>
--
2.7.4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [spp] [PATCH 03/10] docs: add design for spp_mirror
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
2018-11-30 5:41 ` [spp] [PATCH 01/10] docs: add spp_mirror in overview section x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 02/10] docs: add overview image of spp_mirror x-fn-spp
@ 2018-11-30 5:41 ` x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 04/10] docs: add explanation of spp_mirror x-fn-spp
` (6 subsequent siblings)
9 siblings, 0 replies; 10+ messages in thread
From: x-fn-spp @ 2018-11-30 5:41 UTC (permalink / raw)
To: ferruh.yigit, ogawa.yasufumi; +Cc: spp
From: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Design section is for describing components and its mechanizm of
`spp_vf` and `spp_mirror`.
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Signed-off-by: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
---
docs/guides/images/spp_vf/spp_mirror_design.svg | 564 ++++++++++++++++++++++++
docs/guides/spp_vf/design.rst | 75 +++-
2 files changed, 623 insertions(+), 16 deletions(-)
create mode 100644 docs/guides/images/spp_vf/spp_mirror_design.svg
diff --git a/docs/guides/images/spp_vf/spp_mirror_design.svg b/docs/guides/images/spp_vf/spp_mirror_design.svg
new file mode 100644
index 0000000..bd1da65
--- /dev/null
+++ b/docs/guides/images/spp_vf/spp_mirror_design.svg
@@ -0,0 +1,564 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="154mm"
+ height="86mm"
+ viewBox="0 0 545.66913 304.72423"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="spp_mirror_design.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker19529"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path19531" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6787"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6789"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6319"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6321"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6041"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path6043" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5787"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5789"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5445"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5447"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5351"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5353"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5263"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5265"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5181"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5183"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5105"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5107"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5035"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5037"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4971"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4973"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4849"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4851" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4803"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4805" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4763"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4765" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4250"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5787-7"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5789-5"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4849-0"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4851-9" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4849-0-6"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4851-9-0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5787-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5789-2"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6787-3"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6789-6"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6787-3-5"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6789-6-3"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.7"
+ inkscape:cx="12.270417"
+ inkscape:cy="384.32605"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer11"
+ showgrid="false"
+ inkscape:window-width="1685"
+ inkscape:window-height="882"
+ inkscape:window-x="77"
+ inkscape:window-y="110"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Host"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-747.63807)"
+ style="display:inline">
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.06318593;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4136"
+ width="503.00601"
+ height="261.00519"
+ x="20.438236"
+ y="773.21747" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Processes"
+ transform="translate(0,-333.07105)"
+ style="display:inline">
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:1.28094244;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4174-2"
+ width="312.17203"
+ height="177.92828"
+ x="116.6697"
+ y="399.54535"
+ ry="16.659077" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="Threads"
+ transform="translate(0,-333.07105)"
+ style="display:inline">
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.08361697;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4534-6"
+ width="128.91644"
+ height="48.916393"
+ x="146.68469"
+ y="469.62271"
+ ry="24.458197" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="DPDK-Resources"
+ transform="translate(0,-333.07105)"
+ style="display:inline">
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:0.91584492;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4558-3"
+ cx="356.85724"
+ cy="459.50949"
+ rx="40.042091"
+ ry="19.54208" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:0.91584492;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4558-3-6"
+ cx="356.00006"
+ cy="534.36664"
+ rx="40.042099"
+ ry="19.542084" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer11"
+ inkscape:label="Path"
+ transform="translate(0,-333.07105)"
+ style="display:inline">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4849-0)"
+ d="m 272.92402,504.18185 43.13199,29.58958"
+ id="path4713-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4849-0-6)"
+ d="m 274.34489,484.7562 41.13199,-24.41043"
+ id="path4713-3-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6787)"
+ d="m 74.000005,492.93803 69.999995,0"
+ id="path3535"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.99999857,3.99999857;stroke-opacity:1;marker-end:url(#marker6787-3);stroke-dashoffset:0"
+ d="m 396.44989,459.5271 70.00001,0"
+ id="path3535-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6787-3-5)"
+ d="m 396.44991,535.24139 70.00002,0"
+ id="path3535-7-5"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Label-Host"
+ transform="translate(0,-747.63807)"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="46.455471"
+ y="806.00836"
+ id="text4160"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4162"
+ x="46.455471"
+ y="806.00836">host</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="Label-Processes"
+ transform="translate(0,-333.07105)"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="134.66794"
+ y="428.17276"
+ id="text4208-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4210-2"
+ x="134.66794"
+ y="428.17276">spp_mirror</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="Label-Threads"
+ transform="translate(0,-333.07105)"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="178.85202"
+ y="500.82611"
+ id="text4204-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4206-9"
+ x="178.85202"
+ y="500.82611">mirror</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer9"
+ inkscape:label="Label-Resources"
+ transform="translate(0,-333.07105)"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="325.0242"
+ y="541.89813"
+ id="text4573-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4575-5"
+ x="325.0242"
+ y="541.89813">ring:1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="326.73846"
+ y="466.4696"
+ id="text4573-7-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4575-5-5"
+ x="326.73846"
+ y="466.4696">ring:0</tspan></text>
+ </g>
+</svg>
diff --git a/docs/guides/spp_vf/design.rst b/docs/guides/spp_vf/design.rst
index fc9b014..8b9e7f3 100644
--- a/docs/guides/spp_vf/design.rst
+++ b/docs/guides/spp_vf/design.rst
@@ -6,8 +6,22 @@
Design
======
-Components
-----------
+.. _spp_vf_design_port:
+
+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.
+
+.. _spp_vf_design_spp_vf:
+
+spp_vf
+------
``spp_vf`` is a kind of secondary process and consists of several
threads called component.
@@ -15,23 +29,23 @@ There are three types of components, ``forwarder``,
``merger`` and ``classifier``.
.. figure:: ../images/spp_vf/spp_vf_overview.*
- :width: 70%
+ :width: 75%
SPP VF components
Forwarder
-~~~~~~~~~
+^^^^^^^^^
Simply forwards packets from rx to tx port.
Merger
-~~~~~~
+^^^^^^
Receives packets from multiple rx ports to aggregate
packets and sends to a desctination port.
Classifier
-~~~~~~~~~~
+^^^^^^^^^^
Sends packets to multiple tx ports based on entries of
MAC address and destination port in a classifier table.
@@ -43,15 +57,44 @@ 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.
+.. _spp_vf_design_spp_mirror:
-Ports
------
+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 :numref:`figure_spp_mirror_design`, incoming packets are duplicated with
+``mirror`` component and sent to original and additional destinations.
+
+.. _figure_spp_mirror_design:
+
+.. figure:: ../images/spp_vf/spp_mirror_design.*
+ :width: 45%
+
+ Spp_mirror component
+
+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.
-``spp_vf`` supports three types of PMDs, ``phy`` (Physical NIC),
-``ring`` (Ring PMD) and ``vhost`` (vhsot PMD).
-Using ``phy`` port, component can get incoming packets from outside host
-and transfer the packet to specific physical NIC.
-Using ``ring`` port, variety of combination of components can be
-configured.
-And through ``vhost`` port component can transfer packets from/to VMs.
-``port`` can also control vlan tagging and untagging.
+You should choose ``deepcopy`` if you use VLAN feature to make no change for
+original packet while copied packet is modified.
--
2.7.4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [spp] [PATCH 04/10] docs: add explanation of spp_mirror
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
` (2 preceding siblings ...)
2018-11-30 5:41 ` [spp] [PATCH 03/10] docs: add design for spp_mirror x-fn-spp
@ 2018-11-30 5:41 ` x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 05/10] docs: add setup guide for spp_mirror x-fn-spp
` (5 subsequent siblings)
9 siblings, 0 replies; 10+ messages in thread
From: x-fn-spp @ 2018-11-30 5:41 UTC (permalink / raw)
To: ferruh.yigit, ogawa.yasufumi; +Cc: spp
From: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Add explanation section of spp_mirror.
Signed-off-by: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
docs/guides/spp_vf/explain/functions.rst | 423 ------------------------
docs/guides/spp_vf/explain/functions_mirror.rst | 127 +++++++
docs/guides/spp_vf/explain/functions_vf.rst | 423 ++++++++++++++++++++++++
docs/guides/spp_vf/explain/index.rst | 3 +-
4 files changed, 552 insertions(+), 424 deletions(-)
delete mode 100644 docs/guides/spp_vf/explain/functions.rst
create mode 100644 docs/guides/spp_vf/explain/functions_mirror.rst
create mode 100644 docs/guides/spp_vf/explain/functions_vf.rst
diff --git a/docs/guides/spp_vf/explain/functions.rst b/docs/guides/spp_vf/explain/functions.rst
deleted file mode 100644
index 6fd3363..0000000
--- a/docs/guides/spp_vf/explain/functions.rst
+++ /dev/null
@@ -1,423 +0,0 @@
-.. SPDX-License-Identifier: BSD-3-Clause
- Copyright(c) 2010-2014 Intel Corporation
-
-.. _spp_vf_explain_functions:
-
-Explanation
-===========
-
-The following sections provide some explanation of the code.
-
-Initializing
-------------
-
-A manager thread of ``spp_vf`` initialize eal by ``rte_eal_init()``.
-Then each of component threads are launched by
-``rte_eal_remote_launch()``.
-
-
-.. code-block:: c
-
- /* spp_vf.c */
- int ret_dpdk = rte_eal_init(argc, argv);
-
- /* Start worker threads of classifier and forwarder */
- unsigned int lcore_id = 0;
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- rte_eal_remote_launch(slave_main, NULL, lcore_id);
- }
-
-
-Main function of slave thread
------------------------------
-
-``slave_main()`` is called from ``rte_eal_remote_launch()``.
-It call ``spp_classifier_mac_do()`` or ``spp_forward()`` depending
-on the component command setting.
-``spp_classifier_mac_do()`` provides function for classifier,
-and ``spp_forward()`` provides forwarder and merger.
-
-.. code-block:: c
-
- /* spp_vf.c */
- RTE_LOG(INFO, APP, "Core[%d] Start.\n", lcore_id);
- set_core_status(lcore_id, SPP_CORE_IDLE);
-
- while ((status = spp_get_core_status(lcore_id)) !=
- SPP_CORE_STOP_REQUEST) {
- if (status != SPP_CORE_FORWARD)
- continue;
-
- if (spp_check_core_index(lcore_id)) {
- /* Setting with the flush command trigger. */
- info->ref_index = (info->upd_index+1) %
- SPP_INFO_AREA_MAX;
- core = get_core_info(lcore_id);
- }
-
- for (cnt = 0; cnt < core->num; cnt++) {
- if (spp_get_component_type(lcore_id) ==
- SPP_COMPONENT_CLASSIFIER_MAC) {
- /* Classifier loops inside the function. */
- ret = spp_classifier_mac_do(core->id[cnt]);
- break;
- }
-
- /*
- * Forward / Merge returns at once.
- * It is for processing multiple components.
- */
- ret = spp_forward(core->id[cnt]);
- if (unlikely(ret != 0))
- break;
- }
- if (unlikely(ret != 0)) {
- RTE_LOG(ERR, APP,
- "Core[%d] Component Error. (id = %d)\n",
- lcore_id, core->id[cnt]);
- break;
- }
- }
-
- set_core_status(lcore_id, SPP_CORE_STOP);
- RTE_LOG(INFO, APP, "Core[%d] End.\n", lcore_id);
-
-Data structure of classifier table
-----------------------------------
-
-``spp_classifier_mac_do()`` lookup following data defined in
-``classifier_mac.c``,
-when it process the packets.
-Configuration of classifier is stored in the structure of
-``classified_data``, ``classifier_mac_info`` and
-``classifier_mac_mng_info``.
-The ``classified_data`` has member variables for expressing the port
-to be classified, ``classifier_mac_info`` has member variables
-for determining the direction of packets such as hash tables.
-Classifier manages two ``classifier_mac_info``, one is for updating by
-commands, the other is for looking up to process packets.
-Then the ``classifier_mac_mng_info`` has
-two(``NUM_CLASSIFIER_MAC_INFO``) ``classifier_mac_info``
-and index number for updating or reference.
-
-.. code-block:: c
-
- /* classifier_mac.c */
- /* classified data (destination port, target packets, etc) */
- struct classified_data {
- /* interface type (see "enum port_type") */
- enum port_type iface_type;
-
- /* index of ports handled by classifier */
- int iface_no;
-
- /* id for interface generated by spp_vf */
- int iface_no_global;
-
- /* port id generated by DPDK */
- uint16_t port;
-
- /* the number of packets in pkts[] */
- uint16_t num_pkt;
-
- /* packet array to be classified */
- struct rte_mbuf *pkts[MAX_PKT_BURST];
- };
-
- /* classifier information */
- struct classifier_mac_info {
- /* component name */
- char name[SPP_NAME_STR_LEN];
-
- /* hash table keeps classifier_table */
- struct rte_hash *classifier_table;
-
- /* number of valid classification */
- int num_active_classified;
-
- /* index of valid classification */
- int active_classifieds[RTE_MAX_ETHPORTS];
-
- /* index of default classification */
- int default_classified;
-
- /* number of transmission ports */
- int n_classified_data_tx;
-
- /* receive port handled by classifier */
- struct classified_data classified_data_rx;
-
- /* transmission ports handled by classifier */
- struct classified_data classified_data_tx[RTE_MAX_ETHPORTS];
- };
-
- /* classifier management information */
- struct classifier_mac_mng_info {
- /* classifier information */
- struct classifier_mac_info info[NUM_CLASSIFIER_MAC_INFO];
-
- /* Reference index number for classifier information */
- volatile int ref_index;
-
- /* Update index number for classifier information */
- volatile int upd_index;
- };
-
-
-Packet processing in classifier
--------------------------------
-
-In ``spp_classifier_mac_do()``, it receives packets from rx port and
-send them to destinations with ``classify_packet()``.
-``classifier_info`` is an argument of ``classify_packet()`` and is used
-to decide the destinations.
-
-.. code-block:: c
-
- /* classifier_mac.c */
- while (likely(spp_get_core_status(lcore_id) == SPP_CORE_FORWARD) &&
- likely(spp_check_core_index(lcore_id) == 0)) {
- /* change index of update side */
- change_update_index(classifier_mng_info, id);
-
- /* decide classifier information of the current cycle */
- classifier_info = classifier_mng_info->info +
- classifier_mng_info->ref_index;
- classified_data_rx = &classifier_info->classified_data_rx;
- classified_data_tx = classifier_info->classified_data_tx;
-
- /* drain tx packets, if buffer is not filled for interval */
- cur_tsc = rte_rdtsc();
- if (unlikely(cur_tsc - prev_tsc > drain_tsc)) {
- for (i = 0; i < classifier_info->n_classified_data_tx;
- i++) {
- if (likely(classified_data_tx[i].num_pkt == 0))
- continue;
-
- RTE_LOG(DEBUG, SPP_CLASSIFIER_MAC,
- "transmit packets (drain). "
- "index=%d, "
- "num_pkt=%hu, "
- "interval=%lu\n",
- i,
- classified_data_tx[i].num_pkt,
- cur_tsc - prev_tsc);
- transmit_packet(&classified_data_tx[i]);
- }
- prev_tsc = cur_tsc;
- }
-
- if (classified_data_rx->iface_type == UNDEF)
- continue;
-
- /* retrieve packets */
- n_rx = rte_eth_rx_burst(classified_data_rx->port, 0,
- rx_pkts, MAX_PKT_BURST);
- if (unlikely(n_rx == 0))
- continue;
-
- #ifdef SPP_RINGLATENCYSTATS_ENABLE
- if (classified_data_rx->iface_type == RING)
- spp_ringlatencystats_calculate_latency(
- classified_data_rx->iface_no,
- rx_pkts, n_rx);
- #endif
-
- /* classify and transmit (filled) */
- classify_packet(rx_pkts, n_rx, classifier_info,
- classified_data_tx);
- }
-
-Classifying the packets
------------------------
-
-``classify_packet()`` uses hash function of DPDK to determine
-destination.
-Hash has MAC address as Key, it retrieves destination information
-from destination MAC address in the packet.
-
-.. code-block:: c
-
- for (i = 0; i < n_rx; i++) {
- eth = rte_pktmbuf_mtod(rx_pkts[i], struct ether_hdr *);
-
- /* find in table (by destination mac address)*/
- ret = rte_hash_lookup_data(classifier_info->classifier_table,
- (const void *)ð->d_addr, &lookup_data);
- if (ret < 0) {
- /* L2 multicast(include broadcast) ? */
- if (unlikely(is_multicast_ether_addr(ð->d_addr))) {
- RTE_LOG(DEBUG, SPP_CLASSIFIER_MAC,
- "multicast mac address.\n");
- handle_l2multicast_packet(rx_pkts[i],
- classifier_info,
- classified_data);
- continue;
- }
-
- /* if no default, drop packet */
- if (unlikely(classifier_info->default_classified ==
- -1)) {
- ether_format_addr(mac_addr_str,
- sizeof(mac_addr_str),
- ð->d_addr);
- RTE_LOG(ERR, SPP_CLASSIFIER_MAC,
- "unknown mac address. "
- "ret=%d, mac_addr=%s\n",
- ret, mac_addr_str);
- rte_pktmbuf_free(rx_pkts[i]);
- continue;
- }
-
- /* to default classified */
- RTE_LOG(DEBUG, SPP_CLASSIFIER_MAC,
- "to default classified.\n");
- lookup_data = (void *)(long)classifier_info->
- default_classified;
- }
-
- /*
- * set mbuf pointer to tx buffer
- * and transmit packet, if buffer is filled
- */
- push_packet(rx_pkts[i], classified_data + (long)lookup_data);
- }
-
-
-Packet processing in forwarder and merger
------------------------------------------
-
-Configuration data for forwarder and merger is stored as structured
-tables ``forward_rxtx``, ``forward_path`` and ``forward_info``.
-The ``forward_rxtx`` has two member variables for expressing the port
-to be sent(tx) and to be receive(rx),
-``forward_path`` has member variables for expressing the data path.
-Like ``classifier_mac_info``, ``forward_info`` has two tables,
-one is for updating by commands, the other is for looking up to process
-packets.
-
-
-.. code-block:: c
-
- /* spp_forward.c */
- /* A set of port info of rx and tx */
- struct forward_rxtx {
- struct spp_port_info rx; /* rx port */
- struct spp_port_info tx; /* tx port */
- };
-
- /* Information on the path used for forward. */
- struct forward_path {
- char name[SPP_NAME_STR_LEN]; /* component name */
- volatile enum spp_component_type type;
- /* component type */
- int num; /* number of receive ports */
- struct forward_rxtx ports[RTE_MAX_ETHPORTS];
- /* port used for transfer */
- };
-
- /* Information for forward. */
- struct forward_info {
- volatile int ref_index; /* index to reference area */
- volatile int upd_index; /* index to update area */
- struct forward_path path[SPP_INFO_AREA_MAX];
- /* Information of data path */
- };
-
-
-Forward and merge the packets
------------------------------
-
-``spp_forward()`` defined in ``spp_forward.c`` is a main function
-for both forwarder and merger.
-``spp_forward()`` simply passes packet received from rx port to
-tx port of the pair.
-
-.. code-block:: c
-
- /* spp_forward.c */
- for (cnt = 0; cnt < num; cnt++) {
- rx = &path->ports[cnt].rx;
- tx = &path->ports[cnt].tx;
-
- /* Receive packets */
- nb_rx = rte_eth_rx_burst(
- rx->dpdk_port, 0, bufs, MAX_PKT_BURST);
- if (unlikely(nb_rx == 0))
- continue;
-
- #ifdef SPP_RINGLATENCYSTATS_ENABLE
- if (rx->iface_type == RING)
- spp_ringlatencystats_calculate_latency(
- rx->iface_no,
- bufs, nb_rx);
-
- if (tx->iface_type == RING)
- spp_ringlatencystats_add_time_stamp(
- tx->iface_no,
- bufs, nb_rx);
- #endif /* SPP_RINGLATENCYSTATS_ENABLE */
-
- /* Send packets */
- if (tx->dpdk_port >= 0)
- nb_tx = rte_eth_tx_burst(
- tx->dpdk_port, 0, bufs, nb_rx);
-
- /* Discard remained packets to release mbuf */
- if (unlikely(nb_tx < nb_rx)) {
- for (buf = nb_tx; buf < nb_rx; buf++)
- rte_pktmbuf_free(bufs[buf]);
- }
- }
-
-
-L2 Multicast Support
---------------------
-
-SPP_VF also supports multicast for resolving ARP requests.
-It is implemented as ``handle_l2multicast_packet()`` and called from
-``classify_packet()`` for incoming multicast packets.
-
-.. code-block:: c
-
- /* classify_packet() in classifier_mac.c */
- /* L2 multicast(include broadcast) ? */
- if (unlikely(is_multicast_ether_addr(ð->d_addr))) {
- RTE_LOG(DEBUG, SPP_CLASSIFIER_MAC,
- "multicast mac address.\n");
- handle_l2multicast_packet(rx_pkts[i],
- classifier_info,
- classified_data);
- continue;
- }
-
-For distributing multicast packet, it is cloned with
-``rte_mbuf_refcnt_update()``.
-
-.. code-block:: c
-
- /* classifier_mac.c */
- /* handle L2 multicast(include broadcast) packet */
- static inline void
- handle_l2multicast_packet(struct rte_mbuf *pkt,
- struct classifier_mac_info *classifier_info,
- struct classified_data *classified_data)
- {
- int i;
-
- if (unlikely(classifier_info->num_active_classified == 0)) {
- RTE_LOG(ERR,
- SPP_CLASSIFIER_MAC,
- "No mac address.(l2 multicast packet)\n");
- rte_pktmbuf_free(pkt);
- return;
- }
-
- rte_mbuf_refcnt_update(pkt,
- (classifier_info->num_active_classified - 1));
-
- for (i = 0; i < classifier_info->num_active_classified; i++) {
- push_packet(pkt, classified_data +
- (long)classifier_info->active_classifieds[i]);
- }
- }
diff --git a/docs/guides/spp_vf/explain/functions_mirror.rst b/docs/guides/spp_vf/explain/functions_mirror.rst
new file mode 100644
index 0000000..bb4548e
--- /dev/null
+++ b/docs/guides/spp_vf/explain/functions_mirror.rst
@@ -0,0 +1,127 @@
+.. SPDX-License-Identifier: BSD-3-Clause
+ Copyright(c) 2018 Nippon Telegraph and Telephone Corporation
+
+.. _spp_vf_explain_spp_mirror:
+
+spp_mirror
+==========
+
+Initializing
+------------
+
+A main thread of ``spp_mirror`` initialize eal by ``rte_eal_init()``.
+Then each of worker threads is launched from ``rte_eal_remote_launch()``
+by giving a function ``slave_main()`` for forwarding.
+
+.. code-block:: c
+
+ /* spp_mirror.c */
+ int ret_dpdk = rte_eal_init(argc, argv);
+
+ /* Start worker threads of classifier and forwarder */
+ unsigned int lcore_id = 0;
+ RTE_LCORE_FOREACH_SLAVE(lcore_id) {
+ rte_eal_remote_launch(slave_main, NULL, lcore_id);
+ }
+
+
+Main function of slave thread
+-----------------------------
+
+In ``slave_main()``, it calls ``mirror_proc()`` in which packet processing for
+duplicating is defined after finding a core on which running the duplicating.
+
+.. code-block:: c
+
+ RTE_LOG(INFO, MIRROR, "Core[%d] Start.\n", lcore_id);
+ set_core_status(lcore_id, SPP_CORE_IDLE);
+
+ while ((status = spp_get_core_status(lcore_id)) !=
+ SPP_CORE_STOP_REQUEST) {
+ if (status != SPP_CORE_FORWARD)
+ continue;
+
+ if (spp_check_core_index(lcore_id)) {
+ /* Setting with the flush command trigger. */
+ info->ref_index = (info->upd_index+1) %
+ SPP_INFO_AREA_MAX;
+ core = get_core_info(lcore_id);
+ }
+
+ for (cnt = 0; cnt < core->num; cnt++) {
+ /*
+ * mirror returns at once.
+ * It is for processing multiple components.
+ */
+ ret = mirror_proc(core->id[cnt]);
+ if (unlikely(ret != 0))
+ break;
+ }
+ if (unlikely(ret != 0)) {
+ RTE_LOG(ERR, MIRROR,
+ "Core[%d] Component Error. (id = %d)\n",
+ lcore_id, core->id[cnt]);
+ break;
+ }
+ }
+
+ set_core_status(lcore_id, SPP_CORE_STOP);
+ RTE_LOG(INFO, MIRROR, "Core[%d] End.\n", lcore_id);
+
+Packet mirroring
+----------------
+
+In ``mirror_proc()``, it receives packets from rx port.
+
+.. code-block:: c
+
+ /* Receive packets */
+ nb_rx = spp_eth_rx_burst(rx->dpdk_port, 0, bufs, MAX_PKT_BURST);
+
+Each of received packet is copied with ``rte_pktmbuf_clone()`` if you use
+``shallowcopy`` defined as default in Makefile.
+If you use ``deepcopy``, several mbuf objects are allocated for copying.
+
+.. code-block:: c
+
+ for (cnt = 0; cnt < nb_rx; cnt++) {
+ org_mbuf = bufs[cnt];
+ rte_prefetch0(rte_pktmbuf_mtod(org_mbuf, void *));
+ #ifdef SPP_MIRROR_SHALLOWCOPY
+ /* Shallow Copy */
+ copybufs[cnt] = rte_pktmbuf_clone(org_mbuf,
+ g_mirror_pool);
+
+ #else
+ struct rte_mbuf *mirror_mbuf = NULL;
+ struct rte_mbuf **mirror_mbufs = &mirror_mbuf;
+ struct rte_mbuf *copy_mbuf = NULL;
+ /* Deep Copy */
+ do {
+ copy_mbuf = rte_pktmbuf_alloc(g_mirror_pool);
+ if (unlikely(copy_mbuf == NULL)) {
+ rte_pktmbuf_free(mirror_mbuf);
+ mirror_mbuf = NULL;
+ RTE_LOG(INFO, MIRROR,
+ "copy mbuf alloc NG!\n");
+ break;
+ }
+
+ copy_mbuf->data_off = org_mbuf->data_off;
+ ...
+ copy_mbuf->packet_type = org_mbuf->packet_type;
+
+ rte_memcpy(rte_pktmbuf_mtod(copy_mbuf, char *),
+ rte_pktmbuf_mtod(org_mbuf, char *),
+ org_mbuf->data_len);
+
+ *mirror_mbufs = copy_mbuf;
+ mirror_mbufs = ©_mbuf->next;
+ } while ((org_mbuf = org_mbuf->next) != NULL);
+ copybufs[cnt] = mirror_mbuf;
+
+ #endif /* SPP_MIRROR_SHALLOWCOPY */
+ }
+ if (cnt != 0)
+ nb_tx2 = spp_eth_tx_burst(tx->dpdk_port, 0,
+ copybufs, cnt);
diff --git a/docs/guides/spp_vf/explain/functions_vf.rst b/docs/guides/spp_vf/explain/functions_vf.rst
new file mode 100644
index 0000000..c915655
--- /dev/null
+++ b/docs/guides/spp_vf/explain/functions_vf.rst
@@ -0,0 +1,423 @@
+.. SPDX-License-Identifier: BSD-3-Clause
+ Copyright(c) 2010-2014 Intel Corporation
+
+.. _spp_vf_explain_spp_vf:
+
+spp_vf
+======
+
+The following sections provide some explanation of the code.
+
+Initializing
+------------
+
+A manager thread of ``spp_vf`` initialize eal by ``rte_eal_init()``.
+Then each of component threads are launched by
+``rte_eal_remote_launch()``.
+
+
+.. code-block:: c
+
+ /* spp_vf.c */
+ int ret_dpdk = rte_eal_init(argc, argv);
+
+ /* Start worker threads of classifier and forwarder */
+ unsigned int lcore_id = 0;
+ RTE_LCORE_FOREACH_SLAVE(lcore_id) {
+ rte_eal_remote_launch(slave_main, NULL, lcore_id);
+ }
+
+
+Main function of slave thread
+-----------------------------
+
+``slave_main()`` is called from ``rte_eal_remote_launch()``.
+It call ``spp_classifier_mac_do()`` or ``spp_forward()`` depending
+on the component command setting.
+``spp_classifier_mac_do()`` provides function for classifier,
+and ``spp_forward()`` provides forwarder and merger.
+
+.. code-block:: c
+
+ /* spp_vf.c */
+ RTE_LOG(INFO, APP, "Core[%d] Start.\n", lcore_id);
+ set_core_status(lcore_id, SPP_CORE_IDLE);
+
+ while ((status = spp_get_core_status(lcore_id)) !=
+ SPP_CORE_STOP_REQUEST) {
+ if (status != SPP_CORE_FORWARD)
+ continue;
+
+ if (spp_check_core_index(lcore_id)) {
+ /* Setting with the flush command trigger. */
+ info->ref_index = (info->upd_index+1) %
+ SPP_INFO_AREA_MAX;
+ core = get_core_info(lcore_id);
+ }
+
+ for (cnt = 0; cnt < core->num; cnt++) {
+ if (spp_get_component_type(lcore_id) ==
+ SPP_COMPONENT_CLASSIFIER_MAC) {
+ /* Classifier loops inside the function. */
+ ret = spp_classifier_mac_do(core->id[cnt]);
+ break;
+ }
+
+ /*
+ * Forward / Merge returns at once.
+ * It is for processing multiple components.
+ */
+ ret = spp_forward(core->id[cnt]);
+ if (unlikely(ret != 0))
+ break;
+ }
+ if (unlikely(ret != 0)) {
+ RTE_LOG(ERR, APP,
+ "Core[%d] Component Error. (id = %d)\n",
+ lcore_id, core->id[cnt]);
+ break;
+ }
+ }
+
+ set_core_status(lcore_id, SPP_CORE_STOP);
+ RTE_LOG(INFO, APP, "Core[%d] End.\n", lcore_id);
+
+Data structure of classifier table
+----------------------------------
+
+``spp_classifier_mac_do()`` lookup following data defined in
+``classifier_mac.c``,
+when it process the packets.
+Configuration of classifier is stored in the structure of
+``classified_data``, ``classifier_mac_info`` and
+``classifier_mac_mng_info``.
+The ``classified_data`` has member variables for expressing the port
+to be classified, ``classifier_mac_info`` has member variables
+for determining the direction of packets such as hash tables.
+Classifier manages two ``classifier_mac_info``, one is for updating by
+commands, the other is for looking up to process packets.
+Then the ``classifier_mac_mng_info`` has
+two(``NUM_CLASSIFIER_MAC_INFO``) ``classifier_mac_info``
+and index number for updating or reference.
+
+.. code-block:: c
+
+ /* classifier_mac.c */
+ /* classified data (destination port, target packets, etc) */
+ struct classified_data {
+ /* interface type (see "enum port_type") */
+ enum port_type iface_type;
+
+ /* index of ports handled by classifier */
+ int iface_no;
+
+ /* id for interface generated by spp_vf */
+ int iface_no_global;
+
+ /* port id generated by DPDK */
+ uint16_t port;
+
+ /* the number of packets in pkts[] */
+ uint16_t num_pkt;
+
+ /* packet array to be classified */
+ struct rte_mbuf *pkts[MAX_PKT_BURST];
+ };
+
+ /* classifier information */
+ struct classifier_mac_info {
+ /* component name */
+ char name[SPP_NAME_STR_LEN];
+
+ /* hash table keeps classifier_table */
+ struct rte_hash *classifier_table;
+
+ /* number of valid classification */
+ int num_active_classified;
+
+ /* index of valid classification */
+ int active_classifieds[RTE_MAX_ETHPORTS];
+
+ /* index of default classification */
+ int default_classified;
+
+ /* number of transmission ports */
+ int n_classified_data_tx;
+
+ /* receive port handled by classifier */
+ struct classified_data classified_data_rx;
+
+ /* transmission ports handled by classifier */
+ struct classified_data classified_data_tx[RTE_MAX_ETHPORTS];
+ };
+
+ /* classifier management information */
+ struct classifier_mac_mng_info {
+ /* classifier information */
+ struct classifier_mac_info info[NUM_CLASSIFIER_MAC_INFO];
+
+ /* Reference index number for classifier information */
+ volatile int ref_index;
+
+ /* Update index number for classifier information */
+ volatile int upd_index;
+ };
+
+
+Packet processing in classifier
+-------------------------------
+
+In ``spp_classifier_mac_do()``, it receives packets from rx port and
+send them to destinations with ``classify_packet()``.
+``classifier_info`` is an argument of ``classify_packet()`` and is used
+to decide the destinations.
+
+.. code-block:: c
+
+ /* classifier_mac.c */
+ while (likely(spp_get_core_status(lcore_id) == SPP_CORE_FORWARD) &&
+ likely(spp_check_core_index(lcore_id) == 0)) {
+ /* change index of update side */
+ change_update_index(classifier_mng_info, id);
+
+ /* decide classifier information of the current cycle */
+ classifier_info = classifier_mng_info->info +
+ classifier_mng_info->ref_index;
+ classified_data_rx = &classifier_info->classified_data_rx;
+ classified_data_tx = classifier_info->classified_data_tx;
+
+ /* drain tx packets, if buffer is not filled for interval */
+ cur_tsc = rte_rdtsc();
+ if (unlikely(cur_tsc - prev_tsc > drain_tsc)) {
+ for (i = 0; i < classifier_info->n_classified_data_tx;
+ i++) {
+ if (likely(classified_data_tx[i].num_pkt == 0))
+ continue;
+
+ RTE_LOG(DEBUG, SPP_CLASSIFIER_MAC,
+ "transmit packets (drain). "
+ "index=%d, "
+ "num_pkt=%hu, "
+ "interval=%lu\n",
+ i,
+ classified_data_tx[i].num_pkt,
+ cur_tsc - prev_tsc);
+ transmit_packet(&classified_data_tx[i]);
+ }
+ prev_tsc = cur_tsc;
+ }
+
+ if (classified_data_rx->iface_type == UNDEF)
+ continue;
+
+ /* retrieve packets */
+ n_rx = rte_eth_rx_burst(classified_data_rx->port, 0,
+ rx_pkts, MAX_PKT_BURST);
+ if (unlikely(n_rx == 0))
+ continue;
+
+ #ifdef SPP_RINGLATENCYSTATS_ENABLE
+ if (classified_data_rx->iface_type == RING)
+ spp_ringlatencystats_calculate_latency(
+ classified_data_rx->iface_no,
+ rx_pkts, n_rx);
+ #endif
+
+ /* classify and transmit (filled) */
+ classify_packet(rx_pkts, n_rx, classifier_info,
+ classified_data_tx);
+ }
+
+Classifying the packets
+-----------------------
+
+``classify_packet()`` uses hash function of DPDK to determine
+destination.
+Hash has MAC address as Key, it retrieves destination information
+from destination MAC address in the packet.
+
+.. code-block:: c
+
+ for (i = 0; i < n_rx; i++) {
+ eth = rte_pktmbuf_mtod(rx_pkts[i], struct ether_hdr *);
+
+ /* find in table (by destination mac address)*/
+ ret = rte_hash_lookup_data(classifier_info->classifier_table,
+ (const void *)ð->d_addr, &lookup_data);
+ if (ret < 0) {
+ /* L2 multicast(include broadcast) ? */
+ if (unlikely(is_multicast_ether_addr(ð->d_addr))) {
+ RTE_LOG(DEBUG, SPP_CLASSIFIER_MAC,
+ "multicast mac address.\n");
+ handle_l2multicast_packet(rx_pkts[i],
+ classifier_info,
+ classified_data);
+ continue;
+ }
+
+ /* if no default, drop packet */
+ if (unlikely(classifier_info->default_classified ==
+ -1)) {
+ ether_format_addr(mac_addr_str,
+ sizeof(mac_addr_str),
+ ð->d_addr);
+ RTE_LOG(ERR, SPP_CLASSIFIER_MAC,
+ "unknown mac address. "
+ "ret=%d, mac_addr=%s\n",
+ ret, mac_addr_str);
+ rte_pktmbuf_free(rx_pkts[i]);
+ continue;
+ }
+
+ /* to default classified */
+ RTE_LOG(DEBUG, SPP_CLASSIFIER_MAC,
+ "to default classified.\n");
+ lookup_data = (void *)(long)classifier_info->
+ default_classified;
+ }
+
+ /*
+ * set mbuf pointer to tx buffer
+ * and transmit packet, if buffer is filled
+ */
+ push_packet(rx_pkts[i], classified_data + (long)lookup_data);
+ }
+
+
+Packet processing in forwarder and merger
+-----------------------------------------
+
+Configuration data for forwarder and merger is stored as structured
+tables ``forward_rxtx``, ``forward_path`` and ``forward_info``.
+The ``forward_rxtx`` has two member variables for expressing the port
+to be sent(tx) and to be receive(rx),
+``forward_path`` has member variables for expressing the data path.
+Like ``classifier_mac_info``, ``forward_info`` has two tables,
+one is for updating by commands, the other is for looking up to process
+packets.
+
+
+.. code-block:: c
+
+ /* spp_forward.c */
+ /* A set of port info of rx and tx */
+ struct forward_rxtx {
+ struct spp_port_info rx; /* rx port */
+ struct spp_port_info tx; /* tx port */
+ };
+
+ /* Information on the path used for forward. */
+ struct forward_path {
+ char name[SPP_NAME_STR_LEN]; /* component name */
+ volatile enum spp_component_type type;
+ /* component type */
+ int num; /* number of receive ports */
+ struct forward_rxtx ports[RTE_MAX_ETHPORTS];
+ /* port used for transfer */
+ };
+
+ /* Information for forward. */
+ struct forward_info {
+ volatile int ref_index; /* index to reference area */
+ volatile int upd_index; /* index to update area */
+ struct forward_path path[SPP_INFO_AREA_MAX];
+ /* Information of data path */
+ };
+
+
+Forward and merge the packets
+-----------------------------
+
+``spp_forward()`` defined in ``spp_forward.c`` is a main function
+for both forwarder and merger.
+``spp_forward()`` simply passes packet received from rx port to
+tx port of the pair.
+
+.. code-block:: c
+
+ /* spp_forward.c */
+ for (cnt = 0; cnt < num; cnt++) {
+ rx = &path->ports[cnt].rx;
+ tx = &path->ports[cnt].tx;
+
+ /* Receive packets */
+ nb_rx = rte_eth_rx_burst(
+ rx->dpdk_port, 0, bufs, MAX_PKT_BURST);
+ if (unlikely(nb_rx == 0))
+ continue;
+
+ #ifdef SPP_RINGLATENCYSTATS_ENABLE
+ if (rx->iface_type == RING)
+ spp_ringlatencystats_calculate_latency(
+ rx->iface_no,
+ bufs, nb_rx);
+
+ if (tx->iface_type == RING)
+ spp_ringlatencystats_add_time_stamp(
+ tx->iface_no,
+ bufs, nb_rx);
+ #endif /* SPP_RINGLATENCYSTATS_ENABLE */
+
+ /* Send packets */
+ if (tx->dpdk_port >= 0)
+ nb_tx = rte_eth_tx_burst(
+ tx->dpdk_port, 0, bufs, nb_rx);
+
+ /* Discard remained packets to release mbuf */
+ if (unlikely(nb_tx < nb_rx)) {
+ for (buf = nb_tx; buf < nb_rx; buf++)
+ rte_pktmbuf_free(bufs[buf]);
+ }
+ }
+
+
+L2 Multicast Support
+--------------------
+
+SPP_VF also supports multicast for resolving ARP requests.
+It is implemented as ``handle_l2multicast_packet()`` and called from
+``classify_packet()`` for incoming multicast packets.
+
+.. code-block:: c
+
+ /* classify_packet() in classifier_mac.c */
+ /* L2 multicast(include broadcast) ? */
+ if (unlikely(is_multicast_ether_addr(ð->d_addr))) {
+ RTE_LOG(DEBUG, SPP_CLASSIFIER_MAC,
+ "multicast mac address.\n");
+ handle_l2multicast_packet(rx_pkts[i],
+ classifier_info,
+ classified_data);
+ continue;
+ }
+
+For distributing multicast packet, it is cloned with
+``rte_mbuf_refcnt_update()``.
+
+.. code-block:: c
+
+ /* classifier_mac.c */
+ /* handle L2 multicast(include broadcast) packet */
+ static inline void
+ handle_l2multicast_packet(struct rte_mbuf *pkt,
+ struct classifier_mac_info *classifier_info,
+ struct classified_data *classified_data)
+ {
+ int i;
+
+ if (unlikely(classifier_info->num_active_classified == 0)) {
+ RTE_LOG(ERR,
+ SPP_CLASSIFIER_MAC,
+ "No mac address.(l2 multicast packet)\n");
+ rte_pktmbuf_free(pkt);
+ return;
+ }
+
+ rte_mbuf_refcnt_update(pkt,
+ (classifier_info->num_active_classified - 1));
+
+ for (i = 0; i < classifier_info->num_active_classified; i++) {
+ push_packet(pkt, classified_data +
+ (long)classifier_info->active_classifieds[i]);
+ }
+ }
diff --git a/docs/guides/spp_vf/explain/index.rst b/docs/guides/spp_vf/explain/index.rst
index 44f2341..3f56936 100644
--- a/docs/guides/spp_vf/explain/index.rst
+++ b/docs/guides/spp_vf/explain/index.rst
@@ -7,4 +7,5 @@ Explanation
.. toctree::
:maxdepth: 2
- functions
+ functions_vf
+ functions_mirror
--
2.7.4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [spp] [PATCH 05/10] docs: add setup guide for spp_mirror
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
` (3 preceding siblings ...)
2018-11-30 5:41 ` [spp] [PATCH 04/10] docs: add explanation of spp_mirror x-fn-spp
@ 2018-11-30 5:41 ` x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 06/10] docs: add how to use " x-fn-spp
` (4 subsequent siblings)
9 siblings, 0 replies; 10+ messages in thread
From: x-fn-spp @ 2018-11-30 5:41 UTC (permalink / raw)
To: ferruh.yigit, ogawa.yasufumi; +Cc: spp
From: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Add setup guide for spp_mirror in `Getting Started` section.
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Signed-off-by: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
---
docs/guides/spp_vf/gsg/build.rst | 68 ++++++++++++++++++++++++++++++++++------
1 file changed, 59 insertions(+), 9 deletions(-)
diff --git a/docs/guides/spp_vf/gsg/build.rst b/docs/guides/spp_vf/gsg/build.rst
index 7247699..656a388 100644
--- a/docs/guides/spp_vf/gsg/build.rst
+++ b/docs/guides/spp_vf/gsg/build.rst
@@ -6,12 +6,22 @@
Setup
=====
+This section describes how to setup ``spp_vf`` and ``spp_mirror``.
+
+
Environment
-----------
+Here is a recommended versions of each of software.
+
* Ubuntu 16.04
-* qemu-kvm 2.7 or later(if you use vhost reconnect feature described in 3.2.3)
-* DPDK v17.11 or later
+* qemu-kvm 2.7 or later
+
+.. note::
+
+ If you do not use ``--vhost-client`` described in
+ :ref:`How to Use<spp_vf_gsg_howto_use_spp_mirror>`
+ , you can use previous versions of qemu-kvm.
Edit Config
@@ -26,7 +36,8 @@ Uncomment user and group in ``/etc/libvirt/qemu.conf``.
user = "root"
group = "root"
-Change ``KVM_HUGEPAGES`` from 0 to 1 in ``/etc/default/qemu-kvm``.
+To use hugepages with libvirt, change ``KVM_HUGEPAGES`` from 0 to 1
+in ``/etc/default/qemu-kvm``.
.. code-block:: console
@@ -34,13 +45,24 @@ Change ``KVM_HUGEPAGES`` from 0 to 1 in ``/etc/default/qemu-kvm``.
KVM_HUGEPAGES=1
-Change grub config for hugepages and isolcpus.
+Change grub configuration for hugepages and isolcpus features. It is defined
+as ``GRUB_CMDLINE_LINUX_DEFAULT`` and takes parameters.
+
+* isolcpus: Core IDs separated with commna, such as ``2,3,4,8``
+* hugepagesz: The size of hugepage, such as ``2M`` or ``1G``
+* hugepages: The number of hugepages, such as ``8``
+* default_hugepagesz: Default hugepage size, required only for ``1G``
+
+In this setup guide, configure ``hugepagez`` and its default is ``1G`` and
+the number of hugepages is ``36``.
+Core IDs of for ``isolcpus`` depends on your environment and usecase,
+but should be configured to have enough number of cores.
.. code-block:: c
# /etc/default/grub
- GRUB_CMDLINE_LINUX_DEFAULT="isolcpus=2,...,46 hugepagesz=1G hugepages=36 default_hugepagesz=1G"
+ GRUB_CMDLINE_LINUX_DEFAULT="isolcpus=2,...,46 hugepagesz=1G hugepages=..."
For hugepages, isolcpus, refer to the dpdk documentation below.
@@ -129,17 +151,20 @@ Load igb_uio module.
igb_uio 16384 0 # igb_uio is loaded
uio 20480 1 igb_uio
-Then, bind it with PCI_Number.
+Then, bind your devices with PCI number by using ``dpdk-devbind.py``.
+PCI number is inspected
.. code-block:: console
- $ $RTE_SDK/usertools/dpdk-devbind.py --status
# check your device for PCI_Number
+ $ $RTE_SDK/usertools/dpdk-devbind.py --status
+
+ $ sudo $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio PCI_NUM
- $ sudo $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio [PCI_Number]
virsh setup
-----------
+
First of all, please check version of qemu-kvm.
.. code-block:: console
@@ -151,7 +176,8 @@ then please install qemu following
the instruction of https://wiki.qemu.org/index.php/Hosts/Linux
to install qemu 2.7.
You may need to install libvirt-bin,
-virtinst, bridge-utils packages via ``apt-get`` install to run ``virt-install``.
+virtinst, bridge-utils packages via ``apt-get`` install to run
+``virt-install``.
``virsh`` is a command line interface that can be used to create, destroy,
@@ -297,6 +323,30 @@ using Secondary command.
</domain>
+Setup spp_mirror
+----------------
+
+Setup of ``spp_mirror`` is almost the same as :ref:`SPP VF<spp_vf_gsg_build>`.
+Configuration of use of ``shallowcopy`` or ``deepcopy`` is different from
+``spp_vf``.
+It is defined in ``src/mirror/Makefile`` and which of copying is used is
+configured by editing ``CFLAG`` option. It is defined to use ``shallowcopy``
+by default.
+
+If you use ``deepcopy``, comment out the line of ``-Dspp_mirror_SHALLOWCOPY``
+to be disabled.
+
+.. code-block:: c
+
+ #CFLAGS += -Dspp_mirror_SHALLOWCOPY
+
+Then, run make command to compile ``spp_mirror``.
+
+.. code-block:: console
+
+ $ make
+
+
Trouble Shooting Guide
----------------------
--
2.7.4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [spp] [PATCH 06/10] docs: add how to use guide for spp_mirror
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
` (4 preceding siblings ...)
2018-11-30 5:41 ` [spp] [PATCH 05/10] docs: add setup guide for spp_mirror x-fn-spp
@ 2018-11-30 5:41 ` x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 07/10] docs: add usecase of spp_mirror x-fn-spp
` (3 subsequent siblings)
9 siblings, 0 replies; 10+ messages in thread
From: x-fn-spp @ 2018-11-30 5:41 UTC (permalink / raw)
To: ferruh.yigit, ogawa.yasufumi; +Cc: spp
From: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Add how to use guide for spp_mirror in `Getting Started`.
Signed-off-by: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
docs/guides/spp_vf/gsg/howto_use.rst | 59 ++++++++++++++++++++++--------------
1 file changed, 36 insertions(+), 23 deletions(-)
diff --git a/docs/guides/spp_vf/gsg/howto_use.rst b/docs/guides/spp_vf/gsg/howto_use.rst
index 715fd8b..52a9c54 100644
--- a/docs/guides/spp_vf/gsg/howto_use.rst
+++ b/docs/guides/spp_vf/gsg/howto_use.rst
@@ -23,7 +23,7 @@ SPP primary allocates and manages resources for secondary processes.
You need to run SPP primary before secondary processes.
SPP primary has two kinds of options for DPDK and spp.
-Before ``--`` are for DPDK is, and after ``--`` are for spp.
+Before ``--`` are for DPDK is, and after it are for spp.
See `Running a Sample Application
<http://dpdk.org/doc/guides/linux_gsg/build_sample_apps.html#running-a-sample-application>`_
@@ -40,23 +40,23 @@ Then, spp primary can be launched like this.
.. code-block:: console
$ sudo ./src/primary/x86_64-native-linuxapp-gcc/spp_primary \
- -c 0x02 -n 4 --socket-mem 512,512 \
+ -l 1 -n 4 --socket-mem 512,512 \
--huge-dir=/run/hugepages/kvm \
--proc-type=primary \
- -- -p 0x03 -n 9 -s 127.0.0.1:5555
+ -- \
+ -p 0x03 -n 9 -s 127.0.0.1:5555
-SPP Secondary
--------------
+spp_vf
+------
-spp secondary processes(``spp_vf``) can be launched with two kinds of
-options, like primary process.
+``spp_vf`` can be launched with two kinds of options, like primary process.
Like primary process, ``spp_vf`` has two kinds of options. One is for
DPDK, the other is ``spp_vf``.
``spp_vf`` specific options are:
- * --client-id: client id
+ * --client-id: client id which can be seen as secondary ID from spp.py
* -s: IPv4 address and port for spp secondary
* --vhost-client: vhost-user client enable setting
@@ -65,8 +65,9 @@ DPDK, the other is ``spp_vf``.
.. code-block:: console
$ sudo ./src/vf/x86_64-native-linuxapp-gcc/spp_vf \
- -c 0x3ffd -n 4 --proc-type=secondary \
- -- --client-id 1 -s 127.0.0.1:6666 --vhost-client
+ -l 0,2-13 -n 4 --proc-type=secondary \
+ -- \
+ --client-id 1 -s 127.0.0.1:6666 --vhost-client
If ``--vhost-client`` option is specified, then ``vhost-user`` act as
the client, otherwise the server.
@@ -75,35 +76,47 @@ used. This reconnect features requires QEMU 2.7 (or later).
See also `Vhost Sample Application
<http://dpdk.org/doc/guides/sample_app_ug/vhost.html>`_.
+
+.. _spp_vf_gsg_howto_use_spp_mirror:
+
+spp_mirror
+----------
+
+``spp_mirror`` takes the same options as ``spp_vf``. Here is an example.
+
+.. code-block:: console
+
+ $ sudo ./src/mirror/x86_64-native-linuxapp-gcc/spp_mirror \
+ -l 2 -n 4 --proc-type=secondary \
+ -- \
+ --client-id 1 -s 127.0.0.1:6666 --vhost-client
+
VM
--
-Launch VMs with ``virsh`` command.
+VM is launched with ``virsh`` command.
.. code-block:: console
$ virsh start [VM]
+It is required to add network configuration for processes running on the VMs.
+If this configuration is skipped, processes cannot communicate with others
+via SPP.
-Additional Network Configurations
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To enable processes running on the VM to communicate through spp,
-it is required additional network configurations on host and guest VMs.
-
-(1) Guest VMs
+On the VMs, add an interface and disable offload.
.. code-block:: console
- # Interface for vhost
+ # Add interface
$ sudo ifconfig [IF_NAME] inet [IP_ADDR] netmask [NETMASK] up
- # Disable offload for vhost interface
+ # Disable offload
$ sudo ethtool -K [IF_NAME] tx off
-(2) Host2
+On host machine, it is also required to disable offload.
.. code-block:: console
- # Disable offload for VM interface
- $ ethtool -K [IF_NAME] tx off
+ # Disable offload for VM
+ $ sudo ethtool -K [IF_NAME] tx off
--
2.7.4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [spp] [PATCH 07/10] docs: add usecase of spp_mirror
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
` (5 preceding siblings ...)
2018-11-30 5:41 ` [spp] [PATCH 06/10] docs: add how to use " x-fn-spp
@ 2018-11-30 5:41 ` x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 08/10] docs: add usecase images " x-fn-spp
` (2 subsequent siblings)
9 siblings, 0 replies; 10+ messages in thread
From: x-fn-spp @ 2018-11-30 5:41 UTC (permalink / raw)
To: ferruh.yigit, ogawa.yasufumi; +Cc: spp
From: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Add usecase section of spp_mirror.
Signed-off-by: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Signed-off-by: Ogawa Yasufumi <ogawa.yasufumi@lab.ntt.co.jp>
---
docs/guides/spp_vf/use_cases/index.rst | 1 +
docs/guides/spp_vf/use_cases/usecase2.rst | 266 ++++++++++++++++++++++++++++++
2 files changed, 267 insertions(+)
create mode 100644 docs/guides/spp_vf/use_cases/usecase2.rst
diff --git a/docs/guides/spp_vf/use_cases/index.rst b/docs/guides/spp_vf/use_cases/index.rst
index 7f07b89..67e8616 100644
--- a/docs/guides/spp_vf/use_cases/index.rst
+++ b/docs/guides/spp_vf/use_cases/index.rst
@@ -8,3 +8,4 @@ Use Cases
:maxdepth: 2
usecase1
+ usecase2
diff --git a/docs/guides/spp_vf/use_cases/usecase2.rst b/docs/guides/spp_vf/use_cases/usecase2.rst
new file mode 100644
index 0000000..1025284
--- /dev/null
+++ b/docs/guides/spp_vf/use_cases/usecase2.rst
@@ -0,0 +1,266 @@
+..
+ SPDX-License-Identifier: BSD-3-Clause
+ Copyright(c) 2018 Nippon Telegraph and Telephone Corporation
+
+
+.. _spp_mirror_use_cases_usecase1:
+
+Mirroring packet from a VM
+==========================
+
+This section describes a usage for mirroring from a VM to other VM through
+spp_mirror. Traffic from host2 is forwarded to each VM inside host1 thorough
+spp_vf. spp_vf is required to forward traffic from host NIC to each VM.
+
+In this usecase, spp-ctl should be started first. And then primary process
+should be started with -n 16 like following because for giving enough number
+of rings.
+
+Move to spp directory.
+
+.. code-block:: console
+
+ $cd /path/to/spp
+
+Start spp-ctl using python3.
+
+.. code-block:: console
+
+ $ python3 ./src/spp-ctl/spp-ctl
+
+Start spp_primary with core id 1.
+
+.. code-block:: console
+
+ # Type the following in different terminal
+ $ sudo ./src/primary/x86_64-native-linuxapp-gcc/spp_primary \
+ -l 1 -n 4 \
+ --socket-mem 512,512 \
+ --huge-dir=/run/hugepages/kvm \
+ --proc-type=primary \
+ -- \
+ -p 0x03 -n 16 -s 127.0.0.1:5555
+
+.. _figure_simple_mirroring:
+
+.. figure:: ../../images/spp_vf/spp_mirror_usecase1_overview.*
+ :width: 90%
+
+ Mirroring from a VM
+
+VM for spp_vf
+-------------
+
+The first step is creating VM1 for running ``spp_vf``.
+A process of ``spp_vf`` is started with core list ``0,2-14`` in this usecase.
+
+Start spp_vf with core list 0,2-14.
+
+.. code-block:: console
+
+ $ sudo ./src/vf/x86_64-native-linuxapp-gcc/spp_vf \
+ -l 0,2-14 -n 4 --proc-type=secondary \
+ -- \
+ --client-id 1 \
+ -s 127.0.0.1:6666 \
+ --vhost-client
+
+Start components for spp_vf.
+
+.. code-block:: console
+
+ # start components
+ spp > vf 1; component start classifier 2 classifier_mac
+ spp > vf 1; component start merger 3 merge
+ spp > vf 1; component start forwarder1 4 forward
+ spp > vf 1; component start forwarder2 5 forward
+ spp > vf 1; component start forwarder3 6 forward
+ spp > vf 1; component start forwarder4 7 forward
+
+Add ports for started components.
+
+.. code-block:: console
+
+ # add ports
+ spp > vf 1; port add phy:0 rx classifier
+ spp > vf 1; port add phy:0 tx merger
+ spp > vf 1; port add ring:0 tx classifier
+ spp > vf 1; port add ring:1 tx classifier
+ spp > vf 1; port add ring:0 rx forwarder1
+ spp > vf 1; port add ring:1 rx forwarder2
+ spp > vf 1; port add ring:2 rx merger
+ spp > vf 1; port add ring:3 rx merger
+ spp > vf 1; port add ring:2 tx forwarder3
+ spp > vf 1; port add ring:3 tx forwarder4
+ spp > vf 1; port add vhost:0 tx forwarder1
+ spp > vf 1; port add vhost:1 rx forwarder3
+ spp > vf 1; port add vhost:2 tx forwarder2
+ spp > vf 1; port add vhost:3 rx forwarder4
+
+Add classifier table entries.
+
+.. code-block:: console
+
+ # add classifier table entry
+ spp > vf 1; classifier_table add mac 52:54:00:12:34:56 ring:0
+ spp > vf 1; classifier_table add mac 52:54:00:12:34:58 ring:1
+
+
+To capture incoming packets on VM1, use tcpdump for the interface, ``ens4``
+in this case.
+
+.. code-block:: console
+
+ # capture on ens4 of VM1
+ $ tcpdump -i ens4
+
+You send packets from the remote host1 and confirm packets are received.
+
+.. code-block:: console
+
+ # spp-vm1 via NIC0 from host1
+ $ ping 192.168.140.21
+
+
+Mirroring with spp_mirror
+-------------------------
+
+The second step is starting with creating VM running with spp_mirror.
+
+Network Configuration
+^^^^^^^^^^^^^^^^^^^^^
+
+Incoming packets from NIC are forwarded to VM1 through spp_vf.
+
+Detailed configuration of :numref:`figure_simple_mirroring` is
+described below. There are two NICs on the host to send and receive packets.
+During that path, mirror component mirror1 replicates packet to merger3.
+
+.. _figure_network_config:
+
+ .. figure:: ../../images/spp_vf/spp_mirror_usecase1_nwconfig1.*
+ :width: 110%
+
+ Network Configuration
+
+Launch spp_mirror
+^^^^^^^^^^^^^^^^^
+Change directory to spp and confirm that it is already compiled.
+
+.. code-block:: console
+
+ $ cd /path/to/spp
+
+Run secondary process ``spp_mirror``.
+
+.. code-block:: console
+
+ $ sudo ./src/mirror/x86_64-native-linuxapp-gcc/app/spp_mirror \
+ -l 0,15 -n 4 --proc-type=secondary \
+ -- \
+ --client-id 2 \
+ -s 127.0.0.1:6666 \
+ --vhost-client
+
+
+.. note::
+ For SPP secondary processes, client id given with ``--client-id`` option
+ should not be overlapped each otherand. It is also the same for core list
+ ``-l``.
+
+Start mirror component with core id 15.
+
+.. code-block:: console
+
+ # Start component of spp_mirror on coreID 15
+ spp > sec 2;component start mirror1 15 mirror
+
+Add ring:0 as rx ports and add ring:8 and ring:9 as tx port to mirror.
+
+.. code-block:: console
+
+ # mirror1
+ spp > mirror 2;port add ring:0 rx mirror1
+ spp > mirror 2;port add ring:8 tx mirror1
+ spp > mirror 2;port add ring:9 tx mirror1
+
+Start merger3 with core id 14.
+
+.. code-block:: console
+
+ # Start component of spp_vf on coreID 14
+ spp > vf 1;component start merger3 14 forward
+
+Add ring:9 as rx port of merger3 and vhost:4 as tx port of merger3.
+
+.. code-block:: console
+
+ # merger3
+ spp > vf 1;port add ring:9 rx merger3
+ spp > vf 1;port add vhost:4 tx merger3
+
+Delete ring:0 as rx port of forwarder1 and ring:8 as rx port of forwarder1.
+
+.. code-block:: console
+
+ # forward1
+ spp > vf 1;port del ring:0 rx forwarder1
+ spp > vf 1;port add ring:8 rx forwarder1
+
+
+Receive packet on VM3
+^^^^^^^^^^^^^^^^^^^^^
+
+You can capture incoming packets on VM3.
+If you capture packet on VM1, the same packet would be captured.
+
+.. code-block:: console
+
+ # capture on ens4 fo VM1 and VM3
+ $ tcpdump -i ens4
+
+Now, you can send packet from the remote host1.
+
+.. code-block:: console
+
+ # spp-vm1 via NIC0 from host1
+ $ ping 192.168.140.21
+
+
+Stop Mirroring
+^^^^^^^^^^^^^^
+
+Firstly, delete ports for components.
+
+Delete ports for components.
+
+.. code-block:: console
+
+ # Delete port for mirror1
+ spp > mirror 2;port del ring:0 rx mirror1
+ spp > mirror 2;port del ring:8 tx mirror1
+ spp > mirror 2;port del ring:9 tx mirror1
+
+ # Delete port for merger3
+ spp > vf 1;port del ring:9 rx merger3
+ spp > vf 1;port del vhost:4 tx merger3
+
+ # Delete port for forwarder1
+ spp > vf 1;port del ring:8 rx forwarder1
+
+Next, stop components.
+
+.. code-block:: console
+
+ # Stop mirror
+ spp > mirror 2;component stop mirror1 15 mirror
+
+ # Stop merger
+ spp > vf 1;component stop merger3 14 forward
+
+Add port from classifier_mac1 to VM1.
+
+.. code-block:: console
+
+ # Add port from classifier_mac1 to VM1.
+ spp > vf 1;port add ring:0 rx forwarder1
--
2.7.4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [spp] [PATCH 08/10] docs: add usecase images of spp_mirror
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
` (6 preceding siblings ...)
2018-11-30 5:41 ` [spp] [PATCH 07/10] docs: add usecase of spp_mirror x-fn-spp
@ 2018-11-30 5:41 ` x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 09/10] docs: add label for usecase to be referred x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 10/10] docs: refactor primary commands section x-fn-spp
9 siblings, 0 replies; 10+ messages in thread
From: x-fn-spp @ 2018-11-30 5:41 UTC (permalink / raw)
To: ferruh.yigit, ogawa.yasufumi; +Cc: spp
From: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Add usecase images of spp_mirror.
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Signed-off-by: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
---
.../images/spp_vf/spp_mirror_usecase_nwconfig.svg | 1434 ++++++++++++++++++++
.../images/spp_vf/spp_mirror_usecase_overview.svg | 544 ++++++++
docs/guides/spp_vf/use_cases/usecase2.rst | 14 +-
3 files changed, 1985 insertions(+), 7 deletions(-)
create mode 100644 docs/guides/images/spp_vf/spp_mirror_usecase_nwconfig.svg
create mode 100644 docs/guides/images/spp_vf/spp_mirror_usecase_overview.svg
diff --git a/docs/guides/images/spp_vf/spp_mirror_usecase_nwconfig.svg b/docs/guides/images/spp_vf/spp_mirror_usecase_nwconfig.svg
new file mode 100644
index 0000000..94f91fb
--- /dev/null
+++ b/docs/guides/images/spp_vf/spp_mirror_usecase_nwconfig.svg
@@ -0,0 +1,1434 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="264mm"
+ height="200mm"
+ viewBox="0 0 935.43323 708.66147"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="spp_mirror_usecase2_nwconfig1.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker19529"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path19531" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker15913"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path15915"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker10517"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path10519"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker5786"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path5788" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6787"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6789"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6621"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path6623" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6461"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path6463"
+ style="fill:#006400;fill-opacity:1;fill-rule:evenodd;stroke:#006400;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6319"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6321"
+ style="fill:#006400;fill-opacity:1;fill-rule:evenodd;stroke:#006400;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6171"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#006400;fill-opacity:1;fill-rule:evenodd;stroke:#006400;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path6173" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6041"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#006400;fill-opacity:1;fill-rule:evenodd;stroke:#006400;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path6043" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5905"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path5907"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5787"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5789"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker5663"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path5665" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5545"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path5547"
+ style="fill:#006400;fill-opacity:1;fill-rule:evenodd;stroke:#006400;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5445"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5447"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5351"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5353"
+ style="fill:#006400;fill-opacity:1;fill-rule:evenodd;stroke:#006400;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5263"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5265"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5181"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5183"
+ style="fill:#006400;fill-opacity:1;fill-rule:evenodd;stroke:#006400;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5105"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5107"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5035"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5037"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4971"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4973"
+ style="fill:#006400;fill-opacity:1;fill-rule:evenodd;stroke:#006400;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4901"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#006400;fill-opacity:1;fill-rule:evenodd;stroke:#006400;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4903" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4849"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4851" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4803"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#006400;fill-opacity:1;fill-rule:evenodd;stroke:#006400;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4805" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4763"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4765" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4673"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path4675"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4633"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4635" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4250"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5787-7"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5789-5"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker5663-6"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path5665-2" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4849-0"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4851-9" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4849-0-6"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4851-9-0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6621-2"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path6623-6" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker5663-1"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path5665-8" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5787-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5789-2"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.7"
+ inkscape:cx="289.78162"
+ inkscape:cy="384.32605"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer11"
+ showgrid="false"
+ inkscape:window-width="1685"
+ inkscape:window-height="882"
+ inkscape:window-x="184"
+ inkscape:window-y="109"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Host"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-343.70073)">
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.25549436;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4136"
+ width="874.6709"
+ height="675.52728"
+ x="39.034393"
+ y="361.24222" />
+ <rect
+ style="opacity:1;fill:#ffffaa;fill-opacity:1;stroke:#000000;stroke-width:0.88310295;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4218"
+ width="59.116898"
+ height="79.116898"
+ x="39.646317"
+ y="785.69037" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer12"
+ inkscape:label="Network"
+ transform="translate(0,70.866159)" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer8"
+ inkscape:label="VM"
+ transform="translate(0,70.866159)">
+ <rect
+ style="opacity:1;fill:#eafdff;fill-opacity:1;stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4548"
+ width="194.82837"
+ height="138.99298"
+ x="697.48883"
+ y="256.62894"
+ ry="0" />
+ <rect
+ style="opacity:1;fill:#eafdff;fill-opacity:1;stroke:#000000;stroke-width:1.06098545;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4550"
+ width="194.80276"
+ height="138.96742"
+ x="698.70312"
+ y="422.84845" />
+ <rect
+ style="opacity:1;fill:#ffffaa;fill-opacity:1;stroke:#000000;stroke-width:1.21666884;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4552"
+ width="68.78334"
+ height="68.78334"
+ x="697.62036"
+ y="298.59973" />
+ <rect
+ style="opacity:1;fill:#ffffaa;fill-opacity:1;stroke:#000000;stroke-width:1.17093265;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4554"
+ width="68.829086"
+ height="68.829079"
+ x="698.90717"
+ y="464.48553" />
+ <rect
+ style="opacity:1;fill:#eafdff;fill-opacity:1;stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4548-9"
+ width="239.11613"
+ height="138.85497"
+ x="653.53564"
+ y="-21.632214"
+ ry="0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Processes"
+ transform="translate(0,70.866159)">
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4174"
+ width="411.38098"
+ height="425.86972"
+ x="131.25598"
+ y="175.83272"
+ ry="24.712727" />
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:0.86535329;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4556"
+ width="78.088539"
+ height="63.050102"
+ x="798.37872"
+ y="302.40717"
+ ry="31.525051" />
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:1.28600001;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4612"
+ width="77.14286"
+ height="54.285713"
+ x="800.28571"
+ y="477.50952"
+ ry="27.142857" />
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:1.02278769;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4556-2"
+ width="109.3597"
+ height="62.892681"
+ x="764.44849"
+ y="24.169632"
+ ry="31.446341" />
+ <rect
+ style="opacity:1;fill:#ffefde;fill-opacity:1;stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4174-2"
+ width="332.19119"
+ height="162.23318"
+ x="130.66011"
+ y="-5.8927774"
+ ry="15.189577" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="Threads"
+ transform="translate(0,70.866159)">
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.08361697;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4534"
+ width="128.91641"
+ height="48.916386"
+ x="144.74155"
+ y="312.53329"
+ ry="24.458193" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.18673563;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4536"
+ width="128.81329"
+ height="48.813263"
+ x="140.73215"
+ y="457.6001"
+ ry="24.406631" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.11390722;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4538"
+ width="128.88611"
+ height="48.921562"
+ x="400.50293"
+ y="264.24387"
+ ry="22.773815" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.40811193;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4540"
+ width="128.5798"
+ height="48.638973"
+ x="400.65607"
+ y="335.75711"
+ ry="24.319487" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.19797981;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4542"
+ width="128.79857"
+ height="48.840809"
+ x="400.54669"
+ y="453.0282"
+ ry="24.420404" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.163082;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4544"
+ width="128.83492"
+ height="48.874329"
+ x="400.5285"
+ y="524.38336"
+ ry="24.437164" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.08361697;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4534-6"
+ width="128.91644"
+ height="48.916393"
+ x="170.68469"
+ y="64.194183"
+ ry="24.458197" />
+ <rect
+ style="opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:1.11390722;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4538-1"
+ width="128.88614"
+ height="48.92157"
+ x="400.02924"
+ y="190.73033"
+ ry="22.773819" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="DPDK-Resources"
+ transform="translate(0,70.866159)">
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:0.91584492;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4558"
+ cx="331.75546"
+ cy="289.86963"
+ rx="40.042084"
+ ry="19.542076" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.38332129;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4585"
+ cx="331.75562"
+ cy="361.12515"
+ rx="39.808346"
+ ry="19.308342" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.34181738;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4587"
+ cx="331.75562"
+ cy="478.38062"
+ rx="39.829098"
+ ry="19.329096" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.18107522;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4589"
+ cx="331.75562"
+ cy="549.63617"
+ rx="39.90947"
+ ry="19.409466" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.14589095;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4591"
+ cx="616.78491"
+ cy="289.2955"
+ rx="45.427063"
+ ry="29.427061" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.02260172;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4593"
+ cx="617.35687"
+ cy="480.43823"
+ rx="45.488708"
+ ry="29.488705" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:0.91584492;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4558-3"
+ cx="368.85724"
+ cy="58.080948"
+ rx="40.042091"
+ ry="19.54208" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:0.91584492;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4558-3-6"
+ cx="368.00006"
+ cy="120.93811"
+ rx="40.042099"
+ ry="19.542084" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.14589036;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4591-3"
+ cx="620.07153"
+ cy="356.08099"
+ rx="45.427063"
+ ry="29.427067" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.02260172;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4593-5"
+ cx="617.14294"
+ cy="546.93817"
+ rx="45.488716"
+ ry="29.48871" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer11"
+ inkscape:label="Path"
+ transform="translate(0,70.866159)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4673)"
+ d="m 97.999997,388.65237 47.428573,-46"
+ id="path4623"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4633)"
+ d="M 143.71429,466.9381 99.999997,428.36666"
+ id="path4625"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4849)"
+ d="m 266.85714,321.2238 30,-22.85714"
+ id="path4713"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#006400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4803)"
+ d="m 269.71429,346.93808 22.85714,11.42858"
+ id="path4715"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#006400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5351)"
+ d="m 371.71429,361.2238 28.57142,0"
+ id="path4719"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5263)"
+ d="m 398.85714,477.2238 -27.14285,0"
+ id="path4721"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#006400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5181)"
+ d="m 400.28571,547.50951 -28,1.42858"
+ id="path4723"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4763)"
+ d="m 291.14286,478.65237 -22.85715,1.42857"
+ id="path4725"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#006400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4901)"
+ d="m 291.14286,545.79523 -30,-42.85714"
+ id="path4727"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5105)"
+ d="m 529.42857,289.50951 40.85714,-0.28571"
+ id="path4729"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#006400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4971)"
+ d="m 524.57143,372.65237 54,90"
+ id="path4731"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5035)"
+ d="m 586.57143,375.79523 -62.85714,88.28571"
+ id="path4733"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#006400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5545)"
+ d="M 571.14286,548.08094 530,548.93809"
+ id="path4735"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5663)"
+ d="m 661.14286,288.65237 36.28571,28"
+ id="path4737"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6621)"
+ d="m 697.42857,355.50952 -32.28571,0"
+ id="path4739"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#006400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6319)"
+ d="m 663.71429,480.08094 33.71428,0"
+ id="path4741"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#006400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6461)"
+ d="m 699.42857,515.79523 -37.14286,28.00001"
+ id="path4743"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5787)"
+ d="m 766,318.08094 31.42857,1.42857"
+ id="path4745"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5905)"
+ d="m 799.42857,349.2238 -31.42857,0"
+ id="path4747"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#006400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6041)"
+ d="m 767.42857,491.50951 32.85714,0"
+ id="path4749"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#006400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6171)"
+ d="m 803.71428,521.50952 -34.28571,-10e-6"
+ id="path4751"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5663-6)"
+ d="m 603.13388,48.336112 46.28571,0"
+ id="path4737-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5786)"
+ d="M 332.46712,271.19106 C 333.95667,148.23262 225.6988,242.05727 225.69551,115.62756"
+ id="path5778"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4849-0)"
+ d="m 296.92402,98.75332 33.13199,13.58958"
+ id="path4713-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4849-0-6)"
+ d="M 298.34489,79.327665 329.47688,64.917234"
+ id="path4713-3-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10517)"
+ d="m 369.80215,139.89153 c -0.4245,62.70565 -6.10872,86.69137 35.37565,131.34014"
+ id="path10509"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker15913)"
+ d="M 525.36565,202.48038 C 549.1595,178.88163 561.16848,139.61814 559.75144,90.37375"
+ id="path15905"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker19529)"
+ d="m 406.18795,66.170694 c 34.98079,25.291246 -1.59394,83.858956 33.51778,124.228466"
+ id="path20649"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5663-1)"
+ d="m -0.14272304,389.93813 38.28571304,0"
+ id="path4737-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6621-2)"
+ d="m 38.14299,430.79528 -36.2857117,0"
+ id="path4739-92"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5787-0)"
+ d="m 722.46751,52.523962 41.42857,-0.57143"
+ id="path4745-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Label-Host"
+ transform="translate(0,-343.70073)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="70.455467"
+ y="396.5798"
+ id="text4160"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4162"
+ x="70.455467"
+ y="396.5798">host</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="49.94928"
+ y="834.11847"
+ id="text4220"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4222"
+ x="49.94928"
+ y="834.11847">NIC</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer10"
+ inkscape:label="Label-VM"
+ transform="translate(0,70.866159)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="712.57147"
+ y="340.65237"
+ id="text4596"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4598"
+ x="712.57147"
+ y="340.65237">NIC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="710"
+ y="507.50952"
+ id="text4600"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4602"
+ x="710"
+ y="507.50952">NIC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="706.85712"
+ y="450.36667"
+ id="text4604"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4606"
+ x="706.85712"
+ y="450.36667">VM2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="705.42859"
+ y="284.93811"
+ id="text4608"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4610"
+ x="705.42859"
+ y="284.93811">VM1</tspan></text>
+ <rect
+ style="opacity:1;fill:#ffffaa;fill-opacity:1;stroke:#000000;stroke-width:1.21666873;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4552-1"
+ width="68.783356"
+ height="68.78334"
+ x="653.61139"
+ y="19.712051" />
+ <ellipse
+ style="opacity:1;fill:#ecffe7;fill-opacity:1;stroke:#000000;stroke-width:1.30184615;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4591-7"
+ cx="559.27594"
+ cy="48.979134"
+ rx="43.849094"
+ ry="39.349083" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="668.5625"
+ y="62.336121"
+ id="text4596-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4598-6"
+ x="668.5625"
+ y="62.336121">NIC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="661.41962"
+ y="6.6218543"
+ id="text4608-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4610-6"
+ x="661.41962"
+ y="6.6218543">VM3</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="Label-Processes"
+ transform="translate(0,70.866159)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="146.94424"
+ y="208.51596"
+ id="text4208"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4210"
+ x="146.94424"
+ y="208.51596">spp_vf</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="812.28571"
+ y="339.50952"
+ id="text4614"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4616"
+ x="812.28571"
+ y="339.50952">App1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="812.28571"
+ y="510.08093"
+ id="text4618"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4620"
+ x="812.28571"
+ y="510.08093">App2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="778.27673"
+ y="61.193268"
+ id="text4614-1"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4616-8"
+ x="778.27673"
+ y="61.193268">Monitor</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="152.66794"
+ y="26.74424"
+ id="text4208-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4210-2"
+ x="152.66794"
+ y="26.74424">spp_mirror</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="Label-Threads"
+ transform="translate(0,70.866159)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="406.6297"
+ y="296.63785"
+ id="text4184"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4186"
+ x="406.6297"
+ y="296.63785">forwarder1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="404.60938"
+ y="369.36884"
+ id="text4188"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4190"
+ x="404.60938"
+ y="369.36884">forwarder2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="406.6297"
+ y="488.09982"
+ id="text4192"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4194"
+ x="406.6297"
+ y="488.09982">forwarder3</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="408.64984"
+ y="556.79022"
+ id="text4196"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4198"
+ x="408.64984"
+ y="556.79022">forwarde4</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="160.98486"
+ y="488.12006"
+ id="text4200"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4202"
+ x="160.98486"
+ y="488.12006">merger1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="162.96454"
+ y="345.12512"
+ id="text4204"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4206"
+ x="162.96454"
+ y="345.12512">classifier</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="196.85202"
+ y="95.397583"
+ id="text4204-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4206-9"
+ x="196.85202"
+ y="95.397583">mirror1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="421.7359"
+ y="222.54684"
+ id="text4200-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4202-7"
+ x="421.7359"
+ y="222.54684">merger3</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer9"
+ inkscape:label="Label-Resources"
+ transform="translate(0,70.866159)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="299.62445"
+ y="484.98001"
+ id="text4561"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4563"
+ x="299.62445"
+ y="484.98001">ring:2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="300.80792"
+ y="366.14172"
+ id="text4565"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4567"
+ x="300.80792"
+ y="366.14172">ring:1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="301.57806"
+ y="555.12506"
+ id="text4569"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4571"
+ x="301.57806"
+ y="555.12506">ring:3</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="300.16257"
+ y="296.63779"
+ id="text4573"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4575"
+ x="300.16257"
+ y="296.63779">ring:0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="578.16406"
+ y="296.16635"
+ id="text4577"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4579"
+ x="578.16406"
+ y="296.16635">vhost:0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="576.25977"
+ y="490.18378"
+ id="text4581"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4583"
+ x="576.25977"
+ y="490.18378">vhost:2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="520.15509"
+ y="55.850098"
+ id="text4577-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4579-9"
+ x="520.15509"
+ y="55.850098">vhost:4</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="337.0242"
+ y="128.4696"
+ id="text4573-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4575-5"
+ x="337.0242"
+ y="128.4696">ring:8</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="338.73846"
+ y="65.041061"
+ id="text4573-7-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4575-5-5"
+ x="338.73846"
+ y="65.041061">ring:9</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="581.09735"
+ y="363.30969"
+ id="text4577-6"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4579-7"
+ x="581.09735"
+ y="363.30969">vhost:1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.50000381px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="578.01495"
+ y="553.59552"
+ id="text4581-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4583-5"
+ x="578.01495"
+ y="553.59552">vhost:3</tspan></text>
+ </g>
+</svg>
diff --git a/docs/guides/images/spp_vf/spp_mirror_usecase_overview.svg b/docs/guides/images/spp_vf/spp_mirror_usecase_overview.svg
new file mode 100644
index 0000000..3906cd1
--- /dev/null
+++ b/docs/guides/images/spp_vf/spp_mirror_usecase_overview.svg
@@ -0,0 +1,544 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="172mm"
+ height="104mm"
+ viewBox="0 0 609.44882 368.50399"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="usecase1_overview (コピー).svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4262"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4662"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4664"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4622"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4624"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4588"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4590"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4548"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend"
+ inkscape:collect="always">
+ <path
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4550"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4526"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lend">
+ <path
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path4528"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path4265"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4622-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4624-6"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4622-2"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4624-0"
+ style="fill:#0000c8;fill-opacity:1;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.98994949"
+ inkscape:cx="364.79757"
+ inkscape:cy="196.5388"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer6"
+ showgrid="false"
+ inkscape:window-width="1401"
+ inkscape:window-height="882"
+ inkscape:window-x="452"
+ inkscape:window-y="181"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Host"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-683.85821)">
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.66468322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4136"
+ width="151.67819"
+ height="346.62863"
+ x="13.194297"
+ y="694.57269" />
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.63558829;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4138"
+ width="373.99527"
+ height="343.63477"
+ x="218.30658"
+ y="694.98578" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="VM"
+ transform="translate(0,-21.259834)">
+ <rect
+ style="opacity:1;fill:#e6ffff;fill-opacity:1;stroke:#000000;stroke-width:0.87898606;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4162"
+ width="149.12114"
+ height="79.121017"
+ x="425.33398"
+ y="165.41057" />
+ <rect
+ style="opacity:1;fill:#e6ffff;fill-opacity:1;stroke:#000000;stroke-width:0.89249599;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4164"
+ width="149.1071"
+ height="79.107506"
+ x="425.95496"
+ y="283.41559" />
+ <rect
+ style="opacity:1;fill:#e6ffff;fill-opacity:1;stroke:#000000;stroke-width:0.87898606;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4162-5"
+ width="149.12114"
+ height="79.121017"
+ x="425.24158"
+ y="54.106747" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Processes"
+ transform="translate(0,-21.259834)">
+ <rect
+ style="opacity:1;fill:#ffe8cb;fill-opacity:1;stroke:#000000;stroke-width:0.75997615;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="74.435692"
+ height="38.313862"
+ x="59.827698"
+ y="222.64328"
+ ry="18.67634" />
+ <rect
+ style="opacity:1;fill:#ffe8cb;fill-opacity:1;stroke:#000000;stroke-width:0.83416969;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173-3"
+ width="79.165833"
+ height="34.165829"
+ x="455.1554"
+ y="198.39693"
+ ry="15.768847" />
+ <rect
+ style="opacity:1;fill:#ffe8cb;fill-opacity:1;stroke:#000000;stroke-width:0.83416969;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173-3-7"
+ width="79.165833"
+ height="34.165829"
+ x="456.46289"
+ y="314.75189"
+ ry="15.768847" />
+ <rect
+ style="opacity:1;fill:#ffe8cb;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173-3-2"
+ width="147.3983"
+ height="139.77394"
+ x="247.87198"
+ y="188.47574"
+ ry="17.033894" />
+ <rect
+ style="opacity:1;fill:#ffe8cb;fill-opacity:1;stroke:#000000;stroke-width:0.79608738;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173-3-2-2"
+ width="147.60222"
+ height="88.460075"
+ x="247.4274"
+ y="79.196106"
+ ry="14.821013" />
+ <rect
+ style="opacity:1;fill:#ffe8cb;fill-opacity:1;stroke:#000000;stroke-width:0.87498325;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173-3-8"
+ width="87.206238"
+ height="34.125015"
+ x="454.4021"
+ y="86.848404"
+ ry="15.75001" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="Threads"
+ transform="translate(0,67.32284)">
+ <rect
+ style="display:inline;opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:0.84642595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4534-6"
+ width="103.89982"
+ height="37.031754"
+ x="271.70889"
+ y="132.60431"
+ ry="18.515877" />
+ <rect
+ style="display:inline;opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:0.84642595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4534-6-6"
+ width="103.89982"
+ height="37.031754"
+ x="270.97403"
+ y="192.95959"
+ ry="18.515877" />
+ <rect
+ style="display:inline;opacity:1;fill:#fffdc4;fill-opacity:1;stroke:#000000;stroke-width:0.76994014;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4534-6-6-9"
+ width="85.793556"
+ height="37.108238"
+ x="279.17944"
+ y="25.119308"
+ ry="18.554119" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="Paths"
+ transform="translate(0,-21.259834)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4526)"
+ d="M 132.85714,238.33522 271.1929,237.90593"
+ id="path4228"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4622)"
+ d="m 374.28571,231.76379 79.42858,-14.28571"
+ id="path4230"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart)"
+ d="m 375.14286,294.04951 84,-65.14286"
+ id="path4232"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+ d="m 373.71429,247.19237 81.42856,76.28571"
+ id="path4234"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4662)"
+ d="M 455.71429,337.47808 375.14286,306.62094"
+ id="path4236"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4548)"
+ d="M 271.76433,291.18149 134.85714,249.76379"
+ id="path4238"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4622-0)"
+ d="m 338.65855,222.44537 -0.37347,-67.80349"
+ id="path4230-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4622-2)"
+ d="m 365.62809,127.47583 87.42858,-22.28572"
+ id="path4230-23"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="Label-Processes"
+ transform="translate(0,-21.259834)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="96.285713"
+ y="246.62094"
+ id="text4189"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="96.285713"
+ y="246.62094"
+ id="tspan4193"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">ping</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="494.85718"
+ y="221.19237"
+ id="text4195"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="494.85718"
+ y="221.19237"
+ id="tspan4199"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">App</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="290.28571"
+ y="304.90665"
+ id="text4211"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4213"
+ x="290.28571"
+ y="304.90665">merger</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="288.28574"
+ y="245.19237"
+ id="text4215"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4217"
+ x="288.28574"
+ y="245.19237">classifier</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="496.28815"
+ y="334.61249"
+ id="text4195-5"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="496.28815"
+ y="334.61249"
+ id="tspan4199-3"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">App</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="262.11279"
+ y="207.85094"
+ id="text4215-9"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4217-1"
+ x="262.11279"
+ y="207.85094">spp_vf</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="259.56412"
+ y="100.60727"
+ id="text4215-9-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4217-1-0"
+ x="259.56412"
+ y="100.60727">spp_mirror</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="298.33615"
+ y="137.85094"
+ id="text4215-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4217-6"
+ x="298.33615"
+ y="137.85094">mirror</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="499.37952"
+ y="109.82571"
+ id="text4195-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="499.37952"
+ y="109.82571"
+ id="tspan4199-9"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">Monitor</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="Label-Host"
+ transform="translate(0,-21.259834)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="234.58231"
+ y="55.019043"
+ id="text4180"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4182"
+ x="234.58231"
+ y="55.019043">host2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="25.714283"
+ y="55.763786"
+ id="text4184"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4186"
+ x="25.714283"
+ y="55.763786">host1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="436.85715"
+ y="186.62094"
+ id="text4219"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4221"
+ x="436.85715"
+ y="186.62094">VM1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="435.42859"
+ y="305.19235"
+ id="text4223"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4225"
+ x="435.42859"
+ y="305.19235">VM2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="437.7843"
+ y="74.1772"
+ id="text4219-6"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4221-1"
+ x="437.7843"
+ y="74.1772">VM3</tspan></text>
+ </g>
+</svg>
diff --git a/docs/guides/spp_vf/use_cases/usecase2.rst b/docs/guides/spp_vf/use_cases/usecase2.rst
index 1025284..b59229a 100644
--- a/docs/guides/spp_vf/use_cases/usecase2.rst
+++ b/docs/guides/spp_vf/use_cases/usecase2.rst
@@ -3,7 +3,7 @@
Copyright(c) 2018 Nippon Telegraph and Telephone Corporation
-.. _spp_mirror_use_cases_usecase1:
+.. _spp_mirror_use_cases_usecase:
Mirroring packet from a VM
==========================
@@ -43,8 +43,8 @@ Start spp_primary with core id 1.
.. _figure_simple_mirroring:
-.. figure:: ../../images/spp_vf/spp_mirror_usecase1_overview.*
- :width: 90%
+.. figure:: ../../images/spp_vf/spp_mirror_usecase_overview.*
+ :width: 60%
Mirroring from a VM
@@ -136,12 +136,12 @@ Detailed configuration of :numref:`figure_simple_mirroring` is
described below. There are two NICs on the host to send and receive packets.
During that path, mirror component mirror1 replicates packet to merger3.
-.. _figure_network_config:
+.. _figure_spp_mirror_usecase_nwconfig:
- .. figure:: ../../images/spp_vf/spp_mirror_usecase1_nwconfig1.*
- :width: 110%
+ .. figure:: ../../images/spp_vf/spp_mirror_usecase_nwconfig.*
+ :width: 80%
- Network Configuration
+ Network configuration of mirroring
Launch spp_mirror
^^^^^^^^^^^^^^^^^
--
2.7.4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [spp] [PATCH 09/10] docs: add label for usecase to be referred
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
` (7 preceding siblings ...)
2018-11-30 5:41 ` [spp] [PATCH 08/10] docs: add usecase images " x-fn-spp
@ 2018-11-30 5:41 ` x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 10/10] docs: refactor primary commands section x-fn-spp
9 siblings, 0 replies; 10+ messages in thread
From: x-fn-spp @ 2018-11-30 5:41 UTC (permalink / raw)
To: ferruh.yigit, ogawa.yasufumi; +Cc: spp
From: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Add a label to `Shutdown SPP VF Components` section to be referred.
Signed-off-by: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Signed-off-by: Naoki Takada <takada.naoki@lab.ntt.co.jp>
---
docs/guides/spp_vf/use_cases/usecase1.rst | 2 ++
1 file changed, 2 insertions(+)
diff --git a/docs/guides/spp_vf/use_cases/usecase1.rst b/docs/guides/spp_vf/use_cases/usecase1.rst
index 711df03..4a8f4bc 100644
--- a/docs/guides/spp_vf/use_cases/usecase1.rst
+++ b/docs/guides/spp_vf/use_cases/usecase1.rst
@@ -282,6 +282,8 @@ Now, you can login to VMs from the remote host1.
# spp-vm2 via NIC1
$ ssh sppuser@192.168.150.32
+.. _spp_vf_use_cases_usecase1_shutdown_spp_vf_components:
+
Shutdown SPP VF Components
~~~~~~~~~~~~~~~~~~~~~~~~~~
--
2.7.4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [spp] [PATCH 10/10] docs: refactor primary commands section
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
` (8 preceding siblings ...)
2018-11-30 5:41 ` [spp] [PATCH 09/10] docs: add label for usecase to be referred x-fn-spp
@ 2018-11-30 5:41 ` x-fn-spp
9 siblings, 0 replies; 10+ messages in thread
From: x-fn-spp @ 2018-11-30 5:41 UTC (permalink / raw)
To: ferruh.yigit, ogawa.yasufumi; +Cc: spp
From: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Misc update to adjust the length of underline of section header.
Signed-off-by: Hideyuki Yamashita <yamashita.hideyuki@po.ntt-tx.co.jp>
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
docs/guides/commands/primary.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/guides/commands/primary.rst b/docs/guides/commands/primary.rst
index e49f990..a156966 100644
--- a/docs/guides/commands/primary.rst
+++ b/docs/guides/commands/primary.rst
@@ -2,7 +2,7 @@
Copyright(c) 2010-2014 Intel Corporation
Primary Commands
-====================
+================
Primary process is managed with ``pri`` command.
--
2.7.4
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-11-30 5:43 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20181130054118.24543-1-x-fn-spp@sl.ntt-tx.co.jp>
2018-11-30 5:41 ` [spp] [PATCH 01/10] docs: add spp_mirror in overview section x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 02/10] docs: add overview image of spp_mirror x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 03/10] docs: add design for spp_mirror x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 04/10] docs: add explanation of spp_mirror x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 05/10] docs: add setup guide for spp_mirror x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 06/10] docs: add how to use " x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 07/10] docs: add usecase of spp_mirror x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 08/10] docs: add usecase images " x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 09/10] docs: add label for usecase to be referred x-fn-spp
2018-11-30 5:41 ` [spp] [PATCH 10/10] docs: refactor primary commands section x-fn-spp
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).