tape: improve docu

This commit is contained in:
Dietmar Maurer 2020-12-16 12:23:52 +01:00
parent 0b7432ae09
commit dd59e3c2a1
1 changed files with 17 additions and 16 deletions

View File

@ -48,13 +48,13 @@ lazy_static::lazy_static!{
/// so we use an unsized type to avoid that. /// so we use an unsized type to avoid that.
/// ///
/// Tape data block are always read/written with a fixed size /// Tape data block are always read/written with a fixed size
/// (PROXMOX_TAPE_BLOCK_SIZE). But they may contain less data, so the /// (`PROXMOX_TAPE_BLOCK_SIZE`). But they may contain less data, so the
/// header has an additional size field. For streams of blocks, there /// header has an additional size field. For streams of blocks, there
/// is a sequence number ('seq_nr') which may be use for additional /// is a sequence number (`seq_nr`) which may be use for additional
/// error checking. /// error checking.
#[repr(C,packed)] #[repr(C,packed)]
pub struct BlockHeader { pub struct BlockHeader {
/// fixed value 'PROXMOX_TAPE_BLOCK_HEADER_MAGIC_1_0' /// fixed value `PROXMOX_TAPE_BLOCK_HEADER_MAGIC_1_0`
pub magic: [u8; 8], pub magic: [u8; 8],
pub flags: BlockHeaderFlags, pub flags: BlockHeaderFlags,
/// size as 3 bytes unsigned, little endian /// size as 3 bytes unsigned, little endian
@ -65,6 +65,7 @@ pub struct BlockHeader {
} }
bitflags! { bitflags! {
/// Header flags (e.g. `END_OF_STREAM` or `INCOMPLETE`)
pub struct BlockHeaderFlags: u8 { pub struct BlockHeaderFlags: u8 {
/// Marks the last block in a stream. /// Marks the last block in a stream.
const END_OF_STREAM = 0b00000001; const END_OF_STREAM = 0b00000001;
@ -78,13 +79,13 @@ bitflags! {
/// Media Content Header /// Media Content Header
/// ///
/// All tape files start with this header. The header may contain some /// All tape files start with this header. The header may contain some
/// informational data indicated by 'size'. /// informational data indicated by `size`.
/// ///
/// '| MediaContentHeader | header data (size) | stream data |' /// `| MediaContentHeader | header data (size) | stream data |`
/// ///
/// Note: The stream data following may be of any size. /// Note: The stream data following may be of any size.
pub struct MediaContentHeader { pub struct MediaContentHeader {
/// fixed value 'PROXMOX_BACKUP_CONTENT_HEADER_MAGIC_1_0' /// fixed value `PROXMOX_BACKUP_CONTENT_HEADER_MAGIC_1_0`
pub magic: [u8; 8], pub magic: [u8; 8],
/// magic number for the content following /// magic number for the content following
pub content_magic: [u8; 8], pub content_magic: [u8; 8],
@ -147,7 +148,7 @@ impl MediaContentHeader {
#[repr(C,packed)] #[repr(C,packed)]
/// Header for data blobs inside a chunk archive /// Header for data blobs inside a chunk archive
pub struct ChunkArchiveEntryHeader { pub struct ChunkArchiveEntryHeader {
/// Magic number ('PROXMOX_BACKUP_CHUNK_ARCHIVE_ENTRY_MAGIC_1_0') /// fixed value `PROXMOX_BACKUP_CHUNK_ARCHIVE_ENTRY_MAGIC_1_0`
pub magic: [u8; 8], pub magic: [u8; 8],
/// Chunk digest /// Chunk digest
pub digest: [u8; 32], pub digest: [u8; 32],
@ -171,16 +172,16 @@ pub struct MediaLabel {
#[derive(Serialize,Deserialize,Clone,Debug)] #[derive(Serialize,Deserialize,Clone,Debug)]
/// MediaSet Label /// `MediaSet` Label
/// ///
/// Used to uniquely identify a MediaSet. They are stored as second /// Used to uniquely identify a `MediaSet`. They are stored as second
/// file on the tape. /// file on the tape.
pub struct MediaSetLabel { pub struct MediaSetLabel {
/// The associated MediaPool /// The associated `MediaPool`
pub pool: String, pub pool: String,
/// MediaSet Uuid. We use the all-zero Uuid to reseve an empty media for a specific pool /// Uuid. We use the all-zero Uuid to reseve an empty media for a specific pool
pub uuid: Uuid, pub uuid: Uuid,
/// MediaSet media sequence number /// Media sequence number
pub seq_nr: u64, pub seq_nr: u64,
/// Creation time stamp /// Creation time stamp
pub ctime: i64, pub ctime: i64,
@ -220,23 +221,23 @@ impl BlockHeader {
buffer buffer
} }
/// Set the size /// Set the `size` field
pub fn set_size(&mut self, size: usize) { pub fn set_size(&mut self, size: usize) {
let size = size.to_le_bytes(); let size = size.to_le_bytes();
self.size.copy_from_slice(&size[..3]); self.size.copy_from_slice(&size[..3]);
} }
/// Returns the size /// Returns the `size` field
pub fn size(&self) -> usize { pub fn size(&self) -> usize {
(self.size[0] as usize) + ((self.size[1] as usize)<<8) + ((self.size[2] as usize)<<16) (self.size[0] as usize) + ((self.size[1] as usize)<<8) + ((self.size[2] as usize)<<16)
} }
/// Set the 'seq_nr' field /// Set the `seq_nr` field
pub fn set_seq_nr(&mut self, seq_nr: u32) { pub fn set_seq_nr(&mut self, seq_nr: u32) {
self.seq_nr = seq_nr.to_le(); self.seq_nr = seq_nr.to_le();
} }
/// Returns the 'seq_nr' field /// Returns the `seq_nr` field
pub fn seq_nr(&self) -> u32 { pub fn seq_nr(&self) -> u32 {
u32::from_le(self.seq_nr) u32::from_le(self.seq_nr)
} }