From 723772199b008c7b6ac1957e861dc4573ac23cd5 Mon Sep 17 00:00:00 2001 From: Bin Hu Date: Thu, 24 Dec 2015 20:35:38 -0800 Subject: [PATCH] JIRA: IPVSIX-29 Change-Id: Ic48ba0dfbc5d25bdb3ff145b41c225beeb67c8d1 Signed-off-by: Bin Hu --- .../0-ipv6-configguide-prep-infra.rst | 14 +- .../1-ipv6-configguide-odl-setup.rst | 2 +- .../2-ipv6-configguide-os-controller.rst | 51 ++++-- .../3-ipv6-configguide-os-compute.rst | 71 +++++--- .../4-ipv6-configguide-servicevm.rst | 101 +++++------ .../5-ipv6-configguide-scenario-1-native-os.rst | 202 ++++++++++++++------- .../images/ipv6-topology-scenario-1.png | Bin 0 -> 49082 bytes .../images/ipv6-topology-scenario-2.png | Bin 0 -> 67153 bytes docs/setupservicevm/index.rst | 30 +-- docs/setupservicevm/scenario-2.rst | 4 +- docs/setupservicevm/scenario-3.rst | 8 +- 11 files changed, 299 insertions(+), 184 deletions(-) create mode 100644 docs/setupservicevm/images/ipv6-topology-scenario-1.png create mode 100644 docs/setupservicevm/images/ipv6-topology-scenario-2.png diff --git a/docs/setupservicevm/0-ipv6-configguide-prep-infra.rst b/docs/setupservicevm/0-ipv6-configguide-prep-infra.rst index 4c2287a..5b3b584 100644 --- a/docs/setupservicevm/0-ipv6-configguide-prep-infra.rst +++ b/docs/setupservicevm/0-ipv6-configguide-prep-infra.rst @@ -7,10 +7,10 @@ Architectural Design ******************** The architectural design of using a service VM as an IPv6 vRouter is -shown as follows in :numref:`figure1`: +shown as follows in :numref:`s2-figure1`: .. figure:: images/ipv6-architecture.png - :name: figure1 + :name: s2-figure1 :width: 100% Architectural Design of Using a VM as an IPv6 vRouter @@ -27,15 +27,15 @@ OpenStack Compute Node. For exemplary purpose, we give them hostnames ``opnfv-odl-controller``, ``opnfv-os-controller``, and ``opnfv-os-compute`` respectively. -The underlay network topology of those 3 hosts are shown as follows in :numref:`figure2`: +The underlay network topology of those 3 hosts are shown as follows in :numref:`s2-figure2`: -.. figure:: images/ipv6-topology.png - :name: figure2 +.. figure:: images/ipv6-topology-scenario-2.png + :name: s2-figure2 :width: 100% - Underlay Network Topology + Underlay Network Topology - Scenario 2 -**Please note that the IP address shown in** :numref:`figure2` +**Please note that the IP address shown in** :numref:`s2-figure2` **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/1-ipv6-configguide-odl-setup.rst b/docs/setupservicevm/1-ipv6-configguide-odl-setup.rst index ce7823e..95d6be4 100644 --- a/docs/setupservicevm/1-ipv6-configguide-odl-setup.rst +++ b/docs/setupservicevm/1-ipv6-configguide-odl-setup.rst @@ -109,7 +109,7 @@ UI. The default user-name and password is ``admin/admin``. .. code-block:: bash - opendaylight-user@opnfv>feature:install odl-restconf odl-l2switch-switch odl-mdsal-apidocs odl-dlux-core + opendaylight-user@opnfv>feature:install odl-dlux-core **ODL-14**: To exit out of screen session, please use the command ``CTRL+a`` followed by ``d`` diff --git a/docs/setupservicevm/2-ipv6-configguide-os-controller.rst b/docs/setupservicevm/2-ipv6-configguide-os-controller.rst index b0dd63b..3efa370 100644 --- a/docs/setupservicevm/2-ipv6-configguide-os-controller.rst +++ b/docs/setupservicevm/2-ipv6-configguide-os-controller.rst @@ -2,22 +2,42 @@ Setting Up OpenStack Controller =============================== +Please **note** that the instructions shown here are using ``devstack`` installer. If you are an experienced +user and installs OpenStack in a different way, you can skip this step and follow the instructions of the +method you are using to install OpenStack. + For exemplary purpose, we assume: -* The hostname of OpenStack Controller Node is ``opnfv-os-controller`` -* Ubuntu 14.04 is installed +* The hostname of OpenStack Controller Node is ``opnfv-os-controller``, and the host IP address is ``192.168.0.10`` +* Ubuntu 14.04 or Fedora 21 is installed * We use ``opnfv`` as username to login. -* We use ``devstack`` to install OpenStack Kilo +* We use ``devstack`` to install OpenStack Kilo. Please note that although the instructions are based on +OpenStack Kilo, they can be applied to Liberty in the same way. + +**OS-N-0**: Login to OpenStack Controller Node with username ``opnfv`` -**OS-N-1**: Login to OpenStack Controller Node with username ``opnfv`` +**OS-N-1**: Update the packages and install git -**OS-N-2**: Update the packages and install git +For **Ubuntu**: .. code-block:: bash sudo apt-get update -y sudo apt-get install -y git +For **Fedora**: + +.. code-block:: bash + + sudo yum update -y + sudo yum install -y git + +**OS-N-2**: Clone the following GitHub repository to get the configuration and metadata files + +.. code-block:: bash + + git clone https://github.com/sridhargaddam/opnfv_os_ipv6_poc.git /opt/stack/opnfv_os_ipv6_poc + **OS-N-3**: Download devstack and switch to stable/kilo branch .. code-block:: bash @@ -30,18 +50,14 @@ For exemplary purpose, we assume: cd ~/devstack -**OS-N-5**: Create a ``local.conf`` file with the contents from the following URL. +**OS-N-5**: Create a ``local.conf`` file from the GitHub repo we cloned at **OS-N-2**. .. code-block:: bash - http://fpaste.org/276949/39476214/ - -Please note: + cp /opt/stack/opnfv_os_ipv6_poc/scenario2/local.conf.odl.controller ~/devstack/local.conf -* Note 1: you need to change the IP address of ``ODL_MGR_IP`` to point to your actual IP address - of Open Daylight Controller. -* Note 2: You may have to change the value of ``ODL_PROVIDER_MAPPINGS`` and ``PUBLIC_INTERFACE`` - to match your actual network interfaces. +Please **note** that you need to change the IP address of ``ODL_MGR_IP`` to point to your actual IP address +of Open Daylight Controller. **OS-N-6**: Initiate Openstack setup by invoking ``stack.sh`` @@ -55,12 +71,15 @@ of your actual network interfaces. .. code-block:: bash - This is your host ip: - Horizon is now available at http:/// - Keystone is serving at http://:5000/ + This is your host IP address: 192.168.0.10 + This is your host IPv6 address: ::1 + Horizon is now available at http://192.168.0.10/ + Keystone is serving at http://192.168.0.10:5000/ The default users are: admin and demo The password: password +Please **note** that The IP addresses above are exemplary purpose. It will show you the actual IP address of your host. + **OS-N-8**: Assuming that all goes well, you can set ``OFFLINE=True`` and ``RECLONE=no`` in ``local.conf`` to lock the codebase. Devstack uses these configuration parameters to determine if it has to run with the existing codebase or update to the latest copy. diff --git a/docs/setupservicevm/3-ipv6-configguide-os-compute.rst b/docs/setupservicevm/3-ipv6-configguide-os-compute.rst index 1652131..3873646 100644 --- a/docs/setupservicevm/3-ipv6-configguide-os-compute.rst +++ b/docs/setupservicevm/3-ipv6-configguide-os-compute.rst @@ -2,22 +2,42 @@ Setting Up OpenStack Compute Node ================================= +Please **note** that the instructions shown here are using ``devstack`` installer. If you are an experienced user +and installs OpenStack in a different way, you can skip this step and follow the instructions of the method you +are using to install OpenStack. + For exemplary purpose, we assume: -* The hostname of OpenStack Compute Node is ``opnfv-os-compute`` -* Ubuntu 14.04 is installed +* The hostname of OpenStack Compute Node is ``opnfv-os-compute``, and the host IP address is ``192.168.0.20`` +* Ubuntu 14.04 or Fedora 21 is installed * We use ``opnfv`` as username to login. -* We use ``devstack`` to install OpenStack Kilo +* We use ``devstack`` to install OpenStack Kilo. Please note that although the instructions are based on +OpenStack Kilo, they can be applied to Liberty in the same way. + +**OS-M-0**: Login to OpenStack Compute Node with username ``opnfv`` -**OS-M-1**: Login to OpenStack Compute Node with username ``opnfv`` +**OS-M-1**: Update the packages and install git -**OS-M-2**: Update the packages and install git +For **Ubuntu**: .. code-block:: bash sudo apt-get update -y sudo apt-get install -y git +For **Fedora**: + +.. code-block:: bash + + sudo yum update -y + sudo yum install -y git + +**OS-M-2**: Clone the following GitHub repository to get the configuration and metadata files + +.. code-block:: bash + + git clone https://github.com/sridhargaddam/opnfv_os_ipv6_poc.git /opt/stack/opnfv_os_ipv6_poc + **OS-M-3**: Download devstack and switch to stable/kilo branch .. code-block:: bash @@ -30,11 +50,11 @@ For exemplary purpose, we assume: cd ~/devstack -**OS-M-5**: Create a ``local.conf`` file with the contents from the following URL. +**OS-M-5**: Create a ``local.conf`` file from the GitHub repo we cloned at **OS-M-2**. .. code-block:: bash - http://fpaste.org/276958/44395955/ + cp /opt/stack/opnfv_os_ipv6_poc/scenario2/local.conf.odl.compute ~/devstack/local.conf Please Note: @@ -42,8 +62,6 @@ Please Note: of OpenStack Controller. * Note 2: you need to change the IP address of ``ODL_MGR_IP`` to point to your actual IP address of Open Daylight Controller. -* Note 3: You may have to change the value of ``ODL_PROVIDER_MAPPINGS`` and ``PUBLIC_INTERFACE`` - to match your actual network interface. **OS-M-6**: Initiate Openstack setup by invoking ``stack.sh`` @@ -51,29 +69,34 @@ Please Note: ./stack.sh -**OS-M-7**: Assuming that all goes well, you can set ``OFFLINE=True`` and ``RECLONE=no`` in ``local.conf`` -to lock the codebase. Devstack uses these configuration parameters to determine if it has to run with -the existing codebase or update to the latest copy. +**OS-M-7**: Assuming that all goes well, you should see the following output. + +.. code-block:: bash + + This is your host IP address: 192.168.0.20 + This is your host IPv6 address: ::1 + +Please **note** that The IP addresses above are exemplary purpose. It will show you the actual IP address of your host. + +You can set ``OFFLINE=True`` and ``RECLONE=no`` in ``local.conf`` to lock the codebase. Devstack uses these +configuration parameters to determine if it has to run with the existing codebase or update to the latest copy. **OS-M-8**: Source the credentials. .. code-block:: bash - opnfv@opnfv-os-controller:~/devstack$ source openrc admin demo + opnfv@opnfv-os-compute:~/devstack$ source openrc admin demo -**OS-M-9**: Verify some commands to check if setup is working fine. +**OS-M-9**: You can verify that OpenStack is set up correctly by showing hypervisor list .. code-block:: bash - opnfv@opnfv-os-controller:~/devstack$ nova flavor-list - +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ - | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public | - +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ - | 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True | - | 2 | m1.small | 2048 | 20 | 0 | | 1 | 1.0 | True | - | 3 | m1.medium | 4096 | 40 | 0 | | 2 | 1.0 | True | - | 4 | m1.large | 8192 | 80 | 0 | | 4 | 1.0 | True | - | 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | 1.0 | True | - +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ + opnfv@opnfv-os-compute:~/devstack$ nova hypervisor-list + +----+------------------------------------+---------+------------+ + | ID | Hypervisor hostname | State | Status | + +----+------------------------------------+---------+------------+ + | 1 | opnfv-os-controller | up | enabled | + | 2 | opnfv-os-compute | up | enabled | + +----+------------------------------------+---------+------------+ Now you can start to set up the service VM as an IPv6 vRouter in the environment of OpenStack and Open Daylight. diff --git a/docs/setupservicevm/4-ipv6-configguide-servicevm.rst b/docs/setupservicevm/4-ipv6-configguide-servicevm.rst index 295aab3..884f931 100644 --- a/docs/setupservicevm/4-ipv6-configguide-servicevm.rst +++ b/docs/setupservicevm/4-ipv6-configguide-servicevm.rst @@ -37,8 +37,8 @@ Because we need to manually create networks/subnets to achieve the IPv6 vRouter, ``devstack`` does not create any networks/subnets during the setup phase. In OpenStack Controller Node ``opnfv-os-controller``, ``eth1`` is configured to provide external/public connectivity -for both IPv4 and IPv6. So let us add this interface to ``br-ex`` and move the IP address, including the default route -from ``eth1`` to ``br-ex``. +for both IPv4 and IPv6 (optional). So let us add this interface to ``br-ex`` and move the IP address, including the +default route from ``eth1`` to ``br-ex``. **SETUP-SVM-3**: Add ``eth1`` to ``br-ex`` and move the IP address and the default route from ``eth1`` to ``br-ex`` @@ -112,9 +112,6 @@ your actual network**. neutron subnet-create --name ipv4-int-subnet1 --dns-nameserver 8.8.8.8 ipv4-int-network1 20.0.0.0/24 -Please note that the IP addresses in the command above are for exemplary purpose. **Please replace the -IP addresses of your actual network** - **SETUP-SVM-10**: Associate the IPv4 internal subnet ``ipv4-int-subnet1`` to the Neutron router ``ipv4-router``. .. code-block:: bash @@ -153,9 +150,6 @@ IPv6 router. neutron subnet-create --name ipv4-int-subnet2 --dns-nameserver 8.8.8.8 ipv4-int-network2 10.0.0.0/24 -Please note that the IP addresses in the command above are for exemplary purpose. **Please replace the IP addresses of -your actual network** - **SETUP-SVM-15**: Associate the IPv4 internal subnet ``ipv4-int-subnet2`` to the Neutron router ``ipv6-router``. .. code-block:: bash @@ -166,11 +160,11 @@ your actual network** Prepare Image, Metadata and Keypair for Service VM ************************************************** -**SETUP-SVM-16**: Download ``fedora20`` image which would be used as ``vRouter`` +**SETUP-SVM-16**: Download ``fedora22`` image which would be used as ``vRouter`` .. code-block:: bash - glance image-create --name 'Fedora20' --disk-format qcow2 --container-format bare --is-public true --copy-from http://cloud.fedoraproject.org/fedora-20.x86_64.qcow2 + glance image-create --name 'Fedora22' --disk-format qcow2 --container-format bare --is-public true --copy-from https://download.fedoraproject.org/pub/fedora/linux/releases/22/Cloud/x86_64/Images/Fedora-Cloud-Base-22-20150521.x86_64.qcow2 **SETUP-SVM-17**: Create a keypair @@ -178,18 +172,14 @@ Prepare Image, Metadata and Keypair for Service VM nova keypair-add vRouterKey > ~/vRouterKey -**SETUP-SVM-18**: Copy the contents from the following url to ``metadata.txt``, i.e. preparing metadata which enables -IPv6 router functionality inside ``vRouter`` +**SETUP-SVM-18**: Create ports for ``vRouter`` and both the VMs with some specific MAC addresses. .. code-block:: bash - http://fpaste.org/303942/50781923/ - -Please note that this ``metadata.txt`` will enable the ``vRouter`` to automatically spawn a ``radvd`` daemon, -which advertises its IPv6 subnet prefix ``2001:db8:0:2::/64`` in RA (Router Advertisement) message through -its ``eth1`` interface to other VMs on ``ipv4-int-network1``. The ``radvd`` daemon also advertises the routing -information, which routes to ``2001:db8:0:2::/64`` subnet, in RA (Router Advertisement) message through its -``eth0`` interface to ``eth1`` interface of ``ipv6-router`` on ``ipv4-int-network2``. + neutron port-create --name eth0-vRouter --mac-address fa:16:3e:11:11:11 ipv4-int-network2 + neutron port-create --name eth1-vRouter --mac-address fa:16:3e:22:22:22 ipv4-int-network1 + neutron port-create --name eth0-VM1 --mac-address fa:16:3e:33:33:33 ipv4-int-network1 + neutron port-create --name eth0-VM2 --mac-address fa:16:3e:44:44:44 ipv4-int-network1 ********************************************************************************************************** Boot Service VM (``vRouter``) with ``eth0`` on ``ipv4-int-network2`` and ``eth1`` on ``ipv4-int-network1`` @@ -198,14 +188,22 @@ Boot Service VM (``vRouter``) with ``eth0`` on ``ipv4-int-network2`` and ``eth1` Let us boot the service VM (``vRouter``) with ``eth0`` interface on ``ipv4-int-network2`` connecting to ``ipv6-router``, and ``eth1`` interface on ``ipv4-int-network1`` connecting to ``ipv4-router``. -**SETUP-SVM-19**: Boot the ``vRouter`` using ``Fedora20`` image on the OpenStack Compute Node with hostname +**SETUP-SVM-19**: Boot the ``vRouter`` using ``Fedora22`` image on the OpenStack Compute Node with hostname ``opnfv-os-compute`` .. code-block:: bash - nova boot --image Fedora20 --flavor m1.small --user-data ./metadata.txt --availability-zone nova:opnfv-os-compute --nic net-id=$(neutron net-list | grep -w ipv4-int-network2 | awk '{print $2}') --nic net-id=$(neutron net-list | grep -w ipv4-int-network1 | awk '{print $2}') --key-name vRouterKey vRouter + nova boot --image Fedora22 --flavor m1.small --user-data /opt/stack/opnfv_os_ipv6_poc/metadata.txt --availability-zone nova:opnfv-os-compute --nic port-id=$(neutron port-list | grep -w eth0-vRouter | awk '{print $2}') --nic port-id=$(neutron port-list | grep -w eth1-vRouter | awk '{print $2}') --key-name vRouterKey vRouter + +Please **note** that ``/opt/stack/opnfv_os_ipv6_poc/metadata.txt`` is used to enable the ``vRouter`` to automatically +spawn a ``radvd``, and: +* Act as an IPv6 vRouter which advertises the RA (Router Advertisements) with prefix ``2001:db8:0:2::/64`` on its +internal interface (``eth1``). +* Advertise RA (Router Advertisements) with just route information on its eth0 interface so that ``ipv6-router`` can +automatically add a downstream route to subnet ``2001:db8:0:2::/64`` whose next hop would be the ``eth0`` interface +of ``vRouter``. -**SETUP-SVM-20**: Verify that ``Fedora20`` image boots up successfully and the ``ssh`` keys are properly injected +**SETUP-SVM-20**: Verify that ``Fedora22`` image boots up successfully and vRouter has ``ssh`` keys properly injected .. code-block:: bash @@ -239,13 +237,13 @@ options or via ``meta-data``. .. code-block:: bash - nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny --nic net-id=$(neutron net-list | grep -w ipv4-int-network1 | awk '{print $2}') --availability-zone nova:opnfv-os-controller --key-name vRouterKey VM1 + nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny --nic port-id=$(neutron port-list | grep -w eth0-VM1 | awk '{print $2}') --availability-zone nova:opnfv-os-controller --key-name vRouterKey --user-data /opt/stack/opnfv_os_ipv6_poc/set_mtu.sh VM1 **SETUP-SVM-22**: Create VM2 on OpenStack Compute Node with hostname ``opnfv-os-compute`` .. code-block:: bash - nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny --nic net-id=$(neutron net-list | grep -w ipv4-int-network1 | awk '{print $2}') --availability-zone nova:opnfv-os-compute --key-name vRouterKey VM2 + nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny --nic port-id=$(neutron port-list | grep -w eth0-VM2 | awk '{print $2}') --availability-zone nova:opnfv-os-compute --key-name vRouterKey --user-data /opt/stack/opnfv_os_ipv6_poc/set_mtu.sh VM2 **SETUP-SVM-23**: Confirm that both the VMs are successfully booted. @@ -276,29 +274,16 @@ Now let us configure the IPv6 address on the interface. router_interface=$(ip a s | grep -w "global qr-*" | awk '{print $7}') ip -6 addr add 2001:db8:0:1::1 dev $router_interface -**SETUP-SVM-26**: Copy the following contents to some file, e.g. ``/tmp/br-ex.radvd.conf`` - -.. code-block:: bash - - interface $router_interface - { - AdvSendAdvert on; - MinRtrAdvInterval 3; - MaxRtrAdvInterval 10; - prefix 2001:db8:0:1::/64 - { - AdvOnLink on; - AdvAutonomous on; - }; - }; +**SETUP-SVM-26**: Update the file ``/opt/stack/opnfv_os_ipv6_poc/scenario2/radvd.conf`` with ``$router_interface``, +i.e. replace ``$router_interface`` with the ``qr-xxx`` interface. -**SETUP-SVM-27**: Spawn a ``radvd`` daemon to simulate an external router. This ``radvd`` daemon advertises its -IPv6 subnet prefix ``2001:db8:0:1::/64`` in RA (Router Advertisement) message through its ``eth1`` interface to -``eth0`` interface of ``vRouter`` on ``ipv4-int-network2``. +**SETUP-SVM-27**: Spawn a ``radvd`` daemon to simulate an external router. This ``radvd`` daemon advertises an IPv6 +subnet prefix of ``2001:db8:0:1::/64`` using RA (Router Advertisement) on its $router_interface so that ``eth0`` +interface of ``vRouter`` automatically configures an IPv6 SLAAC address. .. code-block:: bash - $radvd -C /tmp/br-ex.radvd.conf -p /tmp/br-ex.pid.radvd -m syslog + $radvd -C /opt/stack/opnfv_os_ipv6_poc/scenario2/radvd.conf -p /tmp/br-ex.pid.radvd -m syslog **SETUP-SVM-28**: Configure the ``$router_interface`` process entries to process the RA (Router Advertisement) message from ``vRouter``, and automatically add a downstream route pointing to the LLA (Link Local Address) of @@ -311,12 +296,26 @@ message from ``vRouter``, and automatically add a downstream route pointing to t **SETUP-SVM-29**: Please note that after the vRouter successfully initializes and starts sending RA (Router Advertisement) message (**SETUP-SVM-20**), you would see an IPv6 route to the ``2001:db8:0:2::/64`` prefix -(subnet) reachable via LLA (Link Local Address) of ``eth0`` interface of the ``vRouter``. You can execute the -following command to list the IPv6 routes. +(subnet) reachable via LLA (Link Local Address) ``fe80::f816:3eff:fe11:1111`` of ``eth0`` interface of the +``vRouter``. You can execute the following command to list the IPv6 routes. .. code-block:: bash ip -6 route show + 2001:db8:0:1::1 dev qr-42968b9e-62 proto kernel metric 256 + 2001:db8:0:1::/64 dev qr-42968b9e-62 proto kernel metric 256 expires 86384sec + 2001:db8:0:2::/64 via fe80::f816:3eff:fe11:1111 dev qr-42968b9e-62 proto ra metric 1024 expires 29sec + fe80::/64 dev qg-3736e0c7-7c proto kernel metric 256 + fe80::/64 dev qr-42968b9e-62 proto kernel metric 256 + +**SETUP-SVM-30**: If all goes well, the IPv6 addresses assigned to the VMs would be as shown as follows: + +.. code-block:: bash + + vRouter eth0 interface would have the following IPv6 address: 2001:db8:0:1:f816:3eff:fe11:1111/64 + vRouter eth1 interface would have the following IPv6 address: 2001:db8:0:2::1/64 + VM1 would have the following IPv6 address: 2001:db8:0:2:f816:3eff:fe33:3333/64 + VM2 would have the following IPv6 address: 2001:db8:0:2:f816:3eff:fe44:4444/64 ******************************** Testing to Verify Setup Complete @@ -327,7 +326,7 @@ using ``SLAAC`` with prefix ``2001:db8:0:2::/64`` from ``vRouter``. Please note that you need to get the IPv4 address associated to VM1. This can be inferred from ``nova list`` command. -**SETUP-SVM-30**: ``ssh`` VM1 +**SETUP-SVM-31**: ``ssh`` VM1 .. code-block:: bash @@ -336,13 +335,13 @@ Please note that you need to get the IPv4 address associated to VM1. This can be If everything goes well, ``ssh`` will be successful and you will be logged into VM1. Run some commands to verify that IPv6 addresses are configured on ``eth0`` interface. -**SETUP-SVM-31**: Show an IPv6 address with a prefix of ``2001:db8:0:2::/64`` +**SETUP-SVM-32**: Show an IPv6 address with a prefix of ``2001:db8:0:2::/64`` .. code-block:: bash ip address show -**SETUP-SVM-32**: ping some external IPv6 address, e.g. ``ipv6-router`` +**SETUP-SVM-33**: ping some external IPv6 address, e.g. ``ipv6-router`` .. code-block:: bash @@ -351,7 +350,7 @@ that IPv6 addresses are configured on ``eth0`` interface. If the above ping6 command succeeds, it implies that ``vRouter`` was able to successfully forward the IPv6 traffic to reach external ``ipv6-router``. -**SETUP-SVM-33**: When all tests show that the setup works as expected, You can now exit the ``ipv6-router`` namespace. +**SETUP-SVM-34**: When all tests show that the setup works as expected, You can now exit the ``ipv6-router`` namespace. .. code-block:: bash @@ -369,10 +368,10 @@ 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:`figure3`: +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: figure3 + :name: s2-figure3 :width: 100% Sample Network Topology in Horizon UI diff --git a/docs/setupservicevm/5-ipv6-configguide-scenario-1-native-os.rst b/docs/setupservicevm/5-ipv6-configguide-scenario-1-native-os.rst index 266acb1..b6c92fc 100644 --- a/docs/setupservicevm/5-ipv6-configguide-scenario-1-native-os.rst +++ b/docs/setupservicevm/5-ipv6-configguide-scenario-1-native-os.rst @@ -2,24 +2,115 @@ Scenario 1 - Native OpenStack Environment ========================================= -Scenario 1 is the native OpenStack environment. Because the anti-spoofing rule of Security Group feature in OpenStack -prevents a VM from forwarding packets, we need to work around Security Group feature in the native OpenStack -environment. +Scenario 1 is the native OpenStack environment. Although the instructions are based on Liberty, they can be +applied to Kilo in the same way. Because the anti-spoofing rules of Security Group feature in OpenStack prevents +a VM from forwarding packets, we need to disable Security Group feature in the native OpenStack environment. For exemplary purpose, we assume: -* A two-node setup of OpenStack environment is used -* The hostname of OpenStack Controller+Network+Compute Node is ``opnfv-os-controller`` -* The hostname of OpenStack Compute Node is ``opnfv-os-compute`` +* A two-node setup of OpenStack environment is used as shown in :numref:`s1-figure1` +* The hostname of OpenStack Controller+Network+Compute Node is ``opnfv-os-controller``, and the host IP address +is ``192.168.0.10`` +* The hostname of OpenStack Compute Node is ``opnfv-os-compute``, and the host IP address is ``192.168.0.20`` * Ubuntu 14.04 is installed * We use ``opnfv`` as username to login. -* We use ``devstack`` to install OpenStack Kilo +* We use ``devstack`` to install OpenStack Liberty. Please note that OpenStack Kilo can be used as well. -*********************************** -Verify OpenStack is Setup Correctly -*********************************** +.. figure:: images/ipv6-topology-scenario-1.png + :name: s1-figure1 + :width: 100% -**OS-NATIVE-1**: Show hypervisor list + Underlay Network Topology - Scenario 1 + +**Please note that the IP address shown in** :numref:`s1-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 +not conflicting with other subnets**. + +************ +Prerequisite +************ + +**OS-NATIVE-0**: Clone the following GitHub repository to get the configuration and metadata files + +.. code-block:: bash + + git clone https://github.com/sridhargaddam/opnfv_os_ipv6_poc.git /opt/stack/opnfv_os_ipv6_poc + +******************************** +Set up OpenStack Controller Node +******************************** + +We assume the hostname is ``opnfv-os-controller``, and the host IP address is ``192.168.0.10``. + +**OS-NATIVE-N-1**: Clone ``stable/liberty`` ``devstack`` code base. + +.. code-block:: bash + + git clone https://github.com/openstack-dev/devstack.git -b stable/liberty + +**OS-NATIVE-N-2**: Copy ``local.conf.controller`` to ``devstack`` as ``local.conf`` + +.. code-block:: bash + + cp /opt/stack/local.conf.controller ~/devstack/local.conf + +**OS-NATIVE-N-3**: If you want to modify any ``devstack`` configuration, update ``local.conf`` now. + +**OS-NATIVE-N-4**: Start the ``devstack`` installation. + +.. code-block:: bash + + cd ~/devstack + ./stack.sh + +**OS-NATIVE-N-5**: If all goes well, you should see the following output. + +.. code-block:: bash + + This is your host IP address: 192.168.0.10 + This is your host IPv6 address: ::1 + Horizon is now available at http://192.168.0.10/ + Keystone is serving at http://192.168.0.10:5000/ + The default users are: admin and demo + The password: password + +***************************** +Set up OpenStack Compute Node +***************************** + +We assume the hostname is ``opnfv-os-compute``, and the host IP address is ``192.168.0.20``. + +**OS-NATIVE-M-1**: Clone ``stable/liberty`` ``devstack`` code base. + +.. code-block:: bash + + git clone https://github.com/openstack-dev/devstack.git -b stable/liberty + +**OS-NATIVE-M-2**: Copy ``local.conf.compute`` to ``devstack`` as ``local.conf`` + +.. code-block:: bash + + cp /opt/stack/local.conf.compute ~/devstack/local.conf + +**OS-NATIVE-M-3**: If you want to modify any ``devstack`` configuration, update ``local.conf`` now. + +**OS-NATIVE-M-4**: Start the ``devstack`` installation. + +.. code-block:: bash + + cd ~/devstack + ./stack.sh + +**OS-NATIVE-M-5**: If all goes well, you should see the following output. + +.. code-block:: bash + + This is your host IP address: 192.168.0.20 + This is your host IPv6 address: ::1 + +**OS-NATIVE-M-6 (OPTIONAL)**: You can verify that OpenStack is set up correctly by showing hypervisor list .. code-block:: bash @@ -31,11 +122,17 @@ Verify OpenStack is Setup Correctly | 2 | opnfv-os-compute | up | enabled | +----+------------------------------------+---------+------------+ -********************************************** -Disable Security Groups in OpenStack ML2 Setup -********************************************** +******************************************************** +**Note**: Disable Security Groups in OpenStack ML2 Setup +******************************************************** + +Please note that Security Groups feature has been disabled automatically through ``local.conf`` configuration file +during the setup procedure of OpenStack in both Controller Node and Compute Node. -**OS-NATIVE-2**: Change the settings in ``/etc/neutron/plugins/ml2/ml2_conf.ini`` as follows +If you are an experienced user that installs OpenStack in a different way, please reference the following +instructions to verify that Security Groups are disabled, and configuration matches the note below. + +**OS-NATIVE-SEC-1**: Change the settings in ``/etc/neutron/plugins/ml2/ml2_conf.ini`` as follows .. code-block:: bash @@ -44,7 +141,7 @@ Disable Security Groups in OpenStack ML2 Setup enable_security_group = False firewall_driver = neutron.agent.firewall.NoopFirewallDriver -**OS-NATIVE-3**: Change the settings in ``/etc/nova/nova.conf`` as follows +**OS-NATIVE-SEC-2**: Change the settings in ``/etc/nova/nova.conf`` as follows .. code-block:: bash @@ -53,27 +150,11 @@ Disable Security Groups in OpenStack ML2 Setup security_group_api = nova firewall_driver = nova.virt.firewall.NoopFirewallDriver -*********************************************************************** -Prepare Fedora22 Image, Configuration and Metadata Files for Service VM -*********************************************************************** - -**OS-NATIVE-4**: Clone the following GitHub repository to get the configuration and metadata files - -.. code-block:: bash - - git clone https://github.com/sridhargaddam/opnfv_os_ipv6_poc.git /opt/stack/opnfv_os_ipv6_poc - -**OS-NATIVE-5**: Download ``fedora22`` image which would be used for ``vRouter`` - -.. code-block:: bash - - wget https://download.fedoraproject.org/pub/fedora/linux/releases/22/Cloud/x86_64/Images/Fedora-Cloud-Base-22-20150521.x86_64.qcow2 - ********************************* Set Up Service VM as Ipv6 vRouter ********************************* -**OS-NATIVE-5**: Now we assume that OpenStack multi-node setup is up and running. The following +**OS-NATIVE-SETUP-1**: Now we assume that OpenStack multi-node setup is up and running. The following commands should be executed: .. code-block:: bash @@ -81,19 +162,19 @@ commands should be executed: cd ~/devstack source openrc admin demo -**OS-NATIVE-6**: Download ``fedora22`` image which would be used for ``vRouter`` +**OS-NATIVE-SETUP-2**: Download ``fedora22`` image which would be used for ``vRouter`` .. code-block:: bash wget https://download.fedoraproject.org/pub/fedora/linux/releases/22/Cloud/x86_64/Images/Fedora-Cloud-Base-22-20150521.x86_64.qcow2 -**OS-NATIVE-7**: Import Fedora22 image to ``glance`` +**OS-NATIVE-SETUP-3**: Import Fedora22 image to ``glance`` .. code-block:: bash - glance image-create --name 'Fedora20' --disk-format qcow2 --container-format bare --file ./Fedora-Cloud-Base-22-20150521.x86_64.qcow2 + glance image-create --name 'Fedora22' --disk-format qcow2 --container-format bare --file ./Fedora-Cloud-Base-22-20150521.x86_64.qcow2 -**OS-NATIVE-8**: Create Neutron routers ``ipv4-router`` and ``ipv6-router`` which need to provide external +**OS-NATIVE-SETUP-4**: Create Neutron routers ``ipv4-router`` and ``ipv6-router`` which need to provide external connectivity. .. code-block:: bash @@ -101,14 +182,14 @@ connectivity. neutron router-create ipv4-router neutron router-create ipv6-router -**OS-NATIVE-9**: Create an external network/subnet ``ext-net`` using the appropriate values based on the +**OS-NATIVE-SETUP-5**: Create an external network/subnet ``ext-net`` using the appropriate values based on the data-center physical network setup. .. code-block:: bash neutron net-create --router:external ext-net -**OS-NATIVE-10**: If your ``opnfv-os-controller`` node has two interfaces ``eth0`` and ``eth1``, +**OS-NATIVE-SETUP-6**: If your ``opnfv-os-controller`` node has two interfaces ``eth0`` and ``eth1``, and ``eth1`` is used for external connectivity, move the IP address of ``eth1`` to ``br-ex``. Please note that the IP address ``198.59.156.113`` and related subnet and gateway addressed in the command @@ -124,7 +205,7 @@ below are for exemplary purpose. **Please replace them with the IP addresses of sudo ip route add default via 198.59.156.1 dev br-ex neutron subnet-create --disable-dhcp --allocation-pool start=198.59.156.251,end=198.59.156.254 --gateway 198.59.156.1 ext-net 198.59.156.0/24 -**OS-NATIVE-11**: Verify that ``br-ex`` now has the original external IP address, and that the default route is on +**OS-NATIVE-SETUP-7**: Verify that ``br-ex`` now has the original external IP address, and that the default route is on ``br-ex`` .. code-block:: bash @@ -143,7 +224,7 @@ below are for exemplary purpose. **Please replace them with the IP addresses of 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 198.59.156.0/24 dev br-ex proto kernel scope link src 198.59.156.113 -**OS-NATIVE-12**: Create Neutron networks ``ipv4-int-network1`` and ``ipv6-int-network2`` +**OS-NATIVE-SETUP-8**: Create Neutron networks ``ipv4-int-network1`` and ``ipv6-int-network2`` with port_security disabled .. code-block:: bash @@ -151,7 +232,7 @@ with port_security disabled neutron net-create --port_security_enabled=False ipv4-int-network1 neutron net-create --port_security_enabled=False ipv6-int-network2 -**OS-NATIVE-13**: Create IPv4 subnet ``ipv4-int-subnet1`` in the internal network ``ipv4-int-network1``, +**OS-NATIVE-SETUP-9**: Create IPv4 subnet ``ipv4-int-subnet1`` in the internal network ``ipv4-int-network1``, and associate it to ``ipv4-router``. .. code-block:: bash @@ -159,15 +240,15 @@ and associate it to ``ipv4-router``. neutron subnet-create --name ipv4-int-subnet1 --dns-nameserver 8.8.8.8 ipv4-int-network1 20.0.0.0/24 neutron router-interface-add ipv4-router ipv4-int-subnet1 -**OS-NATIVE-14**: Associate the ``ext-net`` to the Neutron routers ``ipv4-router`` and ``ipv6-router``. +**OS-NATIVE-SETUP-10**: Associate the ``ext-net`` to the Neutron routers ``ipv4-router`` and ``ipv6-router``. .. code-block:: bash neutron router-gateway-set ipv4-router ext-net neutron router-gateway-set ipv6-router ext-net -**OS-NATIVE-15**: Create IPv4 subnet ``ipv4-int-subnet2`` and IPv6 subnet ``ipv6-int-subnet2`` in -the internal network ``ipv6-int-network2``, and associate them to ``ipv6-router`` +**OS-NATIVE-SETUP-11**: Create two subnets, one IPv4 subnet ``ipv4-int-subnet2`` and one IPv6 subnet +``ipv6-int-subnet2`` in ``ipv6-int-network2``, and associate both subnets to ``ipv6-router`` .. code-block:: bash @@ -176,13 +257,13 @@ the internal network ``ipv6-int-network2``, and associate them to ``ipv6-router` neutron router-interface-add ipv6-router ipv4-int-subnet2 neutron router-interface-add ipv6-router ipv6-int-subnet2 -**OS-NATIVE-16**: Create a keypair +**OS-NATIVE-SETUP-12**: Create a keypair .. code-block:: bash nova keypair-add vRouterKey > ~/vRouterKey -**OS-NATIVE-17**: Create ports for vRouter (with some specific MAC address - basically for automation - +**OS-NATIVE-SETUP-13**: Create ports for vRouter (with some specific MAC address - basically for automation - to know the IPv6 addresses that would be assigned to the port). .. code-block:: bash @@ -190,31 +271,31 @@ to know the IPv6 addresses that would be assigned to the port). neutron port-create --name eth0-vRouter --mac-address fa:16:3e:11:11:11 ipv6-int-network2 neutron port-create --name eth1-vRouter --mac-address fa:16:3e:22:22:22 ipv4-int-network1 -**OS-NATIVE-18**: Create ports for VM1 and VM2. +**OS-NATIVE-SETUP-14**: Create ports for VM1 and VM2. .. code-block:: bash neutron port-create --name eth0-VM1 --mac-address fa:16:3e:33:33:33 ipv4-int-network1 neutron port-create --name eth0-VM2 --mac-address fa:16:3e:44:44:44 ipv4-int-network1 -**OS-NATIVE-19**: Update ``ipv6-router`` with routing information to subnet ``2001:db8:0:2::/64`` +**OS-NATIVE-SETUP-15**: Update ``ipv6-router`` with routing information to subnet ``2001:db8:0:2::/64`` .. code-block:: bash neutron router-update ipv6-router --routes type=dict list=true destination=2001:db8:0:2::/64,nexthop=2001:db8:0:1:f816:3eff:fe11:1111 -**OS-NATIVE-20**: Boot Service VM (``vRouter``), VM1 and VM2 +**OS-NATIVE-SETUP-16**: Boot Service VM (``vRouter``), VM1 and VM2 .. code-block:: bash - nova boot --image Fedora20 --flavor m1.small --user-data /opt/stack/opnfv_os_ipv6_poc/metadata.txt --availability-zone nova:opnfv-os-compute --nic port-id=$(neutron port-list | grep -w eth0-vRouter | awk '{print $2}') --nic port-id=$(neutron port-list | grep -w eth1-vRouter | awk '{print $2}') --key-name vRouterKey vRouter + nova boot --image Fedora22 --flavor m1.small --user-data /opt/stack/opnfv_os_ipv6_poc/metadata.txt --availability-zone nova:opnfv-os-compute --nic port-id=$(neutron port-list | grep -w eth0-vRouter | awk '{print $2}') --nic port-id=$(neutron port-list | grep -w eth1-vRouter | awk '{print $2}') --key-name vRouterKey vRouter nova list nova console-log vRouter #Please wait for some 10 to 15 minutes so that necessary packages (like radvd) are installed and vRouter is up. nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny --nic port-id=$(neutron port-list | grep -w eth0-VM1 | awk '{print $2}') --availability-zone nova:opnfv-os-controller --key-name vRouterKey --user-data /opt/stack/opnfv_os_ipv6_poc/set_mtu.sh VM1 nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny --nic port-id=$(neutron port-list | grep -w eth0-VM2 | awk '{print $2}') --availability-zone nova:opnfv-os-compute --key-name vRouterKey --user-data /opt/stack/opnfv_os_ipv6_poc/set_mtu.sh VM2 nova list # Verify that all the VMs are in ACTIVE state. -**OS-NATIVE-21**: If all goes well, the IPv6 addresses assigned to the VMs would be as shown as follows: +**OS-NATIVE-SETUP-17**: If all goes well, the IPv6 addresses assigned to the VMs would be as shown as follows: .. code-block:: bash @@ -223,24 +304,9 @@ to know the IPv6 addresses that would be assigned to the port). VM1 would have the following IPv6 address: 2001:db8:0:2:f816:3eff:fe33:3333/64 VM2 would have the following IPv6 address: 2001:db8:0:2:f816:3eff:fe44:4444/64 -**OS-NATIVE-22**: To ``SSH`` to vRouter, you can execute the following command. +**OS-NATIVE-SETUP-18**: To ``SSH`` to vRouter, you can execute the following command. .. code-block:: bash sudo ip netns exec qrouter-$(neutron router-list | grep -w ipv6-router | awk '{print $2}') ssh -i ~/vRouterKey fedora@2001:db8:0:1:f816:3eff:fe11:1111 -******************* -Miscellaneour Notes -******************* - -We are adding some static routes to the ``ipv6-router``. For whatever reason, if we want to delete the router -or dissociate the ``ipv6-router`` from ``ipv6-int-subnet2``, ``Neutron`` will not allow this operation because -the static route requires the ``ipv6-int-subnet2`` subnet. - -In order to work around this issue, and to clear the static routes associated to the ``ipv6-router``, -you may execute the following: - -.. code-block:: bash - - neutron router-update ipv6-router --routes action=clear - diff --git a/docs/setupservicevm/images/ipv6-topology-scenario-1.png b/docs/setupservicevm/images/ipv6-topology-scenario-1.png new file mode 100644 index 0000000000000000000000000000000000000000..118ff4cf931609d24d2b4faf3b541f7bf8fd3408 GIT binary patch literal 49082 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%0AF1;fgR%;F!vxOp$ax(S?zM>|VtnxeWgg~Wu% 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 R!|eqAX&l#5$yPE8{2x2nYcv1= literal 0 HcmV?d00001 diff --git a/docs/setupservicevm/images/ipv6-topology-scenario-2.png b/docs/setupservicevm/images/ipv6-topology-scenario-2.png new file mode 100644 index 0000000000000000000000000000000000000000..15f39c529af5e040632f2a674d6898425887207b GIT binary patch literal 67153 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

%+ZaO#9kMn=_rM_=>**b6K_O$8G|hbT+WN!K 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 Bx4ZxV literal 0 HcmV?d00001 diff --git a/docs/setupservicevm/index.rst b/docs/setupservicevm/index.rst index d116c5f..bc72f31 100644 --- a/docs/setupservicevm/index.rst +++ b/docs/setupservicevm/index.rst @@ -3,19 +3,25 @@ Setting Up a Service VM as an IPv6 vRouter ========================================== :Project: IPv6, http://wiki.opnfv.org/ipv6_opnfv_project -:Editors: Bin Hu (AT&T) -:Authors: Bin Hu (AT&T), Sridhar Gaddam (RedHat) +:Editors: Bin Hu (AT&T), Sridhar Gaddam (RedHat) +:Authors: Sridhar Gaddam (RedHat), Bin Hu (AT&T) -:Abstract: This document provides the users with installation guidelines to create a Service VM as - an IPv6 vRouter in OPNFV environment, i.e. integrated OpenStack with Open Daylight - environment. There are three scenarios. Scenario 1 is pre-OPNFV environment, i.e. a native - OpenStack environment without Open Daylight Controller. Scenario 2 is an OPNFV environment - where OpenStack is integrated with Open Daylight Official Lithium Release which not only - does not support IPv6 L3 Routing but also has a bug in net-virt provider implementation - that throws Java exception. Scenario 3 is similar to Scenario 2. However, Open Daylight - Lithium is patched with a fix of Java exception. The complete set of instructions walk - you through every step of preparing the infrastructure, setting up Open Daylight and - OpenStack, creating service VM and IPv6 subnet, and testing and validating the setup. +:Abstract: + +This document provides the users with installation guidelines to create a Service VM as +an IPv6 vRouter in OPNFV environment, i.e. integrated OpenStack with Open Daylight +environment. There are three scenarios. + +* Scenario 1 is pre-OPNFV environment, i.e. a native OpenStack environment +without Open Daylight Controller. +* Scenario 2 is an OPNFV environment where OpenStack is integrated with +Open Daylight Official Lithium Release. In this setup we use ODL for "Layer 2 connectivity" +and Neutron L3 agent for "Layer 3 routing". Because of a bug, which got fixed recently +and is not part of ODL SR3, we will have to manually execute certain commands to simulate +an external IPv6 Router in this setup. +* Scenario 3 is similar to Scenario 2. However, we use an Open Daylight Lithium +controller which is built from the latest stable/Lithium branch which includes the fix. +In this scenario, we can fully automate the setup similar to Scenario 1. .. toctree:: :numbered: diff --git a/docs/setupservicevm/scenario-2.rst b/docs/setupservicevm/scenario-2.rst index ff30973..3ffe43c 100644 --- a/docs/setupservicevm/scenario-2.rst +++ b/docs/setupservicevm/scenario-2.rst @@ -5,7 +5,9 @@ Scenario 2 - OpenStack + Open Daylight Lithium Official Release Scenario 2 is the environment of OpenStack + Open Daylight Lithium Official Release. Because Lithium Official Release does not support IPv6 L3 Routing, we need to enable Neutron L3 Agent instead of Open Daylight L3 function, while we still use Open Daylight for L2 switching. Because there is a bug in net-virt provider -implementation, we need to use manual configuration to work around this bug / Java exception. +implementation, we need to use manual configuration to simulate IPv6 external router in our setup. + +Please note that although the instructions are based on OpenStack Kilo, they can be applied to Liberty in the same way. .. toctree:: :numbered: diff --git a/docs/setupservicevm/scenario-3.rst b/docs/setupservicevm/scenario-3.rst index 0c5c432..db590fe 100644 --- a/docs/setupservicevm/scenario-3.rst +++ b/docs/setupservicevm/scenario-3.rst @@ -1,10 +1,10 @@ =============================================================== -Scenario 3 - OpenStack + Open Daylight Lithium Official Release +Scenario 3 - OpenStack + Open Daylight Lithium with Patch of Bug Fix =============================================================== -Scenario 3 is the environment of OpenStack + Open Daylight Lithium Official Release. Because Lithium Official -Release does not support IPv6 L3 Routing, we need to enable Neutron L3 Agent instead of Open Daylight L3 -function, while we still use Open Daylight for L2 switching. +Scenario 3 is the environment of OpenStack + Open Daylight Lithium, however, Lithium is patched with a bug fix of +net-virt provider implementation that throws Java exception. Because Lithium still does not support IPv6 L3 Routing, we +need to enable Neutron L3 Agent instead of Open Daylight L3 function, while we still use Open Daylight for L2 switching. .. toctree:: :numbered: -- 2.16.6