[spp] [PATCH 13/28] docs: add usecase section in spp_vf
ogawa.yasufumi at lab.ntt.co.jp
ogawa.yasufumi at lab.ntt.co.jp
Mon Feb 5 03:39:06 CET 2018
From: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
---
docs/guides/spp_vf/use_cases/index.rst | 5 +
docs/guides/spp_vf/use_cases/usecase1.rst | 361 ++++++++++++++++++++++++++++++
2 files changed, 366 insertions(+)
create mode 100644 docs/guides/spp_vf/use_cases/usecase1.rst
diff --git a/docs/guides/spp_vf/use_cases/index.rst b/docs/guides/spp_vf/use_cases/index.rst
index ba8c582..302085f 100644
--- a/docs/guides/spp_vf/use_cases/index.rst
+++ b/docs/guides/spp_vf/use_cases/index.rst
@@ -30,3 +30,8 @@
Use Cases
=========
+
+.. toctree::
+ :maxdepth: 2
+
+ usecase1
diff --git a/docs/guides/spp_vf/use_cases/usecase1.rst b/docs/guides/spp_vf/use_cases/usecase1.rst
new file mode 100644
index 0000000..05dc86c
--- /dev/null
+++ b/docs/guides/spp_vf/use_cases/usecase1.rst
@@ -0,0 +1,361 @@
+.. BSD LICENSE
+ Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+Simple SSH Login
+================
+
+This section describes a usecase for simple SSH login through SPP VF.
+Incoming packets are classified based on destination addresses defined
+in ``classifier``.
+Reterned packets are aggregated to ``merger`` to send it an outgoing
+port.
+
+.. _figure_simple_ssh_login:
+
+.. figure:: ../images/usecase1_overview.*
+ :height: 400 em
+ :width: 400 em
+
+ Simple SSH Login
+
+
+Launch SPP VF
+~~~~~~~~~~~~~
+
+Change directory to spp and confirm that it is already compiled.
+
+.. code-block:: console
+
+ $ cd /path/to/spp
+
+As spp, launch controller first. You notice that SPP VF has its own
+controller ``spp_vf.py`` and do not use ``spp.py``.
+
+.. code-block:: console
+
+ # Launch spp_vf.py
+ $ python ./src/spp_vf.py -p 5555 -s 6666
+
+Then, run ``spp_primary``.
+
+.. code-block:: console
+
+ $ sudo ./src/primary/x86_64-native-linuxapp-gcc/spp_primary \
+ -c 0x02 -n 4 \
+ --socket-mem 512,512 \
+ --huge-dir=/run/hugepages/kvm \
+ --proc-type=primary \
+ -- \
+ -p 0x03 -n 8 -s 127.0.0.1:5555
+
+After ``spp_primary`` is launched, run secondary process ``spp_vf``.
+
+.. code-block:: console
+
+ $ sudo ./src/vf/x86_64-native-linuxapp-gcc/spp_vf \
+ -c 0x00fe -n 4 --proc-type=secondary \
+ -- \
+ --client-id 1 \
+ -s 127.0.0.1:6666 \
+ --vhost-client
+
+
+Network Configuration
+~~~~~~~~~~~~~~~~~~~~~
+
+Detailed configuration of :numref:`figure_simple_ssh_login` is
+described below.
+
+.. _figure_network_config:
+
+.. figure:: ../images/usecase1_nwconfig.*
+ :height: 720 em
+ :width: 720 em
+
+ Network Configuration
+
+First, start the ``component`` of classifier, forwarders, and merge
+in ``spp_vf``.
+
+.. code-block:: console
+
+ # Start component to spp_vf
+ spp > sec 1;component start classifier1 2 classifier_mac
+ spp > sec 1;component start forward1 3 forward
+ spp > sec 1;component start forward2 4 forward
+ spp > sec 1;component start forward3 5 forward
+ spp > sec 1;component start forward4 6 forward
+ spp > sec 1;component start merge1 7 merge
+
+Second, add ``port`` to each component in ``spp_vf``.
+
+.. code-block:: console
+
+ # Add port to component
+ spp > sec 1;port add phy:0 rx classifier1
+ spp > sec 1;port add ring:0 tx classifier1
+ spp > sec 1;port add ring:1 tx classifier1
+ spp > sec 1;port add ring:0 rx forward1
+ spp > sec 1;port add vhost:0 tx forward1
+ spp > sec 1;port add vhost:0 rx forward2
+ spp > sec 1;port add ring:2 tx forward2
+ spp > sec 1;port add ring:1 rx forward3
+ spp > sec 1;port add vhost:2 rx forward3
+ spp > sec 1;port add vhost:2 tx forward4
+ spp > sec 1;port add ring:3 rx forward4
+ spp > sec 1;port add ring:2 rx merge1
+ spp > sec 1;port add ring:3 rx merge1
+ spp > sec 1;port add phy:0 tx merge1
+
+To communicate remote node and VM via NIC0, each of packets from
+remote node is required to be routed to specific VM according
+to its MAC address.
+This configuration is done by ``classfier_table`` command.
+
+.. code-block:: console
+
+ # Register MAC address to classifier
+ spp > classifier_table add mac 52:54:00:12:34:56 ring:0
+ spp > classifier_table add mac 52:54:00:12:34:58 ring:1
+
+
+For NIC1, also setup ``component``, ``port`` and ``classifier_table``,
+as following steps.
+
+.. code-block:: console
+
+ # Start component to spp_vf
+ spp > sec 1;component start classifier2 8 classifier_mac
+ spp > sec 1;component start forward5 9 forward
+ spp > sec 1;component start forward6 10 forward
+ spp > sec 1;component start forward7 11 forward
+ spp > sec 1;component start forward8 12 forward
+ spp > sec 1;component start merge2 13 merge
+
+.. code-block:: console
+
+ # Add port to component
+ spp > sec 1;port add phy:1 rx classifier2
+ spp > sec 1;port add ring:4 tx classifier2
+ spp > sec 1;port add ring:5 tx classifier2
+ spp > sec 1;port add ring:4 rx forward5
+ spp > sec 1;port add vhost:1 tx forward5
+ spp > sec 1;port add vhost:1 rx forward6
+ spp > sec 1;port add ring:6 tx forward6
+ spp > sec 1;port add ring:5 rx forward7
+ spp > sec 1;port add vhost:3 rx forward7
+ spp > sec 1;port add vhost:3 tx forward8
+ spp > sec 1;port add ring:7 rx forward8
+ spp > sec 1;port add ring:6 rx merge2
+ spp > sec 1;port add ring:7 rx merge2
+ spp > sec 1;port add phy:1 tx merge2
+
+.. code-block:: console
+
+ # Register MAC address to classifier
+ spp > classifier_table add mac 52:54:00:12:34:57 ring:4
+ spp > classifier_table add mac 52:54:00:12:34:59 ring:5
+
+To activate above settings, input the `flush` command.
+
+.. code-block:: console
+
+ spp > sec 1;flush
+
+Setup for VMs
+~~~~~~~~~~~~~
+
+Start two VMs.
+
+.. code-block:: console
+
+ $ virsh start spp-vm1
+ $ virsh start spp-vm2
+
+Login to ``spp-vm1`` for network configuration.
+To not ask for unknown keys while login VMs,
+set ``-oStrictHostKeyChecking=no`` option for ssh.
+
+.. code-block:: console
+
+ $ ssh -oStrictHostKeyChecking=no sppuser at 192.168.122.31
+
+Up interfaces for vhost inside ``spp-vm1``.
+In addition, you have to disable TCP offload function, or ssh is failed
+after configuration is done.
+
+.. code-block:: console
+
+ # up interfaces
+ $ sudo ifconfig ens4 inet 192.168.140.21 netmask 255.255.255.0 up
+ $ sudo ifconfig ens5 inet 192.168.150.22 netmask 255.255.255.0 up
+
+ # disable TCP offload
+ $ sudo ethtool -K ens4 tx off
+ $ sudo ethtool -K ens5 tx off
+
+Configurations for ``spp-vm2`` is same as ``spp-vm1``.
+
+.. code-block:: console
+
+ $ ssh -oStrictHostKeyChecking=no sppuser at 192.168.122.32
+
+ # up interfaces
+ $ sudo ifconfig ens4 inet 192.168.140.31 netmask 255.255.255.0 up
+ $ sudo ifconfig ens5 inet 192.168.150.32 netmask 255.255.255.0 up
+
+ # disable TCP offload
+ $ sudo ethtool -K ens4 tx off
+ $ sudo ethtool -K ens5 tx off
+
+
+Login to VMs
+~~~~~~~~~~~~
+
+Now, you can login to VMs.
+
+.. code-block:: console
+
+ # spp-vm1 via NIC0
+ $ ssh sppuser at 192.168.140.21
+
+ # spp-vm1 via NIC1
+ $ ssh sppuser at 192.168.150.22
+
+ # spp-vm2 via NIC0
+ $ ssh sppuser at 192.168.140.31
+
+ # spp-vm2 via NIC1
+ $ ssh sppuser at 192.168.150.32
+
+Close Applications
+~~~~~~~~~~~~~~~~~~
+
+Describe the procedure to close the applications.
+
+(1) Stop and delete command
+
+By following commands from `spp_vf.py`, you can delete `classifier_table`
+and ports, and stop components.
+The `flush` command is required to reflect this deletion and stopping.
+If you close the applications by `Ctrl+C` or `bye all` command,
+all settings will be deleted, following steps are not mandatory.
+
+First, delete the configuration between NIC-1 and VM and stop related components.
+
+.. code-block:: console
+
+ # Delete MAC address from Classifier
+ spp > classifier_table del mac 51:54:00:12:34:56 ring:0
+ spp > classifier_table del mac 51:54:00:12:34:58 ring:1
+
+.. code-block:: console
+
+ # Delete port to component
+ spp > sec 0;port del phy:0 rx classifier1
+ spp > sec 0;port del ring:0 tx classifier1
+ spp > sec 0;port del ring:1 tx classifier1
+ spp > sec 0;port del ring:0 rx forward1
+ spp > sec 0;port del vhost:0 tx forward1
+ spp > sec 0;port del vhost:0 rx forward2
+ spp > sec 0;port del ring:2 tx forward2
+ spp > sec 0;port del ring:1 rx forward3
+ spp > sec 0;port del vhost:2 rx forward3
+ spp > sec 0;port del vhost:2 tx forward4
+ spp > sec 0;port del ring:3 rx forward4
+ spp > sec 0;port del ring:2 rx merge1
+ spp > sec 0;port del ring:3 rx merge1
+ spp > sec 0;port del phy:0 tx merge1
+
+.. code-block:: console
+
+ # Stop component to spp_vf
+ spp > sec 0;component stop classifier1
+ spp > sec 0;component stop forward1
+ spp > sec 0;component stop forward2
+ spp > sec 0;component stop forward3
+ spp > sec 0;component stop forward4
+ spp > sec 0;component stop merge1
+
+Second, delete the configuration between NIC0 and VM and stop related components.
+
+.. code-block:: console
+
+ # Delete MAC address from Classifier
+ spp > classifier_table del mac 51:54:00:12:34:57 ring:4
+ spp > classifier_table del mac 51:54:00:12:34:59 ring:5
+
+.. code-block:: console
+
+ # Delete port to component
+ spp > sec 0;port del phy:1 rx classifier2
+ spp > sec 0;port del ring:4 tx classifier2
+ spp > sec 0;port del ring:5 tx classifier2
+ spp > sec 0;port del ring:4 rx forward5
+ spp > sec 0;port del vhost:1 tx forward5
+ spp > sec 0;port del vhost:1 rx forward6
+ spp > sec 0;port del ring:6 tx forward6
+ spp > sec 0;port del ring:5 rx forward7
+ spp > sec 0;port del vhost:3 rx forward7
+ spp > sec 0;port del vhost:3 tx forward8
+ spp > sec 0;port del ring:7 rx forward8
+ spp > sec 0;port del ring:6 rx merge2
+ spp > sec 0;port del ring:7 rx merge2
+ spp > sec 0;port del phy:1 tx merge2
+
+.. code-block:: console
+
+ # Stop component to spp_vf
+ spp > sec 0;component stop classifier2 8 classifier_mac
+ spp > sec 0;component stop forward5 9 forward
+ spp > sec 0;component stop forward6 10 forward
+ spp > sec 0;component stop forward7 11 forward
+ spp > sec 0;component stop forward8 12 forward
+ spp > sec 0;component stop merge2 13 merge
+
+To activate above settings, input the ``flush`` command.
+
+.. code-block:: console
+
+ spp > sec 0;flush
+
+
+(2) Close SPP VF
+
+Simply, ``spp_vf`` and primary process can be closed
+by ``Ctrl+C`` or ``bye all`` command from ``spp_vf.py``.
+Also ``spp_vf.py`` can be closed by the ``bye`` command.
+
+.. code-block:: console
+
+ # stop controller
+ spp > bye all
+ spp > bye
--
2.13.1
More information about the spp
mailing list