Merge "Add enable_tunneling openvswitch configuration variable"

This commit is contained in:
Jenkins 2012-09-11 06:27:13 +00:00 committed by Gerrit Code Review
commit c0473e1985
6 changed files with 163 additions and 110 deletions

View File

@ -34,6 +34,12 @@ reconnect_interval = 2
# Default: network_vlan_ranges =
# Example: network_vlan_ranges = physnet1:1000:2999
# (BoolOpt) Set to True in the server and the agents to enable support
# for GRE networks. Requires kernel support for OVS patch ports and
# GRE tunneling.
#
# Default: enable_tunneling = False
# (ListOpt) Comma-separated list of <tun_min>:<tun_max> tuples
# enumerating ranges of GRE tunnel IDs that are available for tenant
# network allocation if tenant_network_type is 'gre'.

View File

@ -135,7 +135,7 @@ class OVSQuantumAgent(object):
def __init__(self, integ_br, tun_br, local_ip,
bridge_mappings, root_helper,
polling_interval, reconnect_interval, rpc):
polling_interval, reconnect_interval, rpc, enable_tunneling):
'''Constructor.
:param integ_br: name of the integration bridge.
@ -146,6 +146,7 @@ class OVSQuantumAgent(object):
:param polling_interval: interval (secs) to poll DB.
:param reconnect_internal: retry interval (secs) on DB error.
:param rpc: if True use RPC interface to interface with plugin.
:param enable_tunneling: if True enable GRE networks.
'''
self.root_helper = root_helper
self.available_local_vlans = set(
@ -158,9 +159,11 @@ class OVSQuantumAgent(object):
self.polling_interval = polling_interval
self.reconnect_interval = reconnect_interval
self.enable_tunneling = enable_tunneling
self.local_ip = local_ip
self.tunnel_count = 0
self.setup_tunnel_br(tun_br)
if self.enable_tunneling:
self.setup_tunnel_br(tun_br)
self.rpc = rpc
if rpc:
@ -214,6 +217,8 @@ class OVSQuantumAgent(object):
def tunnel_update(self, context, **kwargs):
LOG.debug("tunnel_update received")
if not self.enable_tunneling:
return
tunnel_ip = kwargs.get('tunnel_ip')
tunnel_id = kwargs.get('tunnel_id')
if tunnel_ip == self.local_ip:
@ -240,54 +245,72 @@ class OVSQuantumAgent(object):
'''
if not self.available_local_vlans:
raise Exception("No local VLAN available for net-id=%s" % net_uuid)
LOG.error("No local VLAN available for net-id=%s", net_uuid)
return
lvid = self.available_local_vlans.pop()
LOG.info("Assigning %s as local vlan for net-id=%s" % (lvid, net_uuid))
LOG.info("Assigning %s as local vlan for net-id=%s", lvid, net_uuid)
self.local_vlan_map[net_uuid] = LocalVLANMapping(lvid, network_type,
physical_network,
segmentation_id)
if network_type == constants.TYPE_GRE:
# outbound
self.tun_br.add_flow(priority=4, in_port=self.patch_int_ofport,
dl_vlan=lvid,
actions="set_tunnel:%s,normal" %
segmentation_id)
# inbound bcast/mcast
self.tun_br.add_flow(priority=3, tun_id=segmentation_id,
dl_dst="01:00:00:00:00:00/01:00:00:00:00:00",
actions="mod_vlan_vid:%s,output:%s" %
(lvid, self.patch_int_ofport))
if self.enable_tunneling:
# outbound
self.tun_br.add_flow(priority=4, in_port=self.patch_int_ofport,
dl_vlan=lvid,
actions="set_tunnel:%s,normal" %
segmentation_id)
# inbound bcast/mcast
self.tun_br.add_flow(priority=3, tun_id=segmentation_id,
dl_dst=
"01:00:00:00:00:00/01:00:00:00:00:00",
actions="mod_vlan_vid:%s,output:%s" %
(lvid, self.patch_int_ofport))
else:
LOG.error("Cannot provision GRE network for net-id=%s "
"- tunneling disabled", net_uuid)
elif network_type == constants.TYPE_FLAT:
# outbound
br = self.phys_brs[physical_network]
br.add_flow(priority=4,
in_port=self.phys_ofports[physical_network],
dl_vlan=lvid,
actions="strip_vlan,normal")
# inbound
self.int_br.add_flow(priority=3,
in_port=self.int_ofports[physical_network],
dl_vlan=0xffff,
actions="mod_vlan_vid:%s,normal" % lvid)
if physical_network in self.phys_brs:
# outbound
br = self.phys_brs[physical_network]
br.add_flow(priority=4,
in_port=self.phys_ofports[physical_network],
dl_vlan=lvid,
actions="strip_vlan,normal")
# inbound
self.int_br.add_flow(priority=3,
in_port=
self.int_ofports[physical_network],
dl_vlan=0xffff,
actions="mod_vlan_vid:%s,normal" % lvid)
else:
LOG.error("Cannot provision flat network for net-id=%s "
"- no bridge for physical_network %s", net_uuid,
physical_network)
elif network_type == constants.TYPE_VLAN:
# outbound
br = self.phys_brs[physical_network]
br.add_flow(priority=4,
in_port=self.phys_ofports[physical_network],
dl_vlan=lvid,
actions="mod_vlan_vid:%s,normal" % segmentation_id)
# inbound
self.int_br.add_flow(priority=3,
in_port=self.int_ofports[physical_network],
dl_vlan=segmentation_id,
actions="mod_vlan_vid:%s,normal" % lvid)
if physical_network in self.phys_brs:
# outbound
br = self.phys_brs[physical_network]
br.add_flow(priority=4,
in_port=self.phys_ofports[physical_network],
dl_vlan=lvid,
actions="mod_vlan_vid:%s,normal" % segmentation_id)
# inbound
self.int_br.add_flow(priority=3,
in_port=self.
int_ofports[physical_network],
dl_vlan=segmentation_id,
actions="mod_vlan_vid:%s,normal" % lvid)
else:
LOG.error("Cannot provision VLAN network for net-id=%s "
"- no bridge for physical_network %s", net_uuid,
physical_network)
elif network_type == constants.TYPE_LOCAL:
# no flows needed for local networks
pass
else:
LOG.error("provisioning unknown network type %s for net-id=%s" %
(network_type, net_uuid))
LOG.error("Cannot provision unknown network type %s for "
"net-id=%s", network_type, net_uuid)
def reclaim_local_vlan(self, net_uuid, lvm):
'''Reclaim a local VLAN.
@ -295,36 +318,40 @@ class OVSQuantumAgent(object):
:param net_uuid: the network uuid associated with this vlan.
:param lvm: a LocalVLANMapping object that tracks (vlan, lsw_id,
vif_ids) mapping.'''
LOG.info("reclaiming vlan = %s from net-id = %s" %
(lvm.vlan, net_uuid))
LOG.info("Reclaiming vlan = %s from net-id = %s", lvm.vlan, net_uuid)
if lvm.network_type == constants.TYPE_GRE:
self.tun_br.delete_flows(tun_id=lvm.segmentation_id)
self.tun_br.delete_flows(dl_vlan=lvm.vlan)
if self.enable_tunneling:
self.tun_br.delete_flows(tun_id=lvm.segmentation_id)
self.tun_br.delete_flows(dl_vlan=lvm.vlan)
elif lvm.network_type == constants.TYPE_FLAT:
# outbound
br = self.phys_brs[lvm.physical_network]
br.delete_flows(in_port=self.phys_ofports[lvm.physical_network],
dl_vlan=lvm.vlan)
# inbound
br = self.int_br
br.delete_flows(in_port=self.int_ofports[lvm.physical_network],
dl_vlan=0xffff)
if lvm.physical_network in self.phy_brs:
# outbound
br = self.phys_brs[lvm.physical_network]
br.delete_flows(in_port=self.phys_ofports[lvm.
physical_network],
dl_vlan=lvm.vlan)
# inbound
br = self.int_br
br.delete_flows(in_port=self.int_ofports[lvm.physical_network],
dl_vlan=0xffff)
elif lvm.network_type == constants.TYPE_VLAN:
# outbound
br = self.phys_brs[lvm.physical_network]
br.delete_flows(in_port=self.phys_ofports[lvm.physical_network],
dl_vlan=lvm.vlan)
# inbound
br = self.int_br
br.delete_flows(in_port=self.int_ofports[lvm.physical_network],
dl_vlan=lvm.segmentation_id)
if lvm.physical_network in self.phy_brs:
# outbound
br = self.phys_brs[lvm.physical_network]
br.delete_flows(in_port=self.phys_ofports[lvm.
physical_network],
dl_vlan=lvm.vlan)
# inbound
br = self.int_br
br.delete_flows(in_port=self.int_ofports[lvm.physical_network],
dl_vlan=lvm.segmentation_id)
elif lvm.network_type == constants.TYPE_LOCAL:
# no flows needed for local networks
pass
else:
LOG.error("reclaiming unknown network type %s for net-id=%s" %
(lvm.network_type, net_uuid))
LOG.error("Cannot reclaim unknown network type %s for net-id=%s",
lvm.network_type, net_uuid)
del self.local_vlan_map[net_uuid]
self.available_local_vlans.add(lvm.vlan)
@ -347,10 +374,12 @@ class OVSQuantumAgent(object):
lvm.vif_ports[port.vif_id] = port
if network_type == constants.TYPE_GRE:
# inbound unicast
self.tun_br.add_flow(priority=3, tun_id=segmentation_id,
dl_dst=port.vif_mac,
actions="mod_vlan_vid:%s,normal" % lvm.vlan)
if self.enable_tunneling:
# inbound unicast
self.tun_br.add_flow(priority=3, tun_id=segmentation_id,
dl_dst=port.vif_mac,
actions="mod_vlan_vid:%s,normal" %
lvm.vlan)
self.int_br.set_db_attribute("Port", port.port_name, "tag",
str(lvm.vlan))
@ -369,20 +398,20 @@ class OVSQuantumAgent(object):
net_uuid = self.get_net_uuid(vif_id)
if not self.local_vlan_map.get(net_uuid):
LOG.info('port_unbound() net_uuid %s not in local_vlan_map' %
LOG.info('port_unbound() net_uuid %s not in local_vlan_map',
net_uuid)
return
lvm = self.local_vlan_map[net_uuid]
if lvm.network_type == 'gre':
# remove inbound unicast flow
self.tun_br.delete_flows(tun_id=lvm.segmentation_id,
dl_dst=lvm.vif_ports[vif_id].vif_mac)
if self.enable_tunneling:
# remove inbound unicast flow
self.tun_br.delete_flows(tun_id=lvm.segmentation_id,
dl_dst=lvm.vif_ports[vif_id].vif_mac)
if vif_id in lvm.vif_ports:
del lvm.vif_ports[vif_id]
else:
LOG.info('port_unbound: vid_id %s not in local_vlan_map' %
port.vif_id)
LOG.info('port_unbound: vif_id %s not in local_vlan_map', vif_id)
if not lvm.vif_ports:
self.reclaim_local_vlan(net_uuid, lvm)
@ -403,8 +432,6 @@ class OVSQuantumAgent(object):
:param integ_br: the name of the integration bridge.'''
self.int_br = ovs_lib.OVSBridge(integ_br, self.root_helper)
self.int_br.delete_port("patch-tun")
self.patch_tun_ofport = self.int_br.add_patch_port("patch-tun",
"patch-int")
self.int_br.remove_all_flows()
# switch all traffic using L2 learning
self.int_br.add_flow(priority=1, actions="normal")
@ -418,8 +445,15 @@ class OVSQuantumAgent(object):
:param tun_br: the name of the tunnel bridge.'''
self.tun_br = ovs_lib.OVSBridge(tun_br, self.root_helper)
self.tun_br.reset_bridge()
self.patch_tun_ofport = self.int_br.add_patch_port("patch-tun",
"patch-int")
self.patch_int_ofport = self.tun_br.add_patch_port("patch-int",
"patch-tun")
if int(self.patch_tun_ofport) < 0 or int(self.patch_int_ofport) < 0:
LOG.error("Failed to create OVS patch port. Cannot have tunneling "
"enabled on this agent, since this version of OVS does "
"not support tunnels or patch ports.")
exit(1)
self.tun_br.remove_all_flows()
self.tun_br.add_flow(priority=1, actions="drop")
@ -437,8 +471,8 @@ class OVSQuantumAgent(object):
for physical_network, bridge in bridge_mappings.iteritems():
# setup physical bridge
if not ip_lib.device_exists(bridge, self.root_helper):
LOG.error("Bridge %s for physical network %s does not exist" %
(bridge, physical_network))
LOG.error("Bridge %s for physical network %s does not exist",
bridge, physical_network)
sys.exit(1)
br = ovs_lib.OVSBridge(bridge, self.root_helper)
br.remove_all_flows()
@ -477,7 +511,7 @@ class OVSQuantumAgent(object):
new_tunnel_ips = tunnel_ips - old_tunnel_ips
if new_tunnel_ips:
LOG.info("adding tunnels to: %s" % new_tunnel_ips)
LOG.info("Adding tunnels to: %s", new_tunnel_ips)
for ip in new_tunnel_ips:
tun_name = "gre-" + str(self.tunnel_count)
self.tun_br.add_tunnel_port(tun_name, ip)
@ -502,8 +536,8 @@ class OVSQuantumAgent(object):
old_tunnel_ips = set()
db = sqlsoup.SqlSoup(db_connection_url)
LOG.info("Connecting to database \"%s\" on %s" %
(db.engine.url.database, db.engine.url.host))
LOG.info("Connecting to database \"%s\" on %s",
db.engine.url.database, db.engine.url.host)
while True:
try:
@ -514,8 +548,10 @@ class OVSQuantumAgent(object):
for bind in
db.ovs_network_bindings.all())
tunnel_ips = set(x.ip_address for x in db.ovs_tunnel_ips.all())
self.manage_tunnels(tunnel_ips, old_tunnel_ips, db)
if self.enable_tunneling:
tunnel_ips = set(x.ip_address for x in
db.ovs_tunnel_ips.all())
self.manage_tunnels(tunnel_ips, old_tunnel_ips, db)
# Get bindings from OVS bridge.
vif_ports = self.int_br.get_vif_ports()
@ -574,7 +610,7 @@ class OVSQuantumAgent(object):
new_net_uuid = new_port.network_id
if new_net_uuid not in net_bindings:
LOG.warn("No network binding found for net-id"
" '%s'" % new_net_uuid)
" '%s'", new_net_uuid)
continue
bind = net_bindings[new_net_uuid]
@ -584,9 +620,9 @@ class OVSQuantumAgent(object):
bind.segmentation_id)
all_bindings[p.vif_id].status = (
q_const.PORT_STATUS_ACTIVE)
LOG.info("Port %s on net-id = %s bound to %s " % (
LOG.info("Port %s on net-id = %s bound to %s ",
str(p), new_net_uuid,
str(self.local_vlan_map[new_net_uuid])))
str(self.local_vlan_map[new_net_uuid]))
for vif_id in disappeared_vif_ports_ids:
LOG.info("Port Disappeared: " + vif_id)
@ -602,7 +638,8 @@ class OVSQuantumAgent(object):
# sleep and re-initialize state for next pass
time.sleep(self.polling_interval)
old_tunnel_ips = tunnel_ips
if self.enable_tunneling:
old_tunnel_ips = tunnel_ips
old_vif_ports = new_vif_ports
old_local_bindings = new_local_bindings
@ -714,7 +751,7 @@ class OVSQuantumAgent(object):
sync = False
# Notify the plugin of tunnel IP
if tunnel_sync:
if self.enable_tunneling and tunnel_sync:
LOG.info("Agent tunnel out of sync with plugin!")
tunnel_sync = self.tunnel_sync()
@ -757,6 +794,7 @@ def main():
rpc = cfg.CONF.AGENT.rpc
tun_br = cfg.CONF.OVS.tunnel_bridge
local_ip = cfg.CONF.OVS.local_ip
enable_tunneling = cfg.CONF.OVS.enable_tunneling
bridge_mappings = {}
for mapping in cfg.CONF.OVS.bridge_mappings:
@ -765,16 +803,15 @@ def main():
try:
physical_network, bridge = mapping.split(':')
bridge_mappings[physical_network] = bridge
LOG.debug("physical network %s mapped to bridge %s" %
(physical_network, bridge))
LOG.info("Physical network %s mapped to bridge %s",
physical_network, bridge)
except ValueError as ex:
LOG.error("Invalid bridge mapping: \'%s\' - %s" %
(mapping, ex))
LOG.error("Invalid bridge mapping: \'%s\' - %s", mapping, ex)
sys.exit(1)
plugin = OVSQuantumAgent(integ_br, tun_br, local_ip, bridge_mappings,
root_helper, polling_interval,
reconnect_interval, rpc)
reconnect_interval, rpc, enable_tunneling)
# Start everything.
plugin.daemon_loop(db_connection_url)

View File

@ -29,6 +29,7 @@ database_opts = [
ovs_opts = [
cfg.StrOpt('integration_bridge', default='br-int'),
cfg.BoolOpt('enable_tunneling', default=False),
cfg.StrOpt('tunnel_bridge', default='br-tun'),
cfg.StrOpt('local_ip', default='10.0.0.3'),
cfg.ListOpt('bridge_mappings',

View File

@ -195,16 +195,22 @@ class OVSQuantumPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
ovs_db_v2.initialize()
self._parse_network_vlan_ranges()
ovs_db_v2.sync_vlan_allocations(self.network_vlan_ranges)
self._parse_tunnel_id_ranges()
ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)
self.tenant_network_type = cfg.CONF.OVS.tenant_network_type
if self.tenant_network_type not in [constants.TYPE_LOCAL,
constants.TYPE_VLAN,
constants.TYPE_GRE,
constants.TYPE_NONE]:
LOG.error("Invalid tenant_network_type: %s" %
LOG.error("Invalid tenant_network_type: %s",
self.tenant_network_type)
sys.exit(1)
self.enable_tunneling = cfg.CONF.OVS.enable_tunneling
self.tunnel_id_ranges = []
if self.enable_tunneling:
self._parse_tunnel_id_ranges()
ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)
elif self.tenant_network_type == constants.TYPE_GRE:
LOG.error("Tunneling disabled but tenant_network_type is 'gre'")
sys.exit(1)
self.agent_rpc = cfg.CONF.AGENT.rpc
self.setup_rpc()
@ -233,12 +239,12 @@ class OVSQuantumPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
int(vlan_min),
int(vlan_max))
except ValueError as ex:
LOG.error("Invalid network VLAN range: \'%s\' - %s" %
(entry, ex))
LOG.error("Invalid network VLAN range: \'%s\' - %s",
entry, ex)
sys.exit(1)
else:
self._add_network(entry)
LOG.debug("network VLAN ranges: %s" % self.network_vlan_ranges)
LOG.info("Network VLAN ranges: %s", self.network_vlan_ranges)
def _add_network_vlan_range(self, physical_network, vlan_min, vlan_max):
self._add_network(physical_network)
@ -249,17 +255,15 @@ class OVSQuantumPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
self.network_vlan_ranges[physical_network] = []
def _parse_tunnel_id_ranges(self):
self.tunnel_id_ranges = []
for entry in cfg.CONF.OVS.tunnel_id_ranges:
entry = entry.strip()
try:
tun_min, tun_max = entry.split(':')
self.tunnel_id_ranges.append((int(tun_min), int(tun_max)))
except ValueError as ex:
LOG.error("Invalid tunnel ID range: \'%s\' - %s" %
(entry, ex))
LOG.error("Invalid tunnel ID range: \'%s\' - %s", entry, ex)
sys.exit(1)
LOG.debug("tunnel ID ranges: %s" % self.tunnel_id_ranges)
LOG.info("Tunnel ID ranges: %s", self.tunnel_id_ranges)
# TODO(rkukura) Use core mechanism for attribute authorization
# when available.
@ -326,6 +330,9 @@ class OVSQuantumPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
"(1 through 4094)")
raise q_exc.InvalidInput(error_message=msg)
elif network_type == constants.TYPE_GRE:
if not self.enable_tunneling:
msg = _("GRE networks are not enabled")
raise q_exc.InvalidInput(error_message=msg)
if physical_network_set:
msg = _("provider:physical_network specified for GRE "
"network")
@ -420,7 +427,7 @@ class OVSQuantumPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
self._extend_network_dict_provider(context, net)
self._extend_network_dict_l3(context, net)
# note - exception will rollback entire transaction
LOG.debug("Created network: %s" % net['id'])
LOG.debug("Created network: %s", net['id'])
return net
def update_network(self, context, id, network):

View File

@ -23,12 +23,14 @@ class ConfigurationTest(unittest.TestCase):
def test_defaults(self):
self.assertEqual('br-int', cfg.CONF.OVS.integration_bridge)
self.assertFalse(cfg.CONF.OVS.enable_tunneling)
self.assertEqual('br-tun', cfg.CONF.OVS.tunnel_bridge)
self.assertEqual('sqlite://', cfg.CONF.DATABASE.sql_connection)
self.assertEqual(-1, cfg.CONF.DATABASE.sql_max_retries)
self.assertEqual(2, cfg.CONF.DATABASE.reconnect_interval)
self.assertEqual(2, cfg.CONF.AGENT.polling_interval)
self.assertEqual('sudo', cfg.CONF.AGENT.root_helper)
self.assertTrue(cfg.CONF.AGENT.rpc)
self.assertEqual('local', cfg.CONF.OVS.tenant_network_type)
self.assertEqual(0, len(cfg.CONF.OVS.bridge_mappings))
self.assertEqual(0, len(cfg.CONF.OVS.network_vlan_ranges))

View File

@ -56,19 +56,19 @@ class TunnelTest(unittest.TestCase):
self.INT_BRIDGE = 'integration_bridge'
self.TUN_BRIDGE = 'tunnel_bridge'
self.INT_OFPORT = 'PATCH_INT_OFPORT'
self.TUN_OFPORT = 'PATCH_TUN_OFPORT'
self.INT_OFPORT = 11111
self.TUN_OFPORT = 22222
self.mox.StubOutClassWithMocks(ovs_lib, 'OVSBridge')
self.mock_int_bridge = ovs_lib.OVSBridge(self.INT_BRIDGE, 'sudo')
self.mock_int_bridge.delete_port('patch-tun')
self.mock_int_bridge.add_patch_port(
'patch-tun', 'patch-int').AndReturn(self.TUN_OFPORT)
self.mock_int_bridge.remove_all_flows()
self.mock_int_bridge.add_flow(priority=1, actions='normal')
self.mock_tun_bridge = ovs_lib.OVSBridge(self.TUN_BRIDGE, 'sudo')
self.mock_tun_bridge.reset_bridge()
self.mock_int_bridge.add_patch_port(
'patch-tun', 'patch-int').AndReturn(self.TUN_OFPORT)
self.mock_tun_bridge.add_patch_port(
'patch-int', 'patch-tun').AndReturn(self.INT_OFPORT)
self.mock_tun_bridge.remove_all_flows()
@ -83,7 +83,7 @@ class TunnelTest(unittest.TestCase):
b = ovs_quantum_agent.OVSQuantumAgent(self.INT_BRIDGE,
self.TUN_BRIDGE,
'10.0.0.1', {},
'sudo', 2, 2, False)
'sudo', 2, 2, False, True)
self.mox.VerifyAll()
def testProvisionLocalVlan(self):
@ -100,7 +100,7 @@ class TunnelTest(unittest.TestCase):
a = ovs_quantum_agent.OVSQuantumAgent(self.INT_BRIDGE,
self.TUN_BRIDGE,
'10.0.0.1', {},
'sudo', 2, 2, False)
'sudo', 2, 2, False, True)
a.available_local_vlans = set([LV_ID])
a.provision_local_vlan(NET_UUID, 'gre', None, LS_ID)
self.mox.VerifyAll()
@ -114,7 +114,7 @@ class TunnelTest(unittest.TestCase):
a = ovs_quantum_agent.OVSQuantumAgent(self.INT_BRIDGE,
self.TUN_BRIDGE,
'10.0.0.1', {},
'sudo', 2, 2, False)
'sudo', 2, 2, False, True)
a.available_local_vlans = set()
a.local_vlan_map[NET_UUID] = LVM
a.reclaim_local_vlan(NET_UUID, LVM)
@ -135,7 +135,7 @@ class TunnelTest(unittest.TestCase):
a = ovs_quantum_agent.OVSQuantumAgent(self.INT_BRIDGE,
self.TUN_BRIDGE,
'10.0.0.1', {},
'sudo', 2, 2, False)
'sudo', 2, 2, False, True)
a.local_vlan_map[NET_UUID] = LVM
a.port_bound(VIF_PORT, NET_UUID, 'gre', None, LS_ID)
self.mox.VerifyAll()
@ -146,7 +146,7 @@ class TunnelTest(unittest.TestCase):
a = ovs_quantum_agent.OVSQuantumAgent(self.INT_BRIDGE,
self.TUN_BRIDGE,
'10.0.0.1', {},
'sudo', 2, 2, False)
'sudo', 2, 2, False, True)
a.available_local_vlans = set([LV_ID])
a.local_vlan_map[NET_UUID] = LVM
a.port_unbound(VIF_ID, NET_UUID)
@ -163,7 +163,7 @@ class TunnelTest(unittest.TestCase):
a = ovs_quantum_agent.OVSQuantumAgent(self.INT_BRIDGE,
self.TUN_BRIDGE,
'10.0.0.1', {},
'sudo', 2, 2, False)
'sudo', 2, 2, False, True)
a.available_local_vlans = set([LV_ID])
a.local_vlan_map[NET_UUID] = LVM
a.port_dead(VIF_PORT)