scsidisk_resources/
lib.rs1#![forbid(unsafe_code)]
7
8use inspect::Inspect;
9use mesh::MeshPayload;
10use mesh::payload::Protobuf;
11use mesh::rpc::FailableRpc;
12use storage_string::AsciiString;
13use vm_resource::Resource;
14use vm_resource::ResourceId;
15use vm_resource::kind::DiskHandleKind;
16use vm_resource::kind::ScsiDeviceHandleKind;
17
18#[derive(MeshPayload)]
20pub struct SimpleScsiDiskHandle {
21    pub disk: Resource<DiskHandleKind>,
23    pub read_only: bool,
25    pub parameters: DiskParameters,
27}
28
29impl ResourceId<ScsiDeviceHandleKind> for SimpleScsiDiskHandle {
30    const ID: &'static str = "emulated_disk";
31}
32
33#[derive(Debug, Default, Clone, Protobuf)]
38pub struct DiskParameters {
39    pub disk_id: Option<[u8; 16]>,
41    pub identity: Option<DiskIdentity>,
43    pub serial_number: Vec<u8>,
45    pub medium_rotation_rate: Option<u16>,
47    pub physical_sector_size: Option<u32>,
49    pub fua: Option<bool>,
51    pub write_cache: Option<bool>,
53    pub scsi_disk_size_in_bytes: Option<u64>,
55    pub odx: Option<bool>,
59    pub unmap: Option<bool>,
61    pub max_transfer_length: Option<usize>,
63    pub optimal_unmap_sectors: Option<u32>,
65    pub get_lba_status: bool,
70}
71
72#[derive(Debug, Clone, Inspect, Protobuf)]
74pub struct DiskIdentity {
75    pub vendor_id: AsciiString<8>,
77    pub product_id: AsciiString<16>,
79    pub product_revision_level: AsciiString<4>,
81    pub model_number: Vec<u8>, }
84
85impl DiskIdentity {
86    pub fn msft() -> Self {
89        Self {
90            vendor_id: (*b"Msft    ").into(),
91            product_id: (*b"Virtual Disk    ").into(),
92            product_revision_level: (*b"1.0 ").into(),
93            model_number: Vec::new(),
94        }
95    }
96}
97
98#[derive(MeshPayload)]
100pub struct SimpleScsiDvdHandle {
101    pub media: Option<Resource<DiskHandleKind>>,
103    pub requests: Option<mesh::Receiver<SimpleScsiDvdRequest>>,
105}
106
107#[derive(MeshPayload)]
109pub enum SimpleScsiDvdRequest {
110    ChangeMedia(FailableRpc<Option<Resource<DiskHandleKind>>, ()>),
112}
113
114impl ResourceId<ScsiDeviceHandleKind> for SimpleScsiDvdHandle {
115    const ID: &'static str = "emulated_dvd";
116}