Skip to main content

arcbox_virtio/
lib.rs

1//! # arcbox-virtio
2//!
3//! `VirtIO` device implementations for `ArcBox`.
4//!
5//! This crate provides `VirtIO` device emulation including:
6//!
7//! - [`blk`]: Block device (virtio-blk)
8//! - [`net`]: Network device (virtio-net)
9//! - [`console`]: Console device (virtio-console)
10//! - [`fs`]: Filesystem device (virtio-fs)
11//! - [`vsock`]: Socket device (virtio-vsock)
12//!
13//! ## `VirtIO` Queue
14//!
15//! All devices use the standard `VirtIO` queue (virtqueue) mechanism for
16//! communication with the guest. The [`queue`] module provides the core
17//! queue implementation.
18//!
19//! ## Architecture
20//!
21//! ```text
22//! ┌─────────────────────────────────────────┐
23//! │            arcbox-virtio                │
24//! │  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐│
25//! │  │ blk │ │ net │ │cons │ │ fs  │ │vsock││
26//! │  └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘│
27//! │     └───────┴───────┴───────┴───────┘   │
28//! │                   │                     │
29//! │              VirtQueue                  │
30//! └─────────────────────────────────────────┘
31//! ```
32
33#![allow(clippy::ptr_as_ptr)]
34#![allow(clippy::borrow_as_ptr)]
35#![allow(clippy::unnecessary_cast)]
36#![allow(clippy::cognitive_complexity)]
37#![allow(clippy::map_unwrap_or)]
38#![allow(clippy::useless_vec)]
39#![allow(clippy::unnecessary_wraps)]
40#![allow(clippy::redundant_clone)]
41#![allow(clippy::unnecessary_map_or)]
42#![allow(clippy::missing_fields_in_debug)]
43#![allow(clippy::needless_lifetimes)]
44#![allow(clippy::needless_collect)]
45#![allow(mismatched_lifetime_syntaxes)]
46
47/// Back-compat re-export of `arcbox-virtio-blk`.
48pub mod blk {
49    pub use arcbox_virtio_blk::*;
50}
51
52/// Back-compat re-export of `arcbox-virtio-console`.
53pub mod console {
54    pub use arcbox_virtio_console::*;
55}
56
57/// Back-compat re-export of `arcbox-virtio-fs`.
58pub mod fs {
59    pub use arcbox_virtio_fs::*;
60}
61
62/// Back-compat re-export of `arcbox-virtio-net`.
63pub mod net {
64    pub use arcbox_virtio_net::*;
65}
66
67/// Back-compat re-export of `arcbox-virtio-rng`.
68pub mod rng {
69    pub use arcbox_virtio_rng::*;
70}
71
72/// Back-compat re-export of `arcbox-virtio-vsock`.
73pub mod vsock {
74    pub use arcbox_virtio_vsock::*;
75}
76
77/// Back-compat re-export of `arcbox-virtio-balloon`.
78pub mod balloon {
79    pub use arcbox_virtio_balloon::*;
80}
81
82/// Back-compat re-export of the vsock connection manager. The actual
83/// `RxOps` / `VsockConnectionManager` / `VsockConnection` definitions
84/// live in `arcbox-virtio-vsock::manager` after the per-device split.
85pub mod vsock_manager {
86    pub use arcbox_virtio_vsock::manager::*;
87}
88
89// Back-compat re-export of `queue` / `queue_guest` modules (moved to
90// `arcbox-virtio-core`). Existing `arcbox_virtio::queue::VirtQueue`
91// paths keep working.
92pub use arcbox_virtio_core::queue;
93pub use arcbox_virtio_core::queue_guest;
94
95// Re-export the foundational types from arcbox-virtio-core so existing
96// `arcbox_virtio::{VirtioDevice, DeviceCtx, ...}` imports keep working
97// without changes. The types' actual definitions live in
98// `arcbox-virtio-core` so per-device crates (rng, console, blk, ...)
99// can depend on the smaller foundation crate without pulling in every
100// device implementation.
101pub use arcbox_virtio_core::{
102    DeviceCtx, DeviceStatus, GuestMemWriter, QueueConfig, Result, VirtioDevice, VirtioDeviceId,
103    VirtioError, virtio_bindings,
104};
105pub use queue::{AvailRing, Descriptor, UsedRing, VirtQueue};
106
107// Back-compat re-export of the foundational `error` and `guest_mem`
108// modules — code that did `arcbox_virtio::error::VirtioError` or
109// `arcbox_virtio::guest_mem::GuestMemWriter` keeps compiling.
110pub use arcbox_virtio_core::error;
111pub use arcbox_virtio_core::guest_mem;