tape: improve docu
This commit is contained in:
parent
0b7432ae09
commit
dd59e3c2a1
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue