pub trait VhostUserBackendMut: Send + Sync {
type Bitmap: Bitmap + 'static;
type Vring: VringT<GuestMemoryAtomic<GuestMemoryMmap<Self::Bitmap>>>;
Show 18 methods
// Required methods
fn num_queues(&self) -> usize;
fn max_queue_size(&self) -> usize;
fn features(&self) -> u64;
fn protocol_features(&self) -> VhostUserProtocolFeatures;
fn set_event_idx(&mut self, enabled: bool);
fn update_memory(
&mut self,
mem: GuestMemoryAtomic<GuestMemoryMmap<Self::Bitmap>>,
) -> Result<()>;
fn handle_event(
&mut self,
device_event: u16,
evset: EventSet,
vrings: &[Self::Vring],
thread_id: usize,
) -> Result<()>;
// Provided methods
fn acked_features(&mut self, _features: u64) { ... }
fn reset_device(&mut self) { ... }
fn get_config(&self, _offset: u32, _size: u32) -> Vec<u8> ⓘ { ... }
fn set_config(&mut self, _offset: u32, _buf: &[u8]) -> Result<()> { ... }
fn set_backend_req_fd(&mut self, _backend: Backend) { ... }
fn get_shared_object(&mut self, _uuid: VhostUserSharedMsg) -> Result<File> { ... }
fn set_gpu_socket(&mut self, _gpu_backend: GpuBackend) -> Result<()> { ... }
fn queues_per_thread(&self) -> Vec<u64> { ... }
fn exit_event(&self, _thread_index: usize) -> Option<EventFd> { ... }
fn set_device_state_fd(
&mut self,
_direction: VhostTransferStateDirection,
_phase: VhostTransferStatePhase,
_file: File,
) -> Result<Option<File>> { ... }
fn check_device_state(&self) -> Result<()> { ... }
}
Expand description
Trait without interior mutability for vhost user backend servers to implement concrete services.
Required Associated Types§
type Bitmap: Bitmap + 'static
type Vring: VringT<GuestMemoryAtomic<GuestMemoryMmap<Self::Bitmap>>>
Required Methods§
Sourcefn num_queues(&self) -> usize
fn num_queues(&self) -> usize
Get number of queues supported.
Sourcefn max_queue_size(&self) -> usize
fn max_queue_size(&self) -> usize
Get maximum queue size supported.
Sourcefn protocol_features(&self) -> VhostUserProtocolFeatures
fn protocol_features(&self) -> VhostUserProtocolFeatures
Get available vhost protocol features.
Sourcefn set_event_idx(&mut self, enabled: bool)
fn set_event_idx(&mut self, enabled: bool)
Enable or disable the virtio EVENT_IDX feature
Sourcefn update_memory(
&mut self,
mem: GuestMemoryAtomic<GuestMemoryMmap<Self::Bitmap>>,
) -> Result<()>
fn update_memory( &mut self, mem: GuestMemoryAtomic<GuestMemoryMmap<Self::Bitmap>>, ) -> Result<()>
Update guest memory regions.
Sourcefn handle_event(
&mut self,
device_event: u16,
evset: EventSet,
vrings: &[Self::Vring],
thread_id: usize,
) -> Result<()>
fn handle_event( &mut self, device_event: u16, evset: EventSet, vrings: &[Self::Vring], thread_id: usize, ) -> Result<()>
Handle IO events for backend registered file descriptors.
This function gets called if the backend registered some additional listeners onto specific file descriptors. The library can handle virtqueues on its own, but does not know what to do with events happening on custom listeners.
Provided Methods§
Sourcefn acked_features(&mut self, _features: u64)
fn acked_features(&mut self, _features: u64)
Set acknowledged virtio features.
Sourcefn reset_device(&mut self)
fn reset_device(&mut self)
Reset the emulated device state.
A default implementation is provided as we cannot expect all backends to implement this function.
Sourcefn get_config(&self, _offset: u32, _size: u32) -> Vec<u8> ⓘ
fn get_config(&self, _offset: u32, _size: u32) -> Vec<u8> ⓘ
Get virtio device configuration.
A default implementation is provided as we cannot expect all backends to implement this function.
Sourcefn set_config(&mut self, _offset: u32, _buf: &[u8]) -> Result<()>
fn set_config(&mut self, _offset: u32, _buf: &[u8]) -> Result<()>
Set virtio device configuration.
A default implementation is provided as we cannot expect all backends to implement this function.
Sourcefn set_backend_req_fd(&mut self, _backend: Backend)
fn set_backend_req_fd(&mut self, _backend: Backend)
Set handler for communicating with the frontend by the backend communication channel.
A default implementation is provided as we cannot expect all backends to implement this function.
This method retrieves a file descriptor for a shared object, identified by a unique UUID,
which can be used by the front-end for DMA. If the shared object is found, it must return
a File that the frontend can use. If the shared object does not exist the function returns
None
(indicating no file descriptor is available).
This function returns a Result
, returning an error if the backend does not implement this
function.
Sourcefn set_gpu_socket(&mut self, _gpu_backend: GpuBackend) -> Result<()>
fn set_gpu_socket(&mut self, _gpu_backend: GpuBackend) -> Result<()>
Set handler for communicating with the frontend by the gpu specific backend communication channel.
This function returns a Result
, returning an error if the backend does not implement this
function.
Sourcefn queues_per_thread(&self) -> Vec<u64>
fn queues_per_thread(&self) -> Vec<u64>
Get the map to map queue index to worker thread index.
A return value of [2, 2, 4] means: the first two queues will be handled by worker thread 0, the following two queues will be handled by worker thread 1, and the last four queues will be handled by worker thread 2.
Sourcefn exit_event(&self, _thread_index: usize) -> Option<EventFd>
fn exit_event(&self, _thread_index: usize) -> Option<EventFd>
Provide an optional exit EventFd for the specified worker thread.
If an (EventFd
, token
) pair is returned, the returned EventFd
will be monitored for IO
events by using epoll with the specified token
. When the returned EventFd is written to,
the worker thread will exit.
Sourcefn set_device_state_fd(
&mut self,
_direction: VhostTransferStateDirection,
_phase: VhostTransferStatePhase,
_file: File,
) -> Result<Option<File>>
fn set_device_state_fd( &mut self, _direction: VhostTransferStateDirection, _phase: VhostTransferStatePhase, _file: File, ) -> Result<Option<File>>
Initiate transfer of internal state for the purpose of migration to/from the back-end.
Depending on direction
, the state should either be saved (i.e. serialized and written to
file
) or loaded (i.e. read from file
and deserialized). Note that this function must
not block during transfer, i.e. I/O to/from file
must be done outside of this function.
Sourcefn check_device_state(&self) -> Result<()>
fn check_device_state(&self) -> Result<()>
After transferring internal state, check for any resulting errors, including potential deserialization errors when loading state.
Although this function return a Result
, the front-end will not receive any details about
this error.