diff options
Diffstat (limited to 'tests/integrated/test_vrrp_linux_multi.py')
-rw-r--r-- | tests/integrated/test_vrrp_linux_multi.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/integrated/test_vrrp_linux_multi.py b/tests/integrated/test_vrrp_linux_multi.py new file mode 100644 index 00000000..ae4d837a --- /dev/null +++ b/tests/integrated/test_vrrp_linux_multi.py @@ -0,0 +1,103 @@ +# 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. + +""" +Usage: +PYTHONPATH=. ./bin/ryu-manager --verbose \ + ryu.services.protocols.vrrp.dumper \ + ryu.services.protocols.vrrp.sample_manager.py \ + ryu.app.rest \ + tests.integrated.test_vrrp_linux_multi + +ryu.services.protocols.vrrp.dumper is optional. +ryu.app.rest is merely to prevent ryu-manager from exiting. + + ---------------- + /--<--veth0-->| | + Ryu | linux bridge |<--veth2--> command to generate packets + \--<--veth1-->| (vrrpbr) | + ---------------- + + +# ip link add veth0 type veth peer name veth0-br +# ip link add veth1 type veth peer name veth1-br +# ip link add veth2 type veth peer name veth2-br + +# brctl addbr vrrpbr +# brctl addif vrrpbr veth0-br +# brctl addif vrrpbr veth1-br +# brctl addif vrrpbr veth2-br + + +# ip link set veth0 up +# ip link set veth0-br up +# ip link set veth1 up +# ip link set veth1-br up +# ip link set veth2 up +# ip link set veth2-br up +# ip link set vrrpbr up + +if you like, capture packets on each interfaces like +# tshark -i vrrpbr +# tshark -i veth0 +# tshark -i veth1 +# tshark -i veth2 + +virtual router mac address: 00:00:5E:00:01:{VRID} = 00:00:5E:00:01:07 +during working, send packets destined to mac address 00:00:5E:00:01:07 +from veth2 by packet generator like packeth + +NOTE: vrid: 7 and ip address: 10.0.0.1... are hardcoded below +""" + +from ryu.base import app_manager +from ryu.lib import hub +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 +from ryu.services.protocols.vrrp import monitor_linux + +from . import vrrp_common + + +class VRRPConfigApp(vrrp_common.VRRPCommon): + _IFNAME0 = 'veth0' + _IFNAME1 = 'veth1' + + def __init__(self, *args, **kwargs): + super(VRRPConfigApp, self).__init__(*args, **kwargs) + + def start(self): + hub.spawn(self._main) + + def _configure_vrrp_router(self, vrrp_version, priority, + primary_ip_address, ifname, vrid): + interface = vrrp_event.VRRPInterfaceNetworkDevice( + lib_mac.DONTCARE_STR, primary_ip_address, None, ifname) + self.logger.debug('%s', interface) + + vip = '10.0.%d.1' % vrid + ip_addresses = [vip] + config = vrrp_event.VRRPConfig( + version=vrrp_version, vrid=vrid, priority=priority, + ip_addresses=ip_addresses) + self.logger.debug('%s', config) + + rep = vrrp_api.vrrp_config(self, interface, config) + self.logger.debug('%s', rep) + + return rep |