Soft Patch Panel
 help / color / mirror / Atom feed
* [spp] [PATCH 00/15] Introduction of SPP container tools
@ 2018-06-15  7:06 ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 01/15] docs: add index of SPP container tool ogawa.yasufumi
                   ` (16 more replies)
  0 siblings, 17 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Hi all,

I would like to introduce SPP container for managing containers of
SPP processes and DPDK applications connected with SPP.

SPP container provides a set of python scripts for buiding docker image
and launching app containers. Containers are connected with SPP and
its network is to be easily configurable.

With SPP container, you can easily build and install DPDK and its
applications as docker images. Build tool supports several versions of
DPDK and Ubuntu.

App container script enables user to launch application container with
simple command line interface. It means that you do not need to type a
long command line options for docker and DPDK.

This series of patches is for adding documents of SPP container. You can
refer the manual at
https://spp-tmp.readthedocs.io/en/doc-sppc/tools/index.html
for reviewing temporarily until the patches are merged.

After patches are merged, it is moved to here and temprary is removed.
https://spp.readthedocs.io/en/latest/tools/index.html

Thanks,
Yasufumi


Yasufumi Ogawa (15):
  docs: add index of SPP container tool
  docs: add overview of SPP container
  docs: add overview image of SPP container
  docs: add getting started guide of SPP container
  docs: add image of example for gsg
  docs: add install guide for SPP container
  docs: add build image guide for SPP container
  docs: add manual for app container launchers
  docs: add use cases of SPP container
  docs: add usecase image of testing vhost
  docs: add usecase image of testing ring
  docs: add usecase image of pktgen and l2fwd
  docs: add usecase image of using less lcores
  docs: add usecase image of load balancer
  docs: add how to develop guide for SPP container

 .../images/tools/sppc/sppc_gsg_testpmd.svg    |  614 +++++++
 .../images/tools/sppc/sppc_overview.svg       |  946 ++++++++++
 .../tools/sppc/sppc_usecase_l2fwdpktgen.svg   |  918 ++++++++++
 .../sppc/sppc_usecase_l2fwdpktgen_less.svg    |  848 +++++++++
 .../tools/sppc/sppc_usecase_lb_pktgen.svg     | 1573 +++++++++++++++++
 .../images/tools/sppc/sppc_usecase_ring.svg   | 1032 +++++++++++
 .../images/tools/sppc/sppc_usecase_vhost.svg  |  644 +++++++
 docs/guides/tools/index.rst                   |    6 +-
 docs/guides/tools/sppc/app_launcher.rst       | 1061 +++++++++++
 docs/guides/tools/sppc/build_img.rst          |  181 ++
 docs/guides/tools/sppc/getting_started.rst    |  327 ++++
 docs/guides/tools/sppc/howto_launcher.rst     |  321 ++++
 docs/guides/tools/sppc/index.rst              |   21 +
 docs/guides/tools/sppc/install.rst            |   94 +
 docs/guides/tools/sppc/overview.rst           |   31 +
 docs/guides/tools/sppc/usecases.rst           |  676 +++++++
 16 files changed, 9292 insertions(+), 1 deletion(-)
 create mode 100644 docs/guides/images/tools/sppc/sppc_gsg_testpmd.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_overview.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen_less.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_lb_pktgen.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_ring.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_vhost.svg
 create mode 100644 docs/guides/tools/sppc/app_launcher.rst
 create mode 100644 docs/guides/tools/sppc/build_img.rst
 create mode 100644 docs/guides/tools/sppc/getting_started.rst
 create mode 100644 docs/guides/tools/sppc/howto_launcher.rst
 create mode 100644 docs/guides/tools/sppc/index.rst
 create mode 100644 docs/guides/tools/sppc/install.rst
 create mode 100644 docs/guides/tools/sppc/overview.rst
 create mode 100644 docs/guides/tools/sppc/usecases.rst

-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 01/15] docs: add index of SPP container tool
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 02/15] docs: add overview of SPP container ogawa.yasufumi
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

SPP container is a management tool for running DPDK application
on a container. SPP container provides a set of python scripts for
buiding docker image and launching app containers.Containers are
connected with SPP and its network is to be easily configurable.

This patch is for adding an index file of documents of SPP container.

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/index.rst      |  6 +++++-
 docs/guides/tools/sppc/index.rst | 21 +++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)
 create mode 100644 docs/guides/tools/sppc/index.rst

diff --git a/docs/guides/tools/index.rst b/docs/guides/tools/index.rst
index 9cf137e..0636dd6 100644
--- a/docs/guides/tools/index.rst
+++ b/docs/guides/tools/index.rst
@@ -1,3 +1,5 @@
+.. _tools_index:
+
 ..  BSD LICENSE
     Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
     All rights reserved.
@@ -29,8 +31,10 @@
     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 Tools
-===============
+=====
 
 .. toctree::
    :maxdepth: 2
    :numbered:
+
+   sppc/index
diff --git a/docs/guides/tools/sppc/index.rst b/docs/guides/tools/sppc/index.rst
new file mode 100644
index 0000000..2fd727f
--- /dev/null
+++ b/docs/guides/tools/sppc/index.rst
@@ -0,0 +1,21 @@
+.. _spp_container_index:
+
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+
+SPP Container
+=============
+
+Running SPP and DPDK applications on containers.
+
+.. toctree::
+    :maxdepth: 1
+
+    overview
+    getting_started
+    install
+    build_img
+    app_launcher
+    usecases
+    howto_launcher
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 02/15] docs: add overview of SPP container
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 01/15] docs: add index of SPP container tool ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 03/15] docs: add overview image " ogawa.yasufumi
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/overview.rst | 31 +++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)
 create mode 100644 docs/guides/tools/sppc/overview.rst

diff --git a/docs/guides/tools/sppc/overview.rst b/docs/guides/tools/sppc/overview.rst
new file mode 100644
index 0000000..2de91cb
--- /dev/null
+++ b/docs/guides/tools/sppc/overview.rst
@@ -0,0 +1,31 @@
+.. _spp_container_overview:
+
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+
+.. _sppc_overview_overview:
+
+Overview
+========
+
+SPP container is a set of tools for running SPP and DPDK applications
+with docker.
+It consists of shell or python scripts
+for building container images and launching app containers
+with docker commands.
+
+As shown in :numref:`figure_sppc_overview`, all of
+DPDK applications, including SPP primary and secondary processes,
+run inside containers.
+SPP controller is just a python script and does not need to be run as
+an app container.
+
+
+.. _figure_sppc_overview:
+
+.. figure:: ../../images/tools/sppc/sppc_overview.*
+   :height: 640 em
+   :width: 640 em
+
+   SPP container overview
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 03/15] docs: add overview image of SPP container
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 01/15] docs: add index of SPP container tool ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 02/15] docs: add overview of SPP container ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 04/15] docs: add getting started guide " ogawa.yasufumi
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../images/tools/sppc/sppc_overview.svg       | 946 ++++++++++++++++++
 1 file changed, 946 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_overview.svg

diff --git a/docs/guides/images/tools/sppc/sppc_overview.svg b/docs/guides/images/tools/sppc/sppc_overview.svg
new file mode 100644
index 0000000..d745ede
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_overview.svg
@@ -0,0 +1,946 @@
+<?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="240mm"
+   height="150mm"
+   viewBox="0 0 850.39371 531.49607"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="spp_container.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5907"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5909" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5813"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5815" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5725"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5727" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5643"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5645" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5567"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5569" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker5491"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5493"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5421"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5423" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker5207"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5209"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5137"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5139" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5091"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5093" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5051"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5053" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5017"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5019" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker4989"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path4991" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path4480"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.8) rotate(180) translate(12.5,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="625.71429"
+     inkscape:cy="177.09391"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1440"
+     inkscape:window-height="851"
+     inkscape:window-x="-3"
+     inkscape:window-y="16"
+     inkscape:window-maximized="0"
+     units="mm"
+     width="230mm" />
+  <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,-520.86616)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.04377723;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="826.09912"
+       height="463.24191"
+       x="11.379023"
+       y="543.45551" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.07469606;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4142"
+       width="73.925301"
+       height="33.925304"
+       x="274.03732"
+       y="973.25671" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81819206;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4144"
+       width="74.181808"
+       height="34.181808"
+       x="669.62335"
+       y="972.55701" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.8340826;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293"
+       cx="647.07147"
+       cy="735.79077"
+       rx="34.582958"
+       ry="19.582958" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.73104453;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295"
+       cx="767.92859"
+       cy="735.79077"
+       rx="34.63448"
+       ry="19.634478" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.78720939;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="253.35715"
+       cy="735.79077"
+       rx="34.606396"
+       ry="19.606396" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.69917637;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="383.0715"
+       cy="735.79077"
+       rx="34.650414"
+       ry="19.650412" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="516.28577"
+       cy="837.21936"
+       rx="35.842735"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="26.570356"
+       y="670.2182" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.88601547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="109.114"
+       height="114.114"
+       x="197.94299"
+       y="796.30524" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.4318701;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="208.56813"
+       height="113.56813"
+       x="217.07307"
+       y="562.57812" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.28275025;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4166"
+       width="208.71725"
+       height="113.71725"
+       x="607.28436"
+       y="563.93213" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.13310003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4168"
+       width="108.86691"
+       height="113.86691"
+       x="593.20947"
+       y="795.57159" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="226.38045"
+       y="648.31409"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="356.72403"
+       y="649.22913" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.80504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4367"
+       width="57.194962"
+       height="27.19496"
+       x="618.7597"
+       y="650.12189" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597942;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369"
+       width="57.184021"
+       height="27.184021"
+       x="747.05084"
+       y="650.41309" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="214.51154"
+       y="829.01654" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.89280504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393"
+       width="74.107193"
+       height="29.107199"
+       x="609.08929"
+       y="827.30865" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.11811137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7449"
+       width="108.8819"
+       height="113.8819"
+       x="329.77332"
+       y="796.70703" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02366579;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451"
+       width="108.97635"
+       height="113.97635"
+       x="712.8689"
+       y="796.65967" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.94681084;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7453"
+       width="74.0532"
+       height="29.053192"
+       x="349.68765"
+       y="829.33557" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.91539472;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7455"
+       width="74.084618"
+       height="29.084608"
+       x="731.67194"
+       y="827.31989" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-520.86616)">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="33.00639"
+       y="714.65436"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="26.548521"
+       y="827.91071"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.81271017;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4229"
+       width="89.187302"
+       height="34.187294"
+       x="601.90643"
+       y="864.83997"
+       ry="17.093647"
+       rx="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="207.94594"
+       y="867.16528"
+       ry="17.054037" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.03231287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4233"
+       width="103.96768"
+       height="38.967686"
+       x="660.58765"
+       y="597.37836"
+       ry="19.483843" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.16768765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="103.83231"
+       height="38.832314"
+       x="272.08374"
+       y="596.87457"
+       ry="19.416157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5091)"
+       d="m 309.71426,1044.3622 0,-35.7143"
+       id="path4427"
+       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(#marker5907)"
+       d="m 707.14283,1008.6479 0,32.8572"
+       id="path4429"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5051)"
+       d="m 293.99997,972.18888 c -16.51883,-17.82401 -28.15615,-36.4616 -28.57143,-56.96954"
+       id="path4431"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="m 253.99997,796.3622 0,-40.00001"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989)"
+       d="m 253.99997,715.50505 0,-37.14286"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 385.99997,676.93362 0,37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 384.5714,756.36219 0,36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94411641;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5207)"
+       d="m 440.28569,838.36219 38.50992,0"
+       id="path4441"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99798077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5421)"
+       d="m 553.14282,838.78957 38.32673,-0.43681"
+       id="path4443"
+       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(#marker5813)"
+       d="m 648.85712,796.93362 0.59173,-40.59174"
+       id="path4445"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.06141865px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5725)"
+       d="m 649.42854,716.07648 0,-38.62661"
+       id="path4447"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02824485px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5643)"
+       d="m 768.64718,677.92942 1.01015,39.28992"
+       id="path4449"
+       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(#marker5567)"
+       d="m 768.85712,755.50505 0,38.57143"
+       id="path4451"
+       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(#marker5491)"
+       d="m 759.01012,911.19903 c 1.38788,25.41499 -17.01853,40.93284 -30.83683,58.74474"
+       id="path4453"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.99597287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7457"
+       width="89.004044"
+       height="34.004032"
+       x="341.71222"
+       y="868.07446"
+       ry="17.002016" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549631;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459"
+       width="88.914513"
+       height="33.914509"
+       x="722.32843"
+       y="864.69067"
+       ry="16.957254" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <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="46.571423"
+       y="739.79077"
+       id="text4201"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="46.571423"
+         y="739.79077">spp_primary</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="219.42857"
+       y="888.93365"
+       id="text4205"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="219.42857"
+         y="888.93365">spp_nfv</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="613.14288"
+       y="887.21936"
+       id="text4209"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="613.14288"
+         y="887.21936">spp_nfv</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="39.428577"
+       y="852.36224"
+       id="text4225"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="39.428577"
+         y="852.36224">spp controller</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="292.85715"
+       y="622.93365"
+       id="text4265"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="292.85715"
+         y="622.93365">pktgen</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="676.57147"
+       y="623.21936"
+       id="text4269"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4271"
+         x="676.57147"
+         y="623.21936">testpmd</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="293.14285"
+       y="994.07648"
+       id="text4319"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4321"
+         x="293.14285"
+         y="994.07648">port</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="688.57147"
+       y="994.36218"
+       id="text4323"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4325"
+         x="688.57147"
+         y="994.36218">port</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="39.714294"
+       y="576.36218"
+       id="text4327"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="39.714294"
+         y="576.36218">host</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="620.00006"
+       y="584.36224"
+       id="text4331"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4333"
+         x="620.00006"
+         y="584.36224">container</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="229.71428"
+       y="582.93365"
+       id="text4335"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="229.71428"
+         y="582.93365">container</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="39.714298"
+       y="696.07648"
+       id="text4339"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="39.714298"
+         y="696.07648">container</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="207.42856"
+       y="817.21936"
+       id="text4343"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="207.42856"
+         y="817.21936">container</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="600.28577"
+       y="816.64789"
+       id="text4347"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4349"
+         x="600.28577"
+         y="816.64789">container</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="229.14287"
+       y="741.21936"
+       id="text4351"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="229.14287"
+         y="741.21936">vhost</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="360.28577"
+       y="742.07648"
+       id="text4355"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="360.28577"
+         y="742.07648">vhost</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="500.28577"
+       y="842.36224"
+       id="text4359"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="500.28577"
+         y="842.36224">ring</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="233.14285"
+       y="668.36218"
+       id="text4371"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="233.14285"
+         y="668.36218">virtio</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="363.14285"
+       y="666.93359"
+       id="text4375"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="363.14285"
+         y="666.93359">virtio</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="625.42865"
+       y="669.50507"
+       id="text4379"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4381"
+         x="625.42865"
+         y="669.50507">virtio</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="752.00006"
+       y="669.50507"
+       id="text4383"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4385"
+         x="752.00006"
+         y="669.50507">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       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;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="250.85718"
+       y="848.36224"
+       id="text4407"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="250.85718"
+         y="848.36224"
+         id="tspan4411">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       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;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="646.00006"
+       y="847.21936"
+       id="text4413"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="646.00006"
+         y="847.21936"
+         id="tspan4417">shmem</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="623.42859"
+       y="740.93365"
+       id="text4419"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4421"
+         x="623.42859"
+         y="740.93365">vhost</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="743.14288"
+       y="740.93359"
+       id="text4423"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4425"
+         x="743.14288"
+         y="740.93359">vhost</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="341.14279"
+       y="819.79077"
+       id="text7461"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7463"
+         x="341.14279"
+         y="819.79077">container</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="351.71423"
+       y="889.21942"
+       id="text7469"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7471"
+         x="351.71423"
+         y="889.21942">spp_nfv</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="351.14282"
+       y="846.93359"
+       id="text7465"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7467"
+         x="351.14282"
+         y="846.93359">shmem</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="726.57135"
+       y="818.36218"
+       id="text7473"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7475"
+         x="726.57135"
+         y="818.36218">container</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="734.28571"
+       y="846.93365"
+       id="text7477"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7479"
+         x="734.28571"
+         y="846.93365">shmem</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="733.42853"
+       y="887.505"
+       id="text7481"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7483"
+         x="733.42853"
+         y="887.505">spp_nfv</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 04/15] docs: add getting started guide of SPP container
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (2 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 03/15] docs: add overview image " ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 05/15] docs: add image of example for gsg ogawa.yasufumi
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/getting_started.rst | 327 +++++++++++++++++++++
 1 file changed, 327 insertions(+)
 create mode 100644 docs/guides/tools/sppc/getting_started.rst

diff --git a/docs/guides/tools/sppc/getting_started.rst b/docs/guides/tools/sppc/getting_started.rst
new file mode 100644
index 0000000..da7d3d9
--- /dev/null
+++ b/docs/guides/tools/sppc/getting_started.rst
@@ -0,0 +1,327 @@
+.. _spp_container_gs:
+
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+
+.. _sppc_gs_gs:
+
+Getting Started
+===============
+
+In this section, learn how to use SPP container with a simple
+usecase.
+You use four of terminals for running SPP processes and applications.
+
+.. _sppc_gs_setup:
+
+Setup DPDK and SPP
+------------------
+
+First of all, you need to clone DPDK and setup hugepages for running
+DPDK application as described in
+:doc:`../../setup/getting_started`
+or DPDK's
+`Gettting Started Guide
+<https://dpdk.org/doc/guides/linux_gsg/sys_reqs.html>`_.
+You also need to load kernel modules and bind network ports as in
+`Linux Drivers
+<https://dpdk.org/doc/guides/linux_gsg/linux_drivers.html>`_.
+
+Then, as described in
+:doc:`../../setup/getting_started`
+, clone and compile SPP in any directory.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ git clone http://dpdk.org/git/apps/spp
+    $ cd spp
+
+
+.. _sppc_gs_build_docker_imgs:
+
+Build Docker Images
+-------------------
+
+Build tool is a python script for creating a docker image and
+currently supporting three types of images for
+DPDK sample applications, pktgen-dpdk, or SPP.
+
+Run build tool for creating three type of docker images.
+It starts to download the latest Ubuntu docker image and installation
+for the latest DPDK, pktgen or SPP.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp/tools/sppc
+    $ python build/main.py -t dpdk
+    $ python build/main.py -t pktgen
+    $ python build/main.py -t spp
+
+Of course DPDK is required from pktgen and SPP, and it causes a
+problem of compatibility between them sometimes.
+At the time writing this document, SPP v18.02 is not compatible with
+the latest DPDK v18.05 and it is failed to compile.
+In this case, you should build SPP with ``--dpdk-branch`` option to tell
+the version of DPDK explicitly.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ python build/main.py -t spp --dpdk-branch v18.02
+
+You can find all of options by ``build/main.py -h``.
+
+Waiting for a minutes, then you are ready to launch app containers.
+All of images are referred from ``docker images`` command.
+
+.. code-block:: console
+
+    $ docker images
+    REPOSITORY           TAG       IMAGE ID         CREATED         SIZE
+    sppc/spp-ubuntu      latest    3ec39adb460f     2 days ago      862MB
+    sppc/pktgen-ubuntu   latest    ffe65cc70e65     2 days ago      845MB
+    sppc/dpdk-ubuntu     latest    0d5910d10e3f     2 days ago      1.66GB
+    <none>               <none>    d52d2f86a3c0     2 days ago      551MB
+    ubuntu               latest    452a96d81c30     5 weeks ago     79.6MB
+
+.. note::
+
+    The Name of containers is defined as a set of target, name and
+    version of Linux distoribution.
+    For example, container image targetting dpdk apps on Ubuntu 16.04
+    is named as ``sppc/dpdk-ubuntu:16.04``.
+    
+    Build script understands which of Dockerfile should be used based
+    on the given options.
+    If you run build script with options for dpdk and Ubuntu 16.04 as
+    below, it finds ``build/ubuntu/dpdk/Dockerfile.16.04`` and runs
+    ``docker build``.
+    Options for Linux distribution have default value, ``ubuntu`` and
+    ``latest``. So, you do not need to specify them if you use default.
+
+
+    .. code-block:: console
+
+        # latest DPDK on Ubuntu 16.04
+        $ python build/main.py -t dpdk --dist-name ubuntu --dist-ver latest
+
+        # it is also the same
+        $ python build/main.py -t dpdk
+
+.. warning::
+
+    Currently, the latest version of Ubuntu is 18.04 and DPDK is 18.05.
+    However, SPP is not stable on the latest versions, especially
+    running on containers.
+
+    It is better to use Ubuntu 16.04 and DPDK 18.02 for SPP containers
+    until be stabled.
+
+    .. code-block:: console
+
+        $ python build/main.py -t dpdk --dist-ver 16.04 --dpdk-branch v18.02
+        $ python build/main.py -t pktgen --dist-ver 16.04 \
+          --dpdk-branch v18.02 --pktgen-branch pktgen-3.4.9
+        $ python build/main.py -t spp --dist-ver 16.04 --dpdk-branch v18.02
+
+
+.. _sppc_gs_launch_containers:
+
+Launch SPP and App Containers
+-----------------------------
+
+Before launch containers, you should set IP address of host machine
+as ``SPP_CTRL_IP`` environment variable
+for controller to be accessed from inside containers.
+It is better to define this variable in ``$HOME/.bashrc``.
+
+.. code-block:: console
+
+    # Set your host IP address
+    export SPP_CTRL_IP=[HOST_IPADDR]
+
+
+SPP Controller
+~~~~~~~~~~~~~~
+
+Launch SPP controller to be ready
+before primary and secondary processes.
+SPP controller is launched in the terminal 1 in this guide.
+
+.. note::
+
+    SPP controller provides ``topo term`` which shows network
+    topology in a terminal.
+
+    However, there are a new terminal apps supporing this feature.
+    ``mlterm`` is the most useful and easy to customize.
+    Refer :doc:`../../commands/experimental` for ``topo`` command.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+
+SPP Primary Container
+~~~~~~~~~~~~~~~~~~~~~
+
+As ``SPP_CTRL_IP`` is activated, you are enalbed to run
+``app/spp-primary.py`` with options of EAL and SPP primary
+in terminal 2.
+In this case, launch spp-primary in background mode using one core
+and two ports.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x03
+
+
+SPP Secondary Container
+~~~~~~~~~~~~~~~~~~~~~~~
+
+For secondary process, there are two launcher scripts,
+``spp-nfv.py`` and ``spp-vm.py``.
+There behave as similar to ``spp_nfv`` running on host and
+``spp_vm`` on guest VM.
+The difference is that both of them are running on containers.
+
+You use only ``spp_nfv.py`` in this guide.
+Launch ``spp_nfv`` in terminal 2
+with options for secondary ID is ``1`` and
+core list is ``1-2`` for using 2nd and 3rd cores.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ python app/spp-nfv.py -i 1 -l 1-2
+
+If it is succeeded, container is running in background.
+You can find it with ``docker -ps`` command.
+
+
+App Container
+~~~~~~~~~~~~~
+
+Launch DPDK's ``testpmd`` as an example of app container.
+
+Currently, most of app containers do not support ring PMD.
+It means that you should create vhost PMDs from SPP controller
+before launching the app container.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add vhost 1
+    spp > sec 1;add vhost 2
+
+``spp_nfv`` of ID 1 running inside container creates
+``vhost:1`` and ``vhost:2``.
+Vhost PMDs are referred as an option ``-d 1,2`` from the
+app container launcher.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ app/testpmd.py -l 3-4 -d 1,2
+    sudo docker run -it \
+    ...
+    EAL: Detected 16 lcore(s)
+    EAL: Auto-detected process type: PRIMARY
+    EAL: Multi-process socket /var/run/.testpmd1_unix
+    EAL: Probing VFIO support...
+    EAL: VFIO support initialized
+    Interactive-mode selected
+    Warning: NUMA should be configured manually by using --port-numa-...
+    testpmd: create a new mbuf pool <mbuf_pool_socket_0>: n=155456,...
+    testpmd: preferred mempool ops selected: ring_mp_mc
+    Configuring Port 0 (socket 0)
+    Port 0: 32:CB:1D:72:68:B9
+    Configuring Port 1 (socket 0)
+    Port 1: 52:73:C3:5B:94:F1
+    Checking link statuses...
+    Done
+    testpmd>
+
+
+It launches ``testpmd`` in foreground mode.
+
+
+.. _sppc_gs_run_apps:
+
+Run Applications
+----------------
+
+At the end of this getting started guide, configure network paths
+as described in
+:numref:`figure_sppc_gsg_testpmd`
+and start forwarding from testpmd.
+
+.. _figure_sppc_gsg_testpmd:
+
+.. figure:: ../../images/tools/sppc/sppc_gsg_testpmd.*
+   :height: 340em
+   :width: 340em
+
+   SPP and testpmd on containers
+
+From terminal 1, add ``ring:0``, connect ``vhost:1`` and ``vhost:2``
+with it.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add ring 0
+    spp > sec 1;patch vhost:1 ring:0
+    spp > sec 1;patch ring:0 vhost:2
+    spp > sec 1;forward
+    spp > sec 1;status
+    status: running
+    ports:
+      - 'ring:0 -> vhost:2'
+      - 'vhost:1 -> ring:0'
+      - 'vhost:2'
+
+Start forwarding on port 0 by ``start tx_first``.
+
+.. code-block:: console
+
+    # Terminal 2
+    testpmd> start tx_first 
+    io packet forwarding - ports=2 - cores=1 - streams=2 - NUMA support...
+    Logical Core 4 (socket 0) forwards packets on 2 streams:
+      RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
+      RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
+    ...
+      
+Finally, stop forwarding to show statistics as the result.
+In this case, about 35 million packets are forwarded.
+
+.. code-block:: console
+
+    # Terminal 2
+    testpmd> stop
+    Telling cores to stop...
+    Waiting for lcores to finish...
+    
+      ---------------------- Forward statistics for port 0  ------------------
+      RX-packets: 0              RX-dropped: 0             RX-total: 0
+      TX-packets: 35077664       TX-dropped: 0             TX-total: 35077664
+      ------------------------------------------------------------------------
+    
+      ---------------------- Forward statistics for port 1  ------------------
+      RX-packets: 35077632       RX-dropped: 0             RX-total: 35077632
+      TX-packets: 32             TX-dropped: 0             TX-total: 32
+      ------------------------------------------------------------------------
+    
+      +++++++++++++++ Accumulated forward statistics for all ports++++++++++++
+      RX-packets: 35077632       RX-dropped: 0             RX-total: 35077632
+      TX-packets: 35077696       TX-dropped: 0             TX-total: 35077696
+      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 05/15] docs: add image of example for gsg
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (3 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 04/15] docs: add getting started guide " ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 06/15] docs: add install guide for SPP container ogawa.yasufumi
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

As an example of usage of SPP container for getting started guide,
add an image of simple testing configuration.

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../images/tools/sppc/sppc_gsg_testpmd.svg    | 614 ++++++++++++++++++
 1 file changed, 614 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_gsg_testpmd.svg

diff --git a/docs/guides/images/tools/sppc/sppc_gsg_testpmd.svg b/docs/guides/images/tools/sppc/sppc_gsg_testpmd.svg
new file mode 100644
index 0000000..f6d3c30
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_gsg_testpmd.svg
@@ -0,0 +1,614 @@
+<?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="132mm"
+   height="120mm"
+   viewBox="0 0 467.71654 425.19682"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="sppc_gsg_testpmd.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1731"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lstart">
+      <path
+         transform="scale(1.1) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path1729" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path1009"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1371"
+       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="path1369" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path991"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5907"
+       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="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       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="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       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="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       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="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       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="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       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="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       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="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       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="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       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="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       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="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       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="path4991"
+         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="path4480"
+         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="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,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="232.84317"
+     inkscape:cy="177.09391"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer5"
+     showgrid="false"
+     inkscape:window-width="1440"
+     inkscape:window-height="851"
+     inkscape:window-x="67"
+     inkscape:window-y="27"
+     inkscape:window-maximized="0"
+     units="mm"
+     width="230mm" />
+  <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,-627.16542)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.39066923;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="443.81241"
+       height="399.22818"
+       x="13.093798"
+       y="640.04016" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-627.16542)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.85884833;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="389.55356"
+       cy="828.79077"
+       rx="41.267006"
+       ry="19.570576" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75844175;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="257.35736"
+       cy="828.79077"
+       rx="40.83522"
+       ry="19.620779" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="322.44644"
+       cy="1009.4158"
+       rx="35.842735"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-627.16542)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="28.570358"
+       y="763.2182" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02305269;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="221.0242"
+       height="75.109192"
+       x="212.50362"
+       y="889.388" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.4318701;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="208.56813"
+       height="113.56813"
+       x="219.07307"
+       y="655.57812" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="228.38045"
+       y="741.31409"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="358.72403"
+       y="742.22913" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-627.16542)">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="35.00639"
+       y="807.65436"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="28.548523"
+       y="892.78571"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.98559052;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="109.1037"
+       height="34.014416"
+       x="266.24277"
+       y="920.8371"
+       ry="17.007208" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.2391907;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="117.15366"
+       height="38.760811"
+       x="268.49451"
+       y="689.91034"
+       ry="19.380405" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00031245;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Lstart)"
+       d="m 284.86972,1009.4389 c -20.00566,0 -31.15795,-6.3985 -31.75195,-45.2124"
+       id="path4431"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="M 389.12497,889.3622 V 849.36219"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989)"
+       d="M 389.12497,808.50505 V 771.36219"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 258.62497,769.93362 v 37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 257.1964,849.36219 v 36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1731)"
+       d="m 389.14283,967.14794 c -1.08386,32.21837 -8.53475,41.43726 -31.69643,42.76786"
+       id="path4416"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-627.16542)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="48.571423"
+       y="832.79077"
+       id="text4201"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="48.571423"
+         y="832.79077"
+         style="font-size:17.5px;line-height:1.25">spp_primary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="285.17859"
+       y="942.55865"
+       id="text4205"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="285.17859"
+         y="942.55865"
+         style="font-size:17.5px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="41.428577"
+       y="917.23724"
+       id="text4225"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="41.428577"
+         y="917.23724"
+         style="font-size:17.5px;line-height:1.25">spp controller</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="289.23215"
+       y="715.93365"
+       id="text4265"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="289.23215"
+         y="715.93365"
+         style="font-size:17.5px;line-height:1.25">testpmd</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="41.714294"
+       y="669.36218"
+       id="text4327"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="41.714294"
+         y="669.36218"
+         style="font-size:17.5px;line-height:1.25">host</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="231.71428"
+       y="675.93365"
+       id="text4335"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="231.71428"
+         y="675.93365"
+         style="font-size:17.5px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="41.714298"
+       y="789.07648"
+       id="text4339"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="41.714298"
+         y="789.07648"
+         style="font-size:17.5px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="276.92856"
+       y="910.21936"
+       id="text4343"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="276.92856"
+         y="910.21936"
+         style="font-size:17.5px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="356.76785"
+       y="834.21936"
+       id="text4351"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="356.76785"
+         y="834.21936"
+         style="font-size:17.5px;line-height:1.25">vhost:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="225.41077"
+       y="835.07648"
+       id="text4355"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="225.41077"
+         y="835.07648"
+         style="font-size:17.5px;line-height:1.25">vhost:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="297.07144"
+       y="1014.5587"
+       id="text4359"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="297.07144"
+         y="1014.5587"
+         style="font-size:17.5px;line-height:1.25">ring:0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="235.14285"
+       y="761.36218"
+       id="text4371"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="235.14285"
+         y="761.36218"
+         style="font-size:17.5px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="365.14285"
+       y="759.93359"
+       id="text4375"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="365.14285"
+         y="759.93359"
+         style="font-size:17.5px;line-height:1.25">virtio</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 06/15] docs: add install guide for SPP container
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (4 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 05/15] docs: add image of example for gsg ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 07/15] docs: add build image " ogawa.yasufumi
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/install.rst | 94 ++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100644 docs/guides/tools/sppc/install.rst

diff --git a/docs/guides/tools/sppc/install.rst b/docs/guides/tools/sppc/install.rst
new file mode 100644
index 0000000..55be312
--- /dev/null
+++ b/docs/guides/tools/sppc/install.rst
@@ -0,0 +1,94 @@
+.. _spp_container_install:
+
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+
+.. _sppc_install_install:
+
+Install
+=======
+
+
+.. _sppc_install_required:
+
+Required Packages
+-----------------
+
+You need to install packages required for DPDK, and docker.
+
+* DPDK 17.11 or later (supporting container)
+* docker
+
+
+.. _sppc_install_config:
+
+Configurations
+--------------
+
+You might need some additional non-mandatory configurations.
+
+Run docker without sudo
+~~~~~~~~~~~~~~~~~~~~~~~
+
+You should run docker as sudo in most of scripts provided in
+SPP container because for running DPDK applications.
+
+However, you can run docker without sudo if you do not run DPDK
+applications.
+It is useful if you run ``docker kill`` for terminating containerized
+process, ``docker rm`` or ``docker rmi`` for cleaning resources.
+
+.. code-block:: console
+
+    # Terminate container from docker command
+    $ docker kill xxxxxx_yyyyyyy
+
+    # Remove all of containers
+    $ docker rm `docker ps -aq`
+
+    # Remove all of images
+    $ docker rmi `docker images -aq`
+
+The reason for running docker requires sudo is docker daemon
+binds to a unix socket instead of a TCP port.
+Unix socket is owned by root and other users can only access it using
+sudo.
+However, you can run if you add your account to docker group.
+
+.. code-block:: console
+
+    $ sudo groupadd docker
+    $ sudo usermod -aG docker $USER
+
+To activate it, you have to logout and re-login at once.
+
+
+Network Proxy
+~~~~~~~~~~~~~
+
+If you are behind a proxy, you should configure proxy to build an image
+or running container.
+SPP container is supportng proxy configuration for getting
+it from shell environments.
+You confirm that ``http_proxy``, ``https_proxy``
+and ``no_proxy`` of environmental variables are defined.
+
+It also required to add proxy configurations for docker daemon.
+Proxy for docker daemon is defined as ``[Service]`` entry in
+``/etc/systemd/system/docker.service.d/http-proxy.conf``.
+
+.. code-block:: console
+
+    [Service]
+    Environment="HTTP_PROXY=http:..." "HTTPS_PROXY=https..." "NO_PROXY=..."
+
+To activate it, you should restart docker daemon.
+
+.. code-block:: console
+
+    $ systemctl daemon-reload
+    $ systemctl restart docker
+
+You can confirm that environments are updated by running
+``docker info``.
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 07/15] docs: add build image guide for SPP container
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (5 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 06/15] docs: add install guide for SPP container ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 08/15] docs: add manual for app container launchers ogawa.yasufumi
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/build_img.rst | 181 +++++++++++++++++++++++++++
 1 file changed, 181 insertions(+)
 create mode 100644 docs/guides/tools/sppc/build_img.rst

diff --git a/docs/guides/tools/sppc/build_img.rst b/docs/guides/tools/sppc/build_img.rst
new file mode 100644
index 0000000..bb85ce6
--- /dev/null
+++ b/docs/guides/tools/sppc/build_img.rst
@@ -0,0 +1,181 @@
+.. _spp_container_build_img:
+
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+
+.. _sppc_build_img_bi:
+
+Build Images
+============
+
+As explained in :doc:`getting_started` section,
+container image is built with ``build/main.py``.
+This script is for running ``docker build`` with a set of
+``--build-args`` options for building DPDK applications.
+
+This script supports building application from any of repositories.
+For example, you can build SPP hosted on your repository
+``https://github.com/your/spp.git``
+with DPDK 18.02 as following.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python build/build.py --dpdk-branch v18.02 \
+      --spp-repo https://github.com/your/spp.git
+
+Refer all of options running with ``-h`` option.
+
+.. code-block:: console
+
+    $ python build/main.py -h
+    usage: main.py [-h] [-t TARGET] [-ci CONTAINER_IMAGE]
+                   [--dist-name DIST_NAME]
+                   [--dist-ver DIST_VER] [--dpdk-repo DPDK_REPO]
+                   [--dpdk-branch DPDK_BRANCH] [--pktgen-repo PKTGEN_REPO]
+                   [--pktgen-branch PKTGEN_BRANCH] [--spp-repo SPP_REPO]
+                   [--spp-branch SPP_BRANCH] [--only-envsh] [--dry-run]
+    
+    Docker image builder for DPDK applications
+    
+    optional arguments:
+      -h, --help            show this help message and exit
+      -t TARGET, --target TARGET
+                            Build target ('dpdk', 'pktgen' or 'spp')
+      -ci CONTAINER_IMAGE, --container-image CONTAINER_IMAGE
+                            Name of container image
+      --dist-name DIST_NAME
+                            Name of Linux distribution
+      --dist-ver DIST_VER   Version of Linux distribution
+      --dpdk-repo DPDK_REPO
+                            Git URL of DPDK
+      --dpdk-branch DPDK_BRANCH
+                            Specific version or branch of DPDK
+      --pktgen-repo PKTGEN_REPO
+                            Git URL of pktgen-dpdk
+      --pktgen-branch PKTGEN_BRANCH
+                            Specific version or branch of pktgen-dpdk
+      --spp-repo SPP_REPO   Git URL of SPP
+      --spp-branch SPP_BRANCH
+                            Specific version or branch of SPP
+      --only-envsh          Create config 'env.sh' and exit without docker build
+      --dry-run             Print matrix for checking and exit without docker
+                            build
+
+
+.. _sppc_build_img_vci:
+
+Version Control for Images
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+SPP container provides version control as combination of
+target name, Linux distribution name and version.
+Built images are referred such as ``sppc/dpdk-ubuntu:latest`` or
+``sppc/spp-ubuntu:16.04``.
+``sppc`` is just a prefix to indicate an image of SPP container.
+
+Build script decides a name from given options or default values.
+If you run build script with only target and without distribution
+name and version, it uses default values ``ubuntu`` and ``latest``.
+
+.. code-block:: console
+
+    # build 'sppc/dpdk-ubuntu:latest'
+    $ python build/main.py -t dpdk
+
+    # build 'sppc/spp-ubuntu:16.04'
+    $ python build/main.py -t spp --dist-ver 16.04
+
+.. note::
+
+    SPP container does not support distributions other than Ubuntu
+    currently.
+    It is because SPP container has no Dockerfiles for building
+    CentOS, Fedora or so. It will be supported in a future release.
+
+    You can build any of distributions with build script
+    if you prepare Dockerfile by yourself.
+    How Dockerfiles are managed is described in
+    :ref:`sppc_build_img_dockerfiles` section.
+
+
+App container scripts also understand this naming rule.
+For launching ``testpmd`` on Ubuntu 16.04,
+simply give ``--dist-ver`` to indicate the version and other options
+for ``testpmd`` itself.
+
+.. code-block:: console
+
+    # launch testpmd on 'sppc/dpdk-ubuntu:16.04'
+    $ python app/testpmd.py --dist-ver 16.04 -l 3-4 ...
+
+But, how can we build images for different versions of DPDK,
+such as 17.11 and 18.05, on the same distribution?
+In this case, you can use ``--container-image`` or ``-ci`` option for
+using any of names. It is also referred from app container scripts.
+
+.. code-block:: console
+
+    # build image with arbitrary name
+    $ python build/main.py -t dpdk -ci sppc/dpdk17.11-ubuntu:latest \
+      --dpdk-branch v17.11
+
+    # launch testpmd with '-ci'
+    $ python app/testpmd.py -ci sppc/dpdk17.11-ubuntu:latest -l 3-4 ...
+
+
+.. _sppc_build_img_dockerfiles:
+
+Dockerfiles
+~~~~~~~~~~~
+
+SPP container includes Dockerfiles for each of distributions and
+its versions.
+For instance, Dockerfiles for Ubuntu are found in ``build/ubuntu``
+directory.
+You notice that each of Dockerfiles has its version as a part of
+file name.
+In other words, the list of Dockerfiles under the ``ubuntu`` directory
+shows all of supported versions of Ubuntu.
+You can not find Dockerfiles for CentOS as ``build/centos`` or other
+distributions because it is not supported currently.
+It is included in a future release.
+
+.. code-block:: console
+
+    $ tree build/ubuntu/
+    build/ubuntu/
+    ├── dpdk
+    │   ├── Dockerfile.16.04
+    │   ├── Dockerfile.18.04
+    │   └── Dockerfile.latest
+    ├── pktgen
+    │   ├── Dockerfile.16.04
+    │   ├── Dockerfile.18.04
+    │   └── Dockerfile.latest
+    └── spp
+        ├── Dockerfile.16.04
+        ├── Dockerfile.18.04
+        └── Dockerfile.latest
+
+
+.. _sppc_build_img_inspect:
+
+Inspect Inside of Container
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Container is useful, but just bit annoying to inspect inside
+the container because it is cleaned up immediately after process
+is finished and there is no clue what is happened in.
+
+``build/run.sh`` is a helper script to inspect inside the container.
+You can run ``bash`` on the container to confirm behaviour of
+targetting application, or run any of command.
+
+This script refers ``ubuntu/dpdk/env.sh`` for Ubuntu image  to include
+environment variables.
+So, it is failed to ``build/run.sh`` if this config file
+does not exist.
+You can create it from ``build/build.py`` with ``--only-envsh`` option
+if you removed it accidentally.
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 08/15] docs: add manual for app container launchers
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (6 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 07/15] docs: add build image " ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 09/15] docs: add use cases of SPP container ogawa.yasufumi
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

App container launcher is a python script for launching DPDK app on
a container. It composes docker command and app command with given
options to launch the container.

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/app_launcher.rst | 1061 +++++++++++++++++++++++
 1 file changed, 1061 insertions(+)
 create mode 100644 docs/guides/tools/sppc/app_launcher.rst

diff --git a/docs/guides/tools/sppc/app_launcher.rst b/docs/guides/tools/sppc/app_launcher.rst
new file mode 100644
index 0000000..c7e97d4
--- /dev/null
+++ b/docs/guides/tools/sppc/app_launcher.rst
@@ -0,0 +1,1061 @@
+.. _spp_container_app_launcher:
+
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+
+.. _sppc_appl_appl:
+
+App Container Launchers
+=======================
+
+App container launcher is a python script for running SPP or DPDK
+application on a container.
+As described by name, for instance, ``pktgen.py`` launches pktgen-dpdk
+inside a container.
+
+
+.. code-block:: console
+
+    $ tree app/
+    app/
+    ...
+    ├── helloworld.py
+    ├── l2fwd.py
+    ├── l3fwd.py
+    ├── load-balancer.py
+    ├── pktgen.py
+    ├── spp-nfv.py
+    ├── spp-primary.py
+    ├── spp-vm.py
+    └── testpmd.py
+
+
+.. note::
+
+    As described in
+    :ref:`sppc_gs_build_docker_imgs`
+    section, you had better to use Ubuntu 16.04 with
+    ``--dist-ver`` option because SPP container is not stable for running
+    on the latest version.
+
+    Please notice that examples in this section does not use ``dist-ver``
+    options explicitly for simplicity.
+
+
+.. _sppc_appl_setup:
+
+Setup
+-----
+
+You should define ``SPP_CTRL_IP`` environment variable to SPP controller
+be accessed from other SPP processes inside containers.
+SPP controller is a CLI tool for accepting user's commands.
+
+You cannot use ``127.0.0.1`` or ``localhost`` for ``SPP_CTRL_IP``
+because SPP processes try to find SPP controller inside each of
+containers and fail to.
+From inside of the container, SPP processes should be known IP address
+other than ``127.0.0.1`` or ``localhost``
+of host on which SPP controller running.
+
+SPP controller should be launched before other SPP processes.
+
+.. code-block:: console
+
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+
+.. _sppc_appl_spp_primary:
+
+SPP Primary Container
+---------------------
+
+SPP primary process is launched from ``app/spp-primary.py`` as an
+app container.
+It manages resources on host from inside the container.
+``app/spp-primary.py`` calls ``docker run`` with
+``-v`` option to mount hugepages and other devices in the container
+to share them between host and containers.
+
+SPP primary process is launched as foreground or background mode.
+You can show statistics of packet forwarding if you launch it with
+two cores and in foreground mode.
+In this case, SPP primary uses one for resource management and
+another one for showing statistics.
+If you need to minimize the usage of cores, or are not interested in
+the statistics,
+you should give just one core and run in background mode.
+If you run SPP primary in foreground mode with one core,
+it shows log messages which is also referred in syslog.
+
+Here is an example for launching SPP primary with core list 0-1 in
+foreground mode.
+You should give portmask opiton ``-p`` because SPP primary requires
+at least one port, or failed to launch.
+This example is assumed that host machine has two or more
+physical ports.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary -l 0-1 -p 0x03 -fg
+
+It is another example with one core and two ports in background mode.
+
+.. code-block:: console
+
+    $ python app/spp-primary -l 0 -p 0x03
+
+SPP primary is able to run with virtual devices instead of
+physical NICs for a case
+you do not have dedicated NICs for DPDK.
+SPP container supports two types of virtual device with options.
+
+* ``--dev-tap-ids`` or ``-dt``:  Add TAP devices
+* ``--dev-vhost-ids`` or ``-dv``: Add vhost devices
+
+.. code-block:: console
+
+    $ python app/spp-primary -l 0 -dt 1,2 -p 0x03
+
+
+
+If you need to inspect a docker command without launching
+a container, use ``--dry-run`` option.
+It composes docker command and just display it without running the
+docker command.
+
+You refer all of options with ``-h`` option.
+Options of app container scripts are categorized four types.
+First one is EAL option, for example ``-l``, ``-c`` or ``-m``.
+Second one is app container option which is a common set of options for
+app containers connected with SPP. So, containers of SPP processes do
+not have app container option.
+Third one is application specific option. In this case,
+``-n``, ``-p`` or ``-ip``.
+Final one is container option, for example ``--dist-name`` or
+``--ci``.
+EAL options and container options are common for all of app container
+scripts.
+On the other hand, application specific options are different each other.
+
+.. code-block:: console
+
+    $ python app/spp-primary.py -h
+    usage: spp-primary.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                          [--socket-mem SOCKET_MEM]
+                          [--nof-memchan NOF_MEMCHAN]
+                          [-n NOF_RING] [-p PORT_MASK] [-dv DEV_VHOST_IDS]
+                          [-dt DEV_TAP_IDS] [-ip CTRL_IP]
+                          [--ctrl-port CTRL_PORT]
+                          [--dist-name DIST_NAME] [--dist-ver DIST_VER]
+                          [-ci CONTAINER_IMAGE] [-fg] [--dry-run]
+    
+    Launcher for spp-primary application container
+    
+    optional arguments:
+      -h, --help            show this help message and exit
+      -l CORE_LIST, --core-list CORE_LIST
+                            Core list
+      -c CORE_MASK, --core-mask CORE_MASK
+                            Core mask
+      -m MEM, --mem MEM     Memory size (default is 1024)
+      --socket-mem SOCKET_MEM
+                            Memory size
+      --nof-memchan NOF_MEMCHAN
+                            Number of memory channels (default is 4)
+      -n NOF_RING, --nof-ring NOF_RING
+                            Maximum number of Ring PMD
+      -p PORT_MASK, --port-mask PORT_MASK
+                            Port mask
+      -dv DEV_VHOST_IDS, --dev-vhost-ids DEV_VHOST_IDS
+                            vhost device IDs
+      -dt DEV_TAP_IDS, --dev-tap-ids DEV_TAP_IDS
+                            TAP device IDs
+      -ip CTRL_IP, --ctrl-ip CTRL_IP
+                            IP address of SPP controller
+      --ctrl-port CTRL_PORT
+                            Port of SPP controller
+      --dist-name DIST_NAME
+                            Name of Linux distribution
+      --dist-ver DIST_VER   Version of Linux distribution
+      -ci CONTAINER_IMAGE, --container-image CONTAINER_IMAGE
+                            Name of container image
+      -fg, --foreground     Run container as foreground mode
+      --dry-run             Only print matrix, do not run, and exit
+
+
+.. _sppc_appl_spp_secondary:
+
+SPP Secondary Container
+-----------------------
+
+In SPP, there are three types of secondary process, ``spp_nfv``,
+``spp_vm`` and  ``spp_vf``.
+However, SPP container does not support ``spp_vf`` currently.
+
+``spp_nfv`` is usually used for forwarding packets on host and
+``spp_vm`` is used for insidea a virtual machine.
+However, in a context of container, the usage is just a bit different.
+Both of secondary processes are launched as app containers,
+but ``spp_vm`` container has virtio interfaces while ``spp_nfv``
+container does not have it.
+It means that ``spp_nfv`` behaves as a path between NICs or containers,
+but ``spp_vm`` is a client of ``spp_nfv`` and simply forwarding from rx
+to tx ports. You do not need to use ``spp_vm`` without some cases for
+using virtual machines.
+
+``spp-nfv.py`` launches ``spp_nfv`` as an app container and requires
+options for secondary ID and core list (or core mask).
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-nfv.py -i 1 -l 2-3
+
+Refer help for all of options and usges.
+It shows only application specific options for simplicity.
+
+
+.. code-block:: console
+
+    $ python app/spp-nfv.py -h
+    usage: spp-nfv.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                      [--socket-mem SOCKET_MEM] [--nof-memchan NOF_MEMCHAN]
+                      [-i SEC_ID] [-ip CTRL_IP] [--ctrl-port CTRL_PORT]
+                      [--dist-name DIST_NAME] [--dist-ver DIST_VER]
+                      [-ci CONTAINER_IMAGE] [-fg] [--dry-run]
+    
+    Launcher for spp-nfv application container
+    
+    optional arguments:
+      ...
+      -i SEC_ID, --sec-id SEC_ID
+                            Secondary ID
+      -ip CTRL_IP, --ctrl-ip CTRL_IP
+                            IP address of SPP controller
+      --ctrl-port CTRL_PORT
+                            Port of SPP controller
+      ...
+
+
+For launching ``spp_vm`` for vhost interface, it is required to assign
+a vhost device ID from ``app/spp-nfv.py`` and launch ``app/spp-vm.py``
+with same ID..
+
+.. code-block:: console
+
+    # Add vhost 1 from spp-nfv.py of sec 1
+    spp > sec 1;add vhost 1
+
+Launch a secondary container with device ID 1.
+
+.. code-block:: console
+
+    $ python app/spp-vm.py -i 2 -l 4-5 -d 1
+
+
+.. _sppc_appl_l2fwd:
+
+L2fwd Container
+---------------
+
+``app/l2fwd.py`` is a launcher script for DPDK ``l2fwd`` sample
+application.
+It launches ``l2fwd`` on a container with specified
+vhost interfaces.
+
+This is an example for launching with two cores (6-7th cores) with
+``-l`` and two vhost interfaces with ``-d``.
+``l2fwd`` requires ``--port-mask`` or ``-p`` option and the number of
+ports should be even number.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/l2fwd.py -l 6-7 -d 1,2 -p 0x03 -fg
+    ...
+
+Refer help for all of options and usges.
+It includes app container options, for example ``-d`` for vhost devices
+and ``-nq`` for the number of queues of virtio, because ``l2fwd`` is not
+a SPP process.
+It shows options without of EAL and container for simplicity.
+
+.. code-block:: console
+
+    $ python app/l2fwd.py -h
+    usage: l2fwd.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                    [--socket-mem SOCKET_MEM] [--nof-memchan NOF_MEMCHAN]
+                    [-d DEV_IDS] [-nq NOF_QUEUES] [--no-privileged]
+                    [-p PORT_MASK]
+                    [--dist-name DIST_NAME] [--dist-ver DIST_VER]
+                    [-ci CONTAINER_IMAGE] [-fg] [--dry-run]
+    
+    Launcher for l2fwd application container
+    
+    optional arguments:
+      ...
+      -d DEV_IDS, --dev-ids DEV_IDS
+                            two or more even vhost device IDs
+      -nq NOF_QUEUES, --nof-queues NOF_QUEUES
+                            Number of queues of virtio (default is 1)
+      --no-privileged       Disable docker's privileged mode if it's needed
+      -p PORT_MASK, --port-mask PORT_MASK
+                            Port mask
+      ...
+
+
+.. _sppc_appl_l3fwd:
+
+L3fwd Container
+---------------
+
+`L3fwd
+<https://dpdk.org/doc/guides/sample_app_ug/l3_forward.html>`_
+application is a simple example of packet processing
+using the DPDK.
+Differed from l2fwd, the forwarding decision is made based on
+information read from input packet.
+This application provides LPM (longest prefix match) or
+EM (exact match) methods for packet classification.
+
+``app/l3fwd.py`` launches l3fwd on a container. 
+As ``l3fwd`` application, this python script takes several options
+other than EAL for port configurations and classification methods.
+The mandatory options for the application are ``-p`` for portmask
+and ``--config`` for rx as a set of combination of
+``(port, queue, locre)``.
+
+Here is an example for launching l3fwd app container with two vhost
+interfaces and printed log messages.
+There are two rx ports. ``(0,0,1)`` is for queue of port 0 for which 
+lcore 1 is assigned, and ``(1,0,2)`` is for port 1.
+In this case, you should add ``-nq`` option because the number of both
+of rx and tx queues are two while the default number of virtio device
+is one.
+The number of tx queues, is two in this case, is decided to be the same
+value as the number of lcores.
+In ``--vdev`` option setup in the script, the number of queues is
+defined as ``virtio_...,queues=2,...``.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/l3fwd.py -l 1-2 -nq 2 -d 1,2 \
+      -p 0x03 --config="(0,0,1),(1,0,2)" -fg
+      sudo docker run \
+      -it \
+      ...
+      --vdev virtio_user1,queues=2,path=/var/run/usvhost1 \
+      --vdev virtio_user2,queues=2,path=/var/run/usvhost2 \
+      --file-prefix spp-l3fwd-container1 \
+      -- \
+      -p 0x03 \
+      --config "(0,0,8),(1,0,9)" \
+      --parse-ptype ipv4
+      EAL: Detected 16 lcore(s)
+      EAL: Auto-detected process type: PRIMARY
+      EAL: Multi-process socket /var/run/.spp-l3fwd-container1_unix
+      EAL: Probing VFIO support...
+      soft parse-ptype is enabled
+      LPM or EM none selected, default LPM on
+      Initializing port 0 ... Creating queues: nb_rxq=1 nb_txq=2...
+      LPM: Adding route 0x01010100 / 24 (0)
+      LPM: Adding route 0x02010100 / 24 (1)
+      LPM: Adding route IPV6 / 48 (0)
+      LPM: Adding route IPV6 / 48 (1)
+      txq=8,0,0 txq=9,1,0
+      Initializing port 1 ... Creating queues: nb_rxq=1 nb_txq=2...
+
+      Initializing rx queues on lcore 8 ... rxq=0,0,0
+      Initializing rx queues on lcore 9 ... rxq=1,0,0
+      ...
+
+You can increase lcores more than the number of ports, for instance,
+four lcores for two ports.
+However, remaining 3rd and 4th lcores do nothing and require
+``-nq 4`` for tx queues.
+
+Default classification rule is ``LPM`` and the routing table is defined
+in ``dpdk/examples/l3fwd/l3fwd_lpm.c`` as below.
+
+.. code-block:: c
+
+    static struct ipv4_l3fwd_lpm_route ipv4_l3fwd_lpm_route_array[] = { 
+            {IPv4(1, 1, 1, 0), 24, 0}, 
+            {IPv4(2, 1, 1, 0), 24, 1}, 
+            {IPv4(3, 1, 1, 0), 24, 2}, 
+            {IPv4(4, 1, 1, 0), 24, 3},
+            {IPv4(5, 1, 1, 0), 24, 4},
+            {IPv4(6, 1, 1, 0), 24, 5},
+            {IPv4(7, 1, 1, 0), 24, 6},
+            {IPv4(8, 1, 1, 0), 24, 7},
+    };
+
+
+Refer help for all of options and usges.
+It shows options without of EAL and container for simplicity.
+
+.. code-block:: console
+
+    $ python app/l3fwd.py -h
+    usage: l3fwd.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                    [--socket-mem SOCKET_MEM] [--nof-memchan NOF_MEMCHAN]
+                    [-d DEV_IDS] [-nq NOF_QUEUES] [--no-privileged]
+                    [-p PORT_MASK] [--config CONFIG] [-P] [-E] [-L]
+                    [-dst [ETH_DEST [ETH_DEST ...]]] [--enable-jumbo]
+                    [--max-pkt-len MAX_PKT_LEN] [--no-numa]
+                    [--hash-entry-num] [--ipv6] [--parse-ptype PARSE_PTYPE]
+                    [--dist-name DIST_NAME] [--dist-ver DIST_VER]
+                    [-ci CONTAINER_IMAGE] [-fg] [--dry-run]
+    
+    Launcher for l3fwd application container
+    
+    optional arguments:
+      ...
+      -d DEV_IDS, --dev-ids DEV_IDS
+                            two or more even vhost device IDs
+      -nq NOF_QUEUES, --nof-queues NOF_QUEUES
+                            Number of queues of virtio (default is 1)
+      --no-privileged       Disable docker's privileged mode if it's needed
+      -p PORT_MASK, --port-mask PORT_MASK
+                            (Mandatory) Port mask
+      --config CONFIG       (Mandatory) Define set of port, queue, lcore for
+                            ports
+      -P, --promiscous      Set all ports to promiscous mode (default is None)
+      -E, --exact-match     Enable exact match (default is None)
+      -L, --longest-prefix-match
+                            Enable longest prefix match (default is None)
+      -dst [ETH_DEST [ETH_DEST ...]], --eth-dest [ETH_DEST [ETH_DEST ...]]
+                            Ethernet dest for port X (X,MM:MM:MM:MM:MM:MM)
+      --enable-jumbo        Enable jumbo frames, [--enable-jumbo [--max-pkt-len
+                            PKTLEN]]
+      --max-pkt-len MAX_PKT_LEN
+                            Max packet length (64-9600) if jumbo is enabled.
+      --no-numa             Disable NUMA awareness (default is None)
+      --hash-entry-num      Specify the hash entry number in hexadecimal
+                            (default is None)
+      --ipv6                Specify the hash entry number in hexadecimal
+                            (default is None)
+      --parse-ptype PARSE_PTYPE
+                            Set analyze packet type, ipv4 or ipv6 (default is
+                            ipv4)
+      ...
+
+
+.. _sppc_appl_testpmd:
+
+Testpmd Container
+-----------------
+
+``testpmd.py`` is a launcher script for DPDK's
+`testpmd
+<https://dpdk.org/doc/guides/testpmd_app_ug/index.html>`_
+application.
+
+It launches ``testpmd`` inside a container with specified
+vhost interfaces.
+
+This is an example for launching with three cores (6-8th cores)
+and two vhost interfaces.
+This example is for launching ``testpmd`` in interactive mode.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/testpmd.py -l 6-8 -d 1,2 -fg -i
+    sudo docker run \
+     ...
+     -- \
+     --interactive
+     ...
+     Checking link statuses...
+     Done
+     testpmd>
+
+Testpmd has many useful options. Please refer to
+`Running the Application
+<https://dpdk.org/doc/guides/testpmd_app_ug/run_app.html>`_
+section for instructions.
+
+.. note::
+    ``testpmd.py`` does not support all of options of testpmd currently.
+    You can find all of options with ``-h`` option, but some of them
+    is not implemented. If you run testpmd with not supported option,
+    It just prints an error message to mention.
+
+    .. code-block:: console
+
+        $ python app/testpmd.py -l 1,2 -d 1,2 --port-topology=chained
+        Error: '--port-topology' is not supported yet
+
+
+Refer help for all of options and usges.
+It shows options without of EAL and container.
+
+.. code-block:: console
+
+    $ python app/testpmd.py -h
+    usage: testpmd.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                      [--socket-mem SOCKET_MEM] [--nof-memchan NOF_MEMCHAN]
+                      [-d DEV_IDS] [-nq NOF_QUEUES] [--no-privileged]
+                      [--pci] [-i] [-a] [--tx-first]
+                      [--stats-period STATS_PERIOD]
+                      [--nb-cores NB_CORES] [--coremask COREMASK]
+                      [--portmask PORTMASK] [--no-numa]
+                      [--port-numa-config PORT_NUMA_CONFIG]
+                      [--ring-numa-config RING_NUMA_CONFIG]
+                      [--socket-num SOCKET_NUM] [--mbuf-size MBUF_SIZE]
+                      [--total-num-mbufs TOTAL_NUM_MBUFS]
+                      [--max-pkt-len MAX_PKT_LEN]
+                      [--eth-peers-configfile ETH_PEERS_CONFIGFILE]
+                      [--eth-peer ETH_PEER] [--pkt-filter-mode PKT_FILTER_MODE]
+                      [--pkt-filter-report-hash PKT_FILTER_REPORT_HASH]
+                      [--pkt-filter-size PKT_FILTER_SIZE]
+                      [--pkt-filter-flexbytes-offset PKT_FILTER_FLEXBYTES_OFFSET]
+                      [--pkt-filter-drop-queue PKT_FILTER_DROP_QUEUE]
+                      [--disable-crc-strip] [--enable-lro] [--enable-rx-cksum]
+                      [--enable-scatter] [--enable-hw-vlan]
+                      [--enable-hw-vlan-filter] [--enable-hw-vlan-strip]
+                      [--enable-hw-vlan-extend] [--enable-drop-en] 
+                      [--disable-rss] [--port-topology PORT_TOPOLOGY]
+                      [--forward-mode FORWARD_MODE] [--rss-ip] [--rss-udp]
+                      [--rxq RXQ] [--rxd RXD] [--txq TXQ] [--txd TXD]
+                      [--burst BURST] [--mbcache MBCACHE] [--rxpt RXPT]
+                      [--rxht RXHT] [--rxfreet RXFREET] [--rxwt RXWT]
+                      [--txpt TXPT] [--txht TXHT] [--txwt TXWT]
+                      [--txfreet TXFREET] [--txrst TXRST]
+                      [--rx-queue-stats-mapping RX_QUEUE_STATS_MAPPING]
+                      [--tx-queue-stats-mapping TX_QUEUE_STATS_MAPPING]
+                      [--no-flush-rx] [--txpkts TXPKTS] [--disable-link-check]
+                      [--no-lsc-interrupt] [--no-rmv-interrupt]
+                      [--bitrate-stats [BITRATE_STATS [BITRATE_STATS ...]]]
+                      [--print-event PRINT_EVENT] [--mask-event MASK_EVENT]
+                      [--flow-isolate-all] [--tx-offloads TX_OFFLOADS]
+                      [--hot-plug] [--vxlan-gpe-port VXLAN_GPE_PORT]
+                      [--mlockall] [--no-mlockall] [--dist-name DIST_NAME]
+                      [--dist-ver DIST_VER] [-ci CONTAINER_IMAGE] [-fg]
+                      [--dry-run]
+    
+    Launcher for testpmd application container
+    
+    optional arguments:
+      ...
+      -d DEV_IDS, --dev-ids DEV_IDS
+                            two or more even vhost device IDs
+      -nq NOF_QUEUES, --nof-queues NOF_QUEUES
+                            Number of queues of virtio (default is 1)
+      --no-privileged       Disable docker's privileged mode if it's needed
+      --pci                 Enable PCI (default is None)
+      -i, --interactive     Run in interactive mode (default is None)
+      -a, --auto-start      Start forwarding on initialization (default is None)
+      --tx-first            Start forwarding, after sending a burst of packets
+                            first
+      --stats-period STATS_PERIOD
+                            Period of displaying stats, if interactive is
+                            disabled
+      --nb-cores NB_CORES   Number of forwarding cores
+      --coremask COREMASK   Hexadecimal bitmask of the cores, do not include
+                            master lcore
+      --portmask PORTMASK   Hexadecimal bitmask of the ports
+      --no-numa             Disable NUMA-aware allocation of RX/TX rings and RX
+                            mbuf
+      --port-numa-config PORT_NUMA_CONFIG
+                            Specify port allocation as
+                            (port,socket)[,(port,socket)]
+      --ring-numa-config RING_NUMA_CONFIG
+                            Specify ring allocation as
+                            (port,flag,socket)[,(port,flag,socket)]
+      --socket-num SOCKET_NUM
+                            Socket from which all memory is allocated in NUMA
+                            mode
+      --mbuf-size MBUF_SIZE
+                            Size of mbufs used to N (< 65536) bytes (default is
+                            2048)
+      --total-num-mbufs TOTAL_NUM_MBUFS
+                            Number of mbufs allocated in mbuf pools, N > 1024.
+      --max-pkt-len MAX_PKT_LEN
+                            Maximum packet size to N (>= 64) bytes (default is
+                            1518)
+      --eth-peers-configfile ETH_PEERS_CONFIGFILE
+                            Config file of Ether addrs of the peer ports
+      --eth-peer ETH_PEER   Set MAC addr of port N as 'N,XX:XX:XX:XX:XX:XX'
+      --pkt-filter-mode PKT_FILTER_MODE
+                            Flow Director mode, 'none'(default), 'signature' or
+                            'perfect'
+      --pkt-filter-report-hash PKT_FILTER_REPORT_HASH
+                            Flow Director hash match mode, 'none',
+                            'match'(default) or 'always'
+      --pkt-filter-size PKT_FILTER_SIZE
+                            Flow Director memory size ('64K', '128K', '256K').
+                            The default is 64K.
+      --pkt-filter-flexbytes-offset PKT_FILTER_FLEXBYTES_OFFSET
+                            Flexbytes offset (0-32, default is 0x6) defined in
+                            words counted from the first byte of the dest MAC
+                            address
+      --pkt-filter-drop-queue PKT_FILTER_DROP_QUEUE
+                            Set the drop-queue (default is 127)
+      --disable-crc-strip   Disable hardware CRC stripping
+      --enable-lro          Enable large receive offload
+      --enable-rx-cksum     Enable hardware RX checksum offload
+      --enable-scatter      Enable scatter (multi-segment) RX
+      --enable-hw-vlan      Enable hardware vlan (default is None)
+      --enable-hw-vlan-filter
+                            Enable hardware VLAN filter
+      --enable-hw-vlan-strip
+                            Enable hardware VLAN strip
+      --enable-hw-vlan-extend
+                            Enable hardware VLAN extend
+      --enable-drop-en      Enable per-queue packet drop if no descriptors
+      --disable-rss         Disable RSS (Receive Side Scaling
+      --port-topology PORT_TOPOLOGY
+                            Port topology, 'paired' (the default) or 'chained'
+      --forward-mode FORWARD_MODE
+                            Forwarding mode, 'io' (default), 'mac', 'mac_swap',
+                            'flowgen', 'rxonly', 'txonly', 'csum', 'icmpecho',
+                            'ieee1588', 'tm'
+      --rss-ip              Set RSS functions for IPv4/IPv6 only
+      --rss-udp             Set RSS functions for IPv4/IPv6 and UDP
+      --rxq RXQ             Number of RX queues per port, 1-65535 (default is 1)
+      --rxd RXD             Number of descriptors in the RX rings
+                            (default is 128)
+      --txq TXQ             Number of TX queues per port, 1-65535 (default is 1)
+      --txd TXD             Number of descriptors in the TX rings
+                            (default is 512)
+      --burst BURST         Number of packets per burst, 1-512 (default is 32)
+      --mbcache MBCACHE     Cache of mbuf memory pools, 0-512 (default is 16)
+      --rxpt RXPT           Prefetch threshold register of RX rings
+                            (default is 8)
+      --rxht RXHT           Host threshold register of RX rings (default is 8)
+      --rxfreet RXFREET     Free threshold of RX descriptors,0-'rxd' (default is
+                            0)
+      --rxwt RXWT           Write-back threshold register of RX rings
+                            (default is 4)
+      --txpt TXPT           Prefetch threshold register of TX rings (default is
+                            36)
+      --txht TXHT           Host threshold register of TX rings (default is 0)
+      --txwt TXWT           Write-back threshold register of TX rings (default
+                            is 0)
+      --txfreet TXFREET     Free threshold of RX descriptors, 0-'txd' (default
+                            is 0)
+      --txrst TXRST         Transmit RS bit threshold of TX rings, 0-'txd'
+                            (default is 0)
+      --rx-queue-stats-mapping RX_QUEUE_STATS_MAPPING
+                            RX queues statistics counters mapping 0-15 as
+                            '(port,queue,mapping)[,(port,queue,mapping)]'
+      --tx-queue-stats-mapping TX_QUEUE_STATS_MAPPING
+                            TX queues statistics counters mapping 0-15 as
+                            '(port,queue,mapping)[,(port,queue,mapping)]'
+      --no-flush-rx         Don’t flush the RX streams before starting
+                            forwarding, Used mainly with the PCAP PMD
+      --txpkts TXPKTS       TX segment sizes or total packet length, Valid for
+                            tx-only and flowgen
+      --disable-link-check  Disable check on link status when starting/stopping
+                            ports
+      --no-lsc-interrupt    Disable LSC interrupts for all ports
+      --no-rmv-interrupt    Disable RMV interrupts for all ports
+      --bitrate-stats [BITRATE_STATS [BITRATE_STATS ...]]
+                            Logical core N to perform bitrate calculation
+      --print-event PRINT_EVENT
+                            Enable printing the occurrence of the designated
+                            event, <unknown|intr_lsc|queue_state|intr_reset|
+                            vf_mbox|macsec|intr_rmv|dev_probed|dev_released|
+                            all>
+      --mask-event MASK_EVENT
+                            Disable printing the occurrence of the designated
+                            event, <unknown|intr_lsc|queue_state|intr_reset|
+                            vf_mbox|macsec|intr_rmv|dev_probed|dev_released|
+                            all>
+      --flow-isolate-all    Providing this parameter requests flow API isolated
+                            mode on all ports at initialization time
+      --tx-offloads TX_OFFLOADS
+                            Hexadecimal bitmask of TX queue offloads (default
+                            is 0)
+      --hot-plug            Enable device event monitor machenism for hotplug
+      --vxlan-gpe-port VXLAN_GPE_PORT
+                            UDP port number of tunnel VXLAN-GPE (default is
+                            4790)
+      --mlockall            Enable locking all memory
+      --no-mlockall         Disable locking all memory
+      ...
+
+
+.. _sppc_appl_pktgen:
+
+Pktgen-dpdk Container
+---------------------
+
+``pktgen.py`` is a launcher script for 
+`pktgen-dpdk
+<http://pktgen-dpdk.readthedocs.io/en/latest/index.html>`_.
+Pktgen is a software based traffic generator powered by the DPDK
+fast packet processing framework.
+It is not only high-performance for generating 10GB traffic with
+64 byte frames, but also very configurable to handle packets with
+UDP, TCP, ARP, ICMP, GRE, MPLS and Queue-in-Queue.
+It also supports
+`Lua
+<https://www.lua.org/>`_
+for detailed configurations.
+
+This ``pktgen.py`` script launches ``pktgen`` app container
+with specified vhost interfaces.
+Here is an example for launching with seven lcores (8-14th)
+and three vhost interfaces.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/pktgen.py -l 8-14 -d 1-3 -fg --dist-ver 16.04
+    sudo docker run \
+     ...
+     sppc/pktgen-ubuntu:16.04 \
+     /root/dpdk/../pktgen-dpdk/app/x86_64-native-linuxapp-gcc/pktgen \
+     -l 8-14 \
+     ...
+     -- \
+     -m [9:10].0,[11:12].1,[13:14].2
+     ...
+
+You notice that given lcores ``-l 8-14`` are assigned appropriately.
+Lcore 8 is used as master and remaining six lcores are use to worker
+threads for three ports as ``-m [9:10].0,[11:12].1,[13:14].2`` equally.
+If the number of given lcores is larger than required,
+remained lcores are simply not used.
+
+Calculation of core assignment of ``pktgen.py`` currently is supporting
+up to four lcores for each of ports.
+If you assign fire or more lcores to a port, ``pktgen.py`` terminates
+to launch app container.
+It is because a usecase more than four lcores is rare and
+calculation is to be complicated.
+
+.. code-block:: console
+
+    # Assign five lcores for a slave is failed to launch
+    $ python app/pktgen.py -l 6-11 -d 1
+    Error: Too many cores for calculation for port assignment!
+    Please consider to use '--matrix' for assigning directly
+
+Here are other examples of lcore assignment of ``pktgen.py`` to help
+your understanding.
+
+**1. Three lcores for two ports**
+
+Assign one lcore to master and two lcores two slaves for two ports.
+
+.. code-block:: console
+
+    $ python app/pktgen.py -l 6-8 -d 1,2
+     ...
+     -m 7.0,8.1 \
+
+
+**2. Seven lcores for three ports**
+
+Assign one lcore for master and each of two lcores to
+three slaves for three ports.
+
+.. code-block:: console
+
+    $ python app/pktgen.py -l 6-12 -d 1,2,3
+     ...
+     -m [7:8].0,[9:10].1,[11:12].2 \
+
+
+**3. Seven lcores for two ports**
+
+Assign one lcore for master and each of three lcores to
+two slaves for two ports.
+In this case, each of three lcores cannot be assigned rx and tx port
+equally, so given two lcores to rx and one core to tx.
+
+.. code-block:: console
+
+    $ python app/pktgen.py -l 6-12 -d 1,2
+     ...
+     -m [7-8:9].0,[10-11:12].1 \
+
+
+Refer help for all of options and usges.
+It shows options without of EAL and container for simplicity.
+
+.. code-block:: console
+
+    $ python app/pktgen.py -h
+    usage: pktgen.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                     [--socket-mem SOCKET_MEM] [--nof-memchan NOF_MEMCHAN]
+                     [-d DEV_IDS] [-nq NOF_QUEUES] [--no-privileged]
+                     [--matrix MATRIX] [--log-level LOG_LEVEL]
+                     [--dist-name DIST_NAME] [--dist-ver DIST_VER]
+                     [-ci CONTAINER_IMAGE] [-fg] [--dry-run]
+    
+    Launcher for pktgen-dpdk application container
+    
+    optional arguments:
+      ...
+      -d DEV_IDS, --dev-ids DEV_IDS
+                            two or more even vhost device IDs
+      -nq NOF_QUEUES, --nof-queues NOF_QUEUES
+                            Number of queues of virtio (default is 1)
+      --no-privileged       Disable docker's privileged mode if it's needed
+      -s PCAP_FILE, --pcap-file PCAP_FILE
+                            PCAP packet flow file of port, defined as
+                            'N:filename'
+      -f SCRIPT_FILE, --script-file SCRIPT_FILE
+                            Pktgen script (.pkt) to or a Lua script (.lua)
+      -lf LOG_FILE, --log-file LOG_FILE
+                            Filename to write a log, as '-l' of pktgen
+      -P, --promiscuous     Enable PROMISCUOUS mode on all ports
+      -G, --sock-default    Enable socket support using default server values
+                            of localhost:0x5606
+      -g SOCK_ADDRESS, --sock-address SOCK_ADDRESS
+                            Same as -G but with an optional IP address and port
+                            number
+      -T, --term-color      Enable color terminal output in VT100
+      -N, --numa            Enable NUMA support
+      --matrix MATRIX       Matrix of cores and port as '-m' of pktgen, such as
+                            [1:2].0 or 1.0
+      ...
+
+
+.. _sppc_appl_load_balancer:
+
+Load-Balancer Container
+-----------------------
+
+`Load-Balancer
+<https://dpdk.org/doc/guides/sample_app_ug/load_balancer.html>`_
+is an application distributes packet I/O task with several worker
+lcores to share IP addressing.
+
+There are three types of lcore roles in this application, rx, tx and
+worker lcores. Rx lcores retrieve packets from NICs and Tx lcores
+send it to the destinations.
+Worker lcores intermediate them, receive packets from rx lcores,
+classify by looking up the address and send it to each of destination
+tx lcores.
+Each of lcores has a set of references of lcore ID and queue
+as described in `Application Configuration
+<https://dpdk.org/doc/guides/sample_app_ug/load_balancer.html#explanation>`_.
+
+``load-balancer.py`` expects four mandatory options.
+
+  * -rx: "(PORT, QUEUE, LCORE), ...", list of NIC RX ports and
+    queues handled by the I/O RX lcores. This parameter also implicitly
+    defines the list of I/O RX lcores.
+  * -tx: "(PORT, LCORE), ...", list of NIC TX ports handled by
+    the I/O TX lcores. This parameter also implicitly defines the list
+    of I/O TX lcores.
+  * -w: The list of the worker lcores.
+  * --lpm: "IP / PREFIX => PORT", list of LPM rules used by the worker
+    lcores for packet forwarding.
+
+Here is an example for one rx, one tx and two worker on lcores 8-10.
+Both of rx and rx is assinged to the same lcore 8.
+It receives packets from port 0 and forwards it port 0 or 1.
+The destination port is defined as ``--lpm`` option.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/load-balancer.py -fg -l 8-10  -d 1,2 \
+    -rx "(0,0,8)" -tx "(0,8),(1,8)" -w 9,10 \
+    --lpm "1.0.0.0/24=>0; 1.0.1.0/24=>1;"
+
+If you are succeeded to launch the app container,
+it shows details of rx, tx, worker lcores and LPM rules
+, and starts forwarding.
+
+.. code-block:: console
+
+    ...
+    Checking link statusdone
+    Port0 Link Up - speed 10000Mbps - full-duplex
+    Port1 Link Up - speed 10000Mbps - full-duplex
+    Initialization completed.
+    NIC RX ports: 0 (0 )  ;
+    I/O lcore 8 (socket 0): RX ports  (0, 0)  ; Output rings  0x7f9af7347...
+    Worker lcore 9 (socket 0) ID 0: Input rings  0x7f9af7347880  ;
+    Worker lcore 10 (socket 0) ID 1: Input rings  0x7f9af7345680  ;
+    
+    NIC TX ports:  0  1  ;
+    I/O lcore 8 (socket 0): Input rings per TX port  0 (0x7f9af7343480 ...
+    Worker lcore 9 (socket 0) ID 0: 
+    Output rings per TX port  0 (0x7f9af7343480)  1 (0x7f9af7341280)  ;
+    Worker lcore 10 (socket 0) ID 1: 
+    Output rings per TX port  0 (0x7f9af733f080)  1 (0x7f9af733ce80)  ;
+    LPM rules: 
+    	0: 1.0.0.0/24 => 0;
+    	1: 1.0.1.0/24 => 1;
+    Ring sizes: NIC RX = 1024; Worker in = 1024; Worker out = 1024; NIC TX...
+    Burst sizes: I/O RX (rd = 144, wr = 144); Worker (rd = 144, wr = 144);...
+    Logical core 9 (worker 0) main loop.
+    Logical core 10 (worker 1) main loop.
+    Logical core 8 (I/O) main loop.
+    
+
+To stop forwarding, you need to terminate the application
+but might not able to with *Ctrl-C*.
+In this case, you can use ``docker kill`` command to terminate it.
+Find the name of container on which ``load_balancer`` is running
+and kill it.
+
+.. code-block:: console
+
+    $ docker ps
+    CONTAINER ID  IMAGE                   ...  NAMES
+    80ce3711b85e  sppc/dpdk-ubuntu:16.04  ...  competent_galileo  # kill it
+    281aa8f236ef  sppc/spp-ubuntu:16.04   ...  youthful_mcnulty
+    $ docker kill competent_galileo
+
+
+.. note::
+
+    You shold care about the number of worker lcores. If you add lcore 11
+    and assign it for third worker thread,
+    it is failed to lauhch the application.
+
+    .. code-block:: console
+
+        ...
+        EAL: Probing VFIO support...
+        Incorrect value for --w argument (-8)
+
+            load_balancer <EAL PARAMS> -- <APP PARAMS>
+
+        Application manadatory parameters:
+            --rx "(PORT, QUEUE, LCORE), ..." : List of NIC RX ports and queues
+                   handled by the I/O RX lcores
+        ...
+
+
+    The reason is the number of lcore is considered as invalid in
+    ``parse_arg_w()`` as below.
+    ``n_tuples`` is the number of lcores and it should be
+    `2^n`, or returned with error code.
+
+    .. code-block:: c
+
+        // Defined in dpdk/examples/load_balancer/config.c
+        static int
+        parse_arg_w(const char *arg)
+        {
+                const char *p = arg;
+                uint32_t n_tuples;
+                ...
+                if ((n_tuples & (n_tuples - 1)) != 0) {
+                        return -8;
+                }
+                ...
+
+
+Here are other examples.
+
+**1. Separate rx and tx lcores**
+
+Use four lcores 8-11 for rx, tx and two worker threads.
+The number of ports is same as the previous example.
+You notice that rx and tx have different lcore number, 8 and 9.
+
+.. code-block:: console
+
+    $ python app/load-balancer.py -fg -l 8-11 -d 1,2 \
+    -rx "(0,0,8)" \
+    -tx "(0,9),(1,9)" \
+    -w 10,11 \
+    --lpm "1.0.0.0/24=>0; 1.0.1.0/24=>1;"
+    
+**2. Assign multiple queues for rx**
+
+To classify for three destination ports, use one rx lcore,
+three tx lcores and four worker lcores.
+In this case, rx has two queues and using ``-nq 2``.
+You should start queue ID from 0 and to be in serial as `0,1,2,...`,
+or failed to launch.
+
+.. code-block:: console
+
+    $ python app/load-balancer.py -fg -l 8-13 -d 1,2,3 -nq 2 \
+    -rx "(0,0,8),(0,1,8)" \
+    -tx "(0,9),(1,9),(2,9)" \
+    -w 10,11,12,13 \
+    --lpm "1.0.0.0/24=>0; 1.0.1.0/24=>1; 1.0.2.0/24=>2;"
+    
+
+``load-balancer.py`` supports all of options other than mandatories.
+Refer options and usages by ``load-balancer.py -h``.
+
+.. code-block:: console
+
+    $ python app/load-balancer.py -h
+    usage: load-balancer.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                            [--socket-mem SOCKET_MEM]
+                            [--nof-memchan NOF_MEMCHAN]
+                            [-d DEV_IDS] [-nq NOF_QUEUES] [--no-privileged]
+                            [-rx RX_PORTS] [-tx TX_PORTS] [-w WORKER_LCORES]
+                            [-rsz RING_SIZES] [-bsz BURST_SIZES] [--lpm LPM]
+                            [--pos-lb POS_LB] [--dist-name DIST_NAME]
+                            [--dist-ver DIST_VER] [-ci CONTAINER_IMAGE]
+                            [-fg] [--dry-run]
+    
+    Launcher for load-balancer application container
+    
+    optional arguments:
+      ...
+      -d DEV_IDS, --dev-ids DEV_IDS
+                            two or more even vhost device IDs
+      -nq NOF_QUEUES, --nof-queues NOF_QUEUES
+                            Number of queues of virtio (default is 1)
+      --no-privileged       Disable docker's privileged mode if it's needed
+      -rx RX_PORTS, --rx-ports RX_PORTS
+                            List of rx ports and queues handled by the I/O rx
+                            lcores
+      -tx TX_PORTS, --tx-ports TX_PORTS
+                            List of tx ports and queues handled by the I/O tx
+                            lcores
+      -w WORKER_LCORES, --worker-lcores WORKER_LCORES
+                            List of worker lcores
+      -rsz RING_SIZES, --ring-sizes RING_SIZES
+                            Ring sizes of 'rx_read,rx_send,w_send,tx_written'
+      -bsz BURST_SIZES, --burst-sizes BURST_SIZES
+                            Burst sizes of rx, worker or tx
+      --lpm LPM             List of LPM rules
+      --pos-lb POS_LB       Position of the 1-byte field used for identify
+                            worker
+      ...
+
+
+.. _sppc_appl_helloworld:
+
+Helloworld Container
+--------------------
+
+The `helloworld
+<https://dpdk.org/doc/guides/sample_app_ug/hello_world.html>`_
+sample application is an example of the simplest DPDK application
+that can be written. 
+
+Unlike from the other applications, it does not work as a network
+function actually.
+This app container script ``helloworld.py`` is intended to be used
+as a template for an user defined app container script.
+You can use it as a template for developing your app container script.
+An instruction for developing app container script is described in
+:ref:`sppc_howto_define_appc`.
+
+Helloworld app container has no application specific options. There are
+only EAL and app container options.
+You should give ``-l``  and ``-d`` options for the simplest app
+container.
+Helloworld application does not use vhost and ``-d`` options is not
+required for the app, but required to setup continer itself.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/helloworld.py -l 4-6 -d 1 -fg
+    ...
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 09/15] docs: add use cases of SPP container
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (7 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 08/15] docs: add manual for app container launchers ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 10/15] docs: add usecase image of testing vhost ogawa.yasufumi
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/usecases.rst | 676 ++++++++++++++++++++++++++++
 1 file changed, 676 insertions(+)
 create mode 100644 docs/guides/tools/sppc/usecases.rst

diff --git a/docs/guides/tools/sppc/usecases.rst b/docs/guides/tools/sppc/usecases.rst
new file mode 100644
index 0000000..b51d0a6
--- /dev/null
+++ b/docs/guides/tools/sppc/usecases.rst
@@ -0,0 +1,676 @@
+.. _spp_container_usecases:
+
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+
+.. _sppc_usecases_usecases:
+
+Use Cases
+=========
+
+SPP Container provides an easy way to configure network path
+for DPDK application running on containers.
+It is useful for testing your NFV applications with ``testpmd`` or
+``pktgen`` quickly, or providing a reproducible environment for evaluation
+with a configuration files.
+
+In addition, using container requires less CPU and memory resources
+comparing with using virtual machines.
+It means that users can try to test variety kinds of use cases without
+using expensive servers.
+
+This chapter describes examples of simple use cases of SPP container.
+
+.. note::
+
+    As described in
+    :ref:`sppc_gs_build_docker_imgs`
+    section, you had better to use Ubuntu 16.04 with
+    ``--dist-ver`` option because SPP container is not stable for running
+    on the latest version.
+
+    Please notice that examples in this section does not use ``dist-ver``
+    options explicitly for simplicity.
+
+
+.. _sppc_usecases_test_vhost_single:
+
+Perfromance Test of Vhost in Single Node
+----------------------------------------
+
+First use case is a simple performance test of vhost PMDs as shown in
+:numref:`figure_sppc_usecase_vhost`.
+Two of containers of ``spp_nfv`` are connected with a ring PMD and
+all of app container processes run on a single node.
+
+.. _figure_sppc_usecase_vhost:
+
+.. figure:: ../../images/tools/sppc/sppc_usecase_vhost.*
+    :height: 340em
+    :width: 340em
+
+    Test of vhost PMD in a single node
+
+
+You use two terminals in this example, one is for SPP controller
+and other one is for managing app containers.
+First of all, launch SPP controller in terminal 1.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+Move to terminal 2, launch app containers of ``spp_primary``
+and ``spp_nfv`` step by step in background mode.
+You notice that TAP device is attached with ``-dt 1`` which is not used
+actually.
+It is because that SPP primary requires at least one port even if
+it is no need.
+You can also assign a physical port or vhost instead of this TAP device.
+
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
+    $ python app/spp-nfv.py -i 1 -l 1-2
+    $ python app/spp-nfv.py -i 2 -l 3-4
+
+Then, add two vhost PMDs for pktgen app container from SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add vhost 1
+    spp > sec 2;add vhost 2
+
+Now, it is ready for launching pktgen app container.
+In this use case, use five lcores for pktgen.
+One lcore is used for master, and remaining lcores are used for
+rx and tx evenly.
+Device ID option ``-d 1,2`` is for refferring vhost 1 and 2.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ python app/pktgen.py -fg -l 5-9 -d 1,2
+
+Finally, configure network path from SPP controller,
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;patch ring:0 vhost:1
+    spp > sec 2;patch vhost:2 ring:0
+    spp > sec 1;forward
+    spp > sec 2;forward
+
+and start forwarding from pktgen.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ Pktgen:/> start 1
+
+You find that packet count of rx of port 0 and tx of port 1
+is increased rapidlly.
+
+
+.. _sppc_usecases_test_ring:
+
+Performance Test of Ring
+------------------------
+
+Ring PMD is a very fast path to communicate between DPDK processes.
+It is a kind of zero-copy data passing via shared memory and better
+performance than vhost PMD.
+Currently, only ``spp_nfv`` and ``spp_vm`` provide ring PMD in SPP
+container.
+It is also possible other DPDK applications to have ring PMD interface
+for SPP technically,
+but not implemented yet.
+
+This use case is for testing performance of ring PMDs.
+As described in :numref:`figure_sppc_usecase_ring`,
+each of app containers on which ``spp_nfv`` is running are connected
+with ring PMDs in serial.
+
+.. _figure_sppc_usecase_ring:
+
+.. figure:: ../../images/tools/sppc/sppc_usecase_ring.*
+   :height: 480em
+   :width: 680em 
+
+   Test of ring PMD
+
+You use two terminals on host 1, one is for SPP controller and another one
+for ``spp_nfv`` app containers.
+Pktgen on host 2 is started forwarding after setup on host 1 is finished.
+
+First, Launch SPP controller in terminal 1 as
+:ref:`sppc_usecases_test_ring`.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+In terminal 2, launch ``spp_primary`` and ``spp_nfv`` containers
+in background mode.
+In this case, you attach physical ports to ``spp_primary`` with
+portmask option.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x03
+    $ python app/spp-nfv.py -i 1 -l 1-2
+    $ python app/spp-nfv.py -i 2 -l 3-4
+    $ python app/spp-nfv.py -i 3 -l 5-6
+    $ python app/spp-nfv.py -i 4 -l 7-8
+
+
+.. note::
+
+    It might happen an error to input if the number of SPP process is
+    increased. It also might get bothered to launch several SPP
+    processes if the number is large. 
+
+    You can use ``tools/spp-launcher.py`` to launch SPP processes
+    at once. Here is an example for launching ``spp_primary`` and
+    four ``spp_nfv`` processes. ``-n`` is for specifying the nubmer of
+    ``spp_nfv``.
+
+    .. code-block:: console
+
+        $ python tools/spp-launcher.py -n 4
+
+    You will find that lcore assignment is the same as below.
+    Lcore is assigned from 0 for primary, and next two lcores for the
+    first ``spp_nfv``.
+
+    .. code-block:: console
+
+        $ python app/spp-primary.py -l 0 -p 0x03
+        $ python app/spp-nfv.py -i 1 -l 1,2
+        $ python app/spp-nfv.py -i 2 -l 3,4
+        $ python app/spp-nfv.py -i 3 -l 5,6
+        $ python app/spp-nfv.py -i 4 -l 7,8
+
+    You can also assign lcores with ``--shared`` to master lcore
+    be shared among ``spp_nfv`` processes.
+    It is useful to reduce the usage of lcores as explained in 
+    :ref:`sppc_usecases_pktgen_l2fwd_less_lcores`.
+
+    .. code-block:: console
+
+        $ python tools/spp-launcher.py -n 4 --shared
+
+    The result of assignment of this command is the same as below.
+    Master lcore 1 is shared among secondary processes.
+
+    .. code-block:: console
+
+        $ python app/spp-primary.py -l 0 -p 0x03
+        $ python app/spp-nfv.py -i 1 -l 1,2
+        $ python app/spp-nfv.py -i 2 -l 1,3
+        $ python app/spp-nfv.py -i 3 -l 1,4
+        $ python app/spp-nfv.py -i 4 -l 1,5
+
+Add ring PMDs considering which of rings is shared between which of
+containers.
+You can use recipe scripts from ``playback`` command instead of
+typing commands step by step.
+For this usecase example, it is included in
+``recipes/sppc/usecases/test_ring``.
+
+.. code-block:: console
+
+    # Terminal 2
+    spp > sec 1;add ring:0
+    spp > sec 2;add ring:1
+    spp > sec 2;add ring:2
+    spp > sec 3;add ring:2
+    spp > sec 3;add ring:3
+    spp > sec 4;add ring:3
+
+Then, patch all of ports to be configured containers are connected
+in serial.
+
+.. code-block:: console
+
+    # Terminal 2
+    spp > sec 1;patch phy:0 ring:0
+    spp > sec 2;patch ring:0 ring:1
+    spp > sec 3;patch ring:1 ring:2
+    spp > sec 3;patch ring:2 ring:3
+    spp > sec 4;patch ring:3 phy:1
+    spp > sec 1;forward
+    spp > sec 2;forward
+    spp > sec 3;forward
+    spp > sec 4;forward
+
+After setup on host 1 is finished, start forwarding from pktgen on host 2.
+You can see the throughput of rx and tx ports on pktgen's terminal.
+You also find that the throughput is almost not decreased and keeping wire
+rate speed even after it through several chained containers.
+
+
+.. _sppc_usecases_pktgen_l2fwd:
+
+Pktgen and L2fwd
+----------------
+
+To consider more practical service function chaining like use case,
+connect not only SPP processes, but also DPDK application to ``pktgen``.
+In this example, use ``l2fwd`` app container as a DPDK application
+for simplicity.
+You can also use other DPDK applications as similar to this example
+as described in next sections.
+
+.. _figure_sppc_usecase_l2fwdpktgen:
+
+.. figure:: ../../images/tools/sppc/sppc_usecase_l2fwdpktgen.*
+    :height: 640em
+    :width: 640em
+ 
+    Chainning pktgen and l2fwd
+
+This configuration requires more CPUs than previous example.
+It is up to 14 lcores, but you can reduce lcores to do the trick.
+It is a trade-off between usage and performance.
+In this case, we focus on the usage of maximum lcores to get high
+performance.
+
+Here is a list of lcore assignment for each of app containers.
+
+* One lcore for ``spp_primary`` container.
+* Eight lcores for four ``spp_nfv`` containers.
+* Three lcores for ``pktgen`` container.
+* Two lcores for ``l2fwd`` container.
+
+First of all, launch SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+Launch ``spp_primary`` and ``spp_nfv`` containers in background.
+It does not use physical NICs as similar to
+:ref:`sppc_usecases_test_vhost_single`.
+Use four of ``spp_nfv`` containers for using four vhost PMDs.
+For this usecase example, recipe scripts are included in
+``recipes/sppc/usecases/pg_l2fwd``.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
+    $ python app/spp-nfv.py -i 1 -l 1-2
+    $ python app/spp-nfv.py -i 2 -l 3-4
+    $ python app/spp-nfv.py -i 3 -l 5-6
+    $ python app/spp-nfv.py -i 4 -l 7-8
+
+Assign ring and vhost PMDs. Each of vhost IDs to be the same as
+its secondary ID.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add vhost 1
+    spp > sec 2;add vhost 2
+    spp > sec 3;add vhost 3
+    spp > sec 4;add vhost 4
+    spp > sec 1;add ring 0
+    spp > sec 4;add ring 0
+    spp > sec 2;add ring 1
+    spp > sec 3;add ring 1
+
+
+After vhost PMDs are created, you can launch containers
+of ``pktgen`` and ``l2fwd``.
+
+In this case, ``pktgen`` container owns vhost 1 and 2,
+
+.. code-block:: console
+
+    # Terminal 2
+    $ python app/pktgen.py -l 9-11 -d 1,2
+
+and ``l2fwd`` container owns vhost 3 and 4.
+
+.. code-block:: console
+
+    # Terminal 3
+    $ cd /path/to/spp/tools/sppc
+    $ python app/l2fwd.py -l 12-13 -d 3,4
+
+
+Then, configure network path by pactching each of ports
+and start forwarding from SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;patch ring:0 vhost:1
+    spp > sec 2;patch vhost:2 ring:1
+    spp > sec 3;patch ring:1 vhost:3
+    spp > sec 4;patch vhost:4 ring:0
+    spp > sec 1;forward
+    spp > sec 2;forward
+    spp > sec 3;forward
+    spp > sec 4;forward
+
+Finally, start forwarding from ``pktgen`` container.
+You can see that packet count is increased on both of
+``pktgen`` and ``l2fwd``.
+
+
+.. _sppc_usecases_pktgen_l2fwd_less_lcores:
+
+Pktgen and L2fwd using less Lcores
+----------------------------------
+
+This section describes the effort of reducing the usage of lcore for
+:ref:`sppc_usecases_pktgen_l2fwd`.
+
+Here is a list of lcore assignment for each of app containers.
+It is totally 7 lcores while the maximum number is 14.
+
+* One lcore for spp_primary container.
+* Three lcores for four spp_nfv containers.
+* Two lcores for pktgen container.
+* One lcores for l2fwd container.
+
+.. _figure_sppc_usecase_l2fwdpktgen_less:
+
+.. figure:: ../../images/tools/sppc/sppc_usecase_l2fwdpktgen_less.*
+    :height: 640em
+    :width: 640em
+ 
+    Pktgen and l2fwd using less lcores
+
+First of all, launch SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+Launch ``spp_primary`` and ``spp_nfv`` containers in background.
+It does not use physical NICs as similar to
+:ref:`sppc_usecases_test_vhost_single`.
+Use two of ``spp_nfv`` containers for using four vhost PMDs.
+For this usecase example, recipe scripts are included in
+``recipes/sppc/usecases/pg_l2fwd_less``.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
+    $ python app/spp-nfv.py -i 1 -l 1,2
+    $ python app/spp-nfv.py -i 2 -l 1,3
+
+The number of process and CPUs are fewer than previous example.
+You can reduce the number of ``spp_nfv`` processes by assigning
+several vhost PMDs to one process, although performance is decreased
+possibly.
+For the number of lcores, you can reduce it by sharing
+the master lcore 1 which has no heavy tasks.
+
+Assign each of two vhost PMDs to the processes.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add vhost 1
+    spp > sec 1;add vhost 2
+    spp > sec 2;add vhost 3
+    spp > sec 2;add vhost 4
+    spp > sec 1;add ring 0
+    spp > sec 1;add ring 1
+    spp > sec 2;add ring 0
+    spp > sec 2;add ring 1
+
+After vhost PMDs are created, you can launch containers
+of ``pktgen`` and ``l2fwd``.
+These processes also share the master lcore 1 with others.
+
+In this case, ``pktgen`` container uses vhost 1 and 2,
+
+.. code-block:: console
+
+    # Terminal 2
+    $ python app/pktgen.py -l 1,4,5 -d 1,2
+
+and ``l2fwd`` container uses vhost 3 and 4.
+
+.. code-block:: console
+
+    # Terminal 3
+    $ cd /path/to/spp/tools/sppc
+    $ python app/l2fwd.py -l 1,6 -d 3,4
+
+
+Then, configure network path by pactching each of ports
+and start forwarding from SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;patch ring:0 vhost:1
+    spp > sec 1;patch vhost:2 ring:1
+    spp > sec 3;patch ring:1 vhost:3
+    spp > sec 4;patch vhost:4 ring:0
+    spp > sec 1;forward
+    spp > sec 2;forward
+    spp > sec 3;forward
+    spp > sec 4;forward
+
+Finally, start forwarding from ``pktgen`` container.
+You can see that packet count is increased on both of
+``pktgen`` and ``l2fwd``.
+
+
+.. _sppc_usecases_lb_pktgen:
+
+Load-Balancer and Pktgen
+------------------------
+
+Previous examples are all the single-path configurations and do not
+have branches.
+To explain how to setup a multi-path configuration, we use
+`Load-Balancer
+<https://dpdk.org/doc/guides/sample_app_ug/load_balancer.html>`_
+application in this example.
+It is an application distributes packet I/O task with several worker
+lcores to share IP addressing.
+
+.. _figure_sppc_usecase_lb_pktgen:
+
+.. figure:: ../../images/tools/sppc/sppc_usecase_lb_pktgen.*
+    :height: 580em 
+    :width: 720em
+ 
+    Multi-path configuration with load_balancer and pktgen
+
+Packets from tx of ``pktgen``, through ring:0, are received by rx
+of ``load_balancer``.
+Then, ``load_balancer`` classify the packets to decide the
+destionations.
+You can count received packets on rx ports of ``pktgen``.
+
+There are six ``spp_nfv`` and two DPDK applications in this example.
+To reduce the number of lcores, configure lcore assignment to share
+the master lcore.
+Do not assign several vhosts to a process to avoid the performance
+degradation.
+It is 15 lcores required to the configuration.
+
+Here is a list of lcore assignment for each of app containers.
+
+* One lcore for ``spp_primary`` container.
+* Seven lcores for four ``spp_nfv`` containers.
+* Three lcores for ``pktgen`` container.
+* Four lcores for ``load_balancer`` container.
+
+First of all, launch SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+Launch ``spp_primary`` and ``spp_nfv`` containers in background.
+It does not use physical NICs as similar to
+:ref:`sppc_usecases_test_vhost_single`.
+Use six ``spp_nfv`` containers for using six vhost PMDs.
+For this usecase example, recipe scripts are included in
+``recipes/sppc/usecases/lb_pg``.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
+    $ python app/spp-nfv.py -i 1 -l 1,2
+    $ python app/spp-nfv.py -i 2 -l 1,3
+    $ python app/spp-nfv.py -i 3 -l 1,4
+    $ python app/spp-nfv.py -i 4 -l 1,5
+    $ python app/spp-nfv.py -i 5 -l 1,6
+    $ python app/spp-nfv.py -i 6 -l 1,7
+
+Assign ring and vhost PMDs. Each of vhost IDs to be the same as
+its secondary ID.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add vhost 1
+    spp > sec 2;add vhost 2
+    spp > sec 3;add vhost 3
+    spp > sec 4;add vhost 4
+    spp > sec 5;add vhost 5
+    spp > sec 6;add vhost 6
+    spp > sec 1;add ring 0
+    spp > sec 2;add ring 1
+    spp > sec 3;add ring 2
+    spp > sec 4;add ring 0
+    spp > sec 5;add ring 1
+    spp > sec 6;add ring 2
+
+And patch all of ports.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;patch vhost:1 ring:0
+    spp > sec 2;patch ring:1 vhost:2
+    spp > sec 3;patch ring:2 vhost:3
+    spp > sec 4;patch ring:0 vhost:4
+    spp > sec 5;patch vhost:5 ring:1
+    spp > sec 6;patch vhost:6 ring:2
+    
+
+You had better to check that network path is configured properly.
+``topo`` command is useful for checking it with a graphical image.
+Define two groups of vhost PMDs as ``c1`` and ``c2`` with
+``topo_subgraph`` command before.
+
+.. code-block:: console
+
+    # Terminal 1
+    # define c1 and c2 to help your understanding
+    spp > topo_subgraph add c1 vhost:1,vhost:2,vhost:3
+    spp > topo_subgraph add c2 vhost:4,vhost:5,vhost:6
+
+    # show network diagram
+    spp > topo term
+
+
+Finally, launch ``pktgen`` and ``load_balancer`` app containers
+to start traffic monitoring.
+
+For ``pktgen`` container, assign lcores 8-10 and vhost 1-3.
+``-T`` options is required to enable color terminal output.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/pktgen.py -l 8-10 -d 1-3 -T
+
+
+For ``load_balancer`` container, assign lcores 12-15 and vhost 4-6.
+Four lcores are assigned to rx, tx and two workers.
+You should add ``-nq`` option because this example requires three
+or more queues. In this case, assign 4 queues.
+
+.. code-block:: console
+
+    # Terminal 3
+    $ cd /path/to/spp/tools/sppc
+    $ python app/load_balancer.py -l 11-14 -d 4-6 -fg -nq 4
+      -rx "(0,0,11),(0,1,11),(0,2,11)" \
+      -tx "(0,12),(1,12),(2,12)" \
+      -w 13,14 \
+      --lpm "1.0.0.0/24=>0; 1.0.1.0/24=>1; 1.0.2.0/24=>2;"
+
+
+Then, configure network path by pactching each of ports
+and start forwarding from SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;forward
+    spp > sec 2;forward
+    spp > sec 3;forward
+    spp > sec 4;forward
+    spp > sec 5;forward
+    spp > sec 6;forward
+
+You start forwarding from ``pktgen`` container.
+The destination of ``load_balancer`` is decided by considering
+LPM rules. Try to classify incoming packets to port 1 on the
+``load_balancer`` application.
+
+On ``pktgen``, change the destination IP address of port 0
+to ``1.0.1.100``, and start.
+
+.. code-block:: console
+
+    # Terminal 3
+    Pktgen:/> set 0 dst ip 1.0.1.100
+    Pktgen:/> start 0
+
+As forwarding on port 0 is started, you will find the packet count of
+port 1 is increase rapidly.
+You can change the destination IP address and send packets to port 2
+by stopping to forward,
+changing the destination IP address to ``1.0.2.100`` and restart
+forwarding.
+
+.. code-block:: console
+
+    # Terminal 3
+    Pktgen:/> stop 0
+    Pktgen:/> set 0 dst ip 1.0.2.100
+    Pktgen:/> start 0
+
+You might not be able to stop ``load_balancer`` application with *Ctrl-C*.
+In this case, terminate it with ``docker kill`` directly as explained in
+:ref:`sppc_appl_load_balancer`.
+You can find the name of container from ``docker ps``.
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 10/15] docs: add usecase image of testing vhost
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (8 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 09/15] docs: add use cases of SPP container ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 11/15] docs: add usecase image of testing ring ogawa.yasufumi
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../images/tools/sppc/sppc_usecase_vhost.svg  | 644 ++++++++++++++++++
 1 file changed, 644 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_vhost.svg

diff --git a/docs/guides/images/tools/sppc/sppc_usecase_vhost.svg b/docs/guides/images/tools/sppc/sppc_usecase_vhost.svg
new file mode 100644
index 0000000..4a78897
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_usecase_vhost.svg
@@ -0,0 +1,644 @@
+<?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="132mm"
+   height="134mm"
+   viewBox="0 0 467.71654 474.80316"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="sppc_usecase_vhost.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4678"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4443"
+         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="marker5907"
+       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="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       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="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       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="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       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="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       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="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       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="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       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="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       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="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       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="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       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="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       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="path4991"
+         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="path4480"
+         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="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,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="594.13325"
+     inkscape:cy="221.46065"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer7"
+     showgrid="false"
+     inkscape:window-width="1855"
+     inkscape:window-height="1176"
+     inkscape:window-x="65"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     units="mm"
+     width="230mm" />
+  <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,-577.55908)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.47332919;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="443.81241"
+       height="448.09808"
+       x="13.093798"
+       y="591.17029" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-577.55908)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.81471115;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="255.85715"
+       cy="783.79077"
+       rx="37.092648"
+       ry="19.592646" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.72361547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="385.5715"
+       cy="783.79077"
+       rx="37.138195"
+       ry="19.638191" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="320.57144"
+       cy="1003.7908"
+       rx="35.842735"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-577.55908)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="28.570358"
+       y="718.2182" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.88601547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="109.114"
+       height="114.114"
+       x="199.94299"
+       y="844.30524" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.4318701;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="208.56813"
+       height="113.56813"
+       x="219.07307"
+       y="610.57812" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="228.38045"
+       y="696.31409"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="358.72403"
+       y="697.22913" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="216.51154"
+       y="877.01654" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.11811137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7449"
+       width="108.8819"
+       height="113.8819"
+       x="331.77332"
+       y="844.70703" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.94681084;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7453"
+       width="74.0532"
+       height="29.053192"
+       x="351.68765"
+       y="877.33557" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-577.55908)">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="35.00639"
+       y="762.65436"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="28.548523"
+       y="875.91071"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="209.94594"
+       y="915.16528"
+       ry="17.054037" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.16768765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="103.83231"
+       height="38.832314"
+       x="274.08374"
+       y="644.87457"
+       ry="19.416157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5051)"
+       d="m 286.74472,998.18888 c 0,0 -25.75889,0.50508 -27.31618,-36.96954"
+       id="path4431"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="m 255.99997,844.3622 0,-40.00001"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989)"
+       d="m 255.99997,763.50505 0,-37.14286"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 387.99997,724.93362 0,37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 386.5714,804.36219 0,36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.99597287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7457"
+       width="89.004044"
+       height="34.004032"
+       x="343.71222"
+       y="916.07446"
+       ry="17.002016" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4678)"
+       d="m 389.14283,959.64794 c 1.59471,24.18266 -10.40975,35.81224 -33.57143,37.14285"
+       id="path4416"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-577.55908)">
+    <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="48.571423"
+       y="787.79077"
+       id="text4201"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="48.571423"
+         y="787.79077">spp_primary</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="221.42857"
+       y="936.93365"
+       id="text4205"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="221.42857"
+         y="936.93365">spp_nfv</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="41.428577"
+       y="900.36224"
+       id="text4225"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="41.428577"
+         y="900.36224">spp controller</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="294.85715"
+       y="670.93365"
+       id="text4265"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="294.85715"
+         y="670.93365">pktgen</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="41.714294"
+       y="624.36218"
+       id="text4327"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="41.714294"
+         y="624.36218">host</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="231.71428"
+       y="630.93365"
+       id="text4335"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="231.71428"
+         y="630.93365">container</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="41.714298"
+       y="744.07648"
+       id="text4339"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="41.714298"
+         y="744.07648">container</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="209.42856"
+       y="865.21936"
+       id="text4343"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="209.42856"
+         y="865.21936">container</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="225.14287"
+       y="789.21936"
+       id="text4351"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="225.14287"
+         y="789.21936">vhost:1</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="354.28577"
+       y="790.07648"
+       id="text4355"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="354.28577"
+         y="790.07648">vhost:2</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="296.57144"
+       y="1008.9337"
+       id="text4359"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="296.57144"
+         y="1008.9337">ring:0</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="235.14285"
+       y="716.36218"
+       id="text4371"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="235.14285"
+         y="716.36218">virtio</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="365.14285"
+       y="714.93359"
+       id="text4375"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="365.14285"
+         y="714.93359">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       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;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="252.85718"
+       y="896.36224"
+       id="text4407"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="252.85718"
+         y="896.36224"
+         id="tspan4411">shmem</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="343.14279"
+       y="867.79077"
+       id="text7461"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7463"
+         x="343.14279"
+         y="867.79077">container</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="353.71423"
+       y="937.21942"
+       id="text7469"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7471"
+         x="353.71423"
+         y="937.21942">spp_nfv</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="357.14282"
+       y="896.93359"
+       id="text7465"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7467"
+         x="357.14282"
+         y="896.93359">shmem</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 11/15] docs: add usecase image of testing ring
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (9 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 10/15] docs: add usecase image of testing vhost ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 12/15] docs: add usecase image of pktgen and l2fwd ogawa.yasufumi
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../images/tools/sppc/sppc_usecase_ring.svg   | 1032 +++++++++++++++++
 1 file changed, 1032 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_ring.svg

diff --git a/docs/guides/images/tools/sppc/sppc_usecase_ring.svg b/docs/guides/images/tools/sppc/sppc_usecase_ring.svg
new file mode 100644
index 0000000..6181e85
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_usecase_ring.svg
@@ -0,0 +1,1032 @@
+<?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="290mm"
+   height="170mm"
+   viewBox="0 0 1027.5591 602.36234"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="sppc_usecase_ring.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4627"
+       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="path4629" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4479"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4481"
+         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="marker1450"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1448"
+         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="marker4582"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path4347"
+         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="Arrow2Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411"
+         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="marker5907"
+       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="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       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="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       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="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       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="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       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="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5491"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5493"
+         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="marker5421"
+       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="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       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="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       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="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       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="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       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="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       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="path4991"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567-3"
+       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="path5569-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411-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>
+  </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="467.81657"
+     inkscape:cy="256.7678"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="false"
+     inkscape:window-width="1371"
+     inkscape:window-height="854"
+     inkscape:window-x="167"
+     inkscape:window-y="74"
+     inkscape:window-maximized="0"
+     units="mm"
+     width="230mm" />
+  <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,-449.99991)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.02641034;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="988.97369"
+       height="380.40213"
+       x="19.370337"
+       y="475.55396" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.07469606;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4142"
+       width="73.925301"
+       height="33.925304"
+       x="280.03732"
+       y="822.50671" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81819206;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4144"
+       width="74.181808"
+       height="34.181808"
+       x="847.62335"
+       y="821.80701" />
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.19535923;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136-3"
+       width="987.90839"
+       height="132.51135"
+       x="19.992262"
+       y="893.32294" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.07469594;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4142-3"
+       width="73.925301"
+       height="33.925301"
+       x="279.75168"
+       y="894.82812" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.07469594;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4142-5"
+       width="73.925301"
+       height="33.925301"
+       x="847.78741"
+       y="893.75671" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-449.99991)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.8340826;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293"
+       cx="684.46234"
+       cy="587.98999"
+       rx="34.582958"
+       ry="19.582958" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.78720939;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="333.35715"
+       cy="587.04077"
+       rx="34.606396"
+       ry="19.606396" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="504.24518"
+       cy="588.48456"
+       rx="35.842735"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-449.99991)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="34.570358"
+       y="543.4682" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.88601547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="109.114"
+       height="114.114"
+       x="201.94299"
+       y="645.55524" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.13310003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4168"
+       width="108.86691"
+       height="113.86691"
+       x="543.20947"
+       y="644.82159" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="218.51154"
+       y="678.26654" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.89280504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393"
+       width="74.107193"
+       height="29.107199"
+       x="559.08929"
+       y="676.55865" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.11811137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7449"
+       width="108.8819"
+       height="113.8819"
+       x="369.77332"
+       y="645.95703" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02366579;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451"
+       width="108.97635"
+       height="113.97635"
+       x="722.8689"
+       y="645.90967" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.94681084;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7453"
+       width="74.0532"
+       height="29.053192"
+       x="389.68765"
+       y="678.58557" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.91539472;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7455"
+       width="74.084618"
+       height="29.084608"
+       x="741.67194"
+       y="676.56989" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-449.99991)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="41.00639"
+       y="587.90436"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="34.548523"
+       y="701.16071"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.81271017;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4229"
+       width="89.187302"
+       height="34.187294"
+       x="551.90643"
+       y="714.08997"
+       ry="17.093647"
+       rx="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="211.94594"
+       y="716.41528"
+       ry="17.054037" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5091)"
+       d="m 315.71426,893.6122 0,-35.7143"
+       id="path4427"
+       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(#marker5907)"
+       d="m 885.14283,857.8979 0,32.8572"
+       id="path4429"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.03270912;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5051)"
+       d="M 299.94438,821.47394 C 283.4816,802.40013 271.88376,782.45569 271.46989,760.50976"
+       id="path4431"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="m 263.99997,645.6122 c 3.02119,-35.98331 8.17794,-56.21288 34.63235,-57.02033"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 367.25667,587.42944 c 33.16502,1.54932 31.34468,28.44253 31.31473,55.15229"
+       id="path4439"
+       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(#marker5813)"
+       d="m 540.77079,590.62522 c 33.79338,0.78036 31.1029,29.46964 31.90646,53.35246"
+       id="path4445"
+       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(#marker5567)"
+       d="m 614.34437,644.15101 c 0.8953,-26.39834 3.37245,-51.35864 33.33504,-51.33216"
+       id="path4451"
+       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(#marker5491)"
+       d="m 937.01012,760.44903 c 1.38788,25.41499 -17.01853,40.93284 -30.83683,58.74474"
+       id="path4453"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.99597287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7457"
+       width="89.004044"
+       height="34.004032"
+       x="381.71222"
+       y="717.32446"
+       ry="17.002016" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549631;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459"
+       width="88.914513"
+       height="33.914509"
+       x="732.32843"
+       y="713.94067"
+       ry="16.957254" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4582)"
+       d="m 441.43663,644.02332 c -0.24081,-29.20552 6.6639,-48.20315 25.25382,-50.50762"
+       id="path3504"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 718.25904,589.47509 c 27.14201,2.47334 33.4572,3.2024 34.34519,53.53808"
+       id="path3506"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223-5"
+       width="149.04579"
+       height="39.045807"
+       x="506.92358"
+       y="955.48212"
+       ry="19.522903" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-449.99991)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="106.57143"
+       y="613.04077"
+       id="text4201"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="106.57143"
+         y="613.04077"
+         style="font-size:17.50000191px;line-height:1.25">spp_primary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="255.42859"
+       y="738.18365"
+       id="text4205"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="255.42859"
+         y="738.18365"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="595.14288"
+       y="736.46936"
+       id="text4209"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="595.14288"
+         y="736.46936"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="107.42858"
+       y="725.61224"
+       id="text4225"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="107.42858"
+         y="725.61224"
+         style="font-size:17.50000191px;line-height:1.25">spp controller</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="317.14285"
+       y="843.32648"
+       id="text4319"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4321"
+         x="317.14285"
+         y="843.32648"
+         style="font-size:17.50000191px;line-height:1.25">phy:0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="884.57147"
+       y="843.61218"
+       id="text4323"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4325"
+         x="884.57147"
+         y="843.61218"
+         style="font-size:17.50000191px;line-height:1.25">phy:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="72.357155"
+       y="509.04077"
+       id="text4327"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="72.357155"
+         y="509.04077"
+         style="font-size:17.50000191px;line-height:1.25">host 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="89.714302"
+       y="569.32648"
+       id="text4339"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="89.714302"
+         y="569.32648"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="249.42856"
+       y="666.46936"
+       id="text4343"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="249.42856"
+         y="666.46936"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="592.28577"
+       y="665.89789"
+       id="text4347"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4349"
+         x="592.28577"
+         y="665.89789"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="333.14288"
+       y="592.46936"
+       id="text4351"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="333.14288"
+         y="592.46936"
+         style="font-size:17.50000191px;line-height:1.25">ring:0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="504.24518"
+       y="593.62744"
+       id="text4359"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="504.24518"
+         y="593.62744"
+         style="font-size:17.50000191px;line-height:1.25">ring:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="254.85718"
+       y="697.61224"
+       id="text4407"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         x="254.85718"
+         y="697.61224"
+         id="tspan4411"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="596.00006"
+       y="696.46936"
+       id="text4413"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         x="596.00006"
+         y="696.46936"
+         id="tspan4417"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="684.81946"
+       y="593.13287"
+       id="text4419"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4421"
+         x="684.81946"
+         y="593.13287"
+         style="font-size:17.50000191px;line-height:1.25">ring:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="419.14279"
+       y="669.04077"
+       id="text7461"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7463"
+         x="419.14279"
+         y="669.04077"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="425.71423"
+       y="738.46942"
+       id="text7469"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7471"
+         x="425.71423"
+         y="738.46942"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="427.14282"
+       y="698.18359"
+       id="text7465"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7467"
+         x="427.14282"
+         y="698.18359"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="774.57135"
+       y="667.61218"
+       id="text7473"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7475"
+         x="774.57135"
+         y="667.61218"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="778.28571"
+       y="696.18365"
+       id="text7477"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7479"
+         x="778.28571"
+         y="696.18365"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="775.42853"
+       y="736.755"
+       id="text7481"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7483"
+         x="775.42853"
+         y="736.755"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="75.061806"
+       y="918.58264"
+       id="text4327-6"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4329-7"
+         x="75.061806"
+         y="918.58264"
+         style="font-size:17.50000191px;line-height:1.25;stroke-width:0.99999994px">host 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="315.59756"
+       y="916.1145"
+       id="text4319-6"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4321-2"
+         x="315.59756"
+         y="916.1145"
+         style="font-size:17.50000191px;line-height:1.25;stroke-width:0.99999994px">phy</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="884.9726"
+       y="915.04303"
+       id="text4319-6-9"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4321-2-1"
+         x="884.9726"
+         y="915.04303"
+         style="font-size:17.50000191px;line-height:1.25;stroke-width:0.99999994px">phy</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="581.66901"
+       y="981.7395"
+       id="text4319-6-9-0"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4321-2-1-9"
+         x="581.66901"
+         y="981.7395"
+         style="font-size:17.50000191px;line-height:1.25;stroke-width:0.99999994px">pktgen</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.21100032;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4479);stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 876.75998,928.33376 c 1.53974,28.57273 -43.6222,48.52008 -218.31597,47.05548"
+       id="path1320"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.15920484px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
+       d="M 505.9481,975.41529 C 366.66695,976.15493 318.62288,968.80515 317.23998,929.54795"
+       id="path1322"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.8340826;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293-3"
+       cx="869.50446"
+       cy="588.44391"
+       rx="34.582966"
+       ry="19.582962" />
+    <rect
+       style="display:inline;opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02366579;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451-5"
+       width="108.97637"
+       height="113.97638"
+       x="879.91101"
+       y="646.36359" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.91539472;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7455-6"
+       width="74.084633"
+       height="29.084616"
+       x="898.71405"
+       y="677.0238" />
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5567-3)"
+       d="m 799.38646,644.60498 c 0.8953,-26.39835 3.37245,-51.35866 33.33505,-51.33218"
+       id="path4451-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549631;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459-9"
+       width="88.914536"
+       height="33.914516"
+       x="889.37054"
+       y="714.39459"
+       ry="16.957258" />
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-7)"
+       d="m 903.30115,589.92904 c 27.14202,2.47334 33.45721,3.2024 34.3452,53.5381"
+       id="path3506-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="869.86157"
+       y="593.58679"
+       id="text4419-2"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4421-7"
+         x="869.86157"
+         y="593.58679"
+         style="font-size:17.50000191px;line-height:1.25">ring:3</tspan></text>
+    <text
+       sodipodi:linespacing="0%"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="941.61346"
+       y="668.0661"
+       id="text7473-0"><tspan
+         sodipodi:role="line"
+         id="tspan7475-9"
+         x="941.61346"
+         y="668.0661"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       sodipodi:linespacing="0%"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="935.32782"
+       y="696.63757"
+       id="text7477-3"><tspan
+         sodipodi:role="line"
+         id="tspan7479-6"
+         x="935.32782"
+         y="696.63757"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       sodipodi:linespacing="0%"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="932.47064"
+       y="737.20898"
+       id="text7481-0"><tspan
+         sodipodi:role="line"
+         id="tspan7483-6"
+         x="932.47064"
+         y="737.20898"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 12/15] docs: add usecase image of pktgen and l2fwd
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (10 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 11/15] docs: add usecase image of testing ring ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 13/15] docs: add usecase image of using less lcores ogawa.yasufumi
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../tools/sppc/sppc_usecase_l2fwdpktgen.svg   | 918 ++++++++++++++++++
 1 file changed, 918 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen.svg

diff --git a/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen.svg b/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen.svg
new file mode 100644
index 0000000..9301ede
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen.svg
@@ -0,0 +1,918 @@
+<?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="240mm"
+   height="150mm"
+   viewBox="0 0 850.39371 531.49607"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="sppc_usecase_l2fwdpktgen.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker4785"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path4783"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5907"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend"
+       inkscape:collect="always">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5909" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5813"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5815" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5725"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5727" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5643"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5645" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5567"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5569" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5421"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5423" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker5207"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5209"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5137"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5139" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5091"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5093" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5051"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5053" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5017"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5019" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker4989"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path4991" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path4480"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.8) rotate(180) translate(12.5,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="623.31538"
+     inkscape:cy="291.37962"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer5"
+     showgrid="false"
+     inkscape:window-width="1853"
+     inkscape:window-height="1025"
+     inkscape:window-x="67"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     units="mm"
+     width="230mm" />
+  <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,-520.86616)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.04377723;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="826.09912"
+       height="463.24191"
+       x="11.379023"
+       y="541.58051" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.86321706;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293"
+       cx="649.57147"
+       cy="733.91559"
+       rx="37.068394"
+       ry="19.568548" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75659269;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295"
+       cx="769.02191"
+       cy="733.91577"
+       rx="37.121704"
+       ry="19.621704" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.81471109;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="253.98215"
+       cy="733.91577"
+       rx="37.092644"
+       ry="19.592646" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.72361547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="384.16501"
+       cy="733.91577"
+       rx="37.138191"
+       ry="19.638191" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="516.28577"
+       cy="835.34436"
+       rx="35.842735"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="26.570356"
+       y="668.3432" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.88601547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="109.114"
+       height="114.114"
+       x="197.94299"
+       y="794.43024" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.4318701;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="208.56813"
+       height="113.56813"
+       x="217.07307"
+       y="560.70312" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.28275025;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4166"
+       width="208.71725"
+       height="113.71725"
+       x="607.28436"
+       y="562.05713" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.13310003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4168"
+       width="108.86691"
+       height="113.86691"
+       x="593.20947"
+       y="793.69659" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="226.38045"
+       y="646.43909"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="356.72403"
+       y="647.35413" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.80504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4367"
+       width="57.194962"
+       height="27.19496"
+       x="618.7597"
+       y="648.24689" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597942;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369"
+       width="57.184021"
+       height="27.184021"
+       x="747.05084"
+       y="648.53809" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="214.51154"
+       y="827.14154" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.89280504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393"
+       width="74.107193"
+       height="29.107199"
+       x="609.08929"
+       y="825.43365" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.11811137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7449"
+       width="108.8819"
+       height="113.8819"
+       x="329.77332"
+       y="794.83203" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02366579;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451"
+       width="108.97635"
+       height="113.97635"
+       x="712.8689"
+       y="794.78467" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.94681084;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7453"
+       width="74.0532"
+       height="29.053192"
+       x="349.68765"
+       y="827.46057" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.91539472;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7455"
+       width="74.084618"
+       height="29.084608"
+       x="731.67194"
+       y="825.44489" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-520.86616)">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="33.00639"
+       y="712.77936"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="26.548521"
+       y="826.03571"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.81271017;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4229"
+       width="89.187302"
+       height="34.187294"
+       x="601.90643"
+       y="862.96497"
+       ry="17.093647"
+       rx="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="207.94594"
+       y="865.29028"
+       ry="17.054037" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.03231287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4233"
+       width="103.96768"
+       height="38.967686"
+       x="660.58765"
+       y="595.50336"
+       ry="19.483843" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.16768765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="103.83231"
+       height="38.832314"
+       x="272.08374"
+       y="594.99957"
+       ry="19.416157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="M 253.99997,794.4872 V 754.48719"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989)"
+       d="M 253.99997,713.63005 V 676.48719"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 385.99997,675.05862 v 37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 384.5714,754.48719 v 36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94411641;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5207)"
+       d="m 440.28569,836.48719 h 38.50992"
+       id="path4441"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99798077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5421)"
+       d="m 553.14282,836.91457 38.32673,-0.43681"
+       id="path4443"
+       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(#marker5813)"
+       d="m 648.85712,795.05862 0.59173,-40.59174"
+       id="path4445"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.06141865px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5725)"
+       d="M 649.42854,714.20148 V 675.57487"
+       id="path4447"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02591169px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5643)"
+       d="m 768.63777,675.11725 1.03006,38.35599"
+       id="path4449"
+       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(#marker5567)"
+       d="m 768.85712,753.63005 v 38.57143"
+       id="path4451"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.99597287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7457"
+       width="89.004044"
+       height="34.004032"
+       x="341.71222"
+       y="866.19946"
+       ry="17.002016" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549631;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459"
+       width="88.914513"
+       height="33.914509"
+       x="722.32843"
+       y="862.81567"
+       ry="16.957254" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301-3"
+       cx="518.01886"
+       cy="957.66046"
+       rx="35.842739"
+       ry="18.699877" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="517.98743"
+       y="962.80334"
+       id="text4359-6"><tspan
+         sodipodi:role="line"
+         id="tspan4361-7"
+         x="517.98743"
+         y="962.80334"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">ring:0</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4785)"
+       d="m 765.19056,908.41549 c -21.89874,30.36125 -65.71746,53.92393 -210.25703,49.24494"
+       id="path169"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5907)"
+       d="m 482.03218,957.66043 c -91.35308,-3.0468 -196.13636,12.51103 -223.5724,-47.35091"
+       id="path171"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="98.571426"
+       y="737.91577"
+       id="text4201"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="98.571426"
+         y="737.91577"
+         style="font-size:17.50000191px;line-height:1.25">spp_primary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="251.42857"
+       y="887.05865"
+       id="text4205"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="251.42857"
+         y="887.05865"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="645.14288"
+       y="885.34436"
+       id="text4209"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="645.14288"
+         y="885.34436"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="99.428581"
+       y="850.48724"
+       id="text4225"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="99.428581"
+         y="850.48724"
+         style="font-size:17.50000191px;line-height:1.25">spp controller</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="322.85715"
+       y="619.05865"
+       id="text4265"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="322.85715"
+         y="619.05865"
+         style="font-size:17.50000191px;line-height:1.25">pktgen</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="712.57147"
+       y="621.34436"
+       id="text4269"><tspan
+         sodipodi:role="line"
+         id="tspan4271"
+         x="712.57147"
+         y="621.34436"
+         style="font-size:17.50000191px;line-height:1.25">l2fwd</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="49.714294"
+       y="574.48718"
+       id="text4327"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="49.714294"
+         y="574.48718"
+         style="font-size:17.50000191px;line-height:1.25">host</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="658.00006"
+       y="582.48724"
+       id="text4331"><tspan
+         sodipodi:role="line"
+         id="tspan4333"
+         x="658.00006"
+         y="582.48724"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="271.71429"
+       y="581.05865"
+       id="text4335"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="271.71429"
+         y="581.05865"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="81.714302"
+       y="694.20148"
+       id="text4339"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="81.714302"
+         y="694.20148"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="245.42856"
+       y="815.34436"
+       id="text4343"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="245.42856"
+         y="815.34436"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="642.28577"
+       y="814.77289"
+       id="text4347"><tspan
+         sodipodi:role="line"
+         id="tspan4349"
+         x="642.28577"
+         y="814.77289"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="254.51744"
+       y="739.34436"
+       id="text4351"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="254.51744"
+         y="739.34436"
+         style="font-size:17.50000191px;line-height:1.25">vhost:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="382.9418"
+       y="740.20148"
+       id="text4355"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="382.9418"
+         y="740.20148"
+         style="font-size:17.50000191px;line-height:1.25">vhost:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="517.09863"
+       y="840.48724"
+       id="text4359"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="517.09863"
+         y="840.48724"
+         style="font-size:17.50000191px;line-height:1.25">ring:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="255.14285"
+       y="666.48718"
+       id="text4371"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="255.14285"
+         y="666.48718"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="385.14285"
+       y="667.05859"
+       id="text4375"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="385.14285"
+         y="667.05859"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="647.42865"
+       y="667.63007"
+       id="text4379"><tspan
+         sodipodi:role="line"
+         id="tspan4381"
+         x="647.42865"
+         y="667.63007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="776.00006"
+       y="667.63007"
+       id="text4383"><tspan
+         sodipodi:role="line"
+         id="tspan4385"
+         x="776.00006"
+         y="667.63007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="250.85718"
+       y="846.48724"
+       id="text4407"><tspan
+         sodipodi:role="line"
+         x="250.85718"
+         y="846.48724"
+         id="tspan4411"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="646.00006"
+       y="845.34436"
+       id="text4413"><tspan
+         sodipodi:role="line"
+         x="646.00006"
+         y="845.34436"
+         id="tspan4417"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="647.86621"
+       y="739.05865"
+       id="text4419"><tspan
+         sodipodi:role="line"
+         id="tspan4421"
+         x="647.86621"
+         y="739.05865"
+         style="font-size:17.50000191px;line-height:1.25">vhost:3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="768.17371"
+       y="739.05859"
+       id="text4423"><tspan
+         sodipodi:role="line"
+         id="tspan4425"
+         x="768.17371"
+         y="739.05859"
+         style="font-size:17.50000191px;line-height:1.25">vhost:4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="379.14279"
+       y="817.91577"
+       id="text7461"><tspan
+         sodipodi:role="line"
+         id="tspan7463"
+         x="379.14279"
+         y="817.91577"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="385.71423"
+       y="887.34442"
+       id="text7469"><tspan
+         sodipodi:role="line"
+         id="tspan7471"
+         x="385.71423"
+         y="887.34442"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="387.14282"
+       y="847.05859"
+       id="text7465"><tspan
+         sodipodi:role="line"
+         id="tspan7467"
+         x="387.14282"
+         y="847.05859"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="764.57135"
+       y="816.48718"
+       id="text7473"><tspan
+         sodipodi:role="line"
+         id="tspan7475"
+         x="764.57135"
+         y="816.48718"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="768.28571"
+       y="845.05865"
+       id="text7477"><tspan
+         sodipodi:role="line"
+         id="tspan7479"
+         x="768.28571"
+         y="845.05865"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="765.42853"
+       y="885.63"
+       id="text7481"><tspan
+         sodipodi:role="line"
+         id="tspan7483"
+         x="765.42853"
+         y="885.63"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 13/15] docs: add usecase image of using less lcores
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (11 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 12/15] docs: add usecase image of pktgen and l2fwd ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 14/15] docs: add usecase image of load balancer ogawa.yasufumi
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../sppc/sppc_usecase_l2fwdpktgen_less.svg    | 848 ++++++++++++++++++
 1 file changed, 848 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen_less.svg

diff --git a/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen_less.svg b/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen_less.svg
new file mode 100644
index 0000000..e1bf872
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen_less.svg
@@ -0,0 +1,848 @@
+<?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="244mm"
+   height="152mm"
+   viewBox="0 0 864.56694 538.58269"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="sppc_usecase_l2fwdpktgen_less.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4785"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4783"
+         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="marker5907"
+       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="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       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="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       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="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       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="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       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="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       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="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5207"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5209"
+         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="marker5137"
+       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="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       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="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       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="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       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="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       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="path4991"
+         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="path4480"
+         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="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,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="723.11364"
+     inkscape:cy="140.93757"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="false"
+     inkscape:window-width="1855"
+     inkscape:window-height="1176"
+     inkscape:window-x="65"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     units="mm"
+     width="230mm" />
+  <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,-513.77954)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.15241647;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="838.84766"
+       height="505.99042"
+       x="13.433342"
+       y="529.92059" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-513.77954)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.86659622;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293"
+       cx="655.82147"
+       cy="743.75952"
+       rx="37.066704"
+       ry="19.722952" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75955552;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295"
+       cx="772.55359"
+       cy="743.75952"
+       rx="37.120224"
+       ry="19.776472" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.81790251;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="266.10715"
+       cy="745.75952"
+       rx="37.091049"
+       ry="19.747299" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.72361547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="383.8215"
+       cy="745.91577"
+       rx="37.138191"
+       ry="19.638191" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.77742785;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="525.69647"
+       cy="846.25952"
+       rx="37.111286"
+       ry="19.767536" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-513.77954)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="34.570358"
+       y="678.3432" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.25014758;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="208.74988"
+       height="118.74987"
+       x="228.12508"
+       y="807.61224" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.4318701;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="208.56813"
+       height="113.56813"
+       x="225.07307"
+       y="572.70312" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.28275025;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4166"
+       width="208.71725"
+       height="113.71725"
+       x="613.28436"
+       y="572.05713" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.5986383;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4168"
+       width="208.4014"
+       height="118.40137"
+       x="615.44232"
+       y="806.92938" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="240.38045"
+       y="658.43909"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="358.72403"
+       y="659.35413" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.80504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4367"
+       width="57.194962"
+       height="27.19496"
+       x="628.7597"
+       y="658.24689" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597942;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369"
+       width="57.184021"
+       height="27.184021"
+       x="751.05084"
+       y="658.53809" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="294.13654"
+       y="841.14154" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.89280504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393"
+       width="74.107193"
+       height="29.107199"
+       x="682.83929"
+       y="839.43365" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-513.77954)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="41.00639"
+       y="722.77936"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="34.548523"
+       y="836.03571"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.81271017;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4229"
+       width="89.187302"
+       height="34.187294"
+       x="675.65643"
+       y="876.96497"
+       ry="17.093647"
+       rx="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="287.57095"
+       y="879.29028"
+       ry="17.054037" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.03231287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4233"
+       width="103.96768"
+       height="38.967686"
+       x="668.58765"
+       y="605.50336"
+       ry="19.483843" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.16768765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="103.83231"
+       height="38.832314"
+       x="280.08374"
+       y="606.99957"
+       ry="19.416157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="m 267.99997,806.4872 0,-40.00001"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989)"
+       d="m 267.99997,725.63005 0,-37.14286"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 387.99997,687.05862 0,37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 386.5714,766.48719 0,36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94411641;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5207)"
+       d="m 436.41069,846.48719 50.50992,0"
+       id="path4441"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99798077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5421)"
+       d="m 563.14282,846.91457 48.32673,-0.43681"
+       id="path4443"
+       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(#marker5813)"
+       d="m 658.85712,805.05862 0.59173,-40.59174"
+       id="path4445"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.06141865px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5725)"
+       d="m 659.42854,724.20148 0,-38.62661"
+       id="path4447"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02824485px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5643)"
+       d="m 772.64718,686.05442 1.01015,39.28992"
+       id="path4449"
+       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(#marker5567)"
+       d="m 772.85712,763.63005 0,38.57143"
+       id="path4451"
+       inkscape:connector-curvature="0" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301-3"
+       cx="526.01886"
+       cy="989.66046"
+       rx="35.842739"
+       ry="18.699877" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="524.01886"
+       y="994.80334"
+       id="text4359-6"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4361-7"
+         x="524.01886"
+         y="994.80334"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">ring:0</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4785)"
+       d="m 777.19056,926.41549 c -1.89874,50.36125 -41.14604,59.3525 -214.25703,63.24494"
+       id="path169"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5907)"
+       d="M 490.03218,989.66043 C 368.6791,989.47077 279.6101,983.88575 266.45978,928.30952"
+       id="path171"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-513.77954)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="106.57143"
+       y="747.91577"
+       id="text4201"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="106.57143"
+         y="747.91577"
+         style="font-size:17.50000191px;line-height:1.25">spp_primary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="331.05359"
+       y="901.05865"
+       id="text4205"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="331.05359"
+         y="901.05865"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="718.89288"
+       y="899.34436"
+       id="text4209"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="718.89288"
+         y="899.34436"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="107.42858"
+       y="860.48724"
+       id="text4225"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="107.42858"
+         y="860.48724"
+         style="font-size:17.50000191px;line-height:1.25">spp controller</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="330.85715"
+       y="631.05865"
+       id="text4265"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="330.85715"
+         y="631.05865"
+         style="font-size:17.50000191px;line-height:1.25">pktgen</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="720.57147"
+       y="631.34436"
+       id="text4269"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4271"
+         x="720.57147"
+         y="631.34436"
+         style="font-size:17.50000191px;line-height:1.25">l2fwd</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="59.714294"
+       y="566.48718"
+       id="text4327"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="59.714294"
+         y="566.48718"
+         style="font-size:17.50000191px;line-height:1.25">host</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="666.00006"
+       y="592.48724"
+       id="text4331"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4333"
+         x="666.00006"
+         y="592.48724"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="279.71429"
+       y="593.05865"
+       id="text4335"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="279.71429"
+         y="593.05865"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="89.714302"
+       y="704.20148"
+       id="text4339"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="89.714302"
+         y="704.20148"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="291.05356"
+       y="829.34436"
+       id="text4343"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="291.05356"
+         y="829.34436"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="680.03577"
+       y="828.77289"
+       id="text4347"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4349"
+         x="680.03577"
+         y="828.77289"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="265.14288"
+       y="751.34436"
+       id="text4351"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="265.14288"
+         y="751.34436"
+         style="font-size:17.50000191px;line-height:1.25">vhost:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="384.28577"
+       y="752.20148"
+       id="text4355"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="384.28577"
+         y="752.20148"
+         style="font-size:17.50000191px;line-height:1.25">vhost:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="526.16077"
+       y="852.48724"
+       id="text4359"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="526.16077"
+         y="852.48724"
+         style="font-size:17.50000191px;line-height:1.25">ring:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="269.14285"
+       y="678.48718"
+       id="text4371"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="269.14285"
+         y="678.48718"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="387.14285"
+       y="679.05859"
+       id="text4375"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="387.14285"
+         y="679.05859"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="657.42865"
+       y="677.63007"
+       id="text4379"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4381"
+         x="657.42865"
+         y="677.63007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="780.00006"
+       y="677.63007"
+       id="text4383"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4385"
+         x="780.00006"
+         y="677.63007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="330.48218"
+       y="860.48724"
+       id="text4407"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         x="330.48218"
+         y="860.48724"
+         id="tspan4411"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="719.75006"
+       y="859.34436"
+       id="text4413"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         x="719.75006"
+         y="859.34436"
+         id="tspan4417"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="655.42859"
+       y="749.05865"
+       id="text4419"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4421"
+         x="655.42859"
+         y="749.05865"
+         style="font-size:17.50000191px;line-height:1.25">vhost:3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="771.14288"
+       y="749.05859"
+       id="text4423"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4425"
+         x="771.14288"
+         y="749.05859"
+         style="font-size:17.50000191px;line-height:1.25">vhost:4</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 14/15] docs: add usecase image of load balancer
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (12 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 13/15] docs: add usecase image of using less lcores ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15  7:06 ` [spp] [PATCH 15/15] docs: add how to develop guide for SPP container ogawa.yasufumi
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../tools/sppc/sppc_usecase_lb_pktgen.svg     | 1573 +++++++++++++++++
 1 file changed, 1573 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_lb_pktgen.svg

diff --git a/docs/guides/images/tools/sppc/sppc_usecase_lb_pktgen.svg b/docs/guides/images/tools/sppc/sppc_usecase_lb_pktgen.svg
new file mode 100644
index 0000000..c1f1ed4
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_usecase_lb_pktgen.svg
@@ -0,0 +1,1573 @@
+<?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="280mm"
+   height="180mm"
+   viewBox="0 0 992.12605 637.79528"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="sppc_usecase_lb_pktgen.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1955"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1953"
+         style="fill:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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="marker1711"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lstart">
+      <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:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path1709"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1473"
+       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:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path1471" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker12802"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path12800"
+         style="fill:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker12362"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path12360"
+         style="fill:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker12154"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path12152"
+         style="fill:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker12026"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path12024"
+         style="fill:#0000cc;fill-opacity:1;fill-rule:evenodd;stroke:#0000cc;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker11110"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path11108"
+         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)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker10746"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lstart"
+       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:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path10744"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker10532"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path10530"
+         style="fill:#0000cc;fill-opacity:1;fill-rule:evenodd;stroke:#0000cc;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker8004"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path8002"
+         style="fill:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker7808"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path7806"
+         style="fill:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;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="marker6884"
+       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="path6882" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6700"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path6698"
+         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="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5488"
+         style="fill:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;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="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path5470"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4785"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path4783"
+         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="marker5813"
+       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:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       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:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       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="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       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="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       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="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       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="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       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="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       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="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       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:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       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:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4991"
+         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="path4480"
+         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="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643-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:#00fe00;fill-opacity:0;fill-rule:evenodd;stroke:#00fe00;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:0"
+         id="path5645-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989-7"
+       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="path4991-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017-2"
+       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:#00fe00;fill-opacity:0;fill-rule:evenodd;stroke:#00fe00;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:0"
+         id="path5019-2" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-9"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4480-7"
+         style="fill:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137-2"
+       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:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5139-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137-2-1"
+       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:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5139-9-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137-2-1-7"
+       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:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5139-9-9-8" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989-2"
+       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:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4991-0"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-9-1"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4480-7-5"
+         style="fill:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813-3"
+       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="path5815-6"
+         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="573.51347"
+     inkscape:cy="291.37962"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="false"
+     inkscape:window-width="1853"
+     inkscape:window-height="1025"
+     inkscape:window-x="67"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     units="mm"
+     width="230mm" />
+  <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,-414.56695)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.44748497;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="956.47589"
+       height="573.77142"
+       x="17.159864"
+       y="433.45551" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6884)"
+       d="m 263.27102,843.07125 c 3.68416,28.5625 12.21126,35.3317 20.8344,41.66879"
+       id="path6688"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6700)"
+       d="m 356.07879,883.79303 c 119.18407,-2.69424 258.25201,13.33152 300.20473,-37.89976"
+       id="path6690"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#0000cc;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker10532);fill-opacity:1"
+       d="m 388.2774,844.94625 c 2.62692,50.9771 22.07758,76.25386 48.29792,76.70846"
+       id="path7066"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#007800;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker10746)"
+       d="m 508.5487,843.99924 c 2.46974,66.37643 9.78482,123.11289 86.17864,122.16532"
+       id="path7068"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#0000cc;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker12026);fill-opacity:1"
+       d="m 495.40466,923.54875 c 230.3301,-2.65013 276.53893,-27.09891 283.04418,-81.42451"
+       id="path7796"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#007800;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker8004)"
+       d="M 667.64774,968.07763 C 884.81716,964.8048 894.69532,904.63619 899.66716,840.23019"
+       id="path7798"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-414.56695)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.86659622;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293"
+       cx="507.07147"
+       cy="668.13452"
+       rx="37.066704"
+       ry="19.722952" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75955552;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295"
+       cx="654.17859"
+       cy="666.25952"
+       rx="37.120224"
+       ry="19.776472" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.81790262;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="261.48215"
+       cy="668.13452"
+       rx="37.091049"
+       ry="19.747299" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.72644866;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="387.4465"
+       cy="668.13452"
+       rx="37.136776"
+       ry="19.793026" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="458.32733"
+       cy="924.15948"
+       rx="35.842735"
+       ry="18.699877" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301-36"
+       cx="631.20416"
+       cy="966.90692"
+       rx="35.842739"
+       ry="18.699877" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75955558;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295-3"
+       cx="775.56964"
+       cy="668.1344"
+       rx="37.120224"
+       ry="19.776472" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75955558;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295-5"
+       cx="890.15887"
+       cy="668.1344"
+       rx="37.120224"
+       ry="19.776472" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-414.56695)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="37.820358"
+       y="602.7182" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.88601547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="109.114"
+       height="114.114"
+       x="209.19299"
+       y="728.80524" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:2.10070705;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="321.86325"
+       height="158.40062"
+       x="226.6216"
+       y="450.07208" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.8552227;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4166"
+       width="317.32498"
+       height="156.45457"
+       x="613.05902"
+       y="451.67014" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.13310003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4168"
+       width="108.86691"
+       height="113.86691"
+       x="454.45947"
+       y="728.07159" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="237.63045"
+       y="580.81409"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="358.59903"
+       y="581.72913" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.80504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4367"
+       width="57.194962"
+       height="27.19496"
+       x="478.1347"
+       y="580.74689" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597942;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369"
+       width="57.184021"
+       height="27.184021"
+       x="623.30084"
+       y="581.03809" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="225.76154"
+       y="761.51654" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.89280504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393"
+       width="74.107193"
+       height="29.107199"
+       x="470.33929"
+       y="759.80865" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.11811137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7449"
+       width="108.8819"
+       height="113.8819"
+       x="331.64832"
+       y="729.20703" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02366579;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451"
+       width="108.97635"
+       height="113.97635"
+       x="602.2439"
+       y="729.15967" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.94681084;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7453"
+       width="74.0532"
+       height="29.053192"
+       x="351.56265"
+       y="761.83557" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.91539472;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7455"
+       width="74.084618"
+       height="29.084608"
+       x="621.04694"
+       y="759.81989" />
+    <rect
+       style="display:inline;opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.0236659;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451-1"
+       width="108.97635"
+       height="113.97636"
+       x="722.04755"
+       y="728.07227" />
+    <rect
+       style="display:inline;opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.0236659;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451-2"
+       width="108.97635"
+       height="113.97636"
+       x="843.24207"
+       y="727.14429" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.8928051;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393-6"
+       width="74.107201"
+       height="29.107201"
+       x="738.43994"
+       y="760.9986" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.8928051;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393-0"
+       width="74.107201"
+       height="29.107201"
+       x="859.65826"
+       y="761.94562" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597948;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369-6"
+       width="57.184025"
+       height="27.184023"
+       x="746.98047"
+       y="580.26959" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597948;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369-1"
+       width="57.184025"
+       height="27.184023"
+       x="860.85626"
+       y="579.92139" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-414.56695)">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="44.25639"
+       y="647.15436"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="37.798523"
+       y="760.41071"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.81271017;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4229"
+       width="89.187302"
+       height="34.187294"
+       x="463.15643"
+       y="797.33997"
+       ry="17.093647"
+       rx="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="219.19594"
+       y="799.66528"
+       ry="17.054037" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.2612797;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4233"
+       width="156.34775"
+       height="38.682236"
+       x="694.05316"
+       y="501.89612"
+       ry="19.341118" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.16768765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="103.83231"
+       height="38.832314"
+       x="333.95874"
+       y="503.12457"
+       ry="19.416157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker12362);fill-opacity:1"
+       d="M 386.56922,728.26001 V 688.26"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker12154);fill-opacity:1"
+       d="M 387.39626,648.95207 V 611.80921"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 263.83464,609.43362 v 37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 263.35309,687.95324 v 36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#007800;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5813)"
+       d="m 506.35712,729.43362 0.59173,-40.59174"
+       id="path4445"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#007800;stroke-width:1.04023254px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5725)"
+       d="M 506.92854,648.57648 V 611.47646"
+       id="path4447"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.99597287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7457"
+       width="89.004044"
+       height="34.004032"
+       x="343.58722"
+       y="800.57446"
+       ry="17.002016" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549631;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459"
+       width="88.914513"
+       height="33.914509"
+       x="611.70343"
+       y="797.19067"
+       ry="16.957254" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301-3"
+       cx="320.48514"
+       cy="884.44043"
+       rx="35.842739"
+       ry="18.699877" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459-6"
+       width="88.914513"
+       height="33.914509"
+       x="732.73444"
+       y="798.75916"
+       ry="16.957254" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459-2"
+       width="88.914513"
+       height="33.914509"
+       x="853.92889"
+       y="797.83118"
+       ry="16.957254" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989-7)"
+       d="M 653.34583,646.09941 V 608.95655"
+       id="path4435-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+       d="m 775.97532,608.41012 v 37.14286"
+       id="path4437-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00966918;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137-2)"
+       d="m 777.16057,687.31459 v 37.68793"
+       id="path4439-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#007800;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137-2-1)"
+       d="m 892.63488,688.14147 v 36.96954"
+       id="path4439-3-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#007800;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137-2-1-7)"
+       d="m 891.70689,609.52472 v 36.96954"
+       id="path4439-3-4-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00031256;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1955);fill-opacity:1"
+       d="M 387.32895,581.25441 V 544.11155"
+       id="path4435-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-9-1)"
+       d="m 776.49909,540.48047 v 37.14286"
+       id="path4437-3-5"
+       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(#marker5813-3)"
+       d="m 654.38041,728.73775 0.59173,-40.59174"
+       id="path4445-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-414.56695)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="109.82143"
+       y="672.29077"
+       id="text4201"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="109.82143"
+         y="672.29077"
+         style="font-size:17.50000191px;line-height:1.25">spp_primary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="262.67859"
+       y="821.43365"
+       id="text4205"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="262.67859"
+         y="821.43365"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="506.39288"
+       y="819.71936"
+       id="text4209"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="506.39288"
+         y="819.71936"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="110.67858"
+       y="784.86224"
+       id="text4225"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="110.67858"
+         y="784.86224"
+         style="font-size:17.50000191px;line-height:1.25">spp controller</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="386.60715"
+       y="527.18365"
+       id="text4265"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="386.60715"
+         y="527.18365"
+         style="font-size:17.50000191px;line-height:1.25">pktgen</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="772.57147"
+       y="525.71936"
+       id="text4269"><tspan
+         sodipodi:role="line"
+         id="tspan4271"
+         x="772.57147"
+         y="525.71936"
+         style="font-size:17.50000191px;line-height:1.25">load_balancer</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="60.964294"
+       y="508.86218"
+       id="text4327"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="60.964294"
+         y="508.86218"
+         style="font-size:17.50000191px;line-height:1.25">host</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="686.12506"
+       y="477.48724"
+       id="text4331"><tspan
+         sodipodi:role="line"
+         id="tspan4333"
+         x="686.12506"
+         y="477.48724"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="296.08929"
+       y="479.80865"
+       id="text4335"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="296.08929"
+         y="479.80865"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="92.964302"
+       y="628.57648"
+       id="text4339"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="92.964302"
+         y="628.57648"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="256.67856"
+       y="749.71936"
+       id="text4343"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="256.67856"
+         y="749.71936"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="503.53577"
+       y="749.14789"
+       id="text4347"><tspan
+         sodipodi:role="line"
+         id="tspan4349"
+         x="503.53577"
+         y="749.14789"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="262.39288"
+       y="673.71936"
+       id="text4351"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="262.39288"
+         y="673.71936"
+         style="font-size:17.50000191px;line-height:1.25">vhost:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="387.91077"
+       y="674.57648"
+       id="text4355"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="387.91077"
+         y="674.57648"
+         style="font-size:17.50000191px;line-height:1.25">vhost:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="458.20233"
+       y="929.30237"
+       id="text4359"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="458.20233"
+         y="929.30237"
+         style="font-size:17.50000191px;line-height:1.25">ring:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="266.39285"
+       y="600.86218"
+       id="text4371"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="266.39285"
+         y="600.86218"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="387.01785"
+       y="601.43359"
+       id="text4375"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="387.01785"
+         y="601.43359"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="506.80365"
+       y="600.13007"
+       id="text4379"><tspan
+         sodipodi:role="line"
+         id="tspan4381"
+         x="506.80365"
+         y="600.13007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="652.25006"
+       y="600.13007"
+       id="text4383"><tspan
+         sodipodi:role="line"
+         id="tspan4385"
+         x="652.25006"
+         y="600.13007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="262.10718"
+       y="780.86224"
+       id="text4407"><tspan
+         sodipodi:role="line"
+         x="262.10718"
+         y="780.86224"
+         id="tspan4411"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="507.25006"
+       y="779.71936"
+       id="text4413"><tspan
+         sodipodi:role="line"
+         x="507.25006"
+         y="779.71936"
+         id="tspan4417"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="506.67859"
+       y="673.43365"
+       id="text4419"><tspan
+         sodipodi:role="line"
+         id="tspan4421"
+         x="506.67859"
+         y="673.43365"
+         style="font-size:17.50000191px;line-height:1.25">vhost:3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="653.9115"
+       y="673.90253"
+       id="text4423"><tspan
+         sodipodi:role="line"
+         id="tspan4425"
+         x="653.9115"
+         y="673.90253"
+         style="font-size:17.50000191px;line-height:1.25">vhost:4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="381.01779"
+       y="752.29077"
+       id="text7461"><tspan
+         sodipodi:role="line"
+         id="tspan7463"
+         x="381.01779"
+         y="752.29077"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="387.58923"
+       y="821.71942"
+       id="text7469"><tspan
+         sodipodi:role="line"
+         id="tspan7471"
+         x="387.58923"
+         y="821.71942"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="389.01782"
+       y="781.43359"
+       id="text7465"><tspan
+         sodipodi:role="line"
+         id="tspan7467"
+         x="389.01782"
+         y="781.43359"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="653.94635"
+       y="750.86218"
+       id="text7473"><tspan
+         sodipodi:role="line"
+         id="tspan7475"
+         x="653.94635"
+         y="750.86218"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="657.66071"
+       y="779.43365"
+       id="text7477"><tspan
+         sodipodi:role="line"
+         id="tspan7479"
+         x="657.66071"
+         y="779.43365"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="654.80353"
+       y="820.005"
+       id="text7481"><tspan
+         sodipodi:role="line"
+         id="tspan7483"
+         x="654.80353"
+         y="820.005"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="322.23514"
+       y="889.58319"
+       id="text4359-6"><tspan
+         sodipodi:role="line"
+         id="tspan4361-7"
+         x="322.23514"
+         y="889.58319"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">ring:0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="630.25519"
+       y="972.64374"
+       id="text4359-7"><tspan
+         sodipodi:role="line"
+         id="tspan4361-5"
+         x="630.25519"
+         y="972.64374"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">ring:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="779.21661"
+       y="751.77167"
+       id="text7473-7"><tspan
+         sodipodi:role="line"
+         id="tspan7475-0"
+         x="779.21661"
+         y="751.77167"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="897.34161"
+       y="751.77167"
+       id="text7473-7-9"><tspan
+         sodipodi:role="line"
+         id="tspan7475-0-3"
+         x="897.34161"
+         y="751.77167"
+         style="font-size:17.50000572px;line-height:1.25;stroke-width:1.00000012px">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="772.9259"
+       y="783.97028"
+       id="text7477-6"><tspan
+         sodipodi:role="line"
+         id="tspan7479-1"
+         x="772.9259"
+         y="783.97028"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="896.98529"
+       y="781.12921"
+       id="text7477-8"><tspan
+         sodipodi:role="line"
+         id="tspan7479-7"
+         x="896.98529"
+         y="781.12921"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="899.26312"
+       y="819.93036"
+       id="text7481-9"><tspan
+         sodipodi:role="line"
+         id="tspan7483-2"
+         x="899.26312"
+         y="819.93036"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="777.34528"
+       y="820.82025"
+       id="text7481-0"><tspan
+         sodipodi:role="line"
+         id="tspan7483-23"
+         x="777.34528"
+         y="820.82025"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="776.32581"
+       y="601.1958"
+       id="text4383-5"><tspan
+         sodipodi:role="line"
+         id="tspan4385-0"
+         x="776.32581"
+         y="601.1958"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="891.58124"
+       y="600.24878"
+       id="text4383-3"><tspan
+         sodipodi:role="line"
+         id="tspan4385-6"
+         x="891.58124"
+         y="600.24878"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="776.36621"
+       y="673.09631"
+       id="text4423-1"><tspan
+         sodipodi:role="line"
+         id="tspan4425-0"
+         x="776.36621"
+         y="673.09631"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1px">vhost:5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="889.90839"
+       y="674.24945"
+       id="text4423-6"><tspan
+         sodipodi:role="line"
+         id="tspan4425-3"
+         x="889.90839"
+         y="674.24945"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1px">vhost:6</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4785)"
+       d="m 335.83374,523.20691 c -45.41992,-0.1225 -70.03508,18.06864 -71.63474,56.46487"
+       id="path4273"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#007800;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart)"
+       d="m 439.66605,523.20691 c 41.12227,0.39422 67.12925,27.91164 66.04157,58.33987"
+       id="path4275"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="display:inline;fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:;marker-start:url(#marker11110)"
+       d="m 693.06058,522.69822 c -24.83241,0.0946 -38.11197,18.69568 -39.75974,58.33987"
+       id="path4273-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="display:inline;fill:none;stroke:#007800;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker7808)"
+       d="m 851.33723,521.58152 c 26.51704,0.15505 40.76797,21.5669 40.45305,58.33987"
+       id="path4275-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH 15/15] docs: add how to develop guide for SPP container
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (13 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 14/15] docs: add usecase image of load balancer ogawa.yasufumi
@ 2018-06-15  7:06 ` ogawa.yasufumi
  2018-06-15 12:47   ` Nakamura Hioryuki
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
  2018-07-24  8:00 ` [spp] [PATCH v2 09/15] docs: add use cases of SPP container ogawa.yasufumi
  16 siblings, 1 reply; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-15  7:06 UTC (permalink / raw)
  To: ferruh.yigit, spp; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/howto_launcher.rst | 321 ++++++++++++++++++++++
 1 file changed, 321 insertions(+)
 create mode 100644 docs/guides/tools/sppc/howto_launcher.rst

diff --git a/docs/guides/tools/sppc/howto_launcher.rst b/docs/guides/tools/sppc/howto_launcher.rst
new file mode 100644
index 0000000..e698f02
--- /dev/null
+++ b/docs/guides/tools/sppc/howto_launcher.rst
@@ -0,0 +1,321 @@
+.. _spp_container_howto_launcher:
+
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+
+.. _sppc_howto_define_appc:
+
+How to Define Your App Launcher
+===============================
+
+SPP container is a set of python script for launching DPDK application
+on a container with docker command. You can launch your own application
+by preparing a container image and intall your application in
+the container.
+In this chapter, you will understand how to define application container
+for your application.
+
+
+.. _sppc_howto_build_img:
+
+Build Image
+-----------
+
+SPP container provides a build tool with version specific Dockerfiles.
+You should read the Dockerfiles to understand environmental variable
+or command path are defined.
+Build tool refer ``conf/env.py`` for the definitions before running
+docker build.
+
+Dockerfiles of pktgen or SPP can help your understanding for building
+app container in which your application is placed outside of DPDK's
+directory.
+On the other hand, if you build an app container of DPDK sample
+application, you do not need to prepare your Dockerfile because all of
+examples are compiled while building DPDK's image.
+
+
+.. _sppc_howto_create_appc:
+
+Create App Container Script
+---------------------------
+
+As explained in :ref:`sppc_appl_appl`, app container script shold be
+prepared for each of applications.
+Application of SPP container is roughly categorized as DPDK sample apps
+or not. The former case is like that you change an existing DPDK sample
+application and run as a app container. 
+
+For DPDK sample apps, it is easy to build image and create app container
+script.
+On the other hand, it is a bit complex because you should you should
+define environmental variables, command path and compilation process by
+your own.
+
+This section describes how to define app container script,
+first for DPDK sample applications,
+and then second for other than them.
+
+.. _sppc_howto_dpdk_sample_appc:
+
+DPDK Sample App Container
+-------------------------
+
+Procedure of App container script is defined in main() and
+consists of three steps of
+(1)parsing options, (2)building docker command and
+(3)application command run inside the container.
+
+Here is a sample code of :ref:`sppc_appl_helloworld`.
+``parse_args()`` is defined in each
+of app container scripts to parse all of EAL, docker and application
+specific options.
+It returns a result of ``parse_args()`` method of
+``argparse.ArgumentParser`` class.
+App container script uses standard library module ``argparse`` 
+for parsing the arguments.
+
+.. code-block:: python
+
+    def main():
+        args = parse_args()
+
+        # Check for other mandatory opitons.
+        if args.dev_ids is None:
+            common.error_exit('--dev-ids')
+
+        # Setup for vhost devices with given device IDs.
+        dev_ids_list = app_helper.dev_ids_to_list(args.dev_ids)
+        sock_files = app_helper.sock_files(dev_ids_list)
+
+Each of options is accessible as ``args.dev_ids`` or
+``args.core_list``.
+Before step (2) and (3), you had better to check given option,
+expecially mandatory options.
+In this case, ``--dev-ids`` is the mandatory and you should terminate
+the application if it is not given.
+``common.error_exit()`` is a helper method to print an error message
+for given option and do ``exit()``.
+
+Setup of ``dev_ids_list`` and ``sock_files`` is required for launching
+container.
+``lib/app_helper.py`` defines helper functions commonly used
+for app containers.
+
+Then, setup docker command and its options as step (2).
+Docker options are setup by using helper method
+``setup_docker_opts()`` which generates commonly used options for app
+containers.
+This methods returns a list of a part of options to give it to
+``subprocess.call()``.
+
+.. code-block:: python
+
+    # Setup docker command.
+    docker_cmd = ['sudo', 'docker', 'run', '\\']
+    docker_opts = app_helper.setup_docker_opts(
+        args, target_name, sock_files)
+
+You should notice a option ``target_name``.
+It is used as a label to choose which of container image you use.
+The name of container image is defined as a combination of basename,
+distribution name and version.
+Basename is defined as a member of ``CONTAINER_IMG_NAME`` in
+``conf/env.py``.
+
+.. code-block:: python
+
+    # defined in conf/env.py
+    CONTAINER_IMG_NAME = {
+        'dpdk': 'sppc/dpdk',
+        'pktgen': 'sppc/pktgen',
+        'spp': 'sppc/spp'}
+
+This usecase is for DPDK sample app, so you should define target as
+``dpdk``. 
+You do not need to change for using DPDK sample apps in general.
+But it can be changed by using other target name.
+For example, if you give target ``pktgen`` and
+use default dist name and verion of ``ubuntu`` and ``latest``,
+The name of image is ``sppc/pktgen-ubuntu:latest``.
+
+For using images other than defined above, you can override it with
+``--container-image`` option.
+It enables to use any of container images and applications.
+
+You also notice that ``docker_cmd`` has ``\\`` at the end of the list.
+It is only used to format the printed command on the terminal.
+If you do no care about formatting, you do not need to add it.
+
+Next step is (3), to setup the application command.
+You should change ``cmd_path`` and ``file_prefix`` to specify
+the application.
+For ``cmd_path``, ``helloworld`` should be changed to other name of
+application, for example, 
+
+.. code-block:: python
+
+    # Setup helloworld run on container.
+    cmd_path = '%s/examples/helloworld/%s/helloworld' % (
+        env.RTE_SDK, env.RTE_TARGET)
+
+    hello_cmd = [cmd_path, '\\']
+
+    file_prefix = 'spp-hello-container%d' % dev_ids_list[0]
+    eal_opts = app_helper.setup_eal_opts(args, file_prefix)
+
+    # No application specific options for helloworld
+    hello_opts = []
+
+``file_prefix`` for EAL option should be unique on the system
+because it is used as the name of hugepage file.
+In SPP container, it is a combination of fixed text and vhost device ID
+because this ID is unique in SPP container and cannot be overlapped,
+at least among app containers in SPP container.
+EAL options are also generated by helper method.
+
+Finally, combine all of commands and its options and launch
+from ``subprocess.call()``.
+
+.. code-block:: python
+
+    cmds = docker_cmd + docker_opts + hello_cmd + eal_opts + hello_opts
+    if cmds[-1] == '\\':
+        cmds.pop()
+    common.print_pretty_commands(cmds)
+
+    if args.dry_run is True:
+        exit()
+
+    # Remove delimiters for print_pretty_commands().
+    while '\\' in cmds:
+        cmds.remove('\\')
+    subprocess.call(cmds)
+
+All of commands and options are combined in to a list ``cmds``
+to give it to ``subprocess.call()``.
+You can ignore procedures for ``\\`` and
+``common.print_pretty_commands()``
+if you do not care about printing commands in the terminal.
+However, you should not to shortcut for ``args.dry_run`` because
+it is very important for users to check the command syntax
+before running it.
+
+
+.. _sppc_howto_dpdk_appc_nots:
+
+App Container not for DPDK Sample
+---------------------------------
+
+There are several application using DPDK but not included in
+`sample applications
+<https://dpdk.org/doc/guides/sample_app_ug/index.html>`_.
+``pktgen.py`` is an example of this type of app container.
+As described in :ref:`sppc_howto_dpdk_sample_appc`,
+app container consists of three steps and it is the same for
+this case.
+
+First of all, you define parsing option for EAL, docker and
+your application.
+
+.. code-block:: python
+
+    def parse_args():
+        parser = argparse.ArgumentParser(
+            description="Launcher for pktgen-dpdk application container")
+
+        parser = app_helper.add_eal_args(parser)
+        parser = app_helper.add_appc_args(parser)
+
+        parser.add_argument(
+            '-s', '--pcap-file',
+            type=str,
+            help="PCAP packet flow file of port, defined as 'N:filename'")
+        parser.add_argument(
+            '-f', '--script-file',
+            type=str,
+            help="Pktgen script (.pkt) to or a Lua script (.lua)")
+        ...
+
+        parser = app_helper.add_sppc_args(parser)
+        return parser.parse_args()
+
+It is almost the same as :ref:`sppc_howto_dpdk_sample_appc`,
+but it has options for ``pktgen`` itself.
+For your application, you can simply add options to ``parser`` object.
+
+.. code-block:: python
+
+    def main():
+        args = parse_args()
+
+        # Setup for vhost devices with given device IDs.
+        dev_ids_list = app_helper.dev_ids_to_list(args.dev_ids)
+        sock_files = app_helper.sock_files(dev_ids_list)
+
+        # Setup docker command.
+        docker_cmd = ['sudo', 'docker', 'run', '\\']
+        docker_opts = app_helper.setup_docker_opts(
+            args, target_name, sock_files,
+            '%s/../pktgen-dpdk' % env.RTE_SDK)
+
+        cmd_path = '%s/../pktgen-dpdk/app/%s/pktgen' % (
+            env.RTE_SDK, env.RTE_TARGET)
+
+Setup for docker command is the same as the example.
+The ``terget_name`` might be different from the image you will use,
+but you do not need to care about which of container image is used
+because it is overriden with given image with ``--container-image``
+option.
+However, you should care about the path of application ``cmd_path``
+which is run in the container.
+
+Then, you should decide ``file_prefix`` to your application container
+be unique on the system.
+The ``file_prefix`` of SPP container is named as
+``spp-[APP_NAME]-container[VHOST_ID]`` convensionally to it be unique.
+
+.. code-block:: python
+
+    # Setup pktgen command
+    pktgen_cmd = [cmd_path, '\\']
+
+    file_prefix = 'spp-pktgen-container%d' % dev_ids_list[0]
+    eal_opts = app_helper.setup_eal_opts(args, file_prefix)
+
+You should check the arguments for the application.
+
+.. code-block:: python
+
+    ...
+    if args.pcap_file is not None:
+        pktgen_opts += ['-s', args.pcap_file, '\\']
+
+    if args.script_file is not None:
+        pktgen_opts += ['-f', args.script_file, '\\']
+
+    if args.log_file is not None:
+        pktgen_opts += ['-l', args.log_file, '\\']
+    ...
+
+Finally, combine all of commands and its options and launch
+from ``subprocess.call()``.
+
+.. code-block:: python
+
+    cmds = docker_cmd + docker_opts + pktgen_cmd + eal_opts + pktgen_opts
+    if cmds[-1] == '\\':
+        cmds.pop()
+    common.print_pretty_commands(cmds)
+
+    if args.dry_run is True:
+        exit()
+
+    # Remove delimiters for print_pretty_commands().
+    while '\\' in cmds:
+        cmds.remove('\\')
+    subprocess.call(cmds)
+
+As you can see, it is almost the same as DPDK sample app container
+without application path and options of application specific.
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [spp] [PATCH 15/15] docs: add how to develop guide for SPP container
  2018-06-15  7:06 ` [spp] [PATCH 15/15] docs: add how to develop guide for SPP container ogawa.yasufumi
@ 2018-06-15 12:47   ` Nakamura Hioryuki
  2018-06-18  2:33     ` Yasufumi Ogawa
  0 siblings, 1 reply; 36+ messages in thread
From: Nakamura Hioryuki @ 2018-06-15 12:47 UTC (permalink / raw)
  To: ogawa.yasufumi; +Cc: ferruh.yigit, spp

> +How to Define Your App Launcher
> +===============================
> +
> +SPP container is a set of python script for launching DPDK application
> +on a container with docker command. You can launch your own application
> +by preparing a container image and intall your application in
> +the container.

s/intall/install/

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [spp] [PATCH 15/15] docs: add how to develop guide for SPP container
  2018-06-15 12:47   ` Nakamura Hioryuki
@ 2018-06-18  2:33     ` Yasufumi Ogawa
  0 siblings, 0 replies; 36+ messages in thread
From: Yasufumi Ogawa @ 2018-06-18  2:33 UTC (permalink / raw)
  To: Nakamura Hioryuki; +Cc: ferruh.yigit, spp

On 2018/06/15 21:47, Nakamura Hioryuki wrote:
>> +How to Define Your App Launcher
>> +===============================
>> +
>> +SPP container is a set of python script for launching DPDK application
>> +on a container with docker command. You can launch your own application
>> +by preparing a container image and intall your application in
>> +the container.
> 
> s/intall/install/
Hi Hiroyuki,

Thank you for revising. I would like to fix it.
> 
> 


-- 
Yasufumi Ogawa
NTT Network Service Systems Labs

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (14 preceding siblings ...)
  2018-06-15  7:06 ` [spp] [PATCH 15/15] docs: add how to develop guide for SPP container ogawa.yasufumi
@ 2018-06-18  6:21 ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 01/15] docs: add index of SPP container tool ogawa.yasufumi
                     ` (14 more replies)
  2018-07-24  8:00 ` [spp] [PATCH v2 09/15] docs: add use cases of SPP container ogawa.yasufumi
  16 siblings, 15 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Hi,

This is the fixed version of documents of SPP container.

  * Fix typo 'intall' noticed from Hiroyuki.

  * Fix wrong descriptions in getting started guide.

  * Remove trailing whitespaces.


Yasufumi Ogawa (15):
  docs: add index of SPP container tool
  docs: add overview of SPP container
  docs: add overview image of SPP container
  docs: add getting started guide of SPP container
  docs: add image of example for gsg
  docs: add install guide for SPP container
  docs: add build image guide for SPP container
  docs: add manual for app container launchers
  docs: add use cases of SPP container
  docs: add usecase image of testing vhost
  docs: add usecase image of testing ring
  docs: add usecase image of pktgen and l2fwd
  docs: add usecase image of using less lcores
  docs: add usecase image of load balancer
  docs: add how to develop guide for SPP container

 .../images/tools/sppc/sppc_gsg_testpmd.svg    |  614 +++++++
 .../images/tools/sppc/sppc_overview.svg       |  946 ++++++++++
 .../tools/sppc/sppc_usecase_l2fwdpktgen.svg   |  918 ++++++++++
 .../sppc/sppc_usecase_l2fwdpktgen_less.svg    |  848 +++++++++
 .../tools/sppc/sppc_usecase_lb_pktgen.svg     | 1573 +++++++++++++++++
 .../images/tools/sppc/sppc_usecase_ring.svg   | 1032 +++++++++++
 .../images/tools/sppc/sppc_usecase_vhost.svg  |  644 +++++++
 docs/guides/tools/index.rst                   |    6 +-
 docs/guides/tools/sppc/app_launcher.rst       | 1058 +++++++++++
 docs/guides/tools/sppc/build_img.rst          |  178 ++
 docs/guides/tools/sppc/getting_started.rst    |  328 ++++
 docs/guides/tools/sppc/howto_launcher.rst     |  318 ++++
 docs/guides/tools/sppc/index.rst              |   20 +
 docs/guides/tools/sppc/install.rst            |   91 +
 docs/guides/tools/sppc/overview.rst           |   28 +
 docs/guides/tools/sppc/usecases.rst           |  673 +++++++
 16 files changed, 9274 insertions(+), 1 deletion(-)
 create mode 100644 docs/guides/images/tools/sppc/sppc_gsg_testpmd.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_overview.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen_less.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_lb_pktgen.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_ring.svg
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_vhost.svg
 create mode 100644 docs/guides/tools/sppc/app_launcher.rst
 create mode 100644 docs/guides/tools/sppc/build_img.rst
 create mode 100644 docs/guides/tools/sppc/getting_started.rst
 create mode 100644 docs/guides/tools/sppc/howto_launcher.rst
 create mode 100644 docs/guides/tools/sppc/index.rst
 create mode 100644 docs/guides/tools/sppc/install.rst
 create mode 100644 docs/guides/tools/sppc/overview.rst
 create mode 100644 docs/guides/tools/sppc/usecases.rst

-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 01/15] docs: add index of SPP container tool
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 02/15] docs: add overview of SPP container ogawa.yasufumi
                     ` (13 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

SPP container is a management tool for running DPDK application
on a container. SPP container provides a set of python scripts for
buiding docker image and launching app containers.Containers are
connected with SPP and its network is to be easily configurable.

This patch is for adding an index file of documents of SPP container.

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/index.rst      |  6 +++++-
 docs/guides/tools/sppc/index.rst | 20 ++++++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)
 create mode 100644 docs/guides/tools/sppc/index.rst

diff --git a/docs/guides/tools/index.rst b/docs/guides/tools/index.rst
index 9cf137e..f6ee8c7 100644
--- a/docs/guides/tools/index.rst
+++ b/docs/guides/tools/index.rst
@@ -28,9 +28,13 @@
     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+.. _tools_index:
+
 Tools
-===============
+=====
 
 .. toctree::
    :maxdepth: 2
    :numbered:
+
+   sppc/index
diff --git a/docs/guides/tools/sppc/index.rst b/docs/guides/tools/sppc/index.rst
new file mode 100644
index 0000000..6ed9a5b
--- /dev/null
+++ b/docs/guides/tools/sppc/index.rst
@@ -0,0 +1,20 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+.. _spp_container_index:
+
+SPP Container
+=============
+
+Running SPP and DPDK applications on containers.
+
+.. toctree::
+    :maxdepth: 1
+
+    overview
+    getting_started
+    install
+    build_img
+    app_launcher
+    usecases
+    howto_launcher
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 02/15] docs: add overview of SPP container
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 01/15] docs: add index of SPP container tool ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 03/15] docs: add overview image " ogawa.yasufumi
                     ` (12 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/overview.rst | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 docs/guides/tools/sppc/overview.rst

diff --git a/docs/guides/tools/sppc/overview.rst b/docs/guides/tools/sppc/overview.rst
new file mode 100644
index 0000000..645ebc5
--- /dev/null
+++ b/docs/guides/tools/sppc/overview.rst
@@ -0,0 +1,28 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+.. _spp_container_overview:
+
+Overview
+========
+
+SPP container is a set of tools for running SPP and DPDK applications
+with docker.
+It consists of shell or python scripts
+for building container images and launching app containers
+with docker commands.
+
+As shown in :numref:`figure_sppc_overview`, all of
+DPDK applications, including SPP primary and secondary processes,
+run inside containers.
+SPP controller is just a python script and does not need to be run as
+an app container.
+
+
+.. _figure_sppc_overview:
+
+.. figure:: ../../images/tools/sppc/sppc_overview.*
+   :height: 640 em
+   :width: 640 em
+
+   SPP container overview
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 03/15] docs: add overview image of SPP container
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 01/15] docs: add index of SPP container tool ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 02/15] docs: add overview of SPP container ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 04/15] docs: add getting started guide " ogawa.yasufumi
                     ` (11 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../images/tools/sppc/sppc_overview.svg       | 946 ++++++++++++++++++
 1 file changed, 946 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_overview.svg

diff --git a/docs/guides/images/tools/sppc/sppc_overview.svg b/docs/guides/images/tools/sppc/sppc_overview.svg
new file mode 100644
index 0000000..d745ede
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_overview.svg
@@ -0,0 +1,946 @@
+<?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="240mm"
+   height="150mm"
+   viewBox="0 0 850.39371 531.49607"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="spp_container.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5907"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5909" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5813"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5815" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5725"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5727" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5643"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5645" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5567"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5569" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker5491"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5493"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5421"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5423" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker5207"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5209"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5137"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5139" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5091"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5093" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5051"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5053" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5017"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5019" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker4989"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path4991" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path4480"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.8) rotate(180) translate(12.5,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="625.71429"
+     inkscape:cy="177.09391"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1440"
+     inkscape:window-height="851"
+     inkscape:window-x="-3"
+     inkscape:window-y="16"
+     inkscape:window-maximized="0"
+     units="mm"
+     width="230mm" />
+  <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,-520.86616)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.04377723;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="826.09912"
+       height="463.24191"
+       x="11.379023"
+       y="543.45551" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.07469606;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4142"
+       width="73.925301"
+       height="33.925304"
+       x="274.03732"
+       y="973.25671" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81819206;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4144"
+       width="74.181808"
+       height="34.181808"
+       x="669.62335"
+       y="972.55701" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.8340826;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293"
+       cx="647.07147"
+       cy="735.79077"
+       rx="34.582958"
+       ry="19.582958" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.73104453;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295"
+       cx="767.92859"
+       cy="735.79077"
+       rx="34.63448"
+       ry="19.634478" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.78720939;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="253.35715"
+       cy="735.79077"
+       rx="34.606396"
+       ry="19.606396" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.69917637;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="383.0715"
+       cy="735.79077"
+       rx="34.650414"
+       ry="19.650412" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="516.28577"
+       cy="837.21936"
+       rx="35.842735"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="26.570356"
+       y="670.2182" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.88601547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="109.114"
+       height="114.114"
+       x="197.94299"
+       y="796.30524" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.4318701;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="208.56813"
+       height="113.56813"
+       x="217.07307"
+       y="562.57812" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.28275025;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4166"
+       width="208.71725"
+       height="113.71725"
+       x="607.28436"
+       y="563.93213" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.13310003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4168"
+       width="108.86691"
+       height="113.86691"
+       x="593.20947"
+       y="795.57159" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="226.38045"
+       y="648.31409"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="356.72403"
+       y="649.22913" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.80504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4367"
+       width="57.194962"
+       height="27.19496"
+       x="618.7597"
+       y="650.12189" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597942;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369"
+       width="57.184021"
+       height="27.184021"
+       x="747.05084"
+       y="650.41309" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="214.51154"
+       y="829.01654" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.89280504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393"
+       width="74.107193"
+       height="29.107199"
+       x="609.08929"
+       y="827.30865" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.11811137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7449"
+       width="108.8819"
+       height="113.8819"
+       x="329.77332"
+       y="796.70703" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02366579;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451"
+       width="108.97635"
+       height="113.97635"
+       x="712.8689"
+       y="796.65967" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.94681084;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7453"
+       width="74.0532"
+       height="29.053192"
+       x="349.68765"
+       y="829.33557" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.91539472;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7455"
+       width="74.084618"
+       height="29.084608"
+       x="731.67194"
+       y="827.31989" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-520.86616)">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="33.00639"
+       y="714.65436"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="26.548521"
+       y="827.91071"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.81271017;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4229"
+       width="89.187302"
+       height="34.187294"
+       x="601.90643"
+       y="864.83997"
+       ry="17.093647"
+       rx="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="207.94594"
+       y="867.16528"
+       ry="17.054037" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.03231287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4233"
+       width="103.96768"
+       height="38.967686"
+       x="660.58765"
+       y="597.37836"
+       ry="19.483843" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.16768765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="103.83231"
+       height="38.832314"
+       x="272.08374"
+       y="596.87457"
+       ry="19.416157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5091)"
+       d="m 309.71426,1044.3622 0,-35.7143"
+       id="path4427"
+       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(#marker5907)"
+       d="m 707.14283,1008.6479 0,32.8572"
+       id="path4429"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5051)"
+       d="m 293.99997,972.18888 c -16.51883,-17.82401 -28.15615,-36.4616 -28.57143,-56.96954"
+       id="path4431"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="m 253.99997,796.3622 0,-40.00001"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989)"
+       d="m 253.99997,715.50505 0,-37.14286"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 385.99997,676.93362 0,37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 384.5714,756.36219 0,36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94411641;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5207)"
+       d="m 440.28569,838.36219 38.50992,0"
+       id="path4441"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99798077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5421)"
+       d="m 553.14282,838.78957 38.32673,-0.43681"
+       id="path4443"
+       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(#marker5813)"
+       d="m 648.85712,796.93362 0.59173,-40.59174"
+       id="path4445"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.06141865px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5725)"
+       d="m 649.42854,716.07648 0,-38.62661"
+       id="path4447"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02824485px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5643)"
+       d="m 768.64718,677.92942 1.01015,39.28992"
+       id="path4449"
+       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(#marker5567)"
+       d="m 768.85712,755.50505 0,38.57143"
+       id="path4451"
+       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(#marker5491)"
+       d="m 759.01012,911.19903 c 1.38788,25.41499 -17.01853,40.93284 -30.83683,58.74474"
+       id="path4453"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.99597287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7457"
+       width="89.004044"
+       height="34.004032"
+       x="341.71222"
+       y="868.07446"
+       ry="17.002016" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549631;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459"
+       width="88.914513"
+       height="33.914509"
+       x="722.32843"
+       y="864.69067"
+       ry="16.957254" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <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="46.571423"
+       y="739.79077"
+       id="text4201"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="46.571423"
+         y="739.79077">spp_primary</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="219.42857"
+       y="888.93365"
+       id="text4205"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="219.42857"
+         y="888.93365">spp_nfv</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="613.14288"
+       y="887.21936"
+       id="text4209"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="613.14288"
+         y="887.21936">spp_nfv</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="39.428577"
+       y="852.36224"
+       id="text4225"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="39.428577"
+         y="852.36224">spp controller</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="292.85715"
+       y="622.93365"
+       id="text4265"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="292.85715"
+         y="622.93365">pktgen</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="676.57147"
+       y="623.21936"
+       id="text4269"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4271"
+         x="676.57147"
+         y="623.21936">testpmd</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="293.14285"
+       y="994.07648"
+       id="text4319"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4321"
+         x="293.14285"
+         y="994.07648">port</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="688.57147"
+       y="994.36218"
+       id="text4323"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4325"
+         x="688.57147"
+         y="994.36218">port</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="39.714294"
+       y="576.36218"
+       id="text4327"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="39.714294"
+         y="576.36218">host</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="620.00006"
+       y="584.36224"
+       id="text4331"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4333"
+         x="620.00006"
+         y="584.36224">container</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="229.71428"
+       y="582.93365"
+       id="text4335"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="229.71428"
+         y="582.93365">container</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="39.714298"
+       y="696.07648"
+       id="text4339"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="39.714298"
+         y="696.07648">container</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="207.42856"
+       y="817.21936"
+       id="text4343"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="207.42856"
+         y="817.21936">container</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="600.28577"
+       y="816.64789"
+       id="text4347"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4349"
+         x="600.28577"
+         y="816.64789">container</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="229.14287"
+       y="741.21936"
+       id="text4351"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="229.14287"
+         y="741.21936">vhost</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="360.28577"
+       y="742.07648"
+       id="text4355"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="360.28577"
+         y="742.07648">vhost</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="500.28577"
+       y="842.36224"
+       id="text4359"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="500.28577"
+         y="842.36224">ring</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="233.14285"
+       y="668.36218"
+       id="text4371"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="233.14285"
+         y="668.36218">virtio</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="363.14285"
+       y="666.93359"
+       id="text4375"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="363.14285"
+         y="666.93359">virtio</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="625.42865"
+       y="669.50507"
+       id="text4379"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4381"
+         x="625.42865"
+         y="669.50507">virtio</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="752.00006"
+       y="669.50507"
+       id="text4383"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4385"
+         x="752.00006"
+         y="669.50507">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       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;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="250.85718"
+       y="848.36224"
+       id="text4407"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="250.85718"
+         y="848.36224"
+         id="tspan4411">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       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;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="646.00006"
+       y="847.21936"
+       id="text4413"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="646.00006"
+         y="847.21936"
+         id="tspan4417">shmem</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="623.42859"
+       y="740.93365"
+       id="text4419"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4421"
+         x="623.42859"
+         y="740.93365">vhost</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="743.14288"
+       y="740.93359"
+       id="text4423"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4425"
+         x="743.14288"
+         y="740.93359">vhost</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="341.14279"
+       y="819.79077"
+       id="text7461"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7463"
+         x="341.14279"
+         y="819.79077">container</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="351.71423"
+       y="889.21942"
+       id="text7469"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7471"
+         x="351.71423"
+         y="889.21942">spp_nfv</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="351.14282"
+       y="846.93359"
+       id="text7465"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7467"
+         x="351.14282"
+         y="846.93359">shmem</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="726.57135"
+       y="818.36218"
+       id="text7473"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7475"
+         x="726.57135"
+         y="818.36218">container</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="734.28571"
+       y="846.93365"
+       id="text7477"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7479"
+         x="734.28571"
+         y="846.93365">shmem</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="733.42853"
+       y="887.505"
+       id="text7481"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7483"
+         x="733.42853"
+         y="887.505">spp_nfv</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 04/15] docs: add getting started guide of SPP container
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (2 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 03/15] docs: add overview image " ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 05/15] docs: add image of example for gsg ogawa.yasufumi
                     ` (10 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/getting_started.rst | 328 +++++++++++++++++++++
 1 file changed, 328 insertions(+)
 create mode 100644 docs/guides/tools/sppc/getting_started.rst

diff --git a/docs/guides/tools/sppc/getting_started.rst b/docs/guides/tools/sppc/getting_started.rst
new file mode 100644
index 0000000..db6bd1a
--- /dev/null
+++ b/docs/guides/tools/sppc/getting_started.rst
@@ -0,0 +1,328 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+.. _spp_container_gs:
+
+Getting Started
+===============
+
+In this section, learn how to use SPP container with a simple
+usecase.
+You use four of terminals for running SPP processes and applications.
+
+.. _sppc_gs_setup:
+
+Setup DPDK and SPP
+------------------
+
+First of all, you need to clone DPDK and setup hugepages for running
+DPDK application as described in
+:doc:`../../setup/getting_started`
+or DPDK's
+`Gettting Started Guide
+<https://dpdk.org/doc/guides/linux_gsg/sys_reqs.html>`_.
+You also need to load kernel modules and bind network ports as in
+`Linux Drivers
+<https://dpdk.org/doc/guides/linux_gsg/linux_drivers.html>`_.
+
+Then, as described in
+:doc:`../../setup/getting_started`
+, clone and compile SPP in any directory.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ git clone http://dpdk.org/git/apps/spp
+    $ cd spp
+
+
+.. _sppc_gs_build_docker_imgs:
+
+Build Docker Images
+-------------------
+
+Build tool is a python script for creating a docker image and
+currently supporting three types of images for
+DPDK sample applications, pktgen-dpdk, or SPP.
+
+Run build tool for creating three type of docker images.
+It starts to download the latest Ubuntu docker image and installation
+for the latest DPDK, pktgen or SPP.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp/tools/sppc
+    $ python build/main.py -t dpdk
+    $ python build/main.py -t pktgen
+    $ python build/main.py -t spp
+
+Of course DPDK is required from pktgen and SPP, and it causes a
+problem of compatibility between them sometimes.
+At the time writing this document, SPP v18.02 is not compatible with
+the latest DPDK v18.05 and it is failed to compile.
+In this case, you should build SPP with ``--dpdk-branch`` option to tell
+the version of DPDK explicitly.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ python build/main.py -t spp --dpdk-branch v18.02
+
+You can find all of options by ``build/main.py -h``.
+
+Waiting for a minutes, then you are ready to launch app containers.
+All of images are referred from ``docker images`` command.
+
+.. code-block:: console
+
+    $ docker images
+    REPOSITORY           TAG       IMAGE ID         CREATED         SIZE
+    sppc/spp-ubuntu      latest    3ec39adb460f     2 days ago      862MB
+    sppc/pktgen-ubuntu   latest    ffe65cc70e65     2 days ago      845MB
+    sppc/dpdk-ubuntu     latest    0d5910d10e3f     2 days ago      1.66GB
+    <none>               <none>    d52d2f86a3c0     2 days ago      551MB
+    ubuntu               latest    452a96d81c30     5 weeks ago     79.6MB
+
+.. note::
+
+    The Name of containers is defined as a set of target, name and
+    version of Linux distoribution.
+    For example, container image targetting dpdk apps on Ubuntu 16.04
+    is named as ``sppc/dpdk-ubuntu:16.04``.
+
+    Build script understands which of Dockerfile should be used based
+    on the given options.
+    If you run build script with options for dpdk and Ubuntu 16.04 as
+    below, it finds ``build/ubuntu/dpdk/Dockerfile.16.04`` and runs
+    ``docker build``.
+    Options for Linux distribution have default value, ``ubuntu`` and
+    ``latest``. So, you do not need to specify them if you use default.
+
+
+    .. code-block:: console
+
+        # latest DPDK on latest Ubuntu
+        $ python build/main.py -t dpdk --dist-name ubuntu --dist-ver latest
+
+        # it is also the same
+        $ python build/main.py -t dpdk
+
+        # or use Ubuntu 16.04
+        $ python build/main.py -t dpdk --dist-ver 16.04
+
+
+.. warning::
+
+    Currently, the latest version of Ubuntu is 18.04 and DPDK is 18.05.
+    However, SPP is not stable on the latest versions, especially
+    running on containers.
+
+    It is better to use Ubuntu 16.04 and DPDK 18.02 for SPP containers
+    until be stabled.
+
+    .. code-block:: console
+
+        $ python build/main.py -t dpdk --dist-ver 16.04 --dpdk-branch v18.02
+        $ python build/main.py -t pktgen --dist-ver 16.04 \
+          --dpdk-branch v18.02 --pktgen-branch pktgen-3.4.9
+        $ python build/main.py -t spp --dist-ver 16.04 --dpdk-branch v18.02
+
+
+.. _sppc_gs_launch_containers:
+
+Launch SPP and App Containers
+-----------------------------
+
+Before launch containers, you should set IP address of host machine
+as ``SPP_CTRL_IP`` environment variable
+for controller to be accessed from inside containers.
+It is better to define this variable in ``$HOME/.bashrc``.
+
+.. code-block:: console
+
+    # Set your host IP address
+    export SPP_CTRL_IP=[HOST_IPADDR]
+
+
+SPP Controller
+~~~~~~~~~~~~~~
+
+Launch SPP controller to be ready
+before primary and secondary processes.
+SPP controller is launched in the terminal 1 in this guide.
+
+.. note::
+
+    SPP controller provides ``topo term`` which shows network
+    topology in a terminal.
+
+    However, there are a few terminals supporing this feature.
+    ``mlterm`` is the most useful and easy to customize.
+    Refer :doc:`../../commands/experimental` for ``topo`` command.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+
+SPP Primary Container
+~~~~~~~~~~~~~~~~~~~~~
+
+As ``SPP_CTRL_IP`` is activated, you are enalbed to run
+``app/spp-primary.py`` with options of EAL and SPP primary
+in terminal 2.
+In this case, launch spp-primary in background mode using one core
+and two ports.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x03
+
+
+SPP Secondary Container
+~~~~~~~~~~~~~~~~~~~~~~~
+
+For secondary process, there are two launcher scripts,
+``spp-nfv.py`` and ``spp-vm.py``.
+There behave as similar to ``spp_nfv`` running on host and
+``spp_vm`` on guest VM.
+The difference is that both of them are running on containers.
+
+You use only ``spp_nfv.py`` in this guide.
+Launch ``spp_nfv`` in terminal 2
+with options for secondary ID is ``1`` and
+core list is ``1-2`` for using 2nd and 3rd cores.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ python app/spp-nfv.py -i 1 -l 1-2
+
+If it is succeeded, container is running in background.
+You can find it with ``docker -ps`` command.
+
+
+App Container
+~~~~~~~~~~~~~
+
+Launch DPDK's ``testpmd`` as an example of app container.
+
+Currently, most of app containers do not support ring PMD.
+It means that you should create vhost PMDs from SPP controller
+before launching the app container.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add vhost 1
+    spp > sec 1;add vhost 2
+
+``spp_nfv`` of ID 1 running inside container creates
+``vhost:1`` and ``vhost:2``.
+Vhost PMDs are referred as an option ``-d 1,2`` from the
+app container launcher.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ app/testpmd.py -l 3-4 -d 1,2
+    sudo docker run -it \
+    ...
+    EAL: Detected 16 lcore(s)
+    EAL: Auto-detected process type: PRIMARY
+    EAL: Multi-process socket /var/run/.testpmd1_unix
+    EAL: Probing VFIO support...
+    EAL: VFIO support initialized
+    Interactive-mode selected
+    Warning: NUMA should be configured manually by using --port-numa-...
+    testpmd: create a new mbuf pool <mbuf_pool_socket_0>: n=155456,...
+    testpmd: preferred mempool ops selected: ring_mp_mc
+    Configuring Port 0 (socket 0)
+    Port 0: 32:CB:1D:72:68:B9
+    Configuring Port 1 (socket 0)
+    Port 1: 52:73:C3:5B:94:F1
+    Checking link statuses...
+    Done
+    testpmd>
+
+
+It launches ``testpmd`` in foreground mode.
+
+
+.. _sppc_gs_run_apps:
+
+Run Applications
+----------------
+
+At the end of this getting started guide, configure network paths
+as described in
+:numref:`figure_sppc_gsg_testpmd`
+and start forwarding from testpmd.
+
+.. _figure_sppc_gsg_testpmd:
+
+.. figure:: ../../images/tools/sppc/sppc_gsg_testpmd.*
+   :height: 340em
+   :width: 340em
+
+   SPP and testpmd on containers
+
+From terminal 1, add ``ring:0``, connect ``vhost:1`` and ``vhost:2``
+with it.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add ring 0
+    spp > sec 1;patch vhost:1 ring:0
+    spp > sec 1;patch ring:0 vhost:2
+    spp > sec 1;forward
+    spp > sec 1;status
+    status: running
+    ports:
+      - 'ring:0 -> vhost:2'
+      - 'vhost:1 -> ring:0'
+      - 'vhost:2'
+
+Start forwarding on port 0 by ``start tx_first``.
+
+.. code-block:: console
+
+    # Terminal 2
+    testpmd> start tx_first
+    io packet forwarding - ports=2 - cores=1 - streams=2 - NUMA support...
+    Logical Core 4 (socket 0) forwards packets on 2 streams:
+      RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
+      RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
+    ...
+
+Finally, stop forwarding to show statistics as the result.
+In this case, about 35 million packets are forwarded.
+
+.. code-block:: console
+
+    # Terminal 2
+    testpmd> stop
+    Telling cores to stop...
+    Waiting for lcores to finish...
+
+      ---------------------- Forward statistics for port 0  ------------------
+      RX-packets: 0              RX-dropped: 0             RX-total: 0
+      TX-packets: 35077664       TX-dropped: 0             TX-total: 35077664
+      ------------------------------------------------------------------------
+
+      ---------------------- Forward statistics for port 1  ------------------
+      RX-packets: 35077632       RX-dropped: 0             RX-total: 35077632
+      TX-packets: 32             TX-dropped: 0             TX-total: 32
+      ------------------------------------------------------------------------
+
+      +++++++++++++++ Accumulated forward statistics for all ports++++++++++++
+      RX-packets: 35077632       RX-dropped: 0             RX-total: 35077632
+      TX-packets: 35077696       TX-dropped: 0             TX-total: 35077696
+      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 05/15] docs: add image of example for gsg
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (3 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 04/15] docs: add getting started guide " ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 06/15] docs: add install guide for SPP container ogawa.yasufumi
                     ` (9 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

As an example of usage of SPP container for getting started guide,
add an image of simple testing configuration.

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../images/tools/sppc/sppc_gsg_testpmd.svg    | 614 ++++++++++++++++++
 1 file changed, 614 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_gsg_testpmd.svg

diff --git a/docs/guides/images/tools/sppc/sppc_gsg_testpmd.svg b/docs/guides/images/tools/sppc/sppc_gsg_testpmd.svg
new file mode 100644
index 0000000..f6d3c30
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_gsg_testpmd.svg
@@ -0,0 +1,614 @@
+<?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="132mm"
+   height="120mm"
+   viewBox="0 0 467.71654 425.19682"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="sppc_gsg_testpmd.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1731"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lstart">
+      <path
+         transform="scale(1.1) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path1729" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path1009"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1371"
+       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="path1369" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path991"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5907"
+       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="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       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="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       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="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       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="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       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="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       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="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       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="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       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="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       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="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       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="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       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="path4991"
+         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="path4480"
+         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="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,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="232.84317"
+     inkscape:cy="177.09391"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer5"
+     showgrid="false"
+     inkscape:window-width="1440"
+     inkscape:window-height="851"
+     inkscape:window-x="67"
+     inkscape:window-y="27"
+     inkscape:window-maximized="0"
+     units="mm"
+     width="230mm" />
+  <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,-627.16542)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.39066923;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="443.81241"
+       height="399.22818"
+       x="13.093798"
+       y="640.04016" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-627.16542)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.85884833;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="389.55356"
+       cy="828.79077"
+       rx="41.267006"
+       ry="19.570576" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75844175;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="257.35736"
+       cy="828.79077"
+       rx="40.83522"
+       ry="19.620779" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="322.44644"
+       cy="1009.4158"
+       rx="35.842735"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-627.16542)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="28.570358"
+       y="763.2182" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02305269;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="221.0242"
+       height="75.109192"
+       x="212.50362"
+       y="889.388" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.4318701;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="208.56813"
+       height="113.56813"
+       x="219.07307"
+       y="655.57812" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="228.38045"
+       y="741.31409"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="358.72403"
+       y="742.22913" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-627.16542)">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="35.00639"
+       y="807.65436"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="28.548523"
+       y="892.78571"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.98559052;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="109.1037"
+       height="34.014416"
+       x="266.24277"
+       y="920.8371"
+       ry="17.007208" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.2391907;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="117.15366"
+       height="38.760811"
+       x="268.49451"
+       y="689.91034"
+       ry="19.380405" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00031245;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Lstart)"
+       d="m 284.86972,1009.4389 c -20.00566,0 -31.15795,-6.3985 -31.75195,-45.2124"
+       id="path4431"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="M 389.12497,889.3622 V 849.36219"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989)"
+       d="M 389.12497,808.50505 V 771.36219"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 258.62497,769.93362 v 37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 257.1964,849.36219 v 36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1731)"
+       d="m 389.14283,967.14794 c -1.08386,32.21837 -8.53475,41.43726 -31.69643,42.76786"
+       id="path4416"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-627.16542)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="48.571423"
+       y="832.79077"
+       id="text4201"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="48.571423"
+         y="832.79077"
+         style="font-size:17.5px;line-height:1.25">spp_primary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="285.17859"
+       y="942.55865"
+       id="text4205"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="285.17859"
+         y="942.55865"
+         style="font-size:17.5px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="41.428577"
+       y="917.23724"
+       id="text4225"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="41.428577"
+         y="917.23724"
+         style="font-size:17.5px;line-height:1.25">spp controller</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="289.23215"
+       y="715.93365"
+       id="text4265"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="289.23215"
+         y="715.93365"
+         style="font-size:17.5px;line-height:1.25">testpmd</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="41.714294"
+       y="669.36218"
+       id="text4327"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="41.714294"
+         y="669.36218"
+         style="font-size:17.5px;line-height:1.25">host</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="231.71428"
+       y="675.93365"
+       id="text4335"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="231.71428"
+         y="675.93365"
+         style="font-size:17.5px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="41.714298"
+       y="789.07648"
+       id="text4339"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="41.714298"
+         y="789.07648"
+         style="font-size:17.5px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="276.92856"
+       y="910.21936"
+       id="text4343"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="276.92856"
+         y="910.21936"
+         style="font-size:17.5px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="356.76785"
+       y="834.21936"
+       id="text4351"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="356.76785"
+         y="834.21936"
+         style="font-size:17.5px;line-height:1.25">vhost:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="225.41077"
+       y="835.07648"
+       id="text4355"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="225.41077"
+         y="835.07648"
+         style="font-size:17.5px;line-height:1.25">vhost:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="297.07144"
+       y="1014.5587"
+       id="text4359"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="297.07144"
+         y="1014.5587"
+         style="font-size:17.5px;line-height:1.25">ring:0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="235.14285"
+       y="761.36218"
+       id="text4371"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="235.14285"
+         y="761.36218"
+         style="font-size:17.5px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;line-height:0%;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="365.14285"
+       y="759.93359"
+       id="text4375"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="365.14285"
+         y="759.93359"
+         style="font-size:17.5px;line-height:1.25">virtio</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 06/15] docs: add install guide for SPP container
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (4 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 05/15] docs: add image of example for gsg ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 07/15] docs: add build image " ogawa.yasufumi
                     ` (8 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/install.rst | 91 ++++++++++++++++++++++++++++++
 1 file changed, 91 insertions(+)
 create mode 100644 docs/guides/tools/sppc/install.rst

diff --git a/docs/guides/tools/sppc/install.rst b/docs/guides/tools/sppc/install.rst
new file mode 100644
index 0000000..2a93832
--- /dev/null
+++ b/docs/guides/tools/sppc/install.rst
@@ -0,0 +1,91 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+.. _spp_container_install:
+
+Install
+=======
+
+
+.. _sppc_install_required:
+
+Required Packages
+-----------------
+
+You need to install packages required for DPDK, and docker.
+
+* DPDK 17.11 or later (supporting container)
+* docker
+
+
+.. _sppc_install_config:
+
+Configurations
+--------------
+
+You might need some additional non-mandatory configurations.
+
+Run docker without sudo
+~~~~~~~~~~~~~~~~~~~~~~~
+
+You should run docker as sudo in most of scripts provided in
+SPP container because for running DPDK applications.
+
+However, you can run docker without sudo if you do not run DPDK
+applications.
+It is useful if you run ``docker kill`` for terminating containerized
+process, ``docker rm`` or ``docker rmi`` for cleaning resources.
+
+.. code-block:: console
+
+    # Terminate container from docker command
+    $ docker kill xxxxxx_yyyyyyy
+
+    # Remove all of containers
+    $ docker rm `docker ps -aq`
+
+    # Remove all of images
+    $ docker rmi `docker images -aq`
+
+The reason for running docker requires sudo is docker daemon
+binds to a unix socket instead of a TCP port.
+Unix socket is owned by root and other users can only access it using
+sudo.
+However, you can run if you add your account to docker group.
+
+.. code-block:: console
+
+    $ sudo groupadd docker
+    $ sudo usermod -aG docker $USER
+
+To activate it, you have to logout and re-login at once.
+
+
+Network Proxy
+~~~~~~~~~~~~~
+
+If you are behind a proxy, you should configure proxy to build an image
+or running container.
+SPP container is supportng proxy configuration for getting
+it from shell environments.
+You confirm that ``http_proxy``, ``https_proxy``
+and ``no_proxy`` of environmental variables are defined.
+
+It also required to add proxy configurations for docker daemon.
+Proxy for docker daemon is defined as ``[Service]`` entry in
+``/etc/systemd/system/docker.service.d/http-proxy.conf``.
+
+.. code-block:: console
+
+    [Service]
+    Environment="HTTP_PROXY=http:..." "HTTPS_PROXY=https..." "NO_PROXY=..."
+
+To activate it, you should restart docker daemon.
+
+.. code-block:: console
+
+    $ systemctl daemon-reload
+    $ systemctl restart docker
+
+You can confirm that environments are updated by running
+``docker info``.
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 07/15] docs: add build image guide for SPP container
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (5 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 06/15] docs: add install guide for SPP container ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 08/15] docs: add manual for app container launchers ogawa.yasufumi
                     ` (7 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/build_img.rst | 178 +++++++++++++++++++++++++++
 1 file changed, 178 insertions(+)
 create mode 100644 docs/guides/tools/sppc/build_img.rst

diff --git a/docs/guides/tools/sppc/build_img.rst b/docs/guides/tools/sppc/build_img.rst
new file mode 100644
index 0000000..bbac45d
--- /dev/null
+++ b/docs/guides/tools/sppc/build_img.rst
@@ -0,0 +1,178 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+.. _spp_container_build_img:
+
+Build Images
+============
+
+As explained in :doc:`getting_started` section,
+container image is built with ``build/main.py``.
+This script is for running ``docker build`` with a set of
+``--build-args`` options for building DPDK applications.
+
+This script supports building application from any of repositories.
+For example, you can build SPP hosted on your repository
+``https://github.com/your/spp.git``
+with DPDK 18.02 as following.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python build/build.py --dpdk-branch v18.02 \
+      --spp-repo https://github.com/your/spp.git
+
+Refer all of options running with ``-h`` option.
+
+.. code-block:: console
+
+    $ python build/main.py -h
+    usage: main.py [-h] [-t TARGET] [-ci CONTAINER_IMAGE]
+                   [--dist-name DIST_NAME]
+                   [--dist-ver DIST_VER] [--dpdk-repo DPDK_REPO]
+                   [--dpdk-branch DPDK_BRANCH] [--pktgen-repo PKTGEN_REPO]
+                   [--pktgen-branch PKTGEN_BRANCH] [--spp-repo SPP_REPO]
+                   [--spp-branch SPP_BRANCH] [--only-envsh] [--dry-run]
+
+    Docker image builder for DPDK applications
+
+    optional arguments:
+      -h, --help            show this help message and exit
+      -t TARGET, --target TARGET
+                            Build target ('dpdk', 'pktgen' or 'spp')
+      -ci CONTAINER_IMAGE, --container-image CONTAINER_IMAGE
+                            Name of container image
+      --dist-name DIST_NAME
+                            Name of Linux distribution
+      --dist-ver DIST_VER   Version of Linux distribution
+      --dpdk-repo DPDK_REPO
+                            Git URL of DPDK
+      --dpdk-branch DPDK_BRANCH
+                            Specific version or branch of DPDK
+      --pktgen-repo PKTGEN_REPO
+                            Git URL of pktgen-dpdk
+      --pktgen-branch PKTGEN_BRANCH
+                            Specific version or branch of pktgen-dpdk
+      --spp-repo SPP_REPO   Git URL of SPP
+      --spp-branch SPP_BRANCH
+                            Specific version or branch of SPP
+      --only-envsh          Create config 'env.sh' and exit without docker build
+      --dry-run             Print matrix for checking and exit without docker
+                            build
+
+
+.. _sppc_build_img_vci:
+
+Version Control for Images
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+SPP container provides version control as combination of
+target name, Linux distribution name and version.
+Built images are referred such as ``sppc/dpdk-ubuntu:latest`` or
+``sppc/spp-ubuntu:16.04``.
+``sppc`` is just a prefix to indicate an image of SPP container.
+
+Build script decides a name from given options or default values.
+If you run build script with only target and without distribution
+name and version, it uses default values ``ubuntu`` and ``latest``.
+
+.. code-block:: console
+
+    # build 'sppc/dpdk-ubuntu:latest'
+    $ python build/main.py -t dpdk
+
+    # build 'sppc/spp-ubuntu:16.04'
+    $ python build/main.py -t spp --dist-ver 16.04
+
+.. note::
+
+    SPP container does not support distributions other than Ubuntu
+    currently.
+    It is because SPP container has no Dockerfiles for building
+    CentOS, Fedora or so. It will be supported in a future release.
+
+    You can build any of distributions with build script
+    if you prepare Dockerfile by yourself.
+    How Dockerfiles are managed is described in
+    :ref:`sppc_build_img_dockerfiles` section.
+
+
+App container scripts also understand this naming rule.
+For launching ``testpmd`` on Ubuntu 16.04,
+simply give ``--dist-ver`` to indicate the version and other options
+for ``testpmd`` itself.
+
+.. code-block:: console
+
+    # launch testpmd on 'sppc/dpdk-ubuntu:16.04'
+    $ python app/testpmd.py --dist-ver 16.04 -l 3-4 ...
+
+But, how can we build images for different versions of DPDK,
+such as 17.11 and 18.05, on the same distribution?
+In this case, you can use ``--container-image`` or ``-ci`` option for
+using any of names. It is also referred from app container scripts.
+
+.. code-block:: console
+
+    # build image with arbitrary name
+    $ python build/main.py -t dpdk -ci sppc/dpdk17.11-ubuntu:latest \
+      --dpdk-branch v17.11
+
+    # launch testpmd with '-ci'
+    $ python app/testpmd.py -ci sppc/dpdk17.11-ubuntu:latest -l 3-4 ...
+
+
+.. _sppc_build_img_dockerfiles:
+
+Dockerfiles
+~~~~~~~~~~~
+
+SPP container includes Dockerfiles for each of distributions and
+its versions.
+For instance, Dockerfiles for Ubuntu are found in ``build/ubuntu``
+directory.
+You notice that each of Dockerfiles has its version as a part of
+file name.
+In other words, the list of Dockerfiles under the ``ubuntu`` directory
+shows all of supported versions of Ubuntu.
+You can not find Dockerfiles for CentOS as ``build/centos`` or other
+distributions because it is not supported currently.
+It is included in a future release.
+
+.. code-block:: console
+
+    $ tree build/ubuntu/
+    build/ubuntu/
+    ├── dpdk
+    │   ├── Dockerfile.16.04
+    │   ├── Dockerfile.18.04
+    │   └── Dockerfile.latest
+    ├── pktgen
+    │   ├── Dockerfile.16.04
+    │   ├── Dockerfile.18.04
+    │   └── Dockerfile.latest
+    └── spp
+        ├── Dockerfile.16.04
+        ├── Dockerfile.18.04
+        └── Dockerfile.latest
+
+
+.. _sppc_build_img_inspect:
+
+Inspect Inside of Container
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Container is useful, but just bit annoying to inspect inside
+the container because it is cleaned up immediately after process
+is finished and there is no clue what is happened in.
+
+``build/run.sh`` is a helper script to inspect inside the container.
+You can run ``bash`` on the container to confirm behaviour of
+targetting application, or run any of command.
+
+This script refers ``ubuntu/dpdk/env.sh`` for Ubuntu image  to include
+environment variables.
+So, it is failed to ``build/run.sh`` if this config file
+does not exist.
+You can create it from ``build/build.py`` with ``--only-envsh`` option
+if you removed it accidentally.
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 08/15] docs: add manual for app container launchers
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (6 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 07/15] docs: add build image " ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 10/15] docs: add usecase image of testing vhost ogawa.yasufumi
                     ` (6 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

App container launcher is a python script for launching DPDK app on
a container. It composes docker command and app command with given
options to launch the container.

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/app_launcher.rst | 1058 +++++++++++++++++++++++
 1 file changed, 1058 insertions(+)
 create mode 100644 docs/guides/tools/sppc/app_launcher.rst

diff --git a/docs/guides/tools/sppc/app_launcher.rst b/docs/guides/tools/sppc/app_launcher.rst
new file mode 100644
index 0000000..02b46c0
--- /dev/null
+++ b/docs/guides/tools/sppc/app_launcher.rst
@@ -0,0 +1,1058 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+.. _spp_container_app_launcher:
+
+App Container Launchers
+=======================
+
+App container launcher is a python script for running SPP or DPDK
+application on a container.
+As described by name, for instance, ``pktgen.py`` launches pktgen-dpdk
+inside a container.
+
+
+.. code-block:: console
+
+    $ tree app/
+    app/
+    ...
+    ├── helloworld.py
+    ├── l2fwd.py
+    ├── l3fwd.py
+    ├── load-balancer.py
+    ├── pktgen.py
+    ├── spp-nfv.py
+    ├── spp-primary.py
+    ├── spp-vm.py
+    └── testpmd.py
+
+
+.. note::
+
+    As described in
+    :ref:`sppc_gs_build_docker_imgs`
+    section, you had better to use Ubuntu 16.04 with
+    ``--dist-ver`` option because SPP container is not stable for running
+    on the latest version.
+
+    Please notice that examples in this section does not use ``dist-ver``
+    options explicitly for simplicity.
+
+
+.. _sppc_appl_setup:
+
+Setup
+-----
+
+You should define ``SPP_CTRL_IP`` environment variable to SPP controller
+be accessed from other SPP processes inside containers.
+SPP controller is a CLI tool for accepting user's commands.
+
+You cannot use ``127.0.0.1`` or ``localhost`` for ``SPP_CTRL_IP``
+because SPP processes try to find SPP controller inside each of
+containers and fail to.
+From inside of the container, SPP processes should be known IP address
+other than ``127.0.0.1`` or ``localhost``
+of host on which SPP controller running.
+
+SPP controller should be launched before other SPP processes.
+
+.. code-block:: console
+
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+
+.. _sppc_appl_spp_primary:
+
+SPP Primary Container
+---------------------
+
+SPP primary process is launched from ``app/spp-primary.py`` as an
+app container.
+It manages resources on host from inside the container.
+``app/spp-primary.py`` calls ``docker run`` with
+``-v`` option to mount hugepages and other devices in the container
+to share them between host and containers.
+
+SPP primary process is launched as foreground or background mode.
+You can show statistics of packet forwarding if you launch it with
+two cores and in foreground mode.
+In this case, SPP primary uses one for resource management and
+another one for showing statistics.
+If you need to minimize the usage of cores, or are not interested in
+the statistics,
+you should give just one core and run in background mode.
+If you run SPP primary in foreground mode with one core,
+it shows log messages which is also referred in syslog.
+
+Here is an example for launching SPP primary with core list 0-1 in
+foreground mode.
+You should give portmask opiton ``-p`` because SPP primary requires
+at least one port, or failed to launch.
+This example is assumed that host machine has two or more
+physical ports.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary -l 0-1 -p 0x03 -fg
+
+It is another example with one core and two ports in background mode.
+
+.. code-block:: console
+
+    $ python app/spp-primary -l 0 -p 0x03
+
+SPP primary is able to run with virtual devices instead of
+physical NICs for a case
+you do not have dedicated NICs for DPDK.
+SPP container supports two types of virtual device with options.
+
+* ``--dev-tap-ids`` or ``-dt``:  Add TAP devices
+* ``--dev-vhost-ids`` or ``-dv``: Add vhost devices
+
+.. code-block:: console
+
+    $ python app/spp-primary -l 0 -dt 1,2 -p 0x03
+
+
+
+If you need to inspect a docker command without launching
+a container, use ``--dry-run`` option.
+It composes docker command and just display it without running the
+docker command.
+
+You refer all of options with ``-h`` option.
+Options of app container scripts are categorized four types.
+First one is EAL option, for example ``-l``, ``-c`` or ``-m``.
+Second one is app container option which is a common set of options for
+app containers connected with SPP. So, containers of SPP processes do
+not have app container option.
+Third one is application specific option. In this case,
+``-n``, ``-p`` or ``-ip``.
+Final one is container option, for example ``--dist-name`` or
+``--ci``.
+EAL options and container options are common for all of app container
+scripts.
+On the other hand, application specific options are different each other.
+
+.. code-block:: console
+
+    $ python app/spp-primary.py -h
+    usage: spp-primary.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                          [--socket-mem SOCKET_MEM]
+                          [--nof-memchan NOF_MEMCHAN]
+                          [-n NOF_RING] [-p PORT_MASK] [-dv DEV_VHOST_IDS]
+                          [-dt DEV_TAP_IDS] [-ip CTRL_IP]
+                          [--ctrl-port CTRL_PORT]
+                          [--dist-name DIST_NAME] [--dist-ver DIST_VER]
+                          [-ci CONTAINER_IMAGE] [-fg] [--dry-run]
+
+    Launcher for spp-primary application container
+
+    optional arguments:
+      -h, --help            show this help message and exit
+      -l CORE_LIST, --core-list CORE_LIST
+                            Core list
+      -c CORE_MASK, --core-mask CORE_MASK
+                            Core mask
+      -m MEM, --mem MEM     Memory size (default is 1024)
+      --socket-mem SOCKET_MEM
+                            Memory size
+      --nof-memchan NOF_MEMCHAN
+                            Number of memory channels (default is 4)
+      -n NOF_RING, --nof-ring NOF_RING
+                            Maximum number of Ring PMD
+      -p PORT_MASK, --port-mask PORT_MASK
+                            Port mask
+      -dv DEV_VHOST_IDS, --dev-vhost-ids DEV_VHOST_IDS
+                            vhost device IDs
+      -dt DEV_TAP_IDS, --dev-tap-ids DEV_TAP_IDS
+                            TAP device IDs
+      -ip CTRL_IP, --ctrl-ip CTRL_IP
+                            IP address of SPP controller
+      --ctrl-port CTRL_PORT
+                            Port of SPP controller
+      --dist-name DIST_NAME
+                            Name of Linux distribution
+      --dist-ver DIST_VER   Version of Linux distribution
+      -ci CONTAINER_IMAGE, --container-image CONTAINER_IMAGE
+                            Name of container image
+      -fg, --foreground     Run container as foreground mode
+      --dry-run             Only print matrix, do not run, and exit
+
+
+.. _sppc_appl_spp_secondary:
+
+SPP Secondary Container
+-----------------------
+
+In SPP, there are three types of secondary process, ``spp_nfv``,
+``spp_vm`` and  ``spp_vf``.
+However, SPP container does not support ``spp_vf`` currently.
+
+``spp_nfv`` is usually used for forwarding packets on host and
+``spp_vm`` is used for insidea a virtual machine.
+However, in a context of container, the usage is just a bit different.
+Both of secondary processes are launched as app containers,
+but ``spp_vm`` container has virtio interfaces while ``spp_nfv``
+container does not have it.
+It means that ``spp_nfv`` behaves as a path between NICs or containers,
+but ``spp_vm`` is a client of ``spp_nfv`` and simply forwarding from rx
+to tx ports. You do not need to use ``spp_vm`` without some cases for
+using virtual machines.
+
+``spp-nfv.py`` launches ``spp_nfv`` as an app container and requires
+options for secondary ID and core list (or core mask).
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-nfv.py -i 1 -l 2-3
+
+Refer help for all of options and usges.
+It shows only application specific options for simplicity.
+
+
+.. code-block:: console
+
+    $ python app/spp-nfv.py -h
+    usage: spp-nfv.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                      [--socket-mem SOCKET_MEM] [--nof-memchan NOF_MEMCHAN]
+                      [-i SEC_ID] [-ip CTRL_IP] [--ctrl-port CTRL_PORT]
+                      [--dist-name DIST_NAME] [--dist-ver DIST_VER]
+                      [-ci CONTAINER_IMAGE] [-fg] [--dry-run]
+
+    Launcher for spp-nfv application container
+
+    optional arguments:
+      ...
+      -i SEC_ID, --sec-id SEC_ID
+                            Secondary ID
+      -ip CTRL_IP, --ctrl-ip CTRL_IP
+                            IP address of SPP controller
+      --ctrl-port CTRL_PORT
+                            Port of SPP controller
+      ...
+
+
+For launching ``spp_vm`` for vhost interface, it is required to assign
+a vhost device ID from ``app/spp-nfv.py`` and launch ``app/spp-vm.py``
+with same ID..
+
+.. code-block:: console
+
+    # Add vhost 1 from spp-nfv.py of sec 1
+    spp > sec 1;add vhost 1
+
+Launch a secondary container with device ID 1.
+
+.. code-block:: console
+
+    $ python app/spp-vm.py -i 2 -l 4-5 -d 1
+
+
+.. _sppc_appl_l2fwd:
+
+L2fwd Container
+---------------
+
+``app/l2fwd.py`` is a launcher script for DPDK ``l2fwd`` sample
+application.
+It launches ``l2fwd`` on a container with specified
+vhost interfaces.
+
+This is an example for launching with two cores (6-7th cores) with
+``-l`` and two vhost interfaces with ``-d``.
+``l2fwd`` requires ``--port-mask`` or ``-p`` option and the number of
+ports should be even number.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/l2fwd.py -l 6-7 -d 1,2 -p 0x03 -fg
+    ...
+
+Refer help for all of options and usges.
+It includes app container options, for example ``-d`` for vhost devices
+and ``-nq`` for the number of queues of virtio, because ``l2fwd`` is not
+a SPP process.
+It shows options without of EAL and container for simplicity.
+
+.. code-block:: console
+
+    $ python app/l2fwd.py -h
+    usage: l2fwd.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                    [--socket-mem SOCKET_MEM] [--nof-memchan NOF_MEMCHAN]
+                    [-d DEV_IDS] [-nq NOF_QUEUES] [--no-privileged]
+                    [-p PORT_MASK]
+                    [--dist-name DIST_NAME] [--dist-ver DIST_VER]
+                    [-ci CONTAINER_IMAGE] [-fg] [--dry-run]
+
+    Launcher for l2fwd application container
+
+    optional arguments:
+      ...
+      -d DEV_IDS, --dev-ids DEV_IDS
+                            two or more even vhost device IDs
+      -nq NOF_QUEUES, --nof-queues NOF_QUEUES
+                            Number of queues of virtio (default is 1)
+      --no-privileged       Disable docker's privileged mode if it's needed
+      -p PORT_MASK, --port-mask PORT_MASK
+                            Port mask
+      ...
+
+
+.. _sppc_appl_l3fwd:
+
+L3fwd Container
+---------------
+
+`L3fwd
+<https://dpdk.org/doc/guides/sample_app_ug/l3_forward.html>`_
+application is a simple example of packet processing
+using the DPDK.
+Differed from l2fwd, the forwarding decision is made based on
+information read from input packet.
+This application provides LPM (longest prefix match) or
+EM (exact match) methods for packet classification.
+
+``app/l3fwd.py`` launches l3fwd on a container.
+As ``l3fwd`` application, this python script takes several options
+other than EAL for port configurations and classification methods.
+The mandatory options for the application are ``-p`` for portmask
+and ``--config`` for rx as a set of combination of
+``(port, queue, locre)``.
+
+Here is an example for launching l3fwd app container with two vhost
+interfaces and printed log messages.
+There are two rx ports. ``(0,0,1)`` is for queue of port 0 for which
+lcore 1 is assigned, and ``(1,0,2)`` is for port 1.
+In this case, you should add ``-nq`` option because the number of both
+of rx and tx queues are two while the default number of virtio device
+is one.
+The number of tx queues, is two in this case, is decided to be the same
+value as the number of lcores.
+In ``--vdev`` option setup in the script, the number of queues is
+defined as ``virtio_...,queues=2,...``.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/l3fwd.py -l 1-2 -nq 2 -d 1,2 \
+      -p 0x03 --config="(0,0,1),(1,0,2)" -fg
+      sudo docker run \
+      -it \
+      ...
+      --vdev virtio_user1,queues=2,path=/var/run/usvhost1 \
+      --vdev virtio_user2,queues=2,path=/var/run/usvhost2 \
+      --file-prefix spp-l3fwd-container1 \
+      -- \
+      -p 0x03 \
+      --config "(0,0,8),(1,0,9)" \
+      --parse-ptype ipv4
+      EAL: Detected 16 lcore(s)
+      EAL: Auto-detected process type: PRIMARY
+      EAL: Multi-process socket /var/run/.spp-l3fwd-container1_unix
+      EAL: Probing VFIO support...
+      soft parse-ptype is enabled
+      LPM or EM none selected, default LPM on
+      Initializing port 0 ... Creating queues: nb_rxq=1 nb_txq=2...
+      LPM: Adding route 0x01010100 / 24 (0)
+      LPM: Adding route 0x02010100 / 24 (1)
+      LPM: Adding route IPV6 / 48 (0)
+      LPM: Adding route IPV6 / 48 (1)
+      txq=8,0,0 txq=9,1,0
+      Initializing port 1 ... Creating queues: nb_rxq=1 nb_txq=2...
+
+      Initializing rx queues on lcore 8 ... rxq=0,0,0
+      Initializing rx queues on lcore 9 ... rxq=1,0,0
+      ...
+
+You can increase lcores more than the number of ports, for instance,
+four lcores for two ports.
+However, remaining 3rd and 4th lcores do nothing and require
+``-nq 4`` for tx queues.
+
+Default classification rule is ``LPM`` and the routing table is defined
+in ``dpdk/examples/l3fwd/l3fwd_lpm.c`` as below.
+
+.. code-block:: c
+
+    static struct ipv4_l3fwd_lpm_route ipv4_l3fwd_lpm_route_array[] = {
+            {IPv4(1, 1, 1, 0), 24, 0},
+            {IPv4(2, 1, 1, 0), 24, 1},
+            {IPv4(3, 1, 1, 0), 24, 2},
+            {IPv4(4, 1, 1, 0), 24, 3},
+            {IPv4(5, 1, 1, 0), 24, 4},
+            {IPv4(6, 1, 1, 0), 24, 5},
+            {IPv4(7, 1, 1, 0), 24, 6},
+            {IPv4(8, 1, 1, 0), 24, 7},
+    };
+
+
+Refer help for all of options and usges.
+It shows options without of EAL and container for simplicity.
+
+.. code-block:: console
+
+    $ python app/l3fwd.py -h
+    usage: l3fwd.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                    [--socket-mem SOCKET_MEM] [--nof-memchan NOF_MEMCHAN]
+                    [-d DEV_IDS] [-nq NOF_QUEUES] [--no-privileged]
+                    [-p PORT_MASK] [--config CONFIG] [-P] [-E] [-L]
+                    [-dst [ETH_DEST [ETH_DEST ...]]] [--enable-jumbo]
+                    [--max-pkt-len MAX_PKT_LEN] [--no-numa]
+                    [--hash-entry-num] [--ipv6] [--parse-ptype PARSE_PTYPE]
+                    [--dist-name DIST_NAME] [--dist-ver DIST_VER]
+                    [-ci CONTAINER_IMAGE] [-fg] [--dry-run]
+
+    Launcher for l3fwd application container
+
+    optional arguments:
+      ...
+      -d DEV_IDS, --dev-ids DEV_IDS
+                            two or more even vhost device IDs
+      -nq NOF_QUEUES, --nof-queues NOF_QUEUES
+                            Number of queues of virtio (default is 1)
+      --no-privileged       Disable docker's privileged mode if it's needed
+      -p PORT_MASK, --port-mask PORT_MASK
+                            (Mandatory) Port mask
+      --config CONFIG       (Mandatory) Define set of port, queue, lcore for
+                            ports
+      -P, --promiscous      Set all ports to promiscous mode (default is None)
+      -E, --exact-match     Enable exact match (default is None)
+      -L, --longest-prefix-match
+                            Enable longest prefix match (default is None)
+      -dst [ETH_DEST [ETH_DEST ...]], --eth-dest [ETH_DEST [ETH_DEST ...]]
+                            Ethernet dest for port X (X,MM:MM:MM:MM:MM:MM)
+      --enable-jumbo        Enable jumbo frames, [--enable-jumbo [--max-pkt-len
+                            PKTLEN]]
+      --max-pkt-len MAX_PKT_LEN
+                            Max packet length (64-9600) if jumbo is enabled.
+      --no-numa             Disable NUMA awareness (default is None)
+      --hash-entry-num      Specify the hash entry number in hexadecimal
+                            (default is None)
+      --ipv6                Specify the hash entry number in hexadecimal
+                            (default is None)
+      --parse-ptype PARSE_PTYPE
+                            Set analyze packet type, ipv4 or ipv6 (default is
+                            ipv4)
+      ...
+
+
+.. _sppc_appl_testpmd:
+
+Testpmd Container
+-----------------
+
+``testpmd.py`` is a launcher script for DPDK's
+`testpmd
+<https://dpdk.org/doc/guides/testpmd_app_ug/index.html>`_
+application.
+
+It launches ``testpmd`` inside a container with specified
+vhost interfaces.
+
+This is an example for launching with three cores (6-8th cores)
+and two vhost interfaces.
+This example is for launching ``testpmd`` in interactive mode.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/testpmd.py -l 6-8 -d 1,2 -fg -i
+    sudo docker run \
+     ...
+     -- \
+     --interactive
+     ...
+     Checking link statuses...
+     Done
+     testpmd>
+
+Testpmd has many useful options. Please refer to
+`Running the Application
+<https://dpdk.org/doc/guides/testpmd_app_ug/run_app.html>`_
+section for instructions.
+
+.. note::
+    ``testpmd.py`` does not support all of options of testpmd currently.
+    You can find all of options with ``-h`` option, but some of them
+    is not implemented. If you run testpmd with not supported option,
+    It just prints an error message to mention.
+
+    .. code-block:: console
+
+        $ python app/testpmd.py -l 1,2 -d 1,2 --port-topology=chained
+        Error: '--port-topology' is not supported yet
+
+
+Refer help for all of options and usges.
+It shows options without of EAL and container.
+
+.. code-block:: console
+
+    $ python app/testpmd.py -h
+    usage: testpmd.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                      [--socket-mem SOCKET_MEM] [--nof-memchan NOF_MEMCHAN]
+                      [-d DEV_IDS] [-nq NOF_QUEUES] [--no-privileged]
+                      [--pci] [-i] [-a] [--tx-first]
+                      [--stats-period STATS_PERIOD]
+                      [--nb-cores NB_CORES] [--coremask COREMASK]
+                      [--portmask PORTMASK] [--no-numa]
+                      [--port-numa-config PORT_NUMA_CONFIG]
+                      [--ring-numa-config RING_NUMA_CONFIG]
+                      [--socket-num SOCKET_NUM] [--mbuf-size MBUF_SIZE]
+                      [--total-num-mbufs TOTAL_NUM_MBUFS]
+                      [--max-pkt-len MAX_PKT_LEN]
+                      [--eth-peers-configfile ETH_PEERS_CONFIGFILE]
+                      [--eth-peer ETH_PEER] [--pkt-filter-mode PKT_FILTER_MODE]
+                      [--pkt-filter-report-hash PKT_FILTER_REPORT_HASH]
+                      [--pkt-filter-size PKT_FILTER_SIZE]
+                      [--pkt-filter-flexbytes-offset PKT_FILTER_FLEXBYTES_OFFSET]
+                      [--pkt-filter-drop-queue PKT_FILTER_DROP_QUEUE]
+                      [--disable-crc-strip] [--enable-lro] [--enable-rx-cksum]
+                      [--enable-scatter] [--enable-hw-vlan]
+                      [--enable-hw-vlan-filter] [--enable-hw-vlan-strip]
+                      [--enable-hw-vlan-extend] [--enable-drop-en]
+                      [--disable-rss] [--port-topology PORT_TOPOLOGY]
+                      [--forward-mode FORWARD_MODE] [--rss-ip] [--rss-udp]
+                      [--rxq RXQ] [--rxd RXD] [--txq TXQ] [--txd TXD]
+                      [--burst BURST] [--mbcache MBCACHE] [--rxpt RXPT]
+                      [--rxht RXHT] [--rxfreet RXFREET] [--rxwt RXWT]
+                      [--txpt TXPT] [--txht TXHT] [--txwt TXWT]
+                      [--txfreet TXFREET] [--txrst TXRST]
+                      [--rx-queue-stats-mapping RX_QUEUE_STATS_MAPPING]
+                      [--tx-queue-stats-mapping TX_QUEUE_STATS_MAPPING]
+                      [--no-flush-rx] [--txpkts TXPKTS] [--disable-link-check]
+                      [--no-lsc-interrupt] [--no-rmv-interrupt]
+                      [--bitrate-stats [BITRATE_STATS [BITRATE_STATS ...]]]
+                      [--print-event PRINT_EVENT] [--mask-event MASK_EVENT]
+                      [--flow-isolate-all] [--tx-offloads TX_OFFLOADS]
+                      [--hot-plug] [--vxlan-gpe-port VXLAN_GPE_PORT]
+                      [--mlockall] [--no-mlockall] [--dist-name DIST_NAME]
+                      [--dist-ver DIST_VER] [-ci CONTAINER_IMAGE] [-fg]
+                      [--dry-run]
+
+    Launcher for testpmd application container
+
+    optional arguments:
+      ...
+      -d DEV_IDS, --dev-ids DEV_IDS
+                            two or more even vhost device IDs
+      -nq NOF_QUEUES, --nof-queues NOF_QUEUES
+                            Number of queues of virtio (default is 1)
+      --no-privileged       Disable docker's privileged mode if it's needed
+      --pci                 Enable PCI (default is None)
+      -i, --interactive     Run in interactive mode (default is None)
+      -a, --auto-start      Start forwarding on initialization (default is None)
+      --tx-first            Start forwarding, after sending a burst of packets
+                            first
+      --stats-period STATS_PERIOD
+                            Period of displaying stats, if interactive is
+                            disabled
+      --nb-cores NB_CORES   Number of forwarding cores
+      --coremask COREMASK   Hexadecimal bitmask of the cores, do not include
+                            master lcore
+      --portmask PORTMASK   Hexadecimal bitmask of the ports
+      --no-numa             Disable NUMA-aware allocation of RX/TX rings and RX
+                            mbuf
+      --port-numa-config PORT_NUMA_CONFIG
+                            Specify port allocation as
+                            (port,socket)[,(port,socket)]
+      --ring-numa-config RING_NUMA_CONFIG
+                            Specify ring allocation as
+                            (port,flag,socket)[,(port,flag,socket)]
+      --socket-num SOCKET_NUM
+                            Socket from which all memory is allocated in NUMA
+                            mode
+      --mbuf-size MBUF_SIZE
+                            Size of mbufs used to N (< 65536) bytes (default is
+                            2048)
+      --total-num-mbufs TOTAL_NUM_MBUFS
+                            Number of mbufs allocated in mbuf pools, N > 1024.
+      --max-pkt-len MAX_PKT_LEN
+                            Maximum packet size to N (>= 64) bytes (default is
+                            1518)
+      --eth-peers-configfile ETH_PEERS_CONFIGFILE
+                            Config file of Ether addrs of the peer ports
+      --eth-peer ETH_PEER   Set MAC addr of port N as 'N,XX:XX:XX:XX:XX:XX'
+      --pkt-filter-mode PKT_FILTER_MODE
+                            Flow Director mode, 'none'(default), 'signature' or
+                            'perfect'
+      --pkt-filter-report-hash PKT_FILTER_REPORT_HASH
+                            Flow Director hash match mode, 'none',
+                            'match'(default) or 'always'
+      --pkt-filter-size PKT_FILTER_SIZE
+                            Flow Director memory size ('64K', '128K', '256K').
+                            The default is 64K.
+      --pkt-filter-flexbytes-offset PKT_FILTER_FLEXBYTES_OFFSET
+                            Flexbytes offset (0-32, default is 0x6) defined in
+                            words counted from the first byte of the dest MAC
+                            address
+      --pkt-filter-drop-queue PKT_FILTER_DROP_QUEUE
+                            Set the drop-queue (default is 127)
+      --disable-crc-strip   Disable hardware CRC stripping
+      --enable-lro          Enable large receive offload
+      --enable-rx-cksum     Enable hardware RX checksum offload
+      --enable-scatter      Enable scatter (multi-segment) RX
+      --enable-hw-vlan      Enable hardware vlan (default is None)
+      --enable-hw-vlan-filter
+                            Enable hardware VLAN filter
+      --enable-hw-vlan-strip
+                            Enable hardware VLAN strip
+      --enable-hw-vlan-extend
+                            Enable hardware VLAN extend
+      --enable-drop-en      Enable per-queue packet drop if no descriptors
+      --disable-rss         Disable RSS (Receive Side Scaling
+      --port-topology PORT_TOPOLOGY
+                            Port topology, 'paired' (the default) or 'chained'
+      --forward-mode FORWARD_MODE
+                            Forwarding mode, 'io' (default), 'mac', 'mac_swap',
+                            'flowgen', 'rxonly', 'txonly', 'csum', 'icmpecho',
+                            'ieee1588', 'tm'
+      --rss-ip              Set RSS functions for IPv4/IPv6 only
+      --rss-udp             Set RSS functions for IPv4/IPv6 and UDP
+      --rxq RXQ             Number of RX queues per port, 1-65535 (default is 1)
+      --rxd RXD             Number of descriptors in the RX rings
+                            (default is 128)
+      --txq TXQ             Number of TX queues per port, 1-65535 (default is 1)
+      --txd TXD             Number of descriptors in the TX rings
+                            (default is 512)
+      --burst BURST         Number of packets per burst, 1-512 (default is 32)
+      --mbcache MBCACHE     Cache of mbuf memory pools, 0-512 (default is 16)
+      --rxpt RXPT           Prefetch threshold register of RX rings
+                            (default is 8)
+      --rxht RXHT           Host threshold register of RX rings (default is 8)
+      --rxfreet RXFREET     Free threshold of RX descriptors,0-'rxd' (default is
+                            0)
+      --rxwt RXWT           Write-back threshold register of RX rings
+                            (default is 4)
+      --txpt TXPT           Prefetch threshold register of TX rings (default is
+                            36)
+      --txht TXHT           Host threshold register of TX rings (default is 0)
+      --txwt TXWT           Write-back threshold register of TX rings (default
+                            is 0)
+      --txfreet TXFREET     Free threshold of RX descriptors, 0-'txd' (default
+                            is 0)
+      --txrst TXRST         Transmit RS bit threshold of TX rings, 0-'txd'
+                            (default is 0)
+      --rx-queue-stats-mapping RX_QUEUE_STATS_MAPPING
+                            RX queues statistics counters mapping 0-15 as
+                            '(port,queue,mapping)[,(port,queue,mapping)]'
+      --tx-queue-stats-mapping TX_QUEUE_STATS_MAPPING
+                            TX queues statistics counters mapping 0-15 as
+                            '(port,queue,mapping)[,(port,queue,mapping)]'
+      --no-flush-rx         Don’t flush the RX streams before starting
+                            forwarding, Used mainly with the PCAP PMD
+      --txpkts TXPKTS       TX segment sizes or total packet length, Valid for
+                            tx-only and flowgen
+      --disable-link-check  Disable check on link status when starting/stopping
+                            ports
+      --no-lsc-interrupt    Disable LSC interrupts for all ports
+      --no-rmv-interrupt    Disable RMV interrupts for all ports
+      --bitrate-stats [BITRATE_STATS [BITRATE_STATS ...]]
+                            Logical core N to perform bitrate calculation
+      --print-event PRINT_EVENT
+                            Enable printing the occurrence of the designated
+                            event, <unknown|intr_lsc|queue_state|intr_reset|
+                            vf_mbox|macsec|intr_rmv|dev_probed|dev_released|
+                            all>
+      --mask-event MASK_EVENT
+                            Disable printing the occurrence of the designated
+                            event, <unknown|intr_lsc|queue_state|intr_reset|
+                            vf_mbox|macsec|intr_rmv|dev_probed|dev_released|
+                            all>
+      --flow-isolate-all    Providing this parameter requests flow API isolated
+                            mode on all ports at initialization time
+      --tx-offloads TX_OFFLOADS
+                            Hexadecimal bitmask of TX queue offloads (default
+                            is 0)
+      --hot-plug            Enable device event monitor machenism for hotplug
+      --vxlan-gpe-port VXLAN_GPE_PORT
+                            UDP port number of tunnel VXLAN-GPE (default is
+                            4790)
+      --mlockall            Enable locking all memory
+      --no-mlockall         Disable locking all memory
+      ...
+
+
+.. _sppc_appl_pktgen:
+
+Pktgen-dpdk Container
+---------------------
+
+``pktgen.py`` is a launcher script for
+`pktgen-dpdk
+<http://pktgen-dpdk.readthedocs.io/en/latest/index.html>`_.
+Pktgen is a software based traffic generator powered by the DPDK
+fast packet processing framework.
+It is not only high-performance for generating 10GB traffic with
+64 byte frames, but also very configurable to handle packets with
+UDP, TCP, ARP, ICMP, GRE, MPLS and Queue-in-Queue.
+It also supports
+`Lua
+<https://www.lua.org/>`_
+for detailed configurations.
+
+This ``pktgen.py`` script launches ``pktgen`` app container
+with specified vhost interfaces.
+Here is an example for launching with seven lcores (8-14th)
+and three vhost interfaces.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/pktgen.py -l 8-14 -d 1-3 -fg --dist-ver 16.04
+    sudo docker run \
+     ...
+     sppc/pktgen-ubuntu:16.04 \
+     /root/dpdk/../pktgen-dpdk/app/x86_64-native-linuxapp-gcc/pktgen \
+     -l 8-14 \
+     ...
+     -- \
+     -m [9:10].0,[11:12].1,[13:14].2
+     ...
+
+You notice that given lcores ``-l 8-14`` are assigned appropriately.
+Lcore 8 is used as master and remaining six lcores are use to worker
+threads for three ports as ``-m [9:10].0,[11:12].1,[13:14].2`` equally.
+If the number of given lcores is larger than required,
+remained lcores are simply not used.
+
+Calculation of core assignment of ``pktgen.py`` currently is supporting
+up to four lcores for each of ports.
+If you assign fire or more lcores to a port, ``pktgen.py`` terminates
+to launch app container.
+It is because a usecase more than four lcores is rare and
+calculation is to be complicated.
+
+.. code-block:: console
+
+    # Assign five lcores for a slave is failed to launch
+    $ python app/pktgen.py -l 6-11 -d 1
+    Error: Too many cores for calculation for port assignment!
+    Please consider to use '--matrix' for assigning directly
+
+Here are other examples of lcore assignment of ``pktgen.py`` to help
+your understanding.
+
+**1. Three lcores for two ports**
+
+Assign one lcore to master and two lcores two slaves for two ports.
+
+.. code-block:: console
+
+    $ python app/pktgen.py -l 6-8 -d 1,2
+     ...
+     -m 7.0,8.1 \
+
+
+**2. Seven lcores for three ports**
+
+Assign one lcore for master and each of two lcores to
+three slaves for three ports.
+
+.. code-block:: console
+
+    $ python app/pktgen.py -l 6-12 -d 1,2,3
+     ...
+     -m [7:8].0,[9:10].1,[11:12].2 \
+
+
+**3. Seven lcores for two ports**
+
+Assign one lcore for master and each of three lcores to
+two slaves for two ports.
+In this case, each of three lcores cannot be assigned rx and tx port
+equally, so given two lcores to rx and one core to tx.
+
+.. code-block:: console
+
+    $ python app/pktgen.py -l 6-12 -d 1,2
+     ...
+     -m [7-8:9].0,[10-11:12].1 \
+
+
+Refer help for all of options and usges.
+It shows options without of EAL and container for simplicity.
+
+.. code-block:: console
+
+    $ python app/pktgen.py -h
+    usage: pktgen.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                     [--socket-mem SOCKET_MEM] [--nof-memchan NOF_MEMCHAN]
+                     [-d DEV_IDS] [-nq NOF_QUEUES] [--no-privileged]
+                     [--matrix MATRIX] [--log-level LOG_LEVEL]
+                     [--dist-name DIST_NAME] [--dist-ver DIST_VER]
+                     [-ci CONTAINER_IMAGE] [-fg] [--dry-run]
+
+    Launcher for pktgen-dpdk application container
+
+    optional arguments:
+      ...
+      -d DEV_IDS, --dev-ids DEV_IDS
+                            two or more even vhost device IDs
+      -nq NOF_QUEUES, --nof-queues NOF_QUEUES
+                            Number of queues of virtio (default is 1)
+      --no-privileged       Disable docker's privileged mode if it's needed
+      -s PCAP_FILE, --pcap-file PCAP_FILE
+                            PCAP packet flow file of port, defined as
+                            'N:filename'
+      -f SCRIPT_FILE, --script-file SCRIPT_FILE
+                            Pktgen script (.pkt) to or a Lua script (.lua)
+      -lf LOG_FILE, --log-file LOG_FILE
+                            Filename to write a log, as '-l' of pktgen
+      -P, --promiscuous     Enable PROMISCUOUS mode on all ports
+      -G, --sock-default    Enable socket support using default server values
+                            of localhost:0x5606
+      -g SOCK_ADDRESS, --sock-address SOCK_ADDRESS
+                            Same as -G but with an optional IP address and port
+                            number
+      -T, --term-color      Enable color terminal output in VT100
+      -N, --numa            Enable NUMA support
+      --matrix MATRIX       Matrix of cores and port as '-m' of pktgen, such as
+                            [1:2].0 or 1.0
+      ...
+
+
+.. _sppc_appl_load_balancer:
+
+Load-Balancer Container
+-----------------------
+
+`Load-Balancer
+<https://dpdk.org/doc/guides/sample_app_ug/load_balancer.html>`_
+is an application distributes packet I/O task with several worker
+lcores to share IP addressing.
+
+There are three types of lcore roles in this application, rx, tx and
+worker lcores. Rx lcores retrieve packets from NICs and Tx lcores
+send it to the destinations.
+Worker lcores intermediate them, receive packets from rx lcores,
+classify by looking up the address and send it to each of destination
+tx lcores.
+Each of lcores has a set of references of lcore ID and queue
+as described in `Application Configuration
+<https://dpdk.org/doc/guides/sample_app_ug/load_balancer.html#explanation>`_.
+
+``load-balancer.py`` expects four mandatory options.
+
+  * -rx: "(PORT, QUEUE, LCORE), ...", list of NIC RX ports and
+    queues handled by the I/O RX lcores. This parameter also implicitly
+    defines the list of I/O RX lcores.
+  * -tx: "(PORT, LCORE), ...", list of NIC TX ports handled by
+    the I/O TX lcores. This parameter also implicitly defines the list
+    of I/O TX lcores.
+  * -w: The list of the worker lcores.
+  * --lpm: "IP / PREFIX => PORT", list of LPM rules used by the worker
+    lcores for packet forwarding.
+
+Here is an example for one rx, one tx and two worker on lcores 8-10.
+Both of rx and rx is assinged to the same lcore 8.
+It receives packets from port 0 and forwards it port 0 or 1.
+The destination port is defined as ``--lpm`` option.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/load-balancer.py -fg -l 8-10  -d 1,2 \
+    -rx "(0,0,8)" -tx "(0,8),(1,8)" -w 9,10 \
+    --lpm "1.0.0.0/24=>0; 1.0.1.0/24=>1;"
+
+If you are succeeded to launch the app container,
+it shows details of rx, tx, worker lcores and LPM rules
+, and starts forwarding.
+
+.. code-block:: console
+
+    ...
+    Checking link statusdone
+    Port0 Link Up - speed 10000Mbps - full-duplex
+    Port1 Link Up - speed 10000Mbps - full-duplex
+    Initialization completed.
+    NIC RX ports: 0 (0 )  ;
+    I/O lcore 8 (socket 0): RX ports  (0, 0)  ; Output rings  0x7f9af7347...
+    Worker lcore 9 (socket 0) ID 0: Input rings  0x7f9af7347880  ;
+    Worker lcore 10 (socket 0) ID 1: Input rings  0x7f9af7345680  ;
+
+    NIC TX ports:  0  1  ;
+    I/O lcore 8 (socket 0): Input rings per TX port  0 (0x7f9af7343480 ...
+    Worker lcore 9 (socket 0) ID 0:
+    Output rings per TX port  0 (0x7f9af7343480)  1 (0x7f9af7341280)  ;
+    Worker lcore 10 (socket 0) ID 1:
+    Output rings per TX port  0 (0x7f9af733f080)  1 (0x7f9af733ce80)  ;
+    LPM rules:
+    	0: 1.0.0.0/24 => 0;
+    	1: 1.0.1.0/24 => 1;
+    Ring sizes: NIC RX = 1024; Worker in = 1024; Worker out = 1024; NIC TX...
+    Burst sizes: I/O RX (rd = 144, wr = 144); Worker (rd = 144, wr = 144);...
+    Logical core 9 (worker 0) main loop.
+    Logical core 10 (worker 1) main loop.
+    Logical core 8 (I/O) main loop.
+
+
+To stop forwarding, you need to terminate the application
+but might not able to with *Ctrl-C*.
+In this case, you can use ``docker kill`` command to terminate it.
+Find the name of container on which ``load_balancer`` is running
+and kill it.
+
+.. code-block:: console
+
+    $ docker ps
+    CONTAINER ID  IMAGE                   ...  NAMES
+    80ce3711b85e  sppc/dpdk-ubuntu:16.04  ...  competent_galileo  # kill it
+    281aa8f236ef  sppc/spp-ubuntu:16.04   ...  youthful_mcnulty
+    $ docker kill competent_galileo
+
+
+.. note::
+
+    You shold care about the number of worker lcores. If you add lcore 11
+    and assign it for third worker thread,
+    it is failed to lauhch the application.
+
+    .. code-block:: console
+
+        ...
+        EAL: Probing VFIO support...
+        Incorrect value for --w argument (-8)
+
+            load_balancer <EAL PARAMS> -- <APP PARAMS>
+
+        Application manadatory parameters:
+            --rx "(PORT, QUEUE, LCORE), ..." : List of NIC RX ports and queues
+                   handled by the I/O RX lcores
+        ...
+
+
+    The reason is the number of lcore is considered as invalid in
+    ``parse_arg_w()`` as below.
+    ``n_tuples`` is the number of lcores and it should be
+    `2^n`, or returned with error code.
+
+    .. code-block:: c
+
+        // Defined in dpdk/examples/load_balancer/config.c
+        static int
+        parse_arg_w(const char *arg)
+        {
+                const char *p = arg;
+                uint32_t n_tuples;
+                ...
+                if ((n_tuples & (n_tuples - 1)) != 0) {
+                        return -8;
+                }
+                ...
+
+
+Here are other examples.
+
+**1. Separate rx and tx lcores**
+
+Use four lcores 8-11 for rx, tx and two worker threads.
+The number of ports is same as the previous example.
+You notice that rx and tx have different lcore number, 8 and 9.
+
+.. code-block:: console
+
+    $ python app/load-balancer.py -fg -l 8-11 -d 1,2 \
+    -rx "(0,0,8)" \
+    -tx "(0,9),(1,9)" \
+    -w 10,11 \
+    --lpm "1.0.0.0/24=>0; 1.0.1.0/24=>1;"
+
+**2. Assign multiple queues for rx**
+
+To classify for three destination ports, use one rx lcore,
+three tx lcores and four worker lcores.
+In this case, rx has two queues and using ``-nq 2``.
+You should start queue ID from 0 and to be in serial as `0,1,2,...`,
+or failed to launch.
+
+.. code-block:: console
+
+    $ python app/load-balancer.py -fg -l 8-13 -d 1,2,3 -nq 2 \
+    -rx "(0,0,8),(0,1,8)" \
+    -tx "(0,9),(1,9),(2,9)" \
+    -w 10,11,12,13 \
+    --lpm "1.0.0.0/24=>0; 1.0.1.0/24=>1; 1.0.2.0/24=>2;"
+
+
+``load-balancer.py`` supports all of options other than mandatories.
+Refer options and usages by ``load-balancer.py -h``.
+
+.. code-block:: console
+
+    $ python app/load-balancer.py -h
+    usage: load-balancer.py [-h] [-l CORE_LIST] [-c CORE_MASK] [-m MEM]
+                            [--socket-mem SOCKET_MEM]
+                            [--nof-memchan NOF_MEMCHAN]
+                            [-d DEV_IDS] [-nq NOF_QUEUES] [--no-privileged]
+                            [-rx RX_PORTS] [-tx TX_PORTS] [-w WORKER_LCORES]
+                            [-rsz RING_SIZES] [-bsz BURST_SIZES] [--lpm LPM]
+                            [--pos-lb POS_LB] [--dist-name DIST_NAME]
+                            [--dist-ver DIST_VER] [-ci CONTAINER_IMAGE]
+                            [-fg] [--dry-run]
+
+    Launcher for load-balancer application container
+
+    optional arguments:
+      ...
+      -d DEV_IDS, --dev-ids DEV_IDS
+                            two or more even vhost device IDs
+      -nq NOF_QUEUES, --nof-queues NOF_QUEUES
+                            Number of queues of virtio (default is 1)
+      --no-privileged       Disable docker's privileged mode if it's needed
+      -rx RX_PORTS, --rx-ports RX_PORTS
+                            List of rx ports and queues handled by the I/O rx
+                            lcores
+      -tx TX_PORTS, --tx-ports TX_PORTS
+                            List of tx ports and queues handled by the I/O tx
+                            lcores
+      -w WORKER_LCORES, --worker-lcores WORKER_LCORES
+                            List of worker lcores
+      -rsz RING_SIZES, --ring-sizes RING_SIZES
+                            Ring sizes of 'rx_read,rx_send,w_send,tx_written'
+      -bsz BURST_SIZES, --burst-sizes BURST_SIZES
+                            Burst sizes of rx, worker or tx
+      --lpm LPM             List of LPM rules
+      --pos-lb POS_LB       Position of the 1-byte field used for identify
+                            worker
+      ...
+
+
+.. _sppc_appl_helloworld:
+
+Helloworld Container
+--------------------
+
+The `helloworld
+<https://dpdk.org/doc/guides/sample_app_ug/hello_world.html>`_
+sample application is an example of the simplest DPDK application
+that can be written.
+
+Unlike from the other applications, it does not work as a network
+function actually.
+This app container script ``helloworld.py`` is intended to be used
+as a template for an user defined app container script.
+You can use it as a template for developing your app container script.
+An instruction for developing app container script is described in
+:ref:`sppc_howto_define_appc`.
+
+Helloworld app container has no application specific options. There are
+only EAL and app container options.
+You should give ``-l``  and ``-d`` options for the simplest app
+container.
+Helloworld application does not use vhost and ``-d`` options is not
+required for the app, but required to setup continer itself.
+
+.. code-block:: console
+
+    $ cd /path/to/spp/tools/sppc
+    $ python app/helloworld.py -l 4-6 -d 1 -fg
+    ...
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 10/15] docs: add usecase image of testing vhost
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (7 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 08/15] docs: add manual for app container launchers ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 11/15] docs: add usecase image of testing ring ogawa.yasufumi
                     ` (5 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../images/tools/sppc/sppc_usecase_vhost.svg  | 644 ++++++++++++++++++
 1 file changed, 644 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_vhost.svg

diff --git a/docs/guides/images/tools/sppc/sppc_usecase_vhost.svg b/docs/guides/images/tools/sppc/sppc_usecase_vhost.svg
new file mode 100644
index 0000000..4a78897
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_usecase_vhost.svg
@@ -0,0 +1,644 @@
+<?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="132mm"
+   height="134mm"
+   viewBox="0 0 467.71654 474.80316"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="sppc_usecase_vhost.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4678"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4443"
+         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="marker5907"
+       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="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       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="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       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="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       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="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       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="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       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="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       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="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       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="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       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="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       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="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       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="path4991"
+         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="path4480"
+         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="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,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="594.13325"
+     inkscape:cy="221.46065"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer7"
+     showgrid="false"
+     inkscape:window-width="1855"
+     inkscape:window-height="1176"
+     inkscape:window-x="65"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     units="mm"
+     width="230mm" />
+  <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,-577.55908)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.47332919;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="443.81241"
+       height="448.09808"
+       x="13.093798"
+       y="591.17029" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-577.55908)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.81471115;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="255.85715"
+       cy="783.79077"
+       rx="37.092648"
+       ry="19.592646" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.72361547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="385.5715"
+       cy="783.79077"
+       rx="37.138195"
+       ry="19.638191" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="320.57144"
+       cy="1003.7908"
+       rx="35.842735"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-577.55908)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="28.570358"
+       y="718.2182" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.88601547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="109.114"
+       height="114.114"
+       x="199.94299"
+       y="844.30524" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.4318701;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="208.56813"
+       height="113.56813"
+       x="219.07307"
+       y="610.57812" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="228.38045"
+       y="696.31409"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="358.72403"
+       y="697.22913" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="216.51154"
+       y="877.01654" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.11811137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7449"
+       width="108.8819"
+       height="113.8819"
+       x="331.77332"
+       y="844.70703" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.94681084;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7453"
+       width="74.0532"
+       height="29.053192"
+       x="351.68765"
+       y="877.33557" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-577.55908)">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="35.00639"
+       y="762.65436"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="28.548523"
+       y="875.91071"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="209.94594"
+       y="915.16528"
+       ry="17.054037" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.16768765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="103.83231"
+       height="38.832314"
+       x="274.08374"
+       y="644.87457"
+       ry="19.416157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5051)"
+       d="m 286.74472,998.18888 c 0,0 -25.75889,0.50508 -27.31618,-36.96954"
+       id="path4431"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="m 255.99997,844.3622 0,-40.00001"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989)"
+       d="m 255.99997,763.50505 0,-37.14286"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 387.99997,724.93362 0,37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 386.5714,804.36219 0,36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.99597287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7457"
+       width="89.004044"
+       height="34.004032"
+       x="343.71222"
+       y="916.07446"
+       ry="17.002016" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4678)"
+       d="m 389.14283,959.64794 c 1.59471,24.18266 -10.40975,35.81224 -33.57143,37.14285"
+       id="path4416"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-577.55908)">
+    <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="48.571423"
+       y="787.79077"
+       id="text4201"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="48.571423"
+         y="787.79077">spp_primary</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="221.42857"
+       y="936.93365"
+       id="text4205"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="221.42857"
+         y="936.93365">spp_nfv</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="41.428577"
+       y="900.36224"
+       id="text4225"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="41.428577"
+         y="900.36224">spp controller</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="294.85715"
+       y="670.93365"
+       id="text4265"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="294.85715"
+         y="670.93365">pktgen</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="41.714294"
+       y="624.36218"
+       id="text4327"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="41.714294"
+         y="624.36218">host</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="231.71428"
+       y="630.93365"
+       id="text4335"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="231.71428"
+         y="630.93365">container</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="41.714298"
+       y="744.07648"
+       id="text4339"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="41.714298"
+         y="744.07648">container</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="209.42856"
+       y="865.21936"
+       id="text4343"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="209.42856"
+         y="865.21936">container</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="225.14287"
+       y="789.21936"
+       id="text4351"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="225.14287"
+         y="789.21936">vhost:1</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="354.28577"
+       y="790.07648"
+       id="text4355"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="354.28577"
+         y="790.07648">vhost:2</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="296.57144"
+       y="1008.9337"
+       id="text4359"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="296.57144"
+         y="1008.9337">ring:0</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="235.14285"
+       y="716.36218"
+       id="text4371"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="235.14285"
+         y="716.36218">virtio</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="365.14285"
+       y="714.93359"
+       id="text4375"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="365.14285"
+         y="714.93359">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       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;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="252.85718"
+       y="896.36224"
+       id="text4407"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="252.85718"
+         y="896.36224"
+         id="tspan4411">shmem</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="343.14279"
+       y="867.79077"
+       id="text7461"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7463"
+         x="343.14279"
+         y="867.79077">container</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="353.71423"
+       y="937.21942"
+       id="text7469"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7471"
+         x="353.71423"
+         y="937.21942">spp_nfv</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="357.14282"
+       y="896.93359"
+       id="text7465"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan7467"
+         x="357.14282"
+         y="896.93359">shmem</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 11/15] docs: add usecase image of testing ring
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (8 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 10/15] docs: add usecase image of testing vhost ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 12/15] docs: add usecase image of pktgen and l2fwd ogawa.yasufumi
                     ` (4 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../images/tools/sppc/sppc_usecase_ring.svg   | 1032 +++++++++++++++++
 1 file changed, 1032 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_ring.svg

diff --git a/docs/guides/images/tools/sppc/sppc_usecase_ring.svg b/docs/guides/images/tools/sppc/sppc_usecase_ring.svg
new file mode 100644
index 0000000..6181e85
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_usecase_ring.svg
@@ -0,0 +1,1032 @@
+<?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="290mm"
+   height="170mm"
+   viewBox="0 0 1027.5591 602.36234"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="sppc_usecase_ring.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4627"
+       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="path4629" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4479"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4481"
+         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="marker1450"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1448"
+         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="marker4582"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path4347"
+         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="Arrow2Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411"
+         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="marker5907"
+       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="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       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="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       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="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       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="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       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="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5491"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5493"
+         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="marker5421"
+       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="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       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="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       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="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       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="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       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="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       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="path4991"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567-3"
+       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="path5569-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411-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>
+  </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="467.81657"
+     inkscape:cy="256.7678"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="false"
+     inkscape:window-width="1371"
+     inkscape:window-height="854"
+     inkscape:window-x="167"
+     inkscape:window-y="74"
+     inkscape:window-maximized="0"
+     units="mm"
+     width="230mm" />
+  <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,-449.99991)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.02641034;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="988.97369"
+       height="380.40213"
+       x="19.370337"
+       y="475.55396" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.07469606;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4142"
+       width="73.925301"
+       height="33.925304"
+       x="280.03732"
+       y="822.50671" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81819206;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4144"
+       width="74.181808"
+       height="34.181808"
+       x="847.62335"
+       y="821.80701" />
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.19535923;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136-3"
+       width="987.90839"
+       height="132.51135"
+       x="19.992262"
+       y="893.32294" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.07469594;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4142-3"
+       width="73.925301"
+       height="33.925301"
+       x="279.75168"
+       y="894.82812" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.07469594;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4142-5"
+       width="73.925301"
+       height="33.925301"
+       x="847.78741"
+       y="893.75671" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-449.99991)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.8340826;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293"
+       cx="684.46234"
+       cy="587.98999"
+       rx="34.582958"
+       ry="19.582958" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.78720939;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="333.35715"
+       cy="587.04077"
+       rx="34.606396"
+       ry="19.606396" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="504.24518"
+       cy="588.48456"
+       rx="35.842735"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-449.99991)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="34.570358"
+       y="543.4682" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.88601547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="109.114"
+       height="114.114"
+       x="201.94299"
+       y="645.55524" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.13310003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4168"
+       width="108.86691"
+       height="113.86691"
+       x="543.20947"
+       y="644.82159" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="218.51154"
+       y="678.26654" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.89280504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393"
+       width="74.107193"
+       height="29.107199"
+       x="559.08929"
+       y="676.55865" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.11811137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7449"
+       width="108.8819"
+       height="113.8819"
+       x="369.77332"
+       y="645.95703" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02366579;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451"
+       width="108.97635"
+       height="113.97635"
+       x="722.8689"
+       y="645.90967" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.94681084;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7453"
+       width="74.0532"
+       height="29.053192"
+       x="389.68765"
+       y="678.58557" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.91539472;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7455"
+       width="74.084618"
+       height="29.084608"
+       x="741.67194"
+       y="676.56989" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-449.99991)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="41.00639"
+       y="587.90436"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="34.548523"
+       y="701.16071"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.81271017;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4229"
+       width="89.187302"
+       height="34.187294"
+       x="551.90643"
+       y="714.08997"
+       ry="17.093647"
+       rx="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="211.94594"
+       y="716.41528"
+       ry="17.054037" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5091)"
+       d="m 315.71426,893.6122 0,-35.7143"
+       id="path4427"
+       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(#marker5907)"
+       d="m 885.14283,857.8979 0,32.8572"
+       id="path4429"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.03270912;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5051)"
+       d="M 299.94438,821.47394 C 283.4816,802.40013 271.88376,782.45569 271.46989,760.50976"
+       id="path4431"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="m 263.99997,645.6122 c 3.02119,-35.98331 8.17794,-56.21288 34.63235,-57.02033"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 367.25667,587.42944 c 33.16502,1.54932 31.34468,28.44253 31.31473,55.15229"
+       id="path4439"
+       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(#marker5813)"
+       d="m 540.77079,590.62522 c 33.79338,0.78036 31.1029,29.46964 31.90646,53.35246"
+       id="path4445"
+       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(#marker5567)"
+       d="m 614.34437,644.15101 c 0.8953,-26.39834 3.37245,-51.35864 33.33504,-51.33216"
+       id="path4451"
+       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(#marker5491)"
+       d="m 937.01012,760.44903 c 1.38788,25.41499 -17.01853,40.93284 -30.83683,58.74474"
+       id="path4453"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.99597287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7457"
+       width="89.004044"
+       height="34.004032"
+       x="381.71222"
+       y="717.32446"
+       ry="17.002016" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549631;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459"
+       width="88.914513"
+       height="33.914509"
+       x="732.32843"
+       y="713.94067"
+       ry="16.957254" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4582)"
+       d="m 441.43663,644.02332 c -0.24081,-29.20552 6.6639,-48.20315 25.25382,-50.50762"
+       id="path3504"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 718.25904,589.47509 c 27.14201,2.47334 33.4572,3.2024 34.34519,53.53808"
+       id="path3506"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223-5"
+       width="149.04579"
+       height="39.045807"
+       x="506.92358"
+       y="955.48212"
+       ry="19.522903" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-449.99991)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="106.57143"
+       y="613.04077"
+       id="text4201"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="106.57143"
+         y="613.04077"
+         style="font-size:17.50000191px;line-height:1.25">spp_primary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="255.42859"
+       y="738.18365"
+       id="text4205"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="255.42859"
+         y="738.18365"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="595.14288"
+       y="736.46936"
+       id="text4209"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="595.14288"
+         y="736.46936"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="107.42858"
+       y="725.61224"
+       id="text4225"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="107.42858"
+         y="725.61224"
+         style="font-size:17.50000191px;line-height:1.25">spp controller</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="317.14285"
+       y="843.32648"
+       id="text4319"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4321"
+         x="317.14285"
+         y="843.32648"
+         style="font-size:17.50000191px;line-height:1.25">phy:0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="884.57147"
+       y="843.61218"
+       id="text4323"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4325"
+         x="884.57147"
+         y="843.61218"
+         style="font-size:17.50000191px;line-height:1.25">phy:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="72.357155"
+       y="509.04077"
+       id="text4327"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="72.357155"
+         y="509.04077"
+         style="font-size:17.50000191px;line-height:1.25">host 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="89.714302"
+       y="569.32648"
+       id="text4339"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="89.714302"
+         y="569.32648"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="249.42856"
+       y="666.46936"
+       id="text4343"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="249.42856"
+         y="666.46936"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="592.28577"
+       y="665.89789"
+       id="text4347"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4349"
+         x="592.28577"
+         y="665.89789"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="333.14288"
+       y="592.46936"
+       id="text4351"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="333.14288"
+         y="592.46936"
+         style="font-size:17.50000191px;line-height:1.25">ring:0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="504.24518"
+       y="593.62744"
+       id="text4359"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="504.24518"
+         y="593.62744"
+         style="font-size:17.50000191px;line-height:1.25">ring:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="254.85718"
+       y="697.61224"
+       id="text4407"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         x="254.85718"
+         y="697.61224"
+         id="tspan4411"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="596.00006"
+       y="696.46936"
+       id="text4413"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         x="596.00006"
+         y="696.46936"
+         id="tspan4417"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="684.81946"
+       y="593.13287"
+       id="text4419"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4421"
+         x="684.81946"
+         y="593.13287"
+         style="font-size:17.50000191px;line-height:1.25">ring:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="419.14279"
+       y="669.04077"
+       id="text7461"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7463"
+         x="419.14279"
+         y="669.04077"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="425.71423"
+       y="738.46942"
+       id="text7469"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7471"
+         x="425.71423"
+         y="738.46942"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="427.14282"
+       y="698.18359"
+       id="text7465"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7467"
+         x="427.14282"
+         y="698.18359"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="774.57135"
+       y="667.61218"
+       id="text7473"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7475"
+         x="774.57135"
+         y="667.61218"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="778.28571"
+       y="696.18365"
+       id="text7477"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7479"
+         x="778.28571"
+         y="696.18365"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="775.42853"
+       y="736.755"
+       id="text7481"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan7483"
+         x="775.42853"
+         y="736.755"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="75.061806"
+       y="918.58264"
+       id="text4327-6"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4329-7"
+         x="75.061806"
+         y="918.58264"
+         style="font-size:17.50000191px;line-height:1.25;stroke-width:0.99999994px">host 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="315.59756"
+       y="916.1145"
+       id="text4319-6"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4321-2"
+         x="315.59756"
+         y="916.1145"
+         style="font-size:17.50000191px;line-height:1.25;stroke-width:0.99999994px">phy</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="884.9726"
+       y="915.04303"
+       id="text4319-6-9"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4321-2-1"
+         x="884.9726"
+         y="915.04303"
+         style="font-size:17.50000191px;line-height:1.25;stroke-width:0.99999994px">phy</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="581.66901"
+       y="981.7395"
+       id="text4319-6-9-0"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4321-2-1-9"
+         x="581.66901"
+         y="981.7395"
+         style="font-size:17.50000191px;line-height:1.25;stroke-width:0.99999994px">pktgen</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.21100032;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4479);stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 876.75998,928.33376 c 1.53974,28.57273 -43.6222,48.52008 -218.31597,47.05548"
+       id="path1320"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.15920484px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
+       d="M 505.9481,975.41529 C 366.66695,976.15493 318.62288,968.80515 317.23998,929.54795"
+       id="path1322"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.8340826;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293-3"
+       cx="869.50446"
+       cy="588.44391"
+       rx="34.582966"
+       ry="19.582962" />
+    <rect
+       style="display:inline;opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02366579;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451-5"
+       width="108.97637"
+       height="113.97638"
+       x="879.91101"
+       y="646.36359" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.91539472;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7455-6"
+       width="74.084633"
+       height="29.084616"
+       x="898.71405"
+       y="677.0238" />
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5567-3)"
+       d="m 799.38646,644.60498 c 0.8953,-26.39835 3.37245,-51.35866 33.33505,-51.33218"
+       id="path4451-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549631;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459-9"
+       width="88.914536"
+       height="33.914516"
+       x="889.37054"
+       y="714.39459"
+       ry="16.957258" />
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-7)"
+       d="m 903.30115,589.92904 c 27.14202,2.47334 33.45721,3.2024 34.3452,53.5381"
+       id="path3506-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="869.86157"
+       y="593.58679"
+       id="text4419-2"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4421-7"
+         x="869.86157"
+         y="593.58679"
+         style="font-size:17.50000191px;line-height:1.25">ring:3</tspan></text>
+    <text
+       sodipodi:linespacing="0%"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="941.61346"
+       y="668.0661"
+       id="text7473-0"><tspan
+         sodipodi:role="line"
+         id="tspan7475-9"
+         x="941.61346"
+         y="668.0661"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       sodipodi:linespacing="0%"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="935.32782"
+       y="696.63757"
+       id="text7477-3"><tspan
+         sodipodi:role="line"
+         id="tspan7479-6"
+         x="935.32782"
+         y="696.63757"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       sodipodi:linespacing="0%"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="932.47064"
+       y="737.20898"
+       id="text7481-0"><tspan
+         sodipodi:role="line"
+         id="tspan7483-6"
+         x="932.47064"
+         y="737.20898"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 12/15] docs: add usecase image of pktgen and l2fwd
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (9 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 11/15] docs: add usecase image of testing ring ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 13/15] docs: add usecase image of using less lcores ogawa.yasufumi
                     ` (3 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../tools/sppc/sppc_usecase_l2fwdpktgen.svg   | 918 ++++++++++++++++++
 1 file changed, 918 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen.svg

diff --git a/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen.svg b/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen.svg
new file mode 100644
index 0000000..9301ede
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen.svg
@@ -0,0 +1,918 @@
+<?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="240mm"
+   height="150mm"
+   viewBox="0 0 850.39371 531.49607"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="sppc_usecase_l2fwdpktgen.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker4785"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path4783"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5907"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend"
+       inkscape:collect="always">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5909" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5813"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5815" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5725"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5727" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5643"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5645" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5567"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5569" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5421"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5423" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker5207"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5209"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5137"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5139" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5091"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5093" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5051"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5053" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5017"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path5019" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker4989"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         id="path4991" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path4480"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.8) rotate(180) translate(12.5,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="623.31538"
+     inkscape:cy="291.37962"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer5"
+     showgrid="false"
+     inkscape:window-width="1853"
+     inkscape:window-height="1025"
+     inkscape:window-x="67"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     units="mm"
+     width="230mm" />
+  <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,-520.86616)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.04377723;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="826.09912"
+       height="463.24191"
+       x="11.379023"
+       y="541.58051" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.86321706;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293"
+       cx="649.57147"
+       cy="733.91559"
+       rx="37.068394"
+       ry="19.568548" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75659269;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295"
+       cx="769.02191"
+       cy="733.91577"
+       rx="37.121704"
+       ry="19.621704" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.81471109;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="253.98215"
+       cy="733.91577"
+       rx="37.092644"
+       ry="19.592646" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.72361547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="384.16501"
+       cy="733.91577"
+       rx="37.138191"
+       ry="19.638191" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="516.28577"
+       cy="835.34436"
+       rx="35.842735"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="26.570356"
+       y="668.3432" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.88601547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="109.114"
+       height="114.114"
+       x="197.94299"
+       y="794.43024" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.4318701;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="208.56813"
+       height="113.56813"
+       x="217.07307"
+       y="560.70312" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.28275025;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4166"
+       width="208.71725"
+       height="113.71725"
+       x="607.28436"
+       y="562.05713" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.13310003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4168"
+       width="108.86691"
+       height="113.86691"
+       x="593.20947"
+       y="793.69659" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="226.38045"
+       y="646.43909"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="356.72403"
+       y="647.35413" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.80504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4367"
+       width="57.194962"
+       height="27.19496"
+       x="618.7597"
+       y="648.24689" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597942;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369"
+       width="57.184021"
+       height="27.184021"
+       x="747.05084"
+       y="648.53809" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="214.51154"
+       y="827.14154" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.89280504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393"
+       width="74.107193"
+       height="29.107199"
+       x="609.08929"
+       y="825.43365" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.11811137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7449"
+       width="108.8819"
+       height="113.8819"
+       x="329.77332"
+       y="794.83203" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02366579;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451"
+       width="108.97635"
+       height="113.97635"
+       x="712.8689"
+       y="794.78467" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.94681084;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7453"
+       width="74.0532"
+       height="29.053192"
+       x="349.68765"
+       y="827.46057" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.91539472;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7455"
+       width="74.084618"
+       height="29.084608"
+       x="731.67194"
+       y="825.44489" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-520.86616)">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="33.00639"
+       y="712.77936"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="26.548521"
+       y="826.03571"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.81271017;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4229"
+       width="89.187302"
+       height="34.187294"
+       x="601.90643"
+       y="862.96497"
+       ry="17.093647"
+       rx="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="207.94594"
+       y="865.29028"
+       ry="17.054037" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.03231287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4233"
+       width="103.96768"
+       height="38.967686"
+       x="660.58765"
+       y="595.50336"
+       ry="19.483843" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.16768765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="103.83231"
+       height="38.832314"
+       x="272.08374"
+       y="594.99957"
+       ry="19.416157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="M 253.99997,794.4872 V 754.48719"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989)"
+       d="M 253.99997,713.63005 V 676.48719"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 385.99997,675.05862 v 37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 384.5714,754.48719 v 36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94411641;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5207)"
+       d="m 440.28569,836.48719 h 38.50992"
+       id="path4441"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99798077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5421)"
+       d="m 553.14282,836.91457 38.32673,-0.43681"
+       id="path4443"
+       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(#marker5813)"
+       d="m 648.85712,795.05862 0.59173,-40.59174"
+       id="path4445"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.06141865px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5725)"
+       d="M 649.42854,714.20148 V 675.57487"
+       id="path4447"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02591169px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5643)"
+       d="m 768.63777,675.11725 1.03006,38.35599"
+       id="path4449"
+       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(#marker5567)"
+       d="m 768.85712,753.63005 v 38.57143"
+       id="path4451"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.99597287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7457"
+       width="89.004044"
+       height="34.004032"
+       x="341.71222"
+       y="866.19946"
+       ry="17.002016" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549631;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459"
+       width="88.914513"
+       height="33.914509"
+       x="722.32843"
+       y="862.81567"
+       ry="16.957254" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301-3"
+       cx="518.01886"
+       cy="957.66046"
+       rx="35.842739"
+       ry="18.699877" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="517.98743"
+       y="962.80334"
+       id="text4359-6"><tspan
+         sodipodi:role="line"
+         id="tspan4361-7"
+         x="517.98743"
+         y="962.80334"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">ring:0</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4785)"
+       d="m 765.19056,908.41549 c -21.89874,30.36125 -65.71746,53.92393 -210.25703,49.24494"
+       id="path169"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5907)"
+       d="m 482.03218,957.66043 c -91.35308,-3.0468 -196.13636,12.51103 -223.5724,-47.35091"
+       id="path171"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-520.86616)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="98.571426"
+       y="737.91577"
+       id="text4201"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="98.571426"
+         y="737.91577"
+         style="font-size:17.50000191px;line-height:1.25">spp_primary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="251.42857"
+       y="887.05865"
+       id="text4205"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="251.42857"
+         y="887.05865"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="645.14288"
+       y="885.34436"
+       id="text4209"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="645.14288"
+         y="885.34436"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="99.428581"
+       y="850.48724"
+       id="text4225"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="99.428581"
+         y="850.48724"
+         style="font-size:17.50000191px;line-height:1.25">spp controller</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="322.85715"
+       y="619.05865"
+       id="text4265"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="322.85715"
+         y="619.05865"
+         style="font-size:17.50000191px;line-height:1.25">pktgen</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="712.57147"
+       y="621.34436"
+       id="text4269"><tspan
+         sodipodi:role="line"
+         id="tspan4271"
+         x="712.57147"
+         y="621.34436"
+         style="font-size:17.50000191px;line-height:1.25">l2fwd</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="49.714294"
+       y="574.48718"
+       id="text4327"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="49.714294"
+         y="574.48718"
+         style="font-size:17.50000191px;line-height:1.25">host</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="658.00006"
+       y="582.48724"
+       id="text4331"><tspan
+         sodipodi:role="line"
+         id="tspan4333"
+         x="658.00006"
+         y="582.48724"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="271.71429"
+       y="581.05865"
+       id="text4335"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="271.71429"
+         y="581.05865"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="81.714302"
+       y="694.20148"
+       id="text4339"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="81.714302"
+         y="694.20148"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="245.42856"
+       y="815.34436"
+       id="text4343"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="245.42856"
+         y="815.34436"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="642.28577"
+       y="814.77289"
+       id="text4347"><tspan
+         sodipodi:role="line"
+         id="tspan4349"
+         x="642.28577"
+         y="814.77289"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="254.51744"
+       y="739.34436"
+       id="text4351"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="254.51744"
+         y="739.34436"
+         style="font-size:17.50000191px;line-height:1.25">vhost:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="382.9418"
+       y="740.20148"
+       id="text4355"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="382.9418"
+         y="740.20148"
+         style="font-size:17.50000191px;line-height:1.25">vhost:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="517.09863"
+       y="840.48724"
+       id="text4359"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="517.09863"
+         y="840.48724"
+         style="font-size:17.50000191px;line-height:1.25">ring:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="255.14285"
+       y="666.48718"
+       id="text4371"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="255.14285"
+         y="666.48718"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="385.14285"
+       y="667.05859"
+       id="text4375"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="385.14285"
+         y="667.05859"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="647.42865"
+       y="667.63007"
+       id="text4379"><tspan
+         sodipodi:role="line"
+         id="tspan4381"
+         x="647.42865"
+         y="667.63007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="776.00006"
+       y="667.63007"
+       id="text4383"><tspan
+         sodipodi:role="line"
+         id="tspan4385"
+         x="776.00006"
+         y="667.63007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="250.85718"
+       y="846.48724"
+       id="text4407"><tspan
+         sodipodi:role="line"
+         x="250.85718"
+         y="846.48724"
+         id="tspan4411"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="646.00006"
+       y="845.34436"
+       id="text4413"><tspan
+         sodipodi:role="line"
+         x="646.00006"
+         y="845.34436"
+         id="tspan4417"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="647.86621"
+       y="739.05865"
+       id="text4419"><tspan
+         sodipodi:role="line"
+         id="tspan4421"
+         x="647.86621"
+         y="739.05865"
+         style="font-size:17.50000191px;line-height:1.25">vhost:3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="768.17371"
+       y="739.05859"
+       id="text4423"><tspan
+         sodipodi:role="line"
+         id="tspan4425"
+         x="768.17371"
+         y="739.05859"
+         style="font-size:17.50000191px;line-height:1.25">vhost:4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="379.14279"
+       y="817.91577"
+       id="text7461"><tspan
+         sodipodi:role="line"
+         id="tspan7463"
+         x="379.14279"
+         y="817.91577"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="385.71423"
+       y="887.34442"
+       id="text7469"><tspan
+         sodipodi:role="line"
+         id="tspan7471"
+         x="385.71423"
+         y="887.34442"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="387.14282"
+       y="847.05859"
+       id="text7465"><tspan
+         sodipodi:role="line"
+         id="tspan7467"
+         x="387.14282"
+         y="847.05859"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="764.57135"
+       y="816.48718"
+       id="text7473"><tspan
+         sodipodi:role="line"
+         id="tspan7475"
+         x="764.57135"
+         y="816.48718"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="768.28571"
+       y="845.05865"
+       id="text7477"><tspan
+         sodipodi:role="line"
+         id="tspan7479"
+         x="768.28571"
+         y="845.05865"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="765.42853"
+       y="885.63"
+       id="text7481"><tspan
+         sodipodi:role="line"
+         id="tspan7483"
+         x="765.42853"
+         y="885.63"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 13/15] docs: add usecase image of using less lcores
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (10 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 12/15] docs: add usecase image of pktgen and l2fwd ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 14/15] docs: add usecase image of load balancer ogawa.yasufumi
                     ` (2 subsequent siblings)
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../sppc/sppc_usecase_l2fwdpktgen_less.svg    | 848 ++++++++++++++++++
 1 file changed, 848 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen_less.svg

diff --git a/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen_less.svg b/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen_less.svg
new file mode 100644
index 0000000..e1bf872
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_usecase_l2fwdpktgen_less.svg
@@ -0,0 +1,848 @@
+<?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="244mm"
+   height="152mm"
+   viewBox="0 0 864.56694 538.58269"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="sppc_usecase_l2fwdpktgen_less.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4785"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4783"
+         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="marker5907"
+       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="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       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="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       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="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       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="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       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="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       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="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5207"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5209"
+         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="marker5137"
+       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="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       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="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       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="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       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="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       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="path4991"
+         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="path4480"
+         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="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,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="723.11364"
+     inkscape:cy="140.93757"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="false"
+     inkscape:window-width="1855"
+     inkscape:window-height="1176"
+     inkscape:window-x="65"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     units="mm"
+     width="230mm" />
+  <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,-513.77954)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.15241647;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="838.84766"
+       height="505.99042"
+       x="13.433342"
+       y="529.92059" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-513.77954)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.86659622;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293"
+       cx="655.82147"
+       cy="743.75952"
+       rx="37.066704"
+       ry="19.722952" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75955552;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295"
+       cx="772.55359"
+       cy="743.75952"
+       rx="37.120224"
+       ry="19.776472" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.81790251;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="266.10715"
+       cy="745.75952"
+       rx="37.091049"
+       ry="19.747299" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.72361547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="383.8215"
+       cy="745.91577"
+       rx="37.138191"
+       ry="19.638191" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.77742785;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="525.69647"
+       cy="846.25952"
+       rx="37.111286"
+       ry="19.767536" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-513.77954)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="34.570358"
+       y="678.3432" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.25014758;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="208.74988"
+       height="118.74987"
+       x="228.12508"
+       y="807.61224" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.4318701;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="208.56813"
+       height="113.56813"
+       x="225.07307"
+       y="572.70312" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.28275025;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4166"
+       width="208.71725"
+       height="113.71725"
+       x="613.28436"
+       y="572.05713" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.5986383;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4168"
+       width="208.4014"
+       height="118.40137"
+       x="615.44232"
+       y="806.92938" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="240.38045"
+       y="658.43909"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="358.72403"
+       y="659.35413" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.80504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4367"
+       width="57.194962"
+       height="27.19496"
+       x="628.7597"
+       y="658.24689" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597942;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369"
+       width="57.184021"
+       height="27.184021"
+       x="751.05084"
+       y="658.53809" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="294.13654"
+       y="841.14154" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.89280504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393"
+       width="74.107193"
+       height="29.107199"
+       x="682.83929"
+       y="839.43365" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-513.77954)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="41.00639"
+       y="722.77936"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="34.548523"
+       y="836.03571"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.81271017;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4229"
+       width="89.187302"
+       height="34.187294"
+       x="675.65643"
+       y="876.96497"
+       ry="17.093647"
+       rx="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="287.57095"
+       y="879.29028"
+       ry="17.054037" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.03231287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4233"
+       width="103.96768"
+       height="38.967686"
+       x="668.58765"
+       y="605.50336"
+       ry="19.483843" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.16768765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="103.83231"
+       height="38.832314"
+       x="280.08374"
+       y="606.99957"
+       ry="19.416157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5017)"
+       d="m 267.99997,806.4872 0,-40.00001"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989)"
+       d="m 267.99997,725.63005 0,-37.14286"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 387.99997,687.05862 0,37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 386.5714,766.48719 0,36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94411641;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5207)"
+       d="m 436.41069,846.48719 50.50992,0"
+       id="path4441"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99798077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5421)"
+       d="m 563.14282,846.91457 48.32673,-0.43681"
+       id="path4443"
+       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(#marker5813)"
+       d="m 658.85712,805.05862 0.59173,-40.59174"
+       id="path4445"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.06141865px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5725)"
+       d="m 659.42854,724.20148 0,-38.62661"
+       id="path4447"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02824485px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5643)"
+       d="m 772.64718,686.05442 1.01015,39.28992"
+       id="path4449"
+       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(#marker5567)"
+       d="m 772.85712,763.63005 0,38.57143"
+       id="path4451"
+       inkscape:connector-curvature="0" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301-3"
+       cx="526.01886"
+       cy="989.66046"
+       rx="35.842739"
+       ry="18.699877" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="524.01886"
+       y="994.80334"
+       id="text4359-6"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4361-7"
+         x="524.01886"
+         y="994.80334"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">ring:0</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4785)"
+       d="m 777.19056,926.41549 c -1.89874,50.36125 -41.14604,59.3525 -214.25703,63.24494"
+       id="path169"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5907)"
+       d="M 490.03218,989.66043 C 368.6791,989.47077 279.6101,983.88575 266.45978,928.30952"
+       id="path171"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-513.77954)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="106.57143"
+       y="747.91577"
+       id="text4201"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="106.57143"
+         y="747.91577"
+         style="font-size:17.50000191px;line-height:1.25">spp_primary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="331.05359"
+       y="901.05865"
+       id="text4205"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="331.05359"
+         y="901.05865"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="718.89288"
+       y="899.34436"
+       id="text4209"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="718.89288"
+         y="899.34436"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="107.42858"
+       y="860.48724"
+       id="text4225"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="107.42858"
+         y="860.48724"
+         style="font-size:17.50000191px;line-height:1.25">spp controller</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="330.85715"
+       y="631.05865"
+       id="text4265"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="330.85715"
+         y="631.05865"
+         style="font-size:17.50000191px;line-height:1.25">pktgen</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="720.57147"
+       y="631.34436"
+       id="text4269"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4271"
+         x="720.57147"
+         y="631.34436"
+         style="font-size:17.50000191px;line-height:1.25">l2fwd</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="59.714294"
+       y="566.48718"
+       id="text4327"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="59.714294"
+         y="566.48718"
+         style="font-size:17.50000191px;line-height:1.25">host</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="666.00006"
+       y="592.48724"
+       id="text4331"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4333"
+         x="666.00006"
+         y="592.48724"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="279.71429"
+       y="593.05865"
+       id="text4335"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="279.71429"
+         y="593.05865"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="89.714302"
+       y="704.20148"
+       id="text4339"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="89.714302"
+         y="704.20148"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="291.05356"
+       y="829.34436"
+       id="text4343"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="291.05356"
+         y="829.34436"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="680.03577"
+       y="828.77289"
+       id="text4347"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4349"
+         x="680.03577"
+         y="828.77289"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="265.14288"
+       y="751.34436"
+       id="text4351"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="265.14288"
+         y="751.34436"
+         style="font-size:17.50000191px;line-height:1.25">vhost:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="384.28577"
+       y="752.20148"
+       id="text4355"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="384.28577"
+         y="752.20148"
+         style="font-size:17.50000191px;line-height:1.25">vhost:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="526.16077"
+       y="852.48724"
+       id="text4359"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="526.16077"
+         y="852.48724"
+         style="font-size:17.50000191px;line-height:1.25">ring:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="269.14285"
+       y="678.48718"
+       id="text4371"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="269.14285"
+         y="678.48718"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="387.14285"
+       y="679.05859"
+       id="text4375"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="387.14285"
+         y="679.05859"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="657.42865"
+       y="677.63007"
+       id="text4379"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4381"
+         x="657.42865"
+         y="677.63007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="780.00006"
+       y="677.63007"
+       id="text4383"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4385"
+         x="780.00006"
+         y="677.63007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="330.48218"
+       y="860.48724"
+       id="text4407"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         x="330.48218"
+         y="860.48724"
+         id="tspan4411"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="719.75006"
+       y="859.34436"
+       id="text4413"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         x="719.75006"
+         y="859.34436"
+         id="tspan4417"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="655.42859"
+       y="749.05865"
+       id="text4419"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4421"
+         x="655.42859"
+         y="749.05865"
+         style="font-size:17.50000191px;line-height:1.25">vhost:3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="771.14288"
+       y="749.05859"
+       id="text4423"
+       sodipodi:linespacing="0%"><tspan
+         sodipodi:role="line"
+         id="tspan4425"
+         x="771.14288"
+         y="749.05859"
+         style="font-size:17.50000191px;line-height:1.25">vhost:4</tspan></text>
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 14/15] docs: add usecase image of load balancer
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (11 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 13/15] docs: add usecase image of using less lcores ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-06-18  6:21   ` [spp] [PATCH v2 15/15] docs: add how to develop guide for SPP container ogawa.yasufumi
  2018-08-15 15:39   ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation Ferruh Yigit
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 .../tools/sppc/sppc_usecase_lb_pktgen.svg     | 1573 +++++++++++++++++
 1 file changed, 1573 insertions(+)
 create mode 100644 docs/guides/images/tools/sppc/sppc_usecase_lb_pktgen.svg

diff --git a/docs/guides/images/tools/sppc/sppc_usecase_lb_pktgen.svg b/docs/guides/images/tools/sppc/sppc_usecase_lb_pktgen.svg
new file mode 100644
index 0000000..c1f1ed4
--- /dev/null
+++ b/docs/guides/images/tools/sppc/sppc_usecase_lb_pktgen.svg
@@ -0,0 +1,1573 @@
+<?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="280mm"
+   height="180mm"
+   viewBox="0 0 992.12605 637.79528"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="sppc_usecase_lb_pktgen.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1955"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1953"
+         style="fill:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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="marker1711"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lstart">
+      <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:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path1709"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1473"
+       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:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path1471" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker12802"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path12800"
+         style="fill:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker12362"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path12360"
+         style="fill:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker12154"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path12152"
+         style="fill:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker12026"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path12024"
+         style="fill:#0000cc;fill-opacity:1;fill-rule:evenodd;stroke:#0000cc;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker11110"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path11108"
+         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)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker10746"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lstart"
+       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:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path10744"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker10532"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path10530"
+         style="fill:#0000cc;fill-opacity:1;fill-rule:evenodd;stroke:#0000cc;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker8004"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path8002"
+         style="fill:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;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)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker7808"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path7806"
+         style="fill:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;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="marker6884"
+       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="path6882" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6700"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path6698"
+         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="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5488"
+         style="fill:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;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="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path5470"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4785"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path4783"
+         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="marker5813"
+       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:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       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:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       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="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       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="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       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="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       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="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       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="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       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="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       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:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       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:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4991"
+         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="path4480"
+         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="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643-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:#00fe00;fill-opacity:0;fill-rule:evenodd;stroke:#00fe00;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:0"
+         id="path5645-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989-7"
+       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="path4991-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017-2"
+       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:#00fe00;fill-opacity:0;fill-rule:evenodd;stroke:#00fe00;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:0"
+         id="path5019-2" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-9"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4480-7"
+         style="fill:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137-2"
+       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:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5139-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137-2-1"
+       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:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5139-9-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137-2-1-7"
+       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:#007800;fill-opacity:1;fill-rule:evenodd;stroke:#007800;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5139-9-9-8" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989-2"
+       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:#f5fff7;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4991-0"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-9-1"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4480-7-5"
+         style="fill:#0000ec;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;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)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813-3"
+       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="path5815-6"
+         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="573.51347"
+     inkscape:cy="291.37962"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="false"
+     inkscape:window-width="1853"
+     inkscape:window-height="1025"
+     inkscape:window-x="67"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     units="mm"
+     width="230mm" />
+  <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,-414.56695)">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.44748497;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="956.47589"
+       height="573.77142"
+       x="17.159864"
+       y="433.45551" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6884)"
+       d="m 263.27102,843.07125 c 3.68416,28.5625 12.21126,35.3317 20.8344,41.66879"
+       id="path6688"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6700)"
+       d="m 356.07879,883.79303 c 119.18407,-2.69424 258.25201,13.33152 300.20473,-37.89976"
+       id="path6690"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#0000cc;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker10532);fill-opacity:1"
+       d="m 388.2774,844.94625 c 2.62692,50.9771 22.07758,76.25386 48.29792,76.70846"
+       id="path7066"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#007800;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker10746)"
+       d="m 508.5487,843.99924 c 2.46974,66.37643 9.78482,123.11289 86.17864,122.16532"
+       id="path7068"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#0000cc;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker12026);fill-opacity:1"
+       d="m 495.40466,923.54875 c 230.3301,-2.65013 276.53893,-27.09891 283.04418,-81.42451"
+       id="path7796"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#007800;stroke-width:0.93750006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker8004)"
+       d="M 667.64774,968.07763 C 884.81716,964.8048 894.69532,904.63619 899.66716,840.23019"
+       id="path7798"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(0,-414.56695)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.86659622;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4293"
+       cx="507.07147"
+       cy="668.13452"
+       rx="37.066704"
+       ry="19.722952" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75955552;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295"
+       cx="654.17859"
+       cy="666.25952"
+       rx="37.120224"
+       ry="19.776472" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.81790262;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="261.48215"
+       cy="668.13452"
+       rx="37.091049"
+       ry="19.747299" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.72644866;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4299"
+       cx="387.4465"
+       cy="668.13452"
+       rx="37.136776"
+       ry="19.793026" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="458.32733"
+       cy="924.15948"
+       rx="35.842735"
+       ry="18.699877" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301-36"
+       cx="631.20416"
+       cy="966.90692"
+       rx="35.842739"
+       ry="18.699877" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75955558;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295-3"
+       cx="775.56964"
+       cy="668.1344"
+       rx="37.120224"
+       ry="19.776472" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.75955558;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4295-5"
+       cx="890.15887"
+       cy="668.1344"
+       rx="37.120224"
+       ry="19.776472" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(0,-414.56695)">
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.99781162;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4160"
+       width="149.00221"
+       height="99.00219"
+       x="37.820358"
+       y="602.7182" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:0.88601547;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4162"
+       width="109.114"
+       height="114.114"
+       x="209.19299"
+       y="728.80524" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:2.10070705;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4164"
+       width="321.86325"
+       height="158.40062"
+       x="226.6216"
+       y="450.07208" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.8552227;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4166"
+       width="317.32498"
+       height="156.45457"
+       x="613.05902"
+       y="451.67014" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.13310003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4168"
+       width="108.86691"
+       height="113.86691"
+       x="454.45947"
+       y="728.07159" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.61797863;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4363"
+       width="57.382019"
+       height="27.382021"
+       x="237.63045"
+       y="580.81409"
+       ry="0" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.73377478;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4365"
+       width="57.266228"
+       height="27.266226"
+       x="358.59903"
+       y="581.72913" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.80504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4367"
+       width="57.194962"
+       height="27.19496"
+       x="478.1347"
+       y="580.74689" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597942;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369"
+       width="57.184021"
+       height="27.184021"
+       x="623.30084"
+       y="581.03809" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="74.119781"
+       height="29.11978"
+       x="225.76154"
+       y="761.51654" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.89280504;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393"
+       width="74.107193"
+       height="29.107199"
+       x="470.33929"
+       y="759.80865" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.11811137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7449"
+       width="108.8819"
+       height="113.8819"
+       x="331.64832"
+       y="729.20703" />
+    <rect
+       style="opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.02366579;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451"
+       width="108.97635"
+       height="113.97635"
+       x="602.2439"
+       y="729.15967" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.94681084;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7453"
+       width="74.0532"
+       height="29.053192"
+       x="351.56265"
+       y="761.83557" />
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.91539472;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7455"
+       width="74.084618"
+       height="29.084608"
+       x="621.04694"
+       y="759.81989" />
+    <rect
+       style="display:inline;opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.0236659;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451-1"
+       width="108.97635"
+       height="113.97636"
+       x="722.04755"
+       y="728.07227" />
+    <rect
+       style="display:inline;opacity:1;fill:#f5fff7;fill-opacity:1;stroke:#000000;stroke-width:1.0236659;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7451-2"
+       width="108.97635"
+       height="113.97636"
+       x="843.24207"
+       y="727.14429" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.8928051;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393-6"
+       width="74.107201"
+       height="29.107201"
+       x="738.43994"
+       y="760.9986" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.8928051;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4393-0"
+       width="74.107201"
+       height="29.107201"
+       x="859.65826"
+       y="761.94562" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597948;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369-6"
+       width="57.184025"
+       height="27.184023"
+       x="746.98047"
+       y="580.26959" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.81597948;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4369-1"
+       width="57.184025"
+       height="27.184023"
+       x="860.85626"
+       y="579.92139" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(0,-414.56695)">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.72706509;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4216"
+       width="134.27293"
+       height="39.272934"
+       x="44.25639"
+       y="647.15436"
+       ry="19.636467" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.95418876;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="149.04581"
+       height="39.045811"
+       x="37.798523"
+       y="760.41071"
+       ry="19.522905" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.81271017;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4229"
+       width="89.187302"
+       height="34.187294"
+       x="463.15643"
+       y="797.33997"
+       ry="17.093647"
+       rx="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.89193332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4231"
+       width="89.108078"
+       height="34.108074"
+       x="219.19594"
+       y="799.66528"
+       ry="17.054037" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.2612797;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4233"
+       width="156.34775"
+       height="38.682236"
+       x="694.05316"
+       y="501.89612"
+       ry="19.341118" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.16768765;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4235"
+       width="103.83231"
+       height="38.832314"
+       x="333.95874"
+       y="503.12457"
+       ry="19.416157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker12362);fill-opacity:1"
+       d="M 386.56922,728.26001 V 688.26"
+       id="path4433"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker12154);fill-opacity:1"
+       d="M 387.39626,648.95207 V 611.80921"
+       id="path4435"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 263.83464,609.43362 v 37.14286"
+       id="path4437"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137)"
+       d="m 263.35309,687.95324 v 36.96954"
+       id="path4439"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#007800;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5813)"
+       d="m 506.35712,729.43362 0.59173,-40.59174"
+       id="path4445"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#007800;stroke-width:1.04023254px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5725)"
+       d="M 506.92854,648.57648 V 611.47646"
+       id="path4447"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.99597287;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7457"
+       width="89.004044"
+       height="34.004032"
+       x="343.58722"
+       y="800.57446"
+       ry="17.002016" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549631;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459"
+       width="88.914513"
+       height="33.914509"
+       x="611.70343"
+       y="797.19067"
+       ry="16.957254" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301-3"
+       cx="320.48514"
+       cy="884.44043"
+       rx="35.842739"
+       ry="18.699877" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459-6"
+       width="88.914513"
+       height="33.914509"
+       x="732.73444"
+       y="798.75916"
+       ry="16.957254" />
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:1.08549643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect7459-2"
+       width="88.914513"
+       height="33.914509"
+       x="853.92889"
+       y="797.83118"
+       ry="16.957254" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4989-7)"
+       d="M 653.34583,646.09941 V 608.95655"
+       id="path4435-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+       d="m 775.97532,608.41012 v 37.14286"
+       id="path4437-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00966918;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137-2)"
+       d="m 777.16057,687.31459 v 37.68793"
+       id="path4439-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#007800;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137-2-1)"
+       d="m 892.63488,688.14147 v 36.96954"
+       id="path4439-3-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#007800;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5137-2-1-7)"
+       d="m 891.70689,609.52472 v 36.96954"
+       id="path4439-3-4-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00031256;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1955);fill-opacity:1"
+       d="M 387.32895,581.25441 V 544.11155"
+       id="path4435-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0000ec;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-9-1)"
+       d="m 776.49909,540.48047 v 37.14286"
+       id="path4437-3-5"
+       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(#marker5813-3)"
+       d="m 654.38041,728.73775 0.59173,-40.59174"
+       id="path4445-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(0,-414.56695)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="109.82143"
+       y="672.29077"
+       id="text4201"><tspan
+         sodipodi:role="line"
+         id="tspan4203"
+         x="109.82143"
+         y="672.29077"
+         style="font-size:17.50000191px;line-height:1.25">spp_primary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="262.67859"
+       y="821.43365"
+       id="text4205"><tspan
+         sodipodi:role="line"
+         id="tspan4207"
+         x="262.67859"
+         y="821.43365"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="506.39288"
+       y="819.71936"
+       id="text4209"><tspan
+         sodipodi:role="line"
+         id="tspan4211"
+         x="506.39288"
+         y="819.71936"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="110.67858"
+       y="784.86224"
+       id="text4225"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="110.67858"
+         y="784.86224"
+         style="font-size:17.50000191px;line-height:1.25">spp controller</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="386.60715"
+       y="527.18365"
+       id="text4265"><tspan
+         sodipodi:role="line"
+         id="tspan4267"
+         x="386.60715"
+         y="527.18365"
+         style="font-size:17.50000191px;line-height:1.25">pktgen</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="772.57147"
+       y="525.71936"
+       id="text4269"><tspan
+         sodipodi:role="line"
+         id="tspan4271"
+         x="772.57147"
+         y="525.71936"
+         style="font-size:17.50000191px;line-height:1.25">load_balancer</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="60.964294"
+       y="508.86218"
+       id="text4327"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="60.964294"
+         y="508.86218"
+         style="font-size:17.50000191px;line-height:1.25">host</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="686.12506"
+       y="477.48724"
+       id="text4331"><tspan
+         sodipodi:role="line"
+         id="tspan4333"
+         x="686.12506"
+         y="477.48724"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="296.08929"
+       y="479.80865"
+       id="text4335"><tspan
+         sodipodi:role="line"
+         id="tspan4337"
+         x="296.08929"
+         y="479.80865"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="92.964302"
+       y="628.57648"
+       id="text4339"><tspan
+         sodipodi:role="line"
+         id="tspan4341"
+         x="92.964302"
+         y="628.57648"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="256.67856"
+       y="749.71936"
+       id="text4343"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="256.67856"
+         y="749.71936"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="503.53577"
+       y="749.14789"
+       id="text4347"><tspan
+         sodipodi:role="line"
+         id="tspan4349"
+         x="503.53577"
+         y="749.14789"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="262.39288"
+       y="673.71936"
+       id="text4351"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="262.39288"
+         y="673.71936"
+         style="font-size:17.50000191px;line-height:1.25">vhost:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="387.91077"
+       y="674.57648"
+       id="text4355"><tspan
+         sodipodi:role="line"
+         id="tspan4357"
+         x="387.91077"
+         y="674.57648"
+         style="font-size:17.50000191px;line-height:1.25">vhost:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="458.20233"
+       y="929.30237"
+       id="text4359"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="458.20233"
+         y="929.30237"
+         style="font-size:17.50000191px;line-height:1.25">ring:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="266.39285"
+       y="600.86218"
+       id="text4371"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="266.39285"
+         y="600.86218"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="387.01785"
+       y="601.43359"
+       id="text4375"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="387.01785"
+         y="601.43359"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="506.80365"
+       y="600.13007"
+       id="text4379"><tspan
+         sodipodi:role="line"
+         id="tspan4381"
+         x="506.80365"
+         y="600.13007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="652.25006"
+       y="600.13007"
+       id="text4383"><tspan
+         sodipodi:role="line"
+         id="tspan4385"
+         x="652.25006"
+         y="600.13007"
+         style="font-size:17.50000191px;line-height:1.25">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="262.10718"
+       y="780.86224"
+       id="text4407"><tspan
+         sodipodi:role="line"
+         x="262.10718"
+         y="780.86224"
+         id="tspan4411"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="507.25006"
+       y="779.71936"
+       id="text4413"><tspan
+         sodipodi:role="line"
+         x="507.25006"
+         y="779.71936"
+         id="tspan4417"
+         style="font-size:17.5px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="506.67859"
+       y="673.43365"
+       id="text4419"><tspan
+         sodipodi:role="line"
+         id="tspan4421"
+         x="506.67859"
+         y="673.43365"
+         style="font-size:17.50000191px;line-height:1.25">vhost:3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="653.9115"
+       y="673.90253"
+       id="text4423"><tspan
+         sodipodi:role="line"
+         id="tspan4425"
+         x="653.9115"
+         y="673.90253"
+         style="font-size:17.50000191px;line-height:1.25">vhost:4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="381.01779"
+       y="752.29077"
+       id="text7461"><tspan
+         sodipodi:role="line"
+         id="tspan7463"
+         x="381.01779"
+         y="752.29077"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="387.58923"
+       y="821.71942"
+       id="text7469"><tspan
+         sodipodi:role="line"
+         id="tspan7471"
+         x="387.58923"
+         y="821.71942"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="389.01782"
+       y="781.43359"
+       id="text7465"><tspan
+         sodipodi:role="line"
+         id="tspan7467"
+         x="389.01782"
+         y="781.43359"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="653.94635"
+       y="750.86218"
+       id="text7473"><tspan
+         sodipodi:role="line"
+         id="tspan7475"
+         x="653.94635"
+         y="750.86218"
+         style="font-size:17.50000191px;line-height:1.25">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="657.66071"
+       y="779.43365"
+       id="text7477"><tspan
+         sodipodi:role="line"
+         id="tspan7479"
+         x="657.66071"
+         y="779.43365"
+         style="font-size:17.50000191px;line-height:1.25">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="654.80353"
+       y="820.005"
+       id="text7481"><tspan
+         sodipodi:role="line"
+         id="tspan7483"
+         x="654.80353"
+         y="820.005"
+         style="font-size:17.50000191px;line-height:1.25">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="322.23514"
+       y="889.58319"
+       id="text4359-6"><tspan
+         sodipodi:role="line"
+         id="tspan4361-7"
+         x="322.23514"
+         y="889.58319"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">ring:0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="630.25519"
+       y="972.64374"
+       id="text4359-7"><tspan
+         sodipodi:role="line"
+         id="tspan4361-5"
+         x="630.25519"
+         y="972.64374"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">ring:2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="779.21661"
+       y="751.77167"
+       id="text7473-7"><tspan
+         sodipodi:role="line"
+         id="tspan7475-0"
+         x="779.21661"
+         y="751.77167"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="897.34161"
+       y="751.77167"
+       id="text7473-7-9"><tspan
+         sodipodi:role="line"
+         id="tspan7475-0-3"
+         x="897.34161"
+         y="751.77167"
+         style="font-size:17.50000572px;line-height:1.25;stroke-width:1.00000012px">container</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="772.9259"
+       y="783.97028"
+       id="text7477-6"><tspan
+         sodipodi:role="line"
+         id="tspan7479-1"
+         x="772.9259"
+         y="783.97028"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="896.98529"
+       y="781.12921"
+       id="text7477-8"><tspan
+         sodipodi:role="line"
+         id="tspan7479-7"
+         x="896.98529"
+         y="781.12921"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">shmem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="899.26312"
+       y="819.93036"
+       id="text7481-9"><tspan
+         sodipodi:role="line"
+         id="tspan7483-2"
+         x="899.26312"
+         y="819.93036"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="777.34528"
+       y="820.82025"
+       id="text7481-0"><tspan
+         sodipodi:role="line"
+         id="tspan7483-23"
+         x="777.34528"
+         y="820.82025"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">spp_nfv</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="776.32581"
+       y="601.1958"
+       id="text4383-5"><tspan
+         sodipodi:role="line"
+         id="tspan4385-0"
+         x="776.32581"
+         y="601.1958"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="891.58124"
+       y="600.24878"
+       id="text4383-3"><tspan
+         sodipodi:role="line"
+         id="tspan4385-6"
+         x="891.58124"
+         y="600.24878"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1.00000012px">virtio</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="776.36621"
+       y="673.09631"
+       id="text4423-1"><tspan
+         sodipodi:role="line"
+         id="tspan4425-0"
+         x="776.36621"
+         y="673.09631"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1px">vhost:5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="889.90839"
+       y="674.24945"
+       id="text4423-6"><tspan
+         sodipodi:role="line"
+         id="tspan4425-3"
+         x="889.90839"
+         y="674.24945"
+         style="font-size:17.50000381px;line-height:1.25;stroke-width:1px">vhost:6</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4785)"
+       d="m 335.83374,523.20691 c -45.41992,-0.1225 -70.03508,18.06864 -71.63474,56.46487"
+       id="path4273"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#007800;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart)"
+       d="m 439.66605,523.20691 c 41.12227,0.39422 67.12925,27.91164 66.04157,58.33987"
+       id="path4275"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="display:inline;fill:none;stroke:#000000;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:;marker-start:url(#marker11110)"
+       d="m 693.06058,522.69822 c -24.83241,0.0946 -38.11197,18.69568 -39.75974,58.33987"
+       id="path4273-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="display:inline;fill:none;stroke:#007800;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker7808)"
+       d="m 851.33723,521.58152 c 26.51704,0.15505 40.76797,21.5669 40.45305,58.33987"
+       id="path4275-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 15/15] docs: add how to develop guide for SPP container
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (12 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 14/15] docs: add usecase image of load balancer ogawa.yasufumi
@ 2018-06-18  6:21   ` ogawa.yasufumi
  2018-08-15 15:39   ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation Ferruh Yigit
  14 siblings, 0 replies; 36+ messages in thread
From: ogawa.yasufumi @ 2018-06-18  6:21 UTC (permalink / raw)
  To: ferruh.yigit, spp, nakamura.hiroyuki; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/howto_launcher.rst | 318 ++++++++++++++++++++++
 1 file changed, 318 insertions(+)
 create mode 100644 docs/guides/tools/sppc/howto_launcher.rst

diff --git a/docs/guides/tools/sppc/howto_launcher.rst b/docs/guides/tools/sppc/howto_launcher.rst
new file mode 100644
index 0000000..dcb6458
--- /dev/null
+++ b/docs/guides/tools/sppc/howto_launcher.rst
@@ -0,0 +1,318 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+.. _sppc_howto_define_appc:
+
+How to Define Your App Launcher
+===============================
+
+SPP container is a set of python script for launching DPDK application
+on a container with docker command. You can launch your own application
+by preparing a container image and install your application in
+the container.
+In this chapter, you will understand how to define application container
+for your application.
+
+
+.. _sppc_howto_build_img:
+
+Build Image
+-----------
+
+SPP container provides a build tool with version specific Dockerfiles.
+You should read the Dockerfiles to understand environmental variable
+or command path are defined.
+Build tool refer ``conf/env.py`` for the definitions before running
+docker build.
+
+Dockerfiles of pktgen or SPP can help your understanding for building
+app container in which your application is placed outside of DPDK's
+directory.
+On the other hand, if you build an app container of DPDK sample
+application, you do not need to prepare your Dockerfile because all of
+examples are compiled while building DPDK's image.
+
+
+.. _sppc_howto_create_appc:
+
+Create App Container Script
+---------------------------
+
+As explained in :ref:`sppc_appl_appl`, app container script shold be
+prepared for each of applications.
+Application of SPP container is roughly categorized as DPDK sample apps
+or not. The former case is like that you change an existing DPDK sample
+application and run as a app container.
+
+For DPDK sample apps, it is easy to build image and create app container
+script.
+On the other hand, it is a bit complex because you should you should
+define environmental variables, command path and compilation process by
+your own.
+
+This section describes how to define app container script,
+first for DPDK sample applications,
+and then second for other than them.
+
+.. _sppc_howto_dpdk_sample_appc:
+
+DPDK Sample App Container
+-------------------------
+
+Procedure of App container script is defined in main() and
+consists of three steps of
+(1)parsing options, (2)building docker command and
+(3)application command run inside the container.
+
+Here is a sample code of :ref:`sppc_appl_helloworld`.
+``parse_args()`` is defined in each
+of app container scripts to parse all of EAL, docker and application
+specific options.
+It returns a result of ``parse_args()`` method of
+``argparse.ArgumentParser`` class.
+App container script uses standard library module ``argparse``
+for parsing the arguments.
+
+.. code-block:: python
+
+    def main():
+        args = parse_args()
+
+        # Check for other mandatory opitons.
+        if args.dev_ids is None:
+            common.error_exit('--dev-ids')
+
+        # Setup for vhost devices with given device IDs.
+        dev_ids_list = app_helper.dev_ids_to_list(args.dev_ids)
+        sock_files = app_helper.sock_files(dev_ids_list)
+
+Each of options is accessible as ``args.dev_ids`` or
+``args.core_list``.
+Before step (2) and (3), you had better to check given option,
+expecially mandatory options.
+In this case, ``--dev-ids`` is the mandatory and you should terminate
+the application if it is not given.
+``common.error_exit()`` is a helper method to print an error message
+for given option and do ``exit()``.
+
+Setup of ``dev_ids_list`` and ``sock_files`` is required for launching
+container.
+``lib/app_helper.py`` defines helper functions commonly used
+for app containers.
+
+Then, setup docker command and its options as step (2).
+Docker options are setup by using helper method
+``setup_docker_opts()`` which generates commonly used options for app
+containers.
+This methods returns a list of a part of options to give it to
+``subprocess.call()``.
+
+.. code-block:: python
+
+    # Setup docker command.
+    docker_cmd = ['sudo', 'docker', 'run', '\\']
+    docker_opts = app_helper.setup_docker_opts(
+        args, target_name, sock_files)
+
+You should notice a option ``target_name``.
+It is used as a label to choose which of container image you use.
+The name of container image is defined as a combination of basename,
+distribution name and version.
+Basename is defined as a member of ``CONTAINER_IMG_NAME`` in
+``conf/env.py``.
+
+.. code-block:: python
+
+    # defined in conf/env.py
+    CONTAINER_IMG_NAME = {
+        'dpdk': 'sppc/dpdk',
+        'pktgen': 'sppc/pktgen',
+        'spp': 'sppc/spp'}
+
+This usecase is for DPDK sample app, so you should define target as
+``dpdk``.
+You do not need to change for using DPDK sample apps in general.
+But it can be changed by using other target name.
+For example, if you give target ``pktgen`` and
+use default dist name and verion of ``ubuntu`` and ``latest``,
+The name of image is ``sppc/pktgen-ubuntu:latest``.
+
+For using images other than defined above, you can override it with
+``--container-image`` option.
+It enables to use any of container images and applications.
+
+You also notice that ``docker_cmd`` has ``\\`` at the end of the list.
+It is only used to format the printed command on the terminal.
+If you do no care about formatting, you do not need to add it.
+
+Next step is (3), to setup the application command.
+You should change ``cmd_path`` and ``file_prefix`` to specify
+the application.
+For ``cmd_path``, ``helloworld`` should be changed to other name of
+application, for example,
+
+.. code-block:: python
+
+    # Setup helloworld run on container.
+    cmd_path = '%s/examples/helloworld/%s/helloworld' % (
+        env.RTE_SDK, env.RTE_TARGET)
+
+    hello_cmd = [cmd_path, '\\']
+
+    file_prefix = 'spp-hello-container%d' % dev_ids_list[0]
+    eal_opts = app_helper.setup_eal_opts(args, file_prefix)
+
+    # No application specific options for helloworld
+    hello_opts = []
+
+``file_prefix`` for EAL option should be unique on the system
+because it is used as the name of hugepage file.
+In SPP container, it is a combination of fixed text and vhost device ID
+because this ID is unique in SPP container and cannot be overlapped,
+at least among app containers in SPP container.
+EAL options are also generated by helper method.
+
+Finally, combine all of commands and its options and launch
+from ``subprocess.call()``.
+
+.. code-block:: python
+
+    cmds = docker_cmd + docker_opts + hello_cmd + eal_opts + hello_opts
+    if cmds[-1] == '\\':
+        cmds.pop()
+    common.print_pretty_commands(cmds)
+
+    if args.dry_run is True:
+        exit()
+
+    # Remove delimiters for print_pretty_commands().
+    while '\\' in cmds:
+        cmds.remove('\\')
+    subprocess.call(cmds)
+
+All of commands and options are combined in to a list ``cmds``
+to give it to ``subprocess.call()``.
+You can ignore procedures for ``\\`` and
+``common.print_pretty_commands()``
+if you do not care about printing commands in the terminal.
+However, you should not to shortcut for ``args.dry_run`` because
+it is very important for users to check the command syntax
+before running it.
+
+
+.. _sppc_howto_dpdk_appc_nots:
+
+App Container not for DPDK Sample
+---------------------------------
+
+There are several application using DPDK but not included in
+`sample applications
+<https://dpdk.org/doc/guides/sample_app_ug/index.html>`_.
+``pktgen.py`` is an example of this type of app container.
+As described in :ref:`sppc_howto_dpdk_sample_appc`,
+app container consists of three steps and it is the same for
+this case.
+
+First of all, you define parsing option for EAL, docker and
+your application.
+
+.. code-block:: python
+
+    def parse_args():
+        parser = argparse.ArgumentParser(
+            description="Launcher for pktgen-dpdk application container")
+
+        parser = app_helper.add_eal_args(parser)
+        parser = app_helper.add_appc_args(parser)
+
+        parser.add_argument(
+            '-s', '--pcap-file',
+            type=str,
+            help="PCAP packet flow file of port, defined as 'N:filename'")
+        parser.add_argument(
+            '-f', '--script-file',
+            type=str,
+            help="Pktgen script (.pkt) to or a Lua script (.lua)")
+        ...
+
+        parser = app_helper.add_sppc_args(parser)
+        return parser.parse_args()
+
+It is almost the same as :ref:`sppc_howto_dpdk_sample_appc`,
+but it has options for ``pktgen`` itself.
+For your application, you can simply add options to ``parser`` object.
+
+.. code-block:: python
+
+    def main():
+        args = parse_args()
+
+        # Setup for vhost devices with given device IDs.
+        dev_ids_list = app_helper.dev_ids_to_list(args.dev_ids)
+        sock_files = app_helper.sock_files(dev_ids_list)
+
+        # Setup docker command.
+        docker_cmd = ['sudo', 'docker', 'run', '\\']
+        docker_opts = app_helper.setup_docker_opts(
+            args, target_name, sock_files,
+            '%s/../pktgen-dpdk' % env.RTE_SDK)
+
+        cmd_path = '%s/../pktgen-dpdk/app/%s/pktgen' % (
+            env.RTE_SDK, env.RTE_TARGET)
+
+Setup for docker command is the same as the example.
+The ``terget_name`` might be different from the image you will use,
+but you do not need to care about which of container image is used
+because it is overriden with given image with ``--container-image``
+option.
+However, you should care about the path of application ``cmd_path``
+which is run in the container.
+
+Then, you should decide ``file_prefix`` to your application container
+be unique on the system.
+The ``file_prefix`` of SPP container is named as
+``spp-[APP_NAME]-container[VHOST_ID]`` convensionally to it be unique.
+
+.. code-block:: python
+
+    # Setup pktgen command
+    pktgen_cmd = [cmd_path, '\\']
+
+    file_prefix = 'spp-pktgen-container%d' % dev_ids_list[0]
+    eal_opts = app_helper.setup_eal_opts(args, file_prefix)
+
+You should check the arguments for the application.
+
+.. code-block:: python
+
+    ...
+    if args.pcap_file is not None:
+        pktgen_opts += ['-s', args.pcap_file, '\\']
+
+    if args.script_file is not None:
+        pktgen_opts += ['-f', args.script_file, '\\']
+
+    if args.log_file is not None:
+        pktgen_opts += ['-l', args.log_file, '\\']
+    ...
+
+Finally, combine all of commands and its options and launch
+from ``subprocess.call()``.
+
+.. code-block:: python
+
+    cmds = docker_cmd + docker_opts + pktgen_cmd + eal_opts + pktgen_opts
+    if cmds[-1] == '\\':
+        cmds.pop()
+    common.print_pretty_commands(cmds)
+
+    if args.dry_run is True:
+        exit()
+
+    # Remove delimiters for print_pretty_commands().
+    while '\\' in cmds:
+        cmds.remove('\\')
+    subprocess.call(cmds)
+
+As you can see, it is almost the same as DPDK sample app container
+without application path and options of application specific.
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [spp] [PATCH v2 09/15] docs: add use cases of SPP container
  2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
                   ` (15 preceding siblings ...)
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
@ 2018-07-24  8:00 ` ogawa.yasufumi
  2018-07-24  8:20   ` Yasufumi Ogawa
  16 siblings, 1 reply; 36+ messages in thread
From: ogawa.yasufumi @ 2018-07-24  8:00 UTC (permalink / raw)
  To: spp, ferruh.yigit; +Cc: Yasufumi Ogawa

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 docs/guides/tools/sppc/usecases.rst | 673 ++++++++++++++++++++++++++++
 1 file changed, 673 insertions(+)
 create mode 100644 docs/guides/tools/sppc/usecases.rst

diff --git a/docs/guides/tools/sppc/usecases.rst b/docs/guides/tools/sppc/usecases.rst
new file mode 100644
index 0000000..b9567c0
--- /dev/null
+++ b/docs/guides/tools/sppc/usecases.rst
@@ -0,0 +1,673 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
+
+.. _spp_container_usecases:
+
+Use Cases
+=========
+
+SPP Container provides an easy way to configure network path
+for DPDK application running on containers.
+It is useful for testing your NFV applications with ``testpmd`` or
+``pktgen`` quickly, or providing a reproducible environment for evaluation
+with a configuration files.
+
+In addition, using container requires less CPU and memory resources
+comparing with using virtual machines.
+It means that users can try to test variety kinds of use cases without
+using expensive servers.
+
+This chapter describes examples of simple use cases of SPP container.
+
+.. note::
+
+    As described in
+    :ref:`sppc_gs_build_docker_imgs`
+    section, you had better to use Ubuntu 16.04 with
+    ``--dist-ver`` option because SPP container is not stable for running
+    on the latest version.
+
+    Please notice that examples in this section does not use ``dist-ver``
+    options explicitly for simplicity.
+
+
+.. _sppc_usecases_test_vhost_single:
+
+Perfromance Test of Vhost in Single Node
+----------------------------------------
+
+First use case is a simple performance test of vhost PMDs as shown in
+:numref:`figure_sppc_usecase_vhost`.
+Two of containers of ``spp_nfv`` are connected with a ring PMD and
+all of app container processes run on a single node.
+
+.. _figure_sppc_usecase_vhost:
+
+.. figure:: ../../images/tools/sppc/sppc_usecase_vhost.*
+    :height: 340em
+    :width: 340em
+
+    Test of vhost PMD in a single node
+
+
+You use two terminals in this example, one is for SPP controller
+and other one is for managing app containers.
+First of all, launch SPP controller in terminal 1.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+Move to terminal 2, launch app containers of ``spp_primary``
+and ``spp_nfv`` step by step in background mode.
+You notice that TAP device is attached with ``-dt 1`` which is not used
+actually.
+It is because that SPP primary requires at least one port even if
+it is no need.
+You can also assign a physical port or vhost instead of this TAP device.
+
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
+    $ python app/spp-nfv.py -i 1 -l 1-2
+    $ python app/spp-nfv.py -i 2 -l 3-4
+
+Then, add two vhost PMDs for pktgen app container from SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add vhost 1
+    spp > sec 2;add vhost 2
+
+Now, it is ready for launching pktgen app container.
+In this use case, use five lcores for pktgen.
+One lcore is used for master, and remaining lcores are used for
+rx and tx evenly.
+Device ID option ``-d 1,2`` is for refferring vhost 1 and 2.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ python app/pktgen.py -fg -l 5-9 -d 1,2
+
+Finally, configure network path from SPP controller,
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;patch ring:0 vhost:1
+    spp > sec 2;patch vhost:2 ring:0
+    spp > sec 1;forward
+    spp > sec 2;forward
+
+and start forwarding from pktgen.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ Pktgen:/> start 1
+
+You find that packet count of rx of port 0 and tx of port 1
+is increased rapidlly.
+
+
+.. _sppc_usecases_test_ring:
+
+Performance Test of Ring
+------------------------
+
+Ring PMD is a very fast path to communicate between DPDK processes.
+It is a kind of zero-copy data passing via shared memory and better
+performance than vhost PMD.
+Currently, only ``spp_nfv`` and ``spp_vm`` provide ring PMD in SPP
+container.
+It is also possible other DPDK applications to have ring PMD interface
+for SPP technically,
+but not implemented yet.
+
+This use case is for testing performance of ring PMDs.
+As described in :numref:`figure_sppc_usecase_ring`,
+each of app containers on which ``spp_nfv`` is running are connected
+with ring PMDs in serial.
+
+.. _figure_sppc_usecase_ring:
+
+.. figure:: ../../images/tools/sppc/sppc_usecase_ring.*
+   :height: 480em
+   :width: 680em
+
+   Test of ring PMD
+
+You use two terminals on host 1, one is for SPP controller and another one
+for ``spp_nfv`` app containers.
+Pktgen on host 2 is started forwarding after setup on host 1 is finished.
+
+First, Launch SPP controller in terminal 1 as
+:ref:`sppc_usecases_test_ring`.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+In terminal 2, launch ``spp_primary`` and ``spp_nfv`` containers
+in background mode.
+In this case, you attach physical ports to ``spp_primary`` with
+portmask option.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x03
+    $ python app/spp-nfv.py -i 1 -l 1-2
+    $ python app/spp-nfv.py -i 2 -l 3-4
+    $ python app/spp-nfv.py -i 3 -l 5-6
+    $ python app/spp-nfv.py -i 4 -l 7-8
+
+
+.. note::
+
+    It might happen an error to input if the number of SPP process is
+    increased. It also might get bothered to launch several SPP
+    processes if the number is large.
+
+    You can use ``tools/spp-launcher.py`` to launch SPP processes
+    at once. Here is an example for launching ``spp_primary`` and
+    four ``spp_nfv`` processes. ``-n`` is for specifying the nubmer of
+    ``spp_nfv``.
+
+    .. code-block:: console
+
+        $ python tools/spp-launcher.py -n 4
+
+    You will find that lcore assignment is the same as below.
+    Lcore is assigned from 0 for primary, and next two lcores for the
+    first ``spp_nfv``.
+
+    .. code-block:: console
+
+        $ python app/spp-primary.py -l 0 -p 0x03
+        $ python app/spp-nfv.py -i 1 -l 1,2
+        $ python app/spp-nfv.py -i 2 -l 3,4
+        $ python app/spp-nfv.py -i 3 -l 5,6
+        $ python app/spp-nfv.py -i 4 -l 7,8
+
+    You can also assign lcores with ``--shared`` to master lcore
+    be shared among ``spp_nfv`` processes.
+    It is useful to reduce the usage of lcores as explained in
+    :ref:`sppc_usecases_pktgen_l2fwd_less_lcores`.
+
+    .. code-block:: console
+
+        $ python tools/spp-launcher.py -n 4 --shared
+
+    The result of assignment of this command is the same as below.
+    Master lcore 1 is shared among secondary processes.
+
+    .. code-block:: console
+
+        $ python app/spp-primary.py -l 0 -p 0x03
+        $ python app/spp-nfv.py -i 1 -l 1,2
+        $ python app/spp-nfv.py -i 2 -l 1,3
+        $ python app/spp-nfv.py -i 3 -l 1,4
+        $ python app/spp-nfv.py -i 4 -l 1,5
+
+Add ring PMDs considering which of rings is shared between which of
+containers.
+You can use recipe scripts from ``playback`` command instead of
+typing commands step by step.
+For this usecase example, it is included in
+``recipes/sppc/usecases/test_ring``.
+
+.. code-block:: console
+
+    # Terminal 2
+    spp > sec 1;add ring:0
+    spp > sec 2;add ring:1
+    spp > sec 2;add ring:2
+    spp > sec 3;add ring:2
+    spp > sec 3;add ring:3
+    spp > sec 4;add ring:3
+
+Then, patch all of ports to be configured containers are connected
+in serial.
+
+.. code-block:: console
+
+    # Terminal 2
+    spp > sec 1;patch phy:0 ring:0
+    spp > sec 2;patch ring:0 ring:1
+    spp > sec 3;patch ring:1 ring:2
+    spp > sec 3;patch ring:2 ring:3
+    spp > sec 4;patch ring:3 phy:1
+    spp > sec 1;forward
+    spp > sec 2;forward
+    spp > sec 3;forward
+    spp > sec 4;forward
+
+After setup on host 1 is finished, start forwarding from pktgen on host 2.
+You can see the throughput of rx and tx ports on pktgen's terminal.
+You also find that the throughput is almost not decreased and keeping wire
+rate speed even after it through several chained containers.
+
+
+.. _sppc_usecases_pktgen_l2fwd:
+
+Pktgen and L2fwd
+----------------
+
+To consider more practical service function chaining like use case,
+connect not only SPP processes, but also DPDK application to ``pktgen``.
+In this example, use ``l2fwd`` app container as a DPDK application
+for simplicity.
+You can also use other DPDK applications as similar to this example
+as described in next sections.
+
+.. _figure_sppc_usecase_l2fwdpktgen:
+
+.. figure:: ../../images/tools/sppc/sppc_usecase_l2fwdpktgen.*
+    :height: 640em
+    :width: 640em
+
+    Chainning pktgen and l2fwd
+
+This configuration requires more CPUs than previous example.
+It is up to 14 lcores, but you can reduce lcores to do the trick.
+It is a trade-off between usage and performance.
+In this case, we focus on the usage of maximum lcores to get high
+performance.
+
+Here is a list of lcore assignment for each of app containers.
+
+* One lcore for ``spp_primary`` container.
+* Eight lcores for four ``spp_nfv`` containers.
+* Three lcores for ``pktgen`` container.
+* Two lcores for ``l2fwd`` container.
+
+First of all, launch SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+Launch ``spp_primary`` and ``spp_nfv`` containers in background.
+It does not use physical NICs as similar to
+:ref:`sppc_usecases_test_vhost_single`.
+Use four of ``spp_nfv`` containers for using four vhost PMDs.
+For this usecase example, recipe scripts are included in
+``recipes/sppc/usecases/pg_l2fwd``.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
+    $ python app/spp-nfv.py -i 1 -l 1-2
+    $ python app/spp-nfv.py -i 2 -l 3-4
+    $ python app/spp-nfv.py -i 3 -l 5-6
+    $ python app/spp-nfv.py -i 4 -l 7-8
+
+Assign ring and vhost PMDs. Each of vhost IDs to be the same as
+its secondary ID.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add vhost 1
+    spp > sec 2;add vhost 2
+    spp > sec 3;add vhost 3
+    spp > sec 4;add vhost 4
+    spp > sec 1;add ring 0
+    spp > sec 4;add ring 0
+    spp > sec 2;add ring 1
+    spp > sec 3;add ring 1
+
+
+After vhost PMDs are created, you can launch containers
+of ``pktgen`` and ``l2fwd``.
+
+In this case, ``pktgen`` container owns vhost 1 and 2,
+
+.. code-block:: console
+
+    # Terminal 2
+    $ python app/pktgen.py -l 9-11 -d 1,2
+
+and ``l2fwd`` container owns vhost 3 and 4.
+
+.. code-block:: console
+
+    # Terminal 3
+    $ cd /path/to/spp/tools/sppc
+    $ python app/l2fwd.py -l 12-13 -d 3,4
+
+
+Then, configure network path by pactching each of ports
+and start forwarding from SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;patch ring:0 vhost:1
+    spp > sec 2;patch vhost:2 ring:1
+    spp > sec 3;patch ring:1 vhost:3
+    spp > sec 4;patch vhost:4 ring:0
+    spp > sec 1;forward
+    spp > sec 2;forward
+    spp > sec 3;forward
+    spp > sec 4;forward
+
+Finally, start forwarding from ``pktgen`` container.
+You can see that packet count is increased on both of
+``pktgen`` and ``l2fwd``.
+
+
+.. _sppc_usecases_pktgen_l2fwd_less_lcores:
+
+Pktgen and L2fwd using less Lcores
+----------------------------------
+
+This section describes the effort of reducing the usage of lcore for
+:ref:`sppc_usecases_pktgen_l2fwd`.
+
+Here is a list of lcore assignment for each of app containers.
+It is totally 7 lcores while the maximum number is 14.
+
+* One lcore for spp_primary container.
+* Three lcores for four spp_nfv containers.
+* Two lcores for pktgen container.
+* One lcores for l2fwd container.
+
+.. _figure_sppc_usecase_l2fwdpktgen_less:
+
+.. figure:: ../../images/tools/sppc/sppc_usecase_l2fwdpktgen_less.*
+    :height: 640em
+    :width: 640em
+
+    Pktgen and l2fwd using less lcores
+
+First of all, launch SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+Launch ``spp_primary`` and ``spp_nfv`` containers in background.
+It does not use physical NICs as similar to
+:ref:`sppc_usecases_test_vhost_single`.
+Use two of ``spp_nfv`` containers for using four vhost PMDs.
+For this usecase example, recipe scripts are included in
+``recipes/sppc/usecases/pg_l2fwd_less``.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
+    $ python app/spp-nfv.py -i 1 -l 1,2
+    $ python app/spp-nfv.py -i 2 -l 1,3
+
+The number of process and CPUs are fewer than previous example.
+You can reduce the number of ``spp_nfv`` processes by assigning
+several vhost PMDs to one process, although performance is decreased
+possibly.
+For the number of lcores, you can reduce it by sharing
+the master lcore 1 which has no heavy tasks.
+
+Assign each of two vhost PMDs to the processes.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add vhost 1
+    spp > sec 1;add vhost 2
+    spp > sec 2;add vhost 3
+    spp > sec 2;add vhost 4
+    spp > sec 1;add ring 0
+    spp > sec 1;add ring 1
+    spp > sec 2;add ring 0
+    spp > sec 2;add ring 1
+
+After vhost PMDs are created, you can launch containers
+of ``pktgen`` and ``l2fwd``.
+These processes also share the master lcore 1 with others.
+
+In this case, ``pktgen`` container uses vhost 1 and 2,
+
+.. code-block:: console
+
+    # Terminal 2
+    $ python app/pktgen.py -l 1,4,5 -d 1,2
+
+and ``l2fwd`` container uses vhost 3 and 4.
+
+.. code-block:: console
+
+    # Terminal 3
+    $ cd /path/to/spp/tools/sppc
+    $ python app/l2fwd.py -l 1,6 -d 3,4
+
+
+Then, configure network path by pactching each of ports
+and start forwarding from SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;patch ring:0 vhost:1
+    spp > sec 1;patch vhost:2 ring:1
+    spp > sec 3;patch ring:1 vhost:3
+    spp > sec 4;patch vhost:4 ring:0
+    spp > sec 1;forward
+    spp > sec 2;forward
+    spp > sec 3;forward
+    spp > sec 4;forward
+
+Finally, start forwarding from ``pktgen`` container.
+You can see that packet count is increased on both of
+``pktgen`` and ``l2fwd``.
+
+
+.. _sppc_usecases_lb_pktgen:
+
+Load-Balancer and Pktgen
+------------------------
+
+Previous examples are all the single-path configurations and do not
+have branches.
+To explain how to setup a multi-path configuration, we use
+`Load-Balancer
+<https://dpdk.org/doc/guides/sample_app_ug/load_balancer.html>`_
+application in this example.
+It is an application distributes packet I/O task with several worker
+lcores to share IP addressing.
+
+.. _figure_sppc_usecase_lb_pktgen:
+
+.. figure:: ../../images/tools/sppc/sppc_usecase_lb_pktgen.*
+    :height: 580em
+    :width: 720em
+
+    Multi-path configuration with load_balancer and pktgen
+
+Packets from tx of ``pktgen``, through ring:0, are received by rx
+of ``load_balancer``.
+Then, ``load_balancer`` classify the packets to decide the
+destionations.
+You can count received packets on rx ports of ``pktgen``.
+
+There are six ``spp_nfv`` and two DPDK applications in this example.
+To reduce the number of lcores, configure lcore assignment to share
+the master lcore.
+Do not assign several vhosts to a process to avoid the performance
+degradation.
+It is 15 lcores required to the configuration.
+
+Here is a list of lcore assignment for each of app containers.
+
+* One lcore for ``spp_primary`` container.
+* Seven lcores for four ``spp_nfv`` containers.
+* Three lcores for ``pktgen`` container.
+* Four lcores for ``load_balancer`` container.
+
+First of all, launch SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    $ cd /path/to/spp
+    $ python src/spp.py
+
+Launch ``spp_primary`` and ``spp_nfv`` containers in background.
+It does not use physical NICs as similar to
+:ref:`sppc_usecases_test_vhost_single`.
+Use six ``spp_nfv`` containers for using six vhost PMDs.
+For this usecase example, recipe scripts are included in
+``recipes/sppc/usecases/lb_pg``.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
+    $ python app/spp-nfv.py -i 1 -l 1,2
+    $ python app/spp-nfv.py -i 2 -l 1,3
+    $ python app/spp-nfv.py -i 3 -l 1,4
+    $ python app/spp-nfv.py -i 4 -l 1,5
+    $ python app/spp-nfv.py -i 5 -l 1,6
+    $ python app/spp-nfv.py -i 6 -l 1,7
+
+Assign ring and vhost PMDs. Each of vhost IDs to be the same as
+its secondary ID.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;add vhost 1
+    spp > sec 2;add vhost 2
+    spp > sec 3;add vhost 3
+    spp > sec 4;add vhost 4
+    spp > sec 5;add vhost 5
+    spp > sec 6;add vhost 6
+    spp > sec 1;add ring 0
+    spp > sec 2;add ring 1
+    spp > sec 3;add ring 2
+    spp > sec 4;add ring 0
+    spp > sec 5;add ring 1
+    spp > sec 6;add ring 2
+
+And patch all of ports.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;patch vhost:1 ring:0
+    spp > sec 2;patch ring:1 vhost:2
+    spp > sec 3;patch ring:2 vhost:3
+    spp > sec 4;patch ring:0 vhost:4
+    spp > sec 5;patch vhost:5 ring:1
+    spp > sec 6;patch vhost:6 ring:2
+
+
+You had better to check that network path is configured properly.
+``topo`` command is useful for checking it with a graphical image.
+Define two groups of vhost PMDs as ``c1`` and ``c2`` with
+``topo_subgraph`` command before.
+
+.. code-block:: console
+
+    # Terminal 1
+    # define c1 and c2 to help your understanding
+    spp > topo_subgraph add c1 vhost:1,vhost:2,vhost:3
+    spp > topo_subgraph add c2 vhost:4,vhost:5,vhost:6
+
+    # show network diagram
+    spp > topo term
+
+
+Finally, launch ``pktgen`` and ``load_balancer`` app containers
+to start traffic monitoring.
+
+For ``pktgen`` container, assign lcores 8-10 and vhost 1-3.
+``-T`` options is required to enable color terminal output.
+
+.. code-block:: console
+
+    # Terminal 2
+    $ cd /path/to/spp/tools/sppc
+    $ python app/pktgen.py -l 8-10 -d 1-3 -T
+
+
+For ``load_balancer`` container, assign lcores 12-15 and vhost 4-6.
+Four lcores are assigned to rx, tx and two workers.
+You should add ``-nq`` option because this example requires three
+or more queues. In this case, assign 4 queues.
+
+.. code-block:: console
+
+    # Terminal 3
+    $ cd /path/to/spp/tools/sppc
+    $ python app/load_balancer.py -l 11-14 -d 4-6 -fg -nq 4
+      -rx "(0,0,11),(0,1,11),(0,2,11)" \
+      -tx "(0,12),(1,12),(2,12)" \
+      -w 13,14 \
+      --lpm "1.0.0.0/24=>0; 1.0.1.0/24=>1; 1.0.2.0/24=>2;"
+
+
+Then, configure network path by pactching each of ports
+and start forwarding from SPP controller.
+
+.. code-block:: console
+
+    # Terminal 1
+    spp > sec 1;forward
+    spp > sec 2;forward
+    spp > sec 3;forward
+    spp > sec 4;forward
+    spp > sec 5;forward
+    spp > sec 6;forward
+
+You start forwarding from ``pktgen`` container.
+The destination of ``load_balancer`` is decided by considering
+LPM rules. Try to classify incoming packets to port 1 on the
+``load_balancer`` application.
+
+On ``pktgen``, change the destination IP address of port 0
+to ``1.0.1.100``, and start.
+
+.. code-block:: console
+
+    # Terminal 3
+    Pktgen:/> set 0 dst ip 1.0.1.100
+    Pktgen:/> start 0
+
+As forwarding on port 0 is started, you will find the packet count of
+port 1 is increase rapidly.
+You can change the destination IP address and send packets to port 2
+by stopping to forward,
+changing the destination IP address to ``1.0.2.100`` and restart
+forwarding.
+
+.. code-block:: console
+
+    # Terminal 3
+    Pktgen:/> stop 0
+    Pktgen:/> set 0 dst ip 1.0.2.100
+    Pktgen:/> start 0
+
+You might not be able to stop ``load_balancer`` application with *Ctrl-C*.
+In this case, terminate it with ``docker kill`` directly as explained in
+:ref:`sppc_appl_load_balancer`.
+You can find the name of container from ``docker ps``.
-- 
2.17.1

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [spp] [PATCH v2 09/15] docs: add use cases of SPP container
  2018-07-24  8:00 ` [spp] [PATCH v2 09/15] docs: add use cases of SPP container ogawa.yasufumi
@ 2018-07-24  8:20   ` Yasufumi Ogawa
  0 siblings, 0 replies; 36+ messages in thread
From: Yasufumi Ogawa @ 2018-07-24  8:20 UTC (permalink / raw)
  To: spp, ferruh.yigit

Hi all,

I found that 9th patch of the series was lost for any of trouble. I sent it again with the same message ID. Sorry!

Thanks,
Yasufumi

On 2018/07/24 17:00, ogawa.yasufumi@lab.ntt.co.jp wrote:
> From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
> 
> Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
> ---
>   docs/guides/tools/sppc/usecases.rst | 673 ++++++++++++++++++++++++++++
>   1 file changed, 673 insertions(+)
>   create mode 100644 docs/guides/tools/sppc/usecases.rst
> 
> diff --git a/docs/guides/tools/sppc/usecases.rst b/docs/guides/tools/sppc/usecases.rst
> new file mode 100644
> index 0000000..b9567c0
> --- /dev/null
> +++ b/docs/guides/tools/sppc/usecases.rst
> @@ -0,0 +1,673 @@
> +..  SPDX-License-Identifier: BSD-3-Clause
> +    Copyright(c) 2017-2018 Nippon Telegraph and Telephone Corporation
> +
> +.. _spp_container_usecases:
> +
> +Use Cases
> +=========
> +
> +SPP Container provides an easy way to configure network path
> +for DPDK application running on containers.
> +It is useful for testing your NFV applications with ``testpmd`` or
> +``pktgen`` quickly, or providing a reproducible environment for evaluation
> +with a configuration files.
> +
> +In addition, using container requires less CPU and memory resources
> +comparing with using virtual machines.
> +It means that users can try to test variety kinds of use cases without
> +using expensive servers.
> +
> +This chapter describes examples of simple use cases of SPP container.
> +
> +.. note::
> +
> +    As described in
> +    :ref:`sppc_gs_build_docker_imgs`
> +    section, you had better to use Ubuntu 16.04 with
> +    ``--dist-ver`` option because SPP container is not stable for running
> +    on the latest version.
> +
> +    Please notice that examples in this section does not use ``dist-ver``
> +    options explicitly for simplicity.
> +
> +
> +.. _sppc_usecases_test_vhost_single:
> +
> +Perfromance Test of Vhost in Single Node
> +----------------------------------------
> +
> +First use case is a simple performance test of vhost PMDs as shown in
> +:numref:`figure_sppc_usecase_vhost`.
> +Two of containers of ``spp_nfv`` are connected with a ring PMD and
> +all of app container processes run on a single node.
> +
> +.. _figure_sppc_usecase_vhost:
> +
> +.. figure:: ../../images/tools/sppc/sppc_usecase_vhost.*
> +    :height: 340em
> +    :width: 340em
> +
> +    Test of vhost PMD in a single node
> +
> +
> +You use two terminals in this example, one is for SPP controller
> +and other one is for managing app containers.
> +First of all, launch SPP controller in terminal 1.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    $ cd /path/to/spp
> +    $ python src/spp.py
> +
> +Move to terminal 2, launch app containers of ``spp_primary``
> +and ``spp_nfv`` step by step in background mode.
> +You notice that TAP device is attached with ``-dt 1`` which is not used
> +actually.
> +It is because that SPP primary requires at least one port even if
> +it is no need.
> +You can also assign a physical port or vhost instead of this TAP device.
> +
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    $ cd /path/to/spp/tools/sppc
> +    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
> +    $ python app/spp-nfv.py -i 1 -l 1-2
> +    $ python app/spp-nfv.py -i 2 -l 3-4
> +
> +Then, add two vhost PMDs for pktgen app container from SPP controller.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    spp > sec 1;add vhost 1
> +    spp > sec 2;add vhost 2
> +
> +Now, it is ready for launching pktgen app container.
> +In this use case, use five lcores for pktgen.
> +One lcore is used for master, and remaining lcores are used for
> +rx and tx evenly.
> +Device ID option ``-d 1,2`` is for refferring vhost 1 and 2.
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    $ python app/pktgen.py -fg -l 5-9 -d 1,2
> +
> +Finally, configure network path from SPP controller,
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    spp > sec 1;patch ring:0 vhost:1
> +    spp > sec 2;patch vhost:2 ring:0
> +    spp > sec 1;forward
> +    spp > sec 2;forward
> +
> +and start forwarding from pktgen.
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    $ Pktgen:/> start 1
> +
> +You find that packet count of rx of port 0 and tx of port 1
> +is increased rapidlly.
> +
> +
> +.. _sppc_usecases_test_ring:
> +
> +Performance Test of Ring
> +------------------------
> +
> +Ring PMD is a very fast path to communicate between DPDK processes.
> +It is a kind of zero-copy data passing via shared memory and better
> +performance than vhost PMD.
> +Currently, only ``spp_nfv`` and ``spp_vm`` provide ring PMD in SPP
> +container.
> +It is also possible other DPDK applications to have ring PMD interface
> +for SPP technically,
> +but not implemented yet.
> +
> +This use case is for testing performance of ring PMDs.
> +As described in :numref:`figure_sppc_usecase_ring`,
> +each of app containers on which ``spp_nfv`` is running are connected
> +with ring PMDs in serial.
> +
> +.. _figure_sppc_usecase_ring:
> +
> +.. figure:: ../../images/tools/sppc/sppc_usecase_ring.*
> +   :height: 480em
> +   :width: 680em
> +
> +   Test of ring PMD
> +
> +You use two terminals on host 1, one is for SPP controller and another one
> +for ``spp_nfv`` app containers.
> +Pktgen on host 2 is started forwarding after setup on host 1 is finished.
> +
> +First, Launch SPP controller in terminal 1 as
> +:ref:`sppc_usecases_test_ring`.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    $ cd /path/to/spp
> +    $ python src/spp.py
> +
> +In terminal 2, launch ``spp_primary`` and ``spp_nfv`` containers
> +in background mode.
> +In this case, you attach physical ports to ``spp_primary`` with
> +portmask option.
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    $ cd /path/to/spp/tools/sppc
> +    $ python app/spp-primary.py -l 0 -p 0x03
> +    $ python app/spp-nfv.py -i 1 -l 1-2
> +    $ python app/spp-nfv.py -i 2 -l 3-4
> +    $ python app/spp-nfv.py -i 3 -l 5-6
> +    $ python app/spp-nfv.py -i 4 -l 7-8
> +
> +
> +.. note::
> +
> +    It might happen an error to input if the number of SPP process is
> +    increased. It also might get bothered to launch several SPP
> +    processes if the number is large.
> +
> +    You can use ``tools/spp-launcher.py`` to launch SPP processes
> +    at once. Here is an example for launching ``spp_primary`` and
> +    four ``spp_nfv`` processes. ``-n`` is for specifying the nubmer of
> +    ``spp_nfv``.
> +
> +    .. code-block:: console
> +
> +        $ python tools/spp-launcher.py -n 4
> +
> +    You will find that lcore assignment is the same as below.
> +    Lcore is assigned from 0 for primary, and next two lcores for the
> +    first ``spp_nfv``.
> +
> +    .. code-block:: console
> +
> +        $ python app/spp-primary.py -l 0 -p 0x03
> +        $ python app/spp-nfv.py -i 1 -l 1,2
> +        $ python app/spp-nfv.py -i 2 -l 3,4
> +        $ python app/spp-nfv.py -i 3 -l 5,6
> +        $ python app/spp-nfv.py -i 4 -l 7,8
> +
> +    You can also assign lcores with ``--shared`` to master lcore
> +    be shared among ``spp_nfv`` processes.
> +    It is useful to reduce the usage of lcores as explained in
> +    :ref:`sppc_usecases_pktgen_l2fwd_less_lcores`.
> +
> +    .. code-block:: console
> +
> +        $ python tools/spp-launcher.py -n 4 --shared
> +
> +    The result of assignment of this command is the same as below.
> +    Master lcore 1 is shared among secondary processes.
> +
> +    .. code-block:: console
> +
> +        $ python app/spp-primary.py -l 0 -p 0x03
> +        $ python app/spp-nfv.py -i 1 -l 1,2
> +        $ python app/spp-nfv.py -i 2 -l 1,3
> +        $ python app/spp-nfv.py -i 3 -l 1,4
> +        $ python app/spp-nfv.py -i 4 -l 1,5
> +
> +Add ring PMDs considering which of rings is shared between which of
> +containers.
> +You can use recipe scripts from ``playback`` command instead of
> +typing commands step by step.
> +For this usecase example, it is included in
> +``recipes/sppc/usecases/test_ring``.
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    spp > sec 1;add ring:0
> +    spp > sec 2;add ring:1
> +    spp > sec 2;add ring:2
> +    spp > sec 3;add ring:2
> +    spp > sec 3;add ring:3
> +    spp > sec 4;add ring:3
> +
> +Then, patch all of ports to be configured containers are connected
> +in serial.
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    spp > sec 1;patch phy:0 ring:0
> +    spp > sec 2;patch ring:0 ring:1
> +    spp > sec 3;patch ring:1 ring:2
> +    spp > sec 3;patch ring:2 ring:3
> +    spp > sec 4;patch ring:3 phy:1
> +    spp > sec 1;forward
> +    spp > sec 2;forward
> +    spp > sec 3;forward
> +    spp > sec 4;forward
> +
> +After setup on host 1 is finished, start forwarding from pktgen on host 2.
> +You can see the throughput of rx and tx ports on pktgen's terminal.
> +You also find that the throughput is almost not decreased and keeping wire
> +rate speed even after it through several chained containers.
> +
> +
> +.. _sppc_usecases_pktgen_l2fwd:
> +
> +Pktgen and L2fwd
> +----------------
> +
> +To consider more practical service function chaining like use case,
> +connect not only SPP processes, but also DPDK application to ``pktgen``.
> +In this example, use ``l2fwd`` app container as a DPDK application
> +for simplicity.
> +You can also use other DPDK applications as similar to this example
> +as described in next sections.
> +
> +.. _figure_sppc_usecase_l2fwdpktgen:
> +
> +.. figure:: ../../images/tools/sppc/sppc_usecase_l2fwdpktgen.*
> +    :height: 640em
> +    :width: 640em
> +
> +    Chainning pktgen and l2fwd
> +
> +This configuration requires more CPUs than previous example.
> +It is up to 14 lcores, but you can reduce lcores to do the trick.
> +It is a trade-off between usage and performance.
> +In this case, we focus on the usage of maximum lcores to get high
> +performance.
> +
> +Here is a list of lcore assignment for each of app containers.
> +
> +* One lcore for ``spp_primary`` container.
> +* Eight lcores for four ``spp_nfv`` containers.
> +* Three lcores for ``pktgen`` container.
> +* Two lcores for ``l2fwd`` container.
> +
> +First of all, launch SPP controller.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    $ cd /path/to/spp
> +    $ python src/spp.py
> +
> +Launch ``spp_primary`` and ``spp_nfv`` containers in background.
> +It does not use physical NICs as similar to
> +:ref:`sppc_usecases_test_vhost_single`.
> +Use four of ``spp_nfv`` containers for using four vhost PMDs.
> +For this usecase example, recipe scripts are included in
> +``recipes/sppc/usecases/pg_l2fwd``.
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    $ cd /path/to/spp/tools/sppc
> +    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
> +    $ python app/spp-nfv.py -i 1 -l 1-2
> +    $ python app/spp-nfv.py -i 2 -l 3-4
> +    $ python app/spp-nfv.py -i 3 -l 5-6
> +    $ python app/spp-nfv.py -i 4 -l 7-8
> +
> +Assign ring and vhost PMDs. Each of vhost IDs to be the same as
> +its secondary ID.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    spp > sec 1;add vhost 1
> +    spp > sec 2;add vhost 2
> +    spp > sec 3;add vhost 3
> +    spp > sec 4;add vhost 4
> +    spp > sec 1;add ring 0
> +    spp > sec 4;add ring 0
> +    spp > sec 2;add ring 1
> +    spp > sec 3;add ring 1
> +
> +
> +After vhost PMDs are created, you can launch containers
> +of ``pktgen`` and ``l2fwd``.
> +
> +In this case, ``pktgen`` container owns vhost 1 and 2,
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    $ python app/pktgen.py -l 9-11 -d 1,2
> +
> +and ``l2fwd`` container owns vhost 3 and 4.
> +
> +.. code-block:: console
> +
> +    # Terminal 3
> +    $ cd /path/to/spp/tools/sppc
> +    $ python app/l2fwd.py -l 12-13 -d 3,4
> +
> +
> +Then, configure network path by pactching each of ports
> +and start forwarding from SPP controller.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    spp > sec 1;patch ring:0 vhost:1
> +    spp > sec 2;patch vhost:2 ring:1
> +    spp > sec 3;patch ring:1 vhost:3
> +    spp > sec 4;patch vhost:4 ring:0
> +    spp > sec 1;forward
> +    spp > sec 2;forward
> +    spp > sec 3;forward
> +    spp > sec 4;forward
> +
> +Finally, start forwarding from ``pktgen`` container.
> +You can see that packet count is increased on both of
> +``pktgen`` and ``l2fwd``.
> +
> +
> +.. _sppc_usecases_pktgen_l2fwd_less_lcores:
> +
> +Pktgen and L2fwd using less Lcores
> +----------------------------------
> +
> +This section describes the effort of reducing the usage of lcore for
> +:ref:`sppc_usecases_pktgen_l2fwd`.
> +
> +Here is a list of lcore assignment for each of app containers.
> +It is totally 7 lcores while the maximum number is 14.
> +
> +* One lcore for spp_primary container.
> +* Three lcores for four spp_nfv containers.
> +* Two lcores for pktgen container.
> +* One lcores for l2fwd container.
> +
> +.. _figure_sppc_usecase_l2fwdpktgen_less:
> +
> +.. figure:: ../../images/tools/sppc/sppc_usecase_l2fwdpktgen_less.*
> +    :height: 640em
> +    :width: 640em
> +
> +    Pktgen and l2fwd using less lcores
> +
> +First of all, launch SPP controller.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    $ cd /path/to/spp
> +    $ python src/spp.py
> +
> +Launch ``spp_primary`` and ``spp_nfv`` containers in background.
> +It does not use physical NICs as similar to
> +:ref:`sppc_usecases_test_vhost_single`.
> +Use two of ``spp_nfv`` containers for using four vhost PMDs.
> +For this usecase example, recipe scripts are included in
> +``recipes/sppc/usecases/pg_l2fwd_less``.
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    $ cd /path/to/spp/tools/sppc
> +    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
> +    $ python app/spp-nfv.py -i 1 -l 1,2
> +    $ python app/spp-nfv.py -i 2 -l 1,3
> +
> +The number of process and CPUs are fewer than previous example.
> +You can reduce the number of ``spp_nfv`` processes by assigning
> +several vhost PMDs to one process, although performance is decreased
> +possibly.
> +For the number of lcores, you can reduce it by sharing
> +the master lcore 1 which has no heavy tasks.
> +
> +Assign each of two vhost PMDs to the processes.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    spp > sec 1;add vhost 1
> +    spp > sec 1;add vhost 2
> +    spp > sec 2;add vhost 3
> +    spp > sec 2;add vhost 4
> +    spp > sec 1;add ring 0
> +    spp > sec 1;add ring 1
> +    spp > sec 2;add ring 0
> +    spp > sec 2;add ring 1
> +
> +After vhost PMDs are created, you can launch containers
> +of ``pktgen`` and ``l2fwd``.
> +These processes also share the master lcore 1 with others.
> +
> +In this case, ``pktgen`` container uses vhost 1 and 2,
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    $ python app/pktgen.py -l 1,4,5 -d 1,2
> +
> +and ``l2fwd`` container uses vhost 3 and 4.
> +
> +.. code-block:: console
> +
> +    # Terminal 3
> +    $ cd /path/to/spp/tools/sppc
> +    $ python app/l2fwd.py -l 1,6 -d 3,4
> +
> +
> +Then, configure network path by pactching each of ports
> +and start forwarding from SPP controller.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    spp > sec 1;patch ring:0 vhost:1
> +    spp > sec 1;patch vhost:2 ring:1
> +    spp > sec 3;patch ring:1 vhost:3
> +    spp > sec 4;patch vhost:4 ring:0
> +    spp > sec 1;forward
> +    spp > sec 2;forward
> +    spp > sec 3;forward
> +    spp > sec 4;forward
> +
> +Finally, start forwarding from ``pktgen`` container.
> +You can see that packet count is increased on both of
> +``pktgen`` and ``l2fwd``.
> +
> +
> +.. _sppc_usecases_lb_pktgen:
> +
> +Load-Balancer and Pktgen
> +------------------------
> +
> +Previous examples are all the single-path configurations and do not
> +have branches.
> +To explain how to setup a multi-path configuration, we use
> +`Load-Balancer
> +<https://dpdk.org/doc/guides/sample_app_ug/load_balancer.html>`_
> +application in this example.
> +It is an application distributes packet I/O task with several worker
> +lcores to share IP addressing.
> +
> +.. _figure_sppc_usecase_lb_pktgen:
> +
> +.. figure:: ../../images/tools/sppc/sppc_usecase_lb_pktgen.*
> +    :height: 580em
> +    :width: 720em
> +
> +    Multi-path configuration with load_balancer and pktgen
> +
> +Packets from tx of ``pktgen``, through ring:0, are received by rx
> +of ``load_balancer``.
> +Then, ``load_balancer`` classify the packets to decide the
> +destionations.
> +You can count received packets on rx ports of ``pktgen``.
> +
> +There are six ``spp_nfv`` and two DPDK applications in this example.
> +To reduce the number of lcores, configure lcore assignment to share
> +the master lcore.
> +Do not assign several vhosts to a process to avoid the performance
> +degradation.
> +It is 15 lcores required to the configuration.
> +
> +Here is a list of lcore assignment for each of app containers.
> +
> +* One lcore for ``spp_primary`` container.
> +* Seven lcores for four ``spp_nfv`` containers.
> +* Three lcores for ``pktgen`` container.
> +* Four lcores for ``load_balancer`` container.
> +
> +First of all, launch SPP controller.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    $ cd /path/to/spp
> +    $ python src/spp.py
> +
> +Launch ``spp_primary`` and ``spp_nfv`` containers in background.
> +It does not use physical NICs as similar to
> +:ref:`sppc_usecases_test_vhost_single`.
> +Use six ``spp_nfv`` containers for using six vhost PMDs.
> +For this usecase example, recipe scripts are included in
> +``recipes/sppc/usecases/lb_pg``.
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    $ cd /path/to/spp/tools/sppc
> +    $ python app/spp-primary.py -l 0 -p 0x01 -dt 1
> +    $ python app/spp-nfv.py -i 1 -l 1,2
> +    $ python app/spp-nfv.py -i 2 -l 1,3
> +    $ python app/spp-nfv.py -i 3 -l 1,4
> +    $ python app/spp-nfv.py -i 4 -l 1,5
> +    $ python app/spp-nfv.py -i 5 -l 1,6
> +    $ python app/spp-nfv.py -i 6 -l 1,7
> +
> +Assign ring and vhost PMDs. Each of vhost IDs to be the same as
> +its secondary ID.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    spp > sec 1;add vhost 1
> +    spp > sec 2;add vhost 2
> +    spp > sec 3;add vhost 3
> +    spp > sec 4;add vhost 4
> +    spp > sec 5;add vhost 5
> +    spp > sec 6;add vhost 6
> +    spp > sec 1;add ring 0
> +    spp > sec 2;add ring 1
> +    spp > sec 3;add ring 2
> +    spp > sec 4;add ring 0
> +    spp > sec 5;add ring 1
> +    spp > sec 6;add ring 2
> +
> +And patch all of ports.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    spp > sec 1;patch vhost:1 ring:0
> +    spp > sec 2;patch ring:1 vhost:2
> +    spp > sec 3;patch ring:2 vhost:3
> +    spp > sec 4;patch ring:0 vhost:4
> +    spp > sec 5;patch vhost:5 ring:1
> +    spp > sec 6;patch vhost:6 ring:2
> +
> +
> +You had better to check that network path is configured properly.
> +``topo`` command is useful for checking it with a graphical image.
> +Define two groups of vhost PMDs as ``c1`` and ``c2`` with
> +``topo_subgraph`` command before.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    # define c1 and c2 to help your understanding
> +    spp > topo_subgraph add c1 vhost:1,vhost:2,vhost:3
> +    spp > topo_subgraph add c2 vhost:4,vhost:5,vhost:6
> +
> +    # show network diagram
> +    spp > topo term
> +
> +
> +Finally, launch ``pktgen`` and ``load_balancer`` app containers
> +to start traffic monitoring.
> +
> +For ``pktgen`` container, assign lcores 8-10 and vhost 1-3.
> +``-T`` options is required to enable color terminal output.
> +
> +.. code-block:: console
> +
> +    # Terminal 2
> +    $ cd /path/to/spp/tools/sppc
> +    $ python app/pktgen.py -l 8-10 -d 1-3 -T
> +
> +
> +For ``load_balancer`` container, assign lcores 12-15 and vhost 4-6.
> +Four lcores are assigned to rx, tx and two workers.
> +You should add ``-nq`` option because this example requires three
> +or more queues. In this case, assign 4 queues.
> +
> +.. code-block:: console
> +
> +    # Terminal 3
> +    $ cd /path/to/spp/tools/sppc
> +    $ python app/load_balancer.py -l 11-14 -d 4-6 -fg -nq 4
> +      -rx "(0,0,11),(0,1,11),(0,2,11)" \
> +      -tx "(0,12),(1,12),(2,12)" \
> +      -w 13,14 \
> +      --lpm "1.0.0.0/24=>0; 1.0.1.0/24=>1; 1.0.2.0/24=>2;"
> +
> +
> +Then, configure network path by pactching each of ports
> +and start forwarding from SPP controller.
> +
> +.. code-block:: console
> +
> +    # Terminal 1
> +    spp > sec 1;forward
> +    spp > sec 2;forward
> +    spp > sec 3;forward
> +    spp > sec 4;forward
> +    spp > sec 5;forward
> +    spp > sec 6;forward
> +
> +You start forwarding from ``pktgen`` container.
> +The destination of ``load_balancer`` is decided by considering
> +LPM rules. Try to classify incoming packets to port 1 on the
> +``load_balancer`` application.
> +
> +On ``pktgen``, change the destination IP address of port 0
> +to ``1.0.1.100``, and start.
> +
> +.. code-block:: console
> +
> +    # Terminal 3
> +    Pktgen:/> set 0 dst ip 1.0.1.100
> +    Pktgen:/> start 0
> +
> +As forwarding on port 0 is started, you will find the packet count of
> +port 1 is increase rapidly.
> +You can change the destination IP address and send packets to port 2
> +by stopping to forward,
> +changing the destination IP address to ``1.0.2.100`` and restart
> +forwarding.
> +
> +.. code-block:: console
> +
> +    # Terminal 3
> +    Pktgen:/> stop 0
> +    Pktgen:/> set 0 dst ip 1.0.2.100
> +    Pktgen:/> start 0
> +
> +You might not be able to stop ``load_balancer`` application with *Ctrl-C*.
> +In this case, terminate it with ``docker kill`` directly as explained in
> +:ref:`sppc_appl_load_balancer`.
> +You can find the name of container from ``docker ps``.
> 


-- 
Yasufumi Ogawa
NTT Network Service Systems Labs

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation
  2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
                     ` (13 preceding siblings ...)
  2018-06-18  6:21   ` [spp] [PATCH v2 15/15] docs: add how to develop guide for SPP container ogawa.yasufumi
@ 2018-08-15 15:39   ` Ferruh Yigit
  14 siblings, 0 replies; 36+ messages in thread
From: Ferruh Yigit @ 2018-08-15 15:39 UTC (permalink / raw)
  To: ogawa.yasufumi, spp, nakamura.hiroyuki

On 6/18/2018 7:21 AM, ogawa.yasufumi@lab.ntt.co.jp wrote:
> From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
> 
> Hi,
> 
> This is the fixed version of documents of SPP container.
> 
>   * Fix typo 'intall' noticed from Hiroyuki.
> 
>   * Fix wrong descriptions in getting started guide.
> 
>   * Remove trailing whitespaces.
> 
> 
> Yasufumi Ogawa (15):
>   docs: add index of SPP container tool
>   docs: add overview of SPP container
>   docs: add overview image of SPP container
>   docs: add getting started guide of SPP container
>   docs: add image of example for gsg
>   docs: add install guide for SPP container
>   docs: add build image guide for SPP container
>   docs: add manual for app container launchers
>   docs: add use cases of SPP container
>   docs: add usecase image of testing vhost
>   docs: add usecase image of testing ring
>   docs: add usecase image of pktgen and l2fwd
>   docs: add usecase image of using less lcores
>   docs: add usecase image of load balancer
>   docs: add how to develop guide for SPP container

Series applied, thanks.

^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2018-08-15 15:39 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-15  7:06 [spp] [PATCH 00/15] Introduction of SPP container tools ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 01/15] docs: add index of SPP container tool ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 02/15] docs: add overview of SPP container ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 03/15] docs: add overview image " ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 04/15] docs: add getting started guide " ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 05/15] docs: add image of example for gsg ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 06/15] docs: add install guide for SPP container ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 07/15] docs: add build image " ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 08/15] docs: add manual for app container launchers ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 09/15] docs: add use cases of SPP container ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 10/15] docs: add usecase image of testing vhost ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 11/15] docs: add usecase image of testing ring ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 12/15] docs: add usecase image of pktgen and l2fwd ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 13/15] docs: add usecase image of using less lcores ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 14/15] docs: add usecase image of load balancer ogawa.yasufumi
2018-06-15  7:06 ` [spp] [PATCH 15/15] docs: add how to develop guide for SPP container ogawa.yasufumi
2018-06-15 12:47   ` Nakamura Hioryuki
2018-06-18  2:33     ` Yasufumi Ogawa
2018-06-18  6:21 ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 01/15] docs: add index of SPP container tool ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 02/15] docs: add overview of SPP container ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 03/15] docs: add overview image " ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 04/15] docs: add getting started guide " ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 05/15] docs: add image of example for gsg ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 06/15] docs: add install guide for SPP container ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 07/15] docs: add build image " ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 08/15] docs: add manual for app container launchers ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 10/15] docs: add usecase image of testing vhost ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 11/15] docs: add usecase image of testing ring ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 12/15] docs: add usecase image of pktgen and l2fwd ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 13/15] docs: add usecase image of using less lcores ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 14/15] docs: add usecase image of load balancer ogawa.yasufumi
2018-06-18  6:21   ` [spp] [PATCH v2 15/15] docs: add how to develop guide for SPP container ogawa.yasufumi
2018-08-15 15:39   ` [spp] [PATCH v2 00/15] Fix mistakes of SPP container documentation Ferruh Yigit
2018-07-24  8:00 ` [spp] [PATCH v2 09/15] docs: add use cases of SPP container ogawa.yasufumi
2018-07-24  8:20   ` Yasufumi Ogawa

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).