From 2da7aca8e878961029217c20bc1e0ce353a0f345 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Thu, 28 Jan 2021 12:59:53 +0100 Subject: [PATCH] tape/changer: add vendor/model to DriveStatus Signed-off-by: Dominik Csapak --- src/tape/changer/mod.rs | 4 ++++ src/tape/changer/mtx/parse_mtx_status.rs | 6 ++++++ src/tape/changer/sg_pt_changer.rs | 16 ++++++++++------ src/tape/drive/virtual_tape.rs | 2 ++ 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/tape/changer/mod.rs b/src/tape/changer/mod.rs index 30e30b94..0d378587 100644 --- a/src/tape/changer/mod.rs +++ b/src/tape/changer/mod.rs @@ -38,6 +38,10 @@ pub struct DriveStatus { pub status: ElementStatus, /// Drive Identifier (Serial number) pub drive_serial_number: Option, + /// Drive Vendor + pub vendor: Option, + /// Drive Model + pub model: Option, /// Element Address pub element_address: u16, } diff --git a/src/tape/changer/mtx/parse_mtx_status.rs b/src/tape/changer/mtx/parse_mtx_status.rs index c042c318..b2f5c5d7 100644 --- a/src/tape/changer/mtx/parse_mtx_status.rs +++ b/src/tape/changer/mtx/parse_mtx_status.rs @@ -46,6 +46,8 @@ fn parse_drive_status(i: &str, id: u64) -> IResult<&str, DriveStatus> { loaded_slot, status: ElementStatus::Empty, drive_serial_number: None, + vendor: None, + model: None, element_address: id as u16, }; return Ok((empty, status)); @@ -71,6 +73,8 @@ fn parse_drive_status(i: &str, id: u64) -> IResult<&str, DriveStatus> { loaded_slot, status: ElementStatus::VolumeTag(tag.to_string()), drive_serial_number: None, + vendor: None, + model: None, element_address: id as u16, }; return Ok((i, status)); @@ -82,6 +86,8 @@ fn parse_drive_status(i: &str, id: u64) -> IResult<&str, DriveStatus> { loaded_slot, status: ElementStatus::Full, drive_serial_number: None, + vendor: None, + model: None, element_address: id as u16, }; Ok((i, status)) diff --git a/src/tape/changer/sg_pt_changer.rs b/src/tape/changer/sg_pt_changer.rs index 85961457..b6c64381 100644 --- a/src/tape/changer/sg_pt_changer.rs +++ b/src/tape/changer/sg_pt_changer.rs @@ -641,23 +641,25 @@ fn decode_element_status_page( let dvcid: DvcidHead = unsafe { reader.read_be_value()? }; - let drive_serial_number = match (dvcid.code_set, dvcid.identifier_type) { + let (drive_serial_number, vendor, model) = match (dvcid.code_set, dvcid.identifier_type) { (2, 0) => { // Serial number only (Quantum Superloader3 uses this) let serial = reader.read_exact_allocated(dvcid.identifier_len as usize)?; let serial = scsi_ascii_to_string(&serial); - Some(serial) + (Some(serial), None, None) } (2, 1) => { if dvcid.identifier_len != 34 { bail!("got wrong DVCID length"); } - let _vendor = reader.read_exact_allocated(8)?; - let _product = reader.read_exact_allocated(16)?; + let vendor = reader.read_exact_allocated(8)?; + let vendor = scsi_ascii_to_string(&vendor); + let model = reader.read_exact_allocated(16)?; + let model = scsi_ascii_to_string(&model); let serial = reader.read_exact_allocated(10)?; let serial = scsi_ascii_to_string(&serial); - Some(serial) + (Some(serial), Some(vendor), Some(model)) } - _ => None, + _ => (None, None, None), }; result.last_element_address = Some(desc.element_address); @@ -666,6 +668,8 @@ fn decode_element_status_page( loaded_slot, status: create_element_status(full, volume_tag), drive_serial_number, + vendor, + model, element_address: desc.element_address, }; result.drives.push(drive); diff --git a/src/tape/drive/virtual_tape.rs b/src/tape/drive/virtual_tape.rs index 7dea49de..7fbc1167 100644 --- a/src/tape/drive/virtual_tape.rs +++ b/src/tape/drive/virtual_tape.rs @@ -399,6 +399,8 @@ impl MediaChange for VirtualTapeHandle { loaded_slot: None, status: ElementStatus::VolumeTag(current_tape.name.clone()), drive_serial_number: None, + vendor: None, + model: None, element_address: 0, }); }