Merge "ryu/nova: catch up d1888a3359345acffd8d0845c137eefd88072112"
This commit is contained in:
commit
7f967d05ff
@ -18,6 +18,7 @@
|
||||
from nova import flags
|
||||
from nova import log as logging
|
||||
from nova import utils
|
||||
from nova.network import linux_net
|
||||
from nova.openstack.common import cfg
|
||||
from ryu.app.client import OFPClient
|
||||
|
||||
@ -28,7 +29,7 @@ ryu_linux_net_opt = cfg.StrOpt('linuxnet_ovs_ryu_api_host',
|
||||
help='Openflow Ryu REST API host:port')
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
FLAGS.add_option(ryu_linux_net_opt)
|
||||
FLAGS.register_opt(ryu_linux_net_opt)
|
||||
|
||||
|
||||
def _get_datapath_id(bridge_name):
|
||||
@ -43,48 +44,28 @@ def _get_port_no(dev):
|
||||
return int(out.strip())
|
||||
|
||||
|
||||
# In order to avoid circular import, dynamically import the base class,
|
||||
# nova.network.linux_net.LinuxOVSInterfaceDriver
|
||||
# and use composition instead of inheritance.
|
||||
# The following inheritance code doesn't work due to circular import.
|
||||
# from nova.network import linux_net as nova_linux_net
|
||||
# class LinuxOVSRyuInterfaceDriver(nova_linux_net.LinuxOVSInterfaceDriver):
|
||||
#
|
||||
# nova.network.linux_net imports FLAGS.linuxnet_interface_driver
|
||||
# We are being imported from linux_net so that linux_net can't be imported
|
||||
# here due to circular import.
|
||||
# Another approach would be to factor out nova.network.linux_net so that
|
||||
# linux_net doesn't import FLAGS.linuxnet_interface_driver or it loads
|
||||
# lazily FLAGS.linuxnet_interface_driver.
|
||||
|
||||
|
||||
class LinuxOVSRyuInterfaceDriver(object):
|
||||
class LinuxOVSRyuInterfaceDriver(linux_net.LinuxOVSInterfaceDriver):
|
||||
def __init__(self):
|
||||
from nova.network import linux_net as nova_linux_net
|
||||
self.parent = nova_linux_net.LinuxOVSInterfaceDriver()
|
||||
super(LinuxOVSRyuInterfaceDriver, self).__init__()
|
||||
|
||||
LOG.debug('ryu rest host %s', FLAGS.linuxnet_ovs_ryu_api_host)
|
||||
self.ryu_client = OFPClient(FLAGS.linuxnet_ovs_ryu_api_host)
|
||||
self.datapath_id = _get_datapath_id(
|
||||
FLAGS.linuxnet_ovs_integration_bridge)
|
||||
|
||||
if nova_linux_net.binary_name == 'nova-network':
|
||||
for tables in [nova_linux_net.iptables_manager.ipv4,
|
||||
nova_linux_net.iptables_manager.ipv6]:
|
||||
if linux_net.binary_name == 'nova-network':
|
||||
for tables in [linux_net.iptables_manager.ipv4,
|
||||
linux_net.iptables_manager.ipv6]:
|
||||
tables['filter'].add_rule('FORWARD',
|
||||
'--in-interface gw-+ --out-interface gw-+ -j DROP')
|
||||
nova_linux_net.iptables_manager.apply()
|
||||
linux_net.iptables_manager.apply()
|
||||
|
||||
def plug(self, network, mac_address, gateway=True):
|
||||
LOG.debug("network %s mac_adress %s gateway %s",
|
||||
network, mac_address, gateway)
|
||||
ret = self.parent.plug(network, mac_address, gateway)
|
||||
ret = super(LinuxOVSRyuInterfaceDriver, self).plug(
|
||||
network, mac_address, gateway)
|
||||
|
||||
port_no = _get_port_no(self.get_dev(network))
|
||||
self.ryu_client.create_port(network['uuid'], self.datapath_id, port_no)
|
||||
return ret
|
||||
|
||||
def unplug(self, network):
|
||||
return self.parent.unplug(network)
|
||||
|
||||
def get_dev(self, network):
|
||||
return self.parent.get_dev(network)
|
||||
|
@ -32,7 +32,7 @@ ryu_libvirt_ovs_driver_opt = cfg.StrOpt('libvirt_ovs_ryu_api_host',
|
||||
help='Openflow Ryu REST API host:port')
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
FLAGS.add_option(ryu_libvirt_ovs_driver_opt)
|
||||
FLAGS.register_opt(ryu_libvirt_ovs_driver_opt)
|
||||
|
||||
|
||||
def _get_datapath_id(bridge_name):
|
||||
|
Loading…
x
Reference in New Issue
Block a user