From 9f7638f13b40cc023a50a665f4d43c57170d9c77 Mon Sep 17 00:00:00 2001 From: Bin Hu Date: Fri, 25 Dec 2015 00:36:15 -0800 Subject: [PATCH] JIRA: IPVSIX-29 Change-Id: Ib15a9170fa9914e44b6369d39288e293c3997245 Signed-off-by: Bin Hu --- .../0-ipv6-configguide-prep-infra.rst | 27 ++++--------------- .../4-ipv6-configguide-servicevm.rst | 12 --------- docs/setupservicevm/architecture-design.rst | 13 +++++++++ docs/setupservicevm/images/odl-dlux_ipv6_poc.png | Bin 0 -> 20032 bytes docs/setupservicevm/index.rst | 2 ++ docs/setupservicevm/topology-after-setup.rst | 29 +++++++++++++++++++++ 6 files changed, 49 insertions(+), 34 deletions(-) create mode 100644 docs/setupservicevm/architecture-design.rst create mode 100644 docs/setupservicevm/images/odl-dlux_ipv6_poc.png create mode 100644 docs/setupservicevm/topology-after-setup.rst diff --git a/docs/setupservicevm/0-ipv6-configguide-prep-infra.rst b/docs/setupservicevm/0-ipv6-configguide-prep-infra.rst index 56803bf..9703991 100644 --- a/docs/setupservicevm/0-ipv6-configguide-prep-infra.rst +++ b/docs/setupservicevm/0-ipv6-configguide-prep-infra.rst @@ -1,23 +1,6 @@ -======================== -Preparing Infrastructure -======================== - -******************** -Architectural Design -******************** - -The architectural design of using a service VM as an IPv6 vRouter is -shown as follows in :numref:`s2-figure1`: - -.. figure:: images/ipv6-architecture.png - :name: s2-figure1 - :width: 100% - - Architectural Design of Using a VM as an IPv6 vRouter - -******************** +==================== Infrastructure Setup -******************** +==================== In order to set up the service VM as an IPv6 vRouter, we need to prepare 3 hosts, each of which has minimum 8GB RAM and 40GB storage. One host is used as OpenStack Controller @@ -34,15 +17,15 @@ For exemplary purpose, we assume: * We use ``opnfv`` as username to login. * We use ``devstack`` to install OpenStack Kilo. Please note that OpenStack Liberty can be used as well. -The underlay network topology of those 3 hosts are shown as follows in :numref:`s2-figure2`: +The underlay network topology of those 3 hosts are shown as follows in :numref:`s2-figure1`: .. figure:: images/ipv6-topology-scenario-2.png - :name: s2-figure2 + :name: s2-figure1 :width: 100% Underlay Network Topology - Scenario 2 -**Please note that the IP address shown in** :numref:`s2-figure2` +**Please note that the IP address shown in** :numref:`s2-figure1` **are for exemplary purpose. You need to configure your public IP address connecting to Internet according to your actual network infrastructure. And you need to make sure the private IP address are diff --git a/docs/setupservicevm/4-ipv6-configguide-servicevm.rst b/docs/setupservicevm/4-ipv6-configguide-servicevm.rst index 2eacb60..295807a 100644 --- a/docs/setupservicevm/4-ipv6-configguide-servicevm.rst +++ b/docs/setupservicevm/4-ipv6-configguide-servicevm.rst @@ -372,15 +372,3 @@ Congratulations, you have completed the setup of using a service VM to act as an open innovation by any 3rd-party. Please refer to relevant sections in User's Guide for further value-added services on this IPv6 vRouter. -******************************************************** -Sample Network Topology of this Setup through Horizon UI -******************************************************** - -The sample network topology of above setup is shown in Horizon UI as follows :numref:`s2-figure3`: - -.. figure:: images/ipv6-sample-in-horizon.png - :name: s2-figure3 - :width: 100% - - Sample Network Topology in Horizon UI - diff --git a/docs/setupservicevm/architecture-design.rst b/docs/setupservicevm/architecture-design.rst new file mode 100644 index 0000000..61b9ad5 --- /dev/null +++ b/docs/setupservicevm/architecture-design.rst @@ -0,0 +1,13 @@ +==================== +Architectural Design +==================== + +The architectural design of using a service VM as an IPv6 vRouter is +shown as follows in :numref:`arch-figure1`: + +.. figure:: images/ipv6-architecture.png + :name: arch-figure1 + :width: 100% + + Architectural Design of Using a VM as an IPv6 vRouter + diff --git a/docs/setupservicevm/images/odl-dlux_ipv6_poc.png b/docs/setupservicevm/images/odl-dlux_ipv6_poc.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5df04c0951275e4c1e8ca835ae6c2e479721c GIT binary patch literal 20032 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