# Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from oslo_versionedobjects import base from oslo_versionedobjects import fields from os_vif.objects import base as osv_base from os_vif.objects import fields as osv_fields @base.VersionedObjectRegistry.register class VIFBase(osv_base.VersionedObject, base.ComparableVersionedObject): """Represents a virtual network interface.""" # Version 1.0: Initial version VERSION = '1.0' fields = { # Unique identifier of the VIF port 'id': fields.UUIDField(), # The guest MAC address 'address': fields.MACAddressField(nullable=True), # The network to which the VIF is connected 'network': fields.ObjectField('Network', nullable=True), # Name of the registered os_vif plugin 'plugin': fields.StringField(), # Whether the VIF is initially online 'active': fields.BooleanField(default=True), # Whether the host VIF should be preserved on unplug 'preserve_on_delete': fields.BooleanField(default=False), # Whether the network service has provided traffic filtering 'has_traffic_filtering': fields.BooleanField(default=False), # The virtual port profile metadata 'port_profile': fields.ObjectField('VIFPortProfileBase', subclasses=True) } @base.VersionedObjectRegistry.register class VIFGeneric(VIFBase): # For libvirt drivers, this maps to type="ethernet" which # just implies a bare TAP device, all setup delegated to # the plugin VERSION = '1.0' fields = { # Name of the device to create 'vif_name': fields.StringField() } @base.VersionedObjectRegistry.register class VIFBridge(VIFBase): # For libvirt drivers, this maps to type='bridge' VERSION = '1.0' fields = { # Name of the virtual device to create 'vif_name': fields.StringField(), # Name of the physical device to connect to (eg br0) 'bridge_name': fields.StringField(), } @base.VersionedObjectRegistry.register class VIFOpenVSwitch(VIFBridge): # For libvirt drivers, this also maps to type='bridge' VERSION = '1.0' @base.VersionedObjectRegistry.register class VIFDirect(VIFBase): # For libvirt drivers, this maps to type='direct' VERSION = '1.0' fields = { # Name of the device to create 'vif_name': fields.StringField(), # The PCI address of the host device 'dev_address': osv_fields.PCIAddressField(), # Port connection mode 'mode': osv_fields.VIFDirectModeField(), # The VLAN device name to use 'vlan_name': fields.StringField(), } @base.VersionedObjectRegistry.register class VIFVHostUser(VIFBase): # For libvirt drivers, this maps to type='vhostuser' VERSION = '1.0' fields = { # UNIX socket path 'path': fields.StringField(), # UNIX socket access permissions 'mode': osv_fields.VIFVHostUserModeField(), } @base.VersionedObjectRegistry.register class VIFHostDevice(VIFBase): # For libvirt drivers, this maps to type='hostdev' VERSION = '1.0' fields = { # The type of the host device. # Valid values are ethernet and generic. # Ethernet is # Generic is 'dev_type': osv_fields.VIFVIFHostDeviceDevTypeField(), # The PCI address of the host device 'dev_address': osv_fields.PCIAddressField(), } @base.VersionedObjectRegistry.register class VIFPortProfileBase(osv_base.VersionedObject, base.ComparableVersionedObject): # Base class for all types of port profile VERSION = '1.0' @base.VersionedObjectRegistry.register class VIFPortProfileOpenVSwitch(VIFPortProfileBase): # Port profile info for OpenVSwitch networks VERSION = '1.0' fields = { 'interface_id': fields.UUIDField(), 'profile_id': fields.StringField(), } @base.VersionedObjectRegistry.register class VIFPortProfile8021Qbg(VIFPortProfileBase): # Port profile info for VEPA 802.1qbg networks VERSION = '1.0' fields = { 'manager_id': fields.IntegerField(), 'type_id': fields.IntegerField(), 'type_id_version': fields.IntegerField(), 'instance_id': fields.UUIDField(), } @base.VersionedObjectRegistry.register class VIFPortProfile8021Qbh(VIFPortProfileBase): # Port profile info for VEPA 802.1qbh networks VERSION = '1.0' fields = { 'profile_id': fields.StringField() }