diff options
author | 2016-01-31 18:35:28 -0800 | |
---|---|---|
committer | 2016-03-07 18:59:02 -0800 | |
commit | 63659fe4a60dfb18bbc8cc835d6d1c4fe7317a60 (patch) | |
tree | 5e9365a8a9e3a15552ad1fdba1fb83f3b0ad5390 /os_net_config/tests | |
parent | c545e46f8fe2362df81e86c187aa6e50be185ad6 (diff) |
Enable os_net_config to configure IVS
This change generates /etc/sysconf/network-scripts/ifcfg-* for ivs.
It also generates /etc/sysconf/ivs configuration file for ivs.
It supports only RedHat at this point.
Indigo Virtual Switch (IVS, https://github.com/floodlight/ivs)
is a virtual switch for Linux. It is compatible with the KVM
hypervisor and leveraging the Open vSwitch kernel module for
packet forwarding. There are three major differences between
IVS and OVS:
1. Each node can have at most one ivs, name is not required.
2. Bond is not allowed to attach to an ivs. It is the SDN
controller's job to dynamically form bonds on ivs.
3. IP address can only be statically assigned.
Change-Id: I276d736794d123405de793c2a4eb2c1ee55a0fad
Diffstat (limited to 'os_net_config/tests')
-rw-r--r-- | os_net_config/tests/test_impl_ifcfg.py | 44 | ||||
-rw-r--r-- | os_net_config/tests/test_objects.py | 55 |
2 files changed, 99 insertions, 0 deletions
diff --git a/os_net_config/tests/test_impl_ifcfg.py b/os_net_config/tests/test_impl_ifcfg.py index 8a60a8d..bf3ce7c 100644 --- a/os_net_config/tests/test_impl_ifcfg.py +++ b/os_net_config/tests/test_impl_ifcfg.py @@ -187,6 +187,34 @@ BOOTPROTO=dhcp """ +_IVS_UPLINK = """# This file is autogenerated by os-net-config +DEVICE=em1 +ONBOOT=yes +HOTPLUG=no +NM_CONTROLLED=no +DEVICETYPE=ivs +IVS_BRIDGE=ivs +BOOTPROTO=none +""" + +_IVS_INTERFACE = """# This file is autogenerated by os-net-config +DEVICE=storage5 +ONBOOT=yes +HOTPLUG=no +NM_CONTROLLED=no +TYPE=IVSIntPort +DEVICETYPE=ivs +IVS_BRIDGE=ivs +MTU=1500 +BOOTPROTO=static +IPADDR=172.16.2.7 +NETMASK=255.255.255.0 +""" + +_IVS_CONFIG = ('DAEMON_ARGS=\"--hitless --certificate /etc/ivs ' + '--inband-vlan 4092 -u em1 --internal-port=storage5\"') + + class TestIfcfgNetConfig(base.TestCase): def setUp(self): @@ -348,6 +376,22 @@ class TestIfcfgNetConfig(base.TestCase): self.assertEqual(_OVS_BRIDGE_DHCP_OVS_EXTRA, self.provider.bridge_data['br-ctlplane']) + def test_network_ivs_with_uplink_and_interface(self): + interface = objects.Interface('em1') + v4_addr = objects.Address('172.16.2.7/24') + ivs_interface = objects.IvsInterface(vlan_id=5, + name='storage', + addresses=[v4_addr]) + bridge = objects.IvsBridge(members=[interface, ivs_interface]) + self.provider.add_interface(interface) + self.provider.add_ivs_interface(ivs_interface) + self.provider.add_bridge(bridge) + self.assertEqual(_IVS_UPLINK, self.get_interface_config()) + self.assertEqual(_IVS_INTERFACE, + self.provider.ivsinterface_data[ivs_interface.name]) + data = self.provider.generate_ivs_config(['em1'], ['storage5']) + self.assertEqual(_IVS_CONFIG, data) + def test_add_vlan(self): vlan = objects.Vlan('em1', 5) self.provider.add_vlan(vlan) diff --git a/os_net_config/tests/test_objects.py b/os_net_config/tests/test_objects.py index a2e021b..83f9221 100644 --- a/os_net_config/tests/test_objects.py +++ b/os_net_config/tests/test_objects.py @@ -343,6 +343,61 @@ class TestLinuxBridge(base.TestCase): self.assertEqual("br-foo", interface2.linux_bridge_name) +class TestIvsBridge(base.TestCase): + + def test_interface_from_json(self): + data = """{ +"type": "ivs_bridge", +"members": [{ + "type": "interface", + "name": "nic2" +}] +} +""" + bridge = objects.object_from_json(json.loads(data)) + self.assertEqual("ivs", bridge.name) + interface1 = bridge.members[0] + self.assertEqual("nic2", interface1.name) + self.assertEqual(False, interface1.ovs_port) + self.assertEqual("ivs", interface1.ivs_bridge_name) + + def test_ivs_interface_from_json(self): + data = """{ +"type": "ivs_bridge", +"members": [{ + "type": "ivs_interface", + "name": "storage", + "vlan_id": 202 +}] +} +""" + bridge = objects.object_from_json(json.loads(data)) + self.assertEqual("ivs", bridge.name) + interface1 = bridge.members[0] + self.assertEqual("storage202", interface1.name) + self.assertEqual(False, interface1.ovs_port) + self.assertEqual("ivs", interface1.ivs_bridge_name) + + def test_bond_interface_from_json(self): + data = """{ +"type": "ivs_bridge", +"members": [{ + "type": "linux_bond", + "name": "bond1", + "members": [ + {"type": "interface", "name": "nic2"}, + {"type": "interface", "name": "nic3"} + ] +}] +} +""" + err = self.assertRaises(objects.InvalidConfigException, + objects.IvsBridge.from_json, + json.loads(data)) + expected = 'IVS does not support bond interfaces.' + self.assertIn(expected, err) + + class TestBond(base.TestCase): def test_from_json_dhcp(self): |