def _get_config_os_vif(self, instance, vif, image_meta, inst_type, virt_type, host, vnic_type): """Get the domain config for a VIF :param instance: nova.objects.Instance :param vif: os_vif.objects.vif.VIFBase subclass :param image_meta: nova.objects.ImageMeta :param inst_type: nova.objects.Flavor :param virt_type: virtualization type :param host: nova.virt.libvirt.host.Host :param vnic_type: vnic type :returns: nova.virt.libvirt.config.LibvirtConfigGuestInterface """ # Do the config that's common to all vif types conf = self.get_base_config(instance, vif.address, image_meta, inst_type, virt_type, vnic_type, host) # Do the VIF type specific config viffunc = "_set_config_" + vif.obj_name() func = getattr(self, viffunc, None) if not func: raise exception.InternalError( _("Unsupported VIF type %(obj)s func %(func)s") % {'obj': vif.obj_name(), 'func': viffunc}) func(instance, vif, conf, host) designer.set_vif_bandwidth_config(conf, inst_type) if ('network' in vif and 'mtu' in vif.network and self._has_min_version_for_mtu(host)): designer.set_vif_mtu_config(conf, vif.network.mtu) return conf
def _set_mtu_config(self, vif, host, conf): """:param vif: nova.network.modle.vif :param host: nova.virt.libvirt.host.Host :param conf: nova.virt.libvirt.config.LibvirtConfigGuestInterface """ network = vif.get('network') if (network and network.get_meta("mtu") and self._has_min_version_for_mtu(host)): designer.set_vif_mtu_config(conf, network.get_meta("mtu"))
def _get_config_os_vif( self, instance, vif, image_meta, flavor, virt_type, vnic_type, ): """Get the domain config for a VIF :param instance: nova.objects.Instance :param vif: os_vif.objects.vif.VIFBase subclass :param image_meta: nova.objects.ImageMeta :param flavor: nova.objects.Flavor :param virt_type: virtualization type :param vnic_type: vnic type :returns: nova.virt.libvirt.config.LibvirtConfigGuestInterface """ # Do the config that's common to all vif types conf = self.get_base_config(instance, vif.address, image_meta, flavor, virt_type, vnic_type) # Do the VIF type specific config if isinstance(vif, osv_vifs.VIFGeneric): self._set_config_VIFGeneric(instance, vif, conf) elif isinstance(vif, osv_vifs.VIFBridge): self._set_config_VIFBridge(instance, vif, conf) elif isinstance(vif, osv_vifs.VIFOpenVSwitch): self._set_config_VIFOpenVSwitch(instance, vif, conf) elif isinstance(vif, osv_vifs.VIFVHostUser): self._set_config_VIFVHostUser(instance, vif, conf) elif isinstance(vif, osv_vifs.VIFHostDevice): if vnic_type != network_model.VNIC_TYPE_VDPA: self._set_config_VIFHostDevice(instance, vif, conf) else: dev_path = self._get_vdpa_dev_path(vif.dev_address) designer.set_vif_host_backend_vdpa_config( conf, dev_path, CONF.libvirt.rx_queue_size, CONF.libvirt.tx_queue_size) else: raise exception.InternalError( _("Unsupported VIF type %s") % vif.obj_name()) # not all VIF types support bandwidth configuration # https://github.com/libvirt/libvirt/blob/568a41722/src/conf/netdev_bandwidth_conf.h#L38 if vif.obj_name() not in ('VIFVHostUser', 'VIFHostDevice'): designer.set_vif_bandwidth_config(conf, flavor) if 'network' in vif and 'mtu' in vif.network: designer.set_vif_mtu_config(conf, vif.network.mtu) return conf
def get_config_tap(self, instance, vif, image_meta, inst_type, virt_type): conf = self.get_base_config(instance, vif['address'], image_meta, inst_type, virt_type, vif['vnic_type']) dev = self.get_vif_devname(vif) designer.set_vif_host_backend_ethernet_config(conf, dev) network = vif.get('network') if network and network.get_meta('mtu'): designer.set_vif_mtu_config(conf, network.get_meta("mtu")) return conf
def _get_config_os_vif(self, instance, vif, image_meta, inst_type, virt_type, host, vnic_type): """Get the domain config for a VIF :param instance: nova.objects.Instance :param vif: os_vif.objects.vif.VIFBase subclass :param image_meta: nova.objects.ImageMeta :param inst_type: nova.objects.Flavor :param virt_type: virtualization type :param host: nova.virt.libvirt.host.Host :param vnic_type: vnic type :returns: nova.virt.libvirt.config.LibvirtConfigGuestInterface """ # Do the config that's common to all vif types conf = self.get_base_config(instance, vif.address, image_meta, inst_type, virt_type, vnic_type, host) # Do the VIF type specific config if isinstance(vif, osv_vifs.VIFGeneric): self._set_config_VIFGeneric(instance, vif, conf, host) elif isinstance(vif, osv_vifs.VIFBridge): self._set_config_VIFBridge(instance, vif, conf, host) elif isinstance(vif, osv_vifs.VIFOpenVSwitch): self._set_config_VIFOpenVSwitch(instance, vif, conf, host) elif isinstance(vif, osv_vifs.VIFVHostUser): self._set_config_VIFVHostUser(instance, vif, conf, host) elif isinstance(vif, osv_vifs.VIFHostDevice): self._set_config_VIFHostDevice(instance, vif, conf, host) else: raise exception.InternalError( _("Unsupported VIF type %s") % vif.obj_name()) # not all VIF types support bandwidth configuration # https://github.com/libvirt/libvirt/blob/568a41722/src/conf/netdev_bandwidth_conf.h#L38 if vif.obj_name() not in ('VIFVHostUser', 'VIFHostDevice'): designer.set_vif_bandwidth_config(conf, inst_type) if ('network' in vif and 'mtu' in vif.network and self._has_min_version_for_mtu(host)): designer.set_vif_mtu_config(conf, vif.network.mtu) return conf
def test_set_vif_mtu_config(self): conf = config.LibvirtConfigGuestInterface() designer.set_vif_mtu_config(conf, 9000) self.assertEqual(9000, conf.mtu)