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)
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)
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)
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)