Example #1
0
    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)
Example #2
0
    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)
Example #3
0
File: vif.py Project: ipbabble/nova
    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
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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
Example #7
0
    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
Example #8
0
File: vif.py Project: cmiii/nova
    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
Example #9
0
    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
Example #12
0
File: vif.py Project: YouthSun/nova
    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
Example #13
0
    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