doc: add test-vrrp page
port from wiki page. Signed-off-by: Yoshihiro Kaneko <ykaneko0929@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
parent
f0df43b4b3
commit
6eb3417388
@ -15,6 +15,7 @@ Contents:
|
||||
getting_started.rst
|
||||
developing.rst
|
||||
configuration.rst
|
||||
tests.rst
|
||||
using_with_openstack.rst
|
||||
|
||||
Indices and tables
|
||||
|
217
doc/source/test-vrrp.rst
Normal file
217
doc/source/test-vrrp.rst
Normal file
@ -0,0 +1,217 @@
|
||||
===================
|
||||
Testing VRRP Module
|
||||
===================
|
||||
|
||||
This page describes how to test Ryu VRRP service
|
||||
|
||||
Running integrated tests
|
||||
========================
|
||||
|
||||
Some testing scripts are available.
|
||||
|
||||
* ryu/tests/integrated/test_vrrp_linux_multi.py
|
||||
* ryu/tests/integrated/test_vrrp_multi.py
|
||||
|
||||
Each files include how to run in the comment.
|
||||
Please refer to it.
|
||||
|
||||
|
||||
Running multiple Ryu VRRP in network namespace
|
||||
==============================================
|
||||
|
||||
The following command lines set up necessary bridges and interfaces.
|
||||
|
||||
And then run RYU-VRRP::
|
||||
|
||||
# ip netns add gateway1
|
||||
# ip netns add gateway2
|
||||
|
||||
# brctl addbr vrrp-br0
|
||||
# brctl addbr vrrp-br1
|
||||
|
||||
# ip link add veth0 type veth peer name veth0-br0
|
||||
# ip link add veth1 type veth peer name veth1-br0
|
||||
# ip link add veth2 type veth peer name veth2-br0
|
||||
# ip link add veth3 type veth peer name veth3-br1
|
||||
# ip link add veth4 type veth peer name veth4-br1
|
||||
# ip link add veth5 type veth peer name veth5-br1
|
||||
|
||||
# brctl addif vrrp-br0 veth0-br0
|
||||
# brctl addif vrrp-br0 veth1-br0
|
||||
# brctl addif vrrp-br0 veth2-br0
|
||||
# brctl addif vrrp-br1 veth3-br1
|
||||
# brctl addif vrrp-br1 veth4-br1
|
||||
# brctl addif vrrp-br1 veth5-br1
|
||||
|
||||
# ip link set vrrp-br0 up
|
||||
# ip link set vrrp-br1 up
|
||||
|
||||
# ip link set veth0 up
|
||||
# ip link set veth0-br0 up
|
||||
# ip link set veth1-br0 up
|
||||
# ip link set veth2-br0 up
|
||||
# ip link set veth3-br1 up
|
||||
# ip link set veth4-br1 up
|
||||
# ip link set veth5 up
|
||||
# ip link set veth5-br1 up
|
||||
|
||||
# ip link set veth1 netns gateway1
|
||||
# ip link set veth2 netns gateway2
|
||||
# ip link set veth3 netns gateway1
|
||||
# ip link set veth4 netns gateway2
|
||||
|
||||
# ip netns exec gateway1 ip link set veth1 up
|
||||
# ip netns exec gateway2 ip link set veth2 up
|
||||
# ip netns exec gateway1 ip link set veth3 up
|
||||
# ip netns exec gateway2 ip link set veth4 up
|
||||
|
||||
# ip netns exec gateway1 .ryu-vrrp veth1 '10.0.0.2' 254
|
||||
# ip netns exec gateway2 .ryu-vrrp veth2 '10.0.0.3' 100
|
||||
|
||||
|
||||
.. admonition:: Caveats
|
||||
|
||||
Please make sure that all interfaces and bridges are UP.
|
||||
Don't forget interfaces in netns gateway1/gateway2.
|
||||
|
||||
::
|
||||
|
||||
^ veth5
|
||||
|
|
||||
V veth5-br1
|
||||
-----------------------
|
||||
|Linux Brirge vrrp-br1|
|
||||
-----------------------
|
||||
veth3-br1^ ^ veth4-br1
|
||||
| |
|
||||
veth3V V veth4
|
||||
---------- ----------
|
||||
|netns | |netns |
|
||||
|gateway1| |gateway2|
|
||||
|ryu-vrrp| |ryu-vrrp|
|
||||
---------- ----------
|
||||
veth1^ ^ veth2
|
||||
| |
|
||||
veth1-br0V V veth2-br0
|
||||
-----------------------
|
||||
|Linux Brirge vrrp-br0|
|
||||
-----------------------
|
||||
^ veth0-br0
|
||||
|
|
||||
V veth0
|
||||
|
||||
|
||||
|
||||
Here's the helper executable, ryu-vrrp::
|
||||
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation.
|
||||
# Copyright (C) 2013 Isaku Yamahata <yamahata at valinux co jp>
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
# implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from ryu.lib import hub
|
||||
hub.patch()
|
||||
|
||||
# TODO:
|
||||
# Right now, we have our own patched copy of ovs python bindings
|
||||
# Once our modification is upstreamed and widely deployed,
|
||||
# use it
|
||||
#
|
||||
# NOTE: this modifies sys.path and thus affects the following imports.
|
||||
# eg. oslo.config.cfg.
|
||||
import ryu.contrib
|
||||
|
||||
from oslo.config import cfg
|
||||
import logging
|
||||
import netaddr
|
||||
import sys
|
||||
import time
|
||||
|
||||
from ryu import log
|
||||
log.early_init_log(logging.DEBUG)
|
||||
|
||||
from ryu import flags
|
||||
from ryu import version
|
||||
from ryu.base import app_manager
|
||||
from ryu.controller import controller
|
||||
from ryu.lib import mac as lib_mac
|
||||
from ryu.lib.packet import vrrp
|
||||
from ryu.services.protocols.vrrp import api as vrrp_api
|
||||
from ryu.services.protocols.vrrp import event as vrrp_event
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
_VRID = 7
|
||||
_IP_ADDRESS = '10.0.0.1'
|
||||
_PRIORITY = 100
|
||||
|
||||
|
||||
class VRRPTestRouter(app_manager.RyuApp):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(VRRPTestRouter, self).__init__(*args, **kwargs)
|
||||
print args
|
||||
self.logger.debug('vrrp_config %s', args)
|
||||
self._ifname = args[0]
|
||||
self._primary_ip_address = args[1]
|
||||
self._priority = int(args[2])
|
||||
|
||||
def start(self):
|
||||
print 'start'
|
||||
hub.spawn(self._main)
|
||||
|
||||
def _main(self):
|
||||
print self
|
||||
interface = vrrp_event.VRRPInterfaceNetworkDevice(
|
||||
lib_mac.DONTCARE, self._primary_ip_address, None, self._ifname)
|
||||
self.logger.debug('%s', interface)
|
||||
|
||||
ip_addresses = [_IP_ADDRESS]
|
||||
config = vrrp_event.VRRPConfig(
|
||||
version=vrrp.VRRP_VERSION_V3, vrid=_VRID, priority=self._priority,
|
||||
ip_addresses=ip_addresses)
|
||||
self.logger.debug('%s', config)
|
||||
|
||||
rep = vrrp_api.vrrp_config(self, interface, config)
|
||||
self.logger.debug('%s', rep)
|
||||
|
||||
|
||||
def main():
|
||||
vrrp_config = sys.argv[-3:]
|
||||
sys.argv = sys.argv[:-3]
|
||||
CONF(project='ryu', version='ryu-vrrp %s' % version)
|
||||
|
||||
log.init_log()
|
||||
# always enable ofp for now.
|
||||
app_lists = ['ryu.services.protocols.vrrp.manager',
|
||||
'ryu.services.protocols.vrrp.dumper',
|
||||
'ryu.services.protocols.vrrp.sample_manager']
|
||||
|
||||
app_mgr = app_manager.AppManager.get_instance()
|
||||
app_mgr.load_apps(app_lists)
|
||||
contexts = app_mgr.create_contexts()
|
||||
app_mgr.instantiate_apps(**contexts)
|
||||
vrrp_router = app_mgr.instantiate(VRRPTestRouter, *vrrp_config, **contexts)
|
||||
vrrp_router.start()
|
||||
|
||||
while True:
|
||||
time.sleep(999999)
|
||||
|
||||
app_mgr.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
7
doc/source/tests.rst
Normal file
7
doc/source/tests.rst
Normal file
@ -0,0 +1,7 @@
|
||||
*****
|
||||
Tests
|
||||
*****
|
||||
|
||||
.. toctree::
|
||||
|
||||
test-vrrp.rst
|
Loading…
x
Reference in New Issue
Block a user