Skip to main content

virtio_vsock/
resolver.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Defines the resource resolver for virtio-vsock devices.
5
6use crate::VirtioVsockDevice;
7use virtio::resolve::ResolvedVirtioDevice;
8use virtio::resolve::VirtioResolveInput;
9use virtio_resources::vsock::VirtioVsockHandle;
10use vm_resource::ResolveResource;
11use vm_resource::declare_static_resolver;
12use vm_resource::kind::VirtioDeviceHandle;
13
14/// Resolver for virtio-vsock devices.
15pub struct VirtioVsockResolver;
16
17declare_static_resolver! {
18    VirtioVsockResolver,
19    (VirtioDeviceHandle, VirtioVsockHandle),
20}
21
22impl ResolveResource<VirtioDeviceHandle, VirtioVsockHandle> for VirtioVsockResolver {
23    type Output = ResolvedVirtioDevice;
24    type Error = anyhow::Error;
25
26    fn resolve(
27        &self,
28        resource: VirtioVsockHandle,
29        input: VirtioResolveInput<'_>,
30    ) -> Result<Self::Output, Self::Error> {
31        let device = VirtioVsockDevice::new(
32            input.driver_source,
33            resource.guest_cid,
34            resource.base_path.into(),
35            resource.listener,
36        )?;
37        Ok(device.into())
38    }
39}