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}