def plug(self, instance, vif): """Plug using hybrid strategy Create a per-VIF linux bridge, then link that bridge to the OVS integration bridge via a veth device, setting up the other end of the veth device just like a normal OVS port. Then boot the VIF on the linux bridge using standard libvirt mechanisms """ network, mapping = vif iface_id = mapping['vif_uuid'] br_name = self.get_br_name(iface_id) v1_name, v2_name = self.get_veth_pair_names(iface_id) if not linux_net._device_exists(br_name): utils.execute('brctl', 'addbr', br_name, run_as_root=True) utils.execute('brctl', 'setfd', br_name, 0, run_as_root=True) utils.execute('brctl', 'stp', br_name, 'off', run_as_root=True) if not linux_net._device_exists(v2_name): linux_net._create_veth_pair(v1_name, v2_name) utils.execute('ip', 'link', 'set', br_name, 'up', run_as_root=True) utils.execute('brctl', 'addif', br_name, v1_name, run_as_root=True) self.create_ovs_vif_port(v2_name, iface_id, mapping['mac'], instance['uuid']) network['bridge'] = br_name return self._get_configurations(instance, network, mapping)
def plug(self, instance, vif): """Plug using hybrid strategy Create a per-VIF linux bridge, then link that bridge to the OVS integration bridge via a veth device, setting up the other end of the veth device just like a normal OVS port. Then boot the VIF on the linux bridge using standard libvirt mechanisms """ network, mapping = vif iface_id = mapping['vif_uuid'] br_name = self.get_br_name(iface_id) v1_name, v2_name = self.get_veth_pair_names(iface_id) if not linux_net._device_exists(br_name): utils.execute('brctl', 'addbr', br_name, run_as_root=True) if not linux_net._device_exists(v2_name): linux_net._create_veth_pair(v1_name, v2_name) utils.execute('ip', 'link', 'set', br_name, 'up', run_as_root=True) utils.execute('brctl', 'addif', br_name, v1_name, run_as_root=True) self.create_ovs_vif_port(v2_name, iface_id, mapping['mac'], instance['uuid']) network['bridge'] = br_name return self._get_configurations(instance, network, mapping)
def plug(self, instance, network, mapping): iface_id = mapping['vif_uuid'] dev = self.get_dev_name(iface_id) if not linux_net._device_exists(dev): # Older version of the command 'ip' from the iproute2 package # don't have support for the tuntap option (lp:882568). If it # turns out we're on an old version we work around this by using # tunctl. try: # First, try with 'ip' utils.execute('ip', 'tuntap', 'add', dev, 'mode', 'tap', run_as_root=True) except exception.ProcessExecutionError: # Second option: tunctl utils.execute('tunctl', '-b', '-t', dev, run_as_root=True) utils.execute('ip', 'link', 'set', dev, 'up', run_as_root=True) utils.execute('ovs-vsctl', '--', '--may-exist', 'add-port', FLAGS.libvirt_ovs_bridge, dev, '--', 'set', 'Interface', dev, "external-ids:iface-id=%s" % iface_id, '--', 'set', 'Interface', dev, "external-ids:iface-status=active", '--', 'set', 'Interface', dev, "external-ids:attached-mac=%s" % mapping['mac'], run_as_root=True) result = { 'script': '', 'name': dev, 'mac_address': mapping['mac']} return result
def plug(self, instance, vif): network, mapping = vif iface_id = mapping['vif_uuid'] dev = self.get_dev_name(iface_id) if not linux_net._device_exists(dev): # Older version of the command 'ip' from the iproute2 package # don't have support for the tuntap option (lp:882568). If it # turns out we're on an old version we work around this by using # tunctl. try: # First, try with 'ip' utils.execute('ip', 'tuntap', 'add', dev, 'mode', 'tap', run_as_root=True) except exception.ProcessExecutionError: # Second option: tunctl utils.execute('tunctl', '-b', '-t', dev, run_as_root=True) utils.execute('ip', 'link', 'set', dev, 'up', run_as_root=True) utils.execute('ovs-vsctl', '--', '--may-exist', 'add-port', FLAGS.libvirt_ovs_bridge, dev, '--', 'set', 'Interface', dev, "external-ids:iface-id=%s" % iface_id, '--', 'set', 'Interface', dev, "external-ids:iface-status=active", '--', 'set', 'Interface', dev, "external-ids:attached-mac=%s" % mapping['mac'], '--', 'set', 'Interface', dev, "external-ids:vm-uuid=%s" % instance['uuid'], run_as_root=True) conf = config.LibvirtConfigGuestInterface() if FLAGS.libvirt_use_virtio_for_bridges: conf.model = "virtio" conf.net_type = "ethernet" conf.target_dev = dev conf.script = "" conf.mac_addr = mapping['mac'] return conf
def plug(self, instance, vif): network, mapping = vif iface_id = mapping['vif_uuid'] dev = self.get_dev_name(iface_id) if not linux_net._device_exists(dev): # Older version of the command 'ip' from the iproute2 package # don't have support for the tuntap option (lp:882568). If it # turns out we're on an old version we work around this by using # tunctl. try: # First, try with 'ip' utils.execute('ip', 'tuntap', 'add', dev, 'mode', 'tap', run_as_root=True) except exception.ProcessExecutionError: # Second option: tunctl utils.execute('tunctl', '-b', '-t', dev, run_as_root=True) utils.execute('ip', 'link', 'set', dev, 'up', run_as_root=True) self.create_ovs_vif_port(dev, iface_id, mapping['mac'], instance['uuid']) conf = vconfig.LibvirtConfigGuestInterface() if CONF.libvirt_use_virtio_for_bridges: conf.model = "virtio" conf.net_type = "ethernet" conf.target_dev = dev conf.script = "" conf.mac_addr = mapping['mac'] return conf
def plug(self, instance, network, mapping): vif_id = str(instance["id"]) + "-" + str(network["id"]) dev = "tap-%s" % vif_id iface_id = "nova-" + vif_id if not linux_net._device_exists(dev): utils.execute("sudo", "ip", "tuntap", "add", dev, "mode", "tap") utils.execute("sudo", "ip", "link", "set", dev, "up") utils.execute( "sudo", "ovs-vsctl", "--", "--may-exist", "add-port", FLAGS.libvirt_ovs_bridge, dev, "--", "set", "Interface", dev, "external-ids:iface-id=%s" % iface_id, "--", "set", "Interface", dev, "external-ids:iface-status=active", "--", "set", "Interface", dev, "external-ids:attached-mac=%s" % mapping["mac"], ) result = {"script": "", "name": dev, "mac_address": mapping["mac"]} return result
def plug(self, instance, vif): network, mapping = vif iface_id = mapping["vif_uuid"] dev = self.get_dev_name(iface_id) if not linux_net._device_exists(dev): # Older version of the command 'ip' from the iproute2 package # don't have support for the tuntap option (lp:882568). If it # turns out we're on an old version we work around this by using # tunctl. try: # First, try with 'ip' utils.execute("ip", "tuntap", "add", dev, "mode", "tap", run_as_root=True) except exception.ProcessExecutionError: # Second option: tunctl utils.execute("tunctl", "-b", "-t", dev, run_as_root=True) utils.execute("ip", "link", "set", dev, "up", run_as_root=True) utils.execute( "ovs-vsctl", "--", "--may-exist", "add-port", FLAGS.libvirt_ovs_bridge, dev, "--", "set", "Interface", dev, "external-ids:iface-id=%s" % iface_id, "--", "set", "Interface", dev, "external-ids:iface-status=active", "--", "set", "Interface", dev, "external-ids:attached-mac=%s" % mapping["mac"], "--", "set", "Interface", dev, "external-ids:vm-uuid=%s" % instance["uuid"], run_as_root=True, ) conf = config.LibvirtConfigGuestInterface() conf.net_type = "ethernet" conf.target_dev = dev conf.script = "" conf.mac_addr = mapping["mac"] return conf
def plug(self, instance, network, mapping): vif_id = str(instance['id']) + "-" + str(network['id']) dev = "tap-%s" % vif_id iface_id = "nova-" + vif_id if not linux_net._device_exists(dev): utils.execute('sudo', 'ip', 'tuntap', 'add', dev, 'mode', 'tap') utils.execute('sudo', 'ip', 'link', 'set', dev, 'up') utils.execute('sudo', 'ovs-vsctl', '--', '--may-exist', 'add-port', FLAGS.libvirt_ovs_bridge, dev, '--', 'set', 'Interface', dev, "external-ids:iface-id=%s" % iface_id, '--', 'set', 'Interface', dev, "external-ids:iface-status=active", '--', 'set', 'Interface', dev, "external-ids:attached-mac=%s" % mapping['mac']) result = {'script': '', 'name': dev, 'mac_address': mapping['mac']} return result
def plug(self, instance, network, mapping): iface_id = mapping['vif_uuid'] dev = self.get_dev_name(iface_id) if not linux_net._device_exists(dev): try: # First, try with 'ip' utils.execute('ip', 'tuntap', 'add', dev, 'mode', 'tap', run_as_root=True) except exception.ProcessExecutionError: # Second option: tunctl utils.execute('tunctl', '-b', '-t', dev, run_as_root=True) utils.execute('ip', 'link', 'set', dev, 'up', run_as_root=True) result = { 'script': '', 'name': dev, 'mac_address': mapping['mac']} return result
def plug(self, instance, network, mapping): iface_id = mapping["vif_uuid"] dev = self.get_dev_name(iface_id) if not linux_net._device_exists(dev): utils.execute("ip", "tuntap", "add", dev, "mode", "tap", run_as_root=True) utils.execute("ip", "link", "set", dev, "up", run_as_root=True) utils.execute( "ovs-vsctl", "--", "--may-exist", "add-port", FLAGS.libvirt_ovs_bridge, dev, "--", "set", "Interface", dev, "external-ids:iface-id=%s" % iface_id, "--", "set", "Interface", dev, "external-ids:iface-status=active", "--", "set", "Interface", dev, "external-ids:attached-mac=%s" % mapping["mac"], run_as_root=True, ) ret, left = utils.execute( "ovs-vsctl", "get", "bridge", FLAGS.libvirt_ovs_bridge, "datapath_id", run_as_root=True ) datapath_id = "0x" + ret.strip('"\n') ret, left = utils.execute("ovs-vsctl", "get", "Interface", dev, "ofport", run_as_root=True) port_no = ret.strip() client = VIFINFOClient(FLAGS.quantum_host, FLAGS.quantum_port) client.create_vifinfo(mapping["vif_uuid"], datapath_id, port_no) result = {"script": "", "name": dev, "mac_address": mapping["mac"]} return result
def plug(self, instance, network, mapping): iface_id = mapping['vif_uuid'] dev = self.get_dev_name(iface_id) if not linux_net._device_exists(dev): utils.execute('ip', 'tuntap', 'add', dev, 'mode', 'tap', run_as_root=True) utils.execute('ip', 'link', 'set', dev, 'up', run_as_root=True) utils.execute('ovs-vsctl', '--', '--may-exist', 'add-port', FLAGS.libvirt_ovs_bridge, dev, '--', 'set', 'Interface', dev, "external-ids:iface-id=%s" % iface_id, '--', 'set', 'Interface', dev, "external-ids:iface-status=active", '--', 'set', 'Interface', dev, "external-ids:attached-mac=%s" % mapping['mac'], run_as_root=True) result = { 'script': '', 'name': dev, 'mac_address': mapping['mac']} return result
def plug(self, instance, network, mapping): iface_id = mapping['vif_uuid'] dev = self.get_dev_name(iface_id) if not linux_net._device_exists(dev): utils.execute('ip', 'tuntap', 'add', dev, 'mode', 'tap', run_as_root=True) utils.execute('ip', 'link', 'set', dev, 'up', run_as_root=True) utils.execute('ovs-vsctl', '--', '--may-exist', 'add-port', FLAGS.libvirt_ovs_bridge, dev, '--', 'set', 'Interface', dev, "external-ids:iface-id=%s" % iface_id, '--', 'set', 'Interface', dev, "external-ids:iface-status=active", '--', 'set', 'Interface', dev, "external-ids:attached-mac=%s" % mapping['mac'], run_as_root=True) result = {'script': '', 'name': dev, 'mac_address': mapping['mac']} return result