diff --git a/nova/network/model.py b/nova/network/model.py index 3b35d53c06a..9954c9ecf14 100644 --- a/nova/network/model.py +++ b/nova/network/model.py @@ -51,6 +51,7 @@ def ensure_string_keys(d): # class VIF_DETAILS_PORT_FILTER = 'port_filter' VIF_DETAILS_OVS_HYBRID_PLUG = 'ovs_hybrid_plug' +VIF_DETAILS_VHOSTUSER_VROUTER_PLUG = 'vhostuser_vrouter_plug' VIF_DETAILS_PHYSICAL_NETWORK = 'physical_network' VIF_DETAILS_BRIDGE_NAME = 'bridge_name' diff --git a/nova/network/os_vif_util.py b/nova/network/os_vif_util.py index 54107a06609..594cb49fd42 100644 --- a/nova/network/os_vif_util.py +++ b/nova/network/os_vif_util.py @@ -323,7 +323,21 @@ def _nova_to_osvif_vif_midonet(vif): # VIF_TYPE_VHOSTUSER = 'vhostuser' def _nova_to_osvif_vif_vhostuser(vif): - raise NotImplementedError() + if vif['details'].get(model.VIF_DETAILS_VHOSTUSER_VROUTER_PLUG, False): + vif_details = vif['details'] + mode = vif_details.get(model.VIF_DETAILS_VHOSTUSER_MODE, + 'server') + sock_path = vif_details.get(model.VIF_DETAILS_VHOSTUSER_SOCKET) + if sock_path is None: + raise exception.VifDetailsMissingVhostuserSockPath( + vif_id=vif['id']) + obj = _get_vif_instance(vif, objects.vif.VIFVHostUser, + mode=mode, + path=sock_path, + plugin="vrouter", vif_name=_get_vif_name(vif)) + return obj + else: + raise NotImplementedError() # VIF_TYPE_VROUTER = 'vrouter' diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py index 1c99fcbe78f..e958337c456 100644 --- a/nova/virt/libvirt/vif.py +++ b/nova/virt/libvirt/vif.py @@ -26,6 +26,7 @@ from os_vif import exception as osv_exception from oslo_concurrency import processutils from oslo_log import log as logging +from oslo_config import cfg import nova.conf from nova import exception @@ -445,6 +446,9 @@ def get_config_vrouter(self, instance, vif, image_meta, designer.set_vif_bandwidth_config(conf, inst_type) return conf + def _set_config_VIFVHostUser(self, instance, vif, conf): + designer.set_vif_host_backend_vhostuser_config(conf, vif.mode, vif.path) + def _set_config_VIFBridge(self, instance, vif, conf): conf.net_type = "bridge" conf.source_dev = vif.bridge_name