Exemplo n.º 1
0
    def unplug(self, vif):
        """Unplug Contrail's network port

        Unbind the vif from a Contrail virtual port.
        """
        dev = vif.devname
        cmd_args = "--oper=delete --uuid=%s" % vif.id
        processutils.execute("vrouter-port-control", cmd_args, run_as_root=True)
        linux_net.delete_net_dev(dev)
Exemplo n.º 2
0
def delete_net_dev(dev):
    """Delete a network device only if it exists."""
    if device_exists(dev):
        try:
            processutils.execute('ip', 'link', 'delete', dev,
                                 check_exit_code=[0, 2, 254],
                                 run_as_root=True)
            LOG.debug("Net device removed: '%s'", dev)
        except processutils.ProcessExecutionError:
            with excutils.save_and_reraise_exception():
                LOG.error(_LE("Failed removing net device: '%s'"), dev)
Exemplo n.º 3
0
    def plug(self, instance, vif):
        """Plug into Contrail's network port

        Bind the vif to a Contrail virtual port.
        """
        dev = vif.devname
        ip_addr = "0.0.0.0"
        ip6_addr = None
        subnets = vif.network.subnets
        for subnet in subnets:
            if not subnet.ips:
                continue
            ips = subnet.ips[0]
            if not ips.address:
                continue
            if ips.version == 4:
                if ips.address is not None:
                    ip_addr = ips.address
            if ips.version == 6:
                if ips.address is not None:
                    ip6_addr = ips.address

        ptype = "NovaVMPort"
        if self.config.get("libvirt_virt_type") == "lxc":
            ptype = "NameSpacePort"

        cmd_args = (
            "--oper=add --uuid=%s --instance_uuid=%s --vn_uuid=%s "
            "--vm_project_uuid=%s --ip_address=%s --ipv6_address=%s"
            " --vm_name=%s --mac=%s --tap_name=%s --port_type=%s "
            "--tx_vlan_id=%d --rx_vlan_id=%d"
            % (
                vif.id,
                instance.uuid,
                vif.network.id,
                instance.project_id,
                ip_addr,
                ip6_addr,
                instance.display_name,
                vif.address,
                dev,
                ptype,
                -1,
                -1,
            )
        )
        linux_net.create_tap_dev(dev)
        processutils.execute("vrouter-port-control", cmd_args, run_as_root=True)
Exemplo n.º 4
0
def create_tap_dev(dev, mac_address=None):
    if not device_exists(dev):
        try:
            # First, try with 'ip'
            processutils.execute('ip', 'tuntap', 'add', dev, 'mode',
                                 'tap', check_exit_code=[0, 2, 254],
                                 run_as_root=True)
        except processutils.ProcessExecutionError:
            # Second option: tunctl
            processutils.execute('tunctl', '-b', '-t', dev,
                                 run_as_root=True)
        if mac_address:
            processutils.execute('ip', 'link', 'set', dev, 'address', mac_address,
                                 check_exit_code=[0, 2, 254],
                                 run_as_root=True)
        processutils.execute('ip', 'link', 'set', dev, 'up',
                             check_exit_code=[0, 2, 254],
                             run_as_root=True)