From faea848d5f92bf64d7d1153ffef011cf9418b8ce Mon Sep 17 00:00:00 2001 From: Roman Sokolkov Date: Fri, 15 Jun 2012 17:13:33 +0400 Subject: [PATCH] Added vlan range management for OVS plugin * Added integer config flags: vlan_min, vlan_max * If vlan_min is larger than vlan_max log warn and use default values * Changed test_vlan_map.py in favor removed definitions of VlanMap class Change-Id: Iaba819e62d70a9c9935cae195718dbf74d13884a --- .../openvswitch/ovs_quantum_plugin.ini | 4 ++++ quantum/plugins/openvswitch/common/config.py | 2 ++ .../plugins/openvswitch/ovs_quantum_plugin.py | 19 ++++++++++++++----- .../openvswitch/tests/unit/test_vlan_map.py | 12 ++++++------ 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini b/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini index def82079c..349347a25 100644 --- a/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini +++ b/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini @@ -28,6 +28,10 @@ tunnel_bridge = br-tun # Set local-ip to be the local IP address of this hypervisor. # local_ip = 10.0.0.3 +# Uncomment if you want to use custom VLAN range. +# vlan_min = 1 +# vlan_max = 4094 + [AGENT] # Agent's polling interval in seconds polling_interval = 2 diff --git a/quantum/plugins/openvswitch/common/config.py b/quantum/plugins/openvswitch/common/config.py index daff1d5cd..16ff7d9cf 100644 --- a/quantum/plugins/openvswitch/common/config.py +++ b/quantum/plugins/openvswitch/common/config.py @@ -27,6 +27,8 @@ ovs_opts = [ cfg.StrOpt('integration_bridge', default='br-int'), cfg.StrOpt('tunnel_bridge', default='br-tun'), cfg.StrOpt('local_ip', default='10.0.0.3'), + cfg.IntOpt('vlan_min', default=1), + cfg.IntOpt('vlan_max', default=4094), ] agent_opts = [ diff --git a/quantum/plugins/openvswitch/ovs_quantum_plugin.py b/quantum/plugins/openvswitch/ovs_quantum_plugin.py index bb5db8efa..059451af4 100644 --- a/quantum/plugins/openvswitch/ovs_quantum_plugin.py +++ b/quantum/plugins/openvswitch/ovs_quantum_plugin.py @@ -45,13 +45,13 @@ class VlanMap(object): vlans = {} net_ids = {} free_vlans = set() - VLAN_MIN = 1 - VLAN_MAX = 4094 - def __init__(self): + def __init__(self, vlan_min=1, vlan_max=4094): + self.vlan_min = vlan_min + self.vlan_max = vlan_max self.vlans.clear() self.net_ids.clear() - self.free_vlans = set(xrange(self.VLAN_MIN, self.VLAN_MAX + 1)) + self.free_vlans = set(xrange(self.vlan_min, self.vlan_max + 1)) def already_used(self, vlan_id, network_id): self.free_vlans.remove(vlan_id) @@ -102,7 +102,16 @@ class OVSQuantumPlugin(QuantumPluginBase): options.update({"reconnect_interval": reconnect_interval}) db.configure_db(options) - self.vmap = VlanMap() + vlan_min = conf.OVS.vlan_min + vlan_max = conf.OVS.vlan_max + + if vlan_min > vlan_max: + LOG.warn("Using default VLAN values! vlan_min = %s is larger" + " than vlan_max = %s!" % (vlan_min, vlan_max)) + vlan_min = 1 + vlan_max = 4094 + + self.vmap = VlanMap(vlan_min, vlan_max) # Populate the map with anything that is already present in the # database vlans = ovs_db.get_vlans() diff --git a/quantum/plugins/openvswitch/tests/unit/test_vlan_map.py b/quantum/plugins/openvswitch/tests/unit/test_vlan_map.py index ec8a870bf..30d75cc82 100644 --- a/quantum/plugins/openvswitch/tests/unit/test_vlan_map.py +++ b/quantum/plugins/openvswitch/tests/unit/test_vlan_map.py @@ -32,8 +32,8 @@ class VlanMapTest(unittest.TestCase): def testAddVlan(self): vlan_id = self.vmap.acquire("foobar") - self.assertTrue(vlan_id >= VlanMap.VLAN_MIN) - self.assertTrue(vlan_id <= VlanMap.VLAN_MAX) + self.assertTrue(vlan_id >= self.vmap.vlan_min) + self.assertTrue(vlan_id <= self.vmap.vlan_max) def testReleaseVlan(self): vlan_id = self.vmap.acquire("foobar") @@ -41,11 +41,11 @@ class VlanMapTest(unittest.TestCase): def testAddRelease4kVlans(self): vlan_id = None - num_vlans = VlanMap.VLAN_MAX - VlanMap.VLAN_MIN + num_vlans = self.vmap.vlan_max - self.vmap.vlan_min for id in xrange(num_vlans): vlan_id = self.vmap.acquire("net-%s" % id) - self.assertTrue(vlan_id >= VlanMap.VLAN_MIN) - self.assertTrue(vlan_id <= VlanMap.VLAN_MAX) + self.assertTrue(vlan_id >= self.vmap.vlan_min) + self.assertTrue(vlan_id <= self.vmap.vlan_max) for id in xrange(num_vlans): self.vmap.release("net-%s" % id) @@ -56,7 +56,7 @@ class VlanMapTest(unittest.TestCase): # this value is high enough that we will exhaust # all VLANs. We want to make sure 'existing_vlan' # is never reallocated. - num_vlans = VlanMap.VLAN_MAX - VlanMap.VLAN_MIN + 1 + num_vlans = self.vmap.vlan_max - self.vmap.vlan_min + 1 for x in xrange(num_vlans): vlan_id = self.vmap.acquire("net-%x" % x) self.assertTrue(vlan_id != existing_vlan) -- 2.45.2