pub struct ScsiCommandRequest {
pub opcode: RawBhsOpcode,
pub flags: RawScsiCmdReqFlags,
pub total_ahs_length: u8,
pub data_segment_length: [u8; 3],
pub lun: LogicalUnitNumber,
pub initiator_task_tag: InitiatorTaskTag,
pub expected_data_transfer_length: U32<BigEndian>,
pub cmd_sn: U32<BigEndian>,
pub exp_stat_sn: U32<BigEndian>,
pub scsi_descriptor_block: [u8; 16],
/* private fields */
}Expand description
Basic Header Segment for iSCSI SCSI Command Request PDU
Represents the 48-byte header structure for SCSI Command PDU as defined in RFC 7143. Contains all the fields necessary to send a SCSI command over iSCSI including task tags, sequence numbers, LUN, and the embedded SCSI CDB.
Fields§
§opcode: RawBhsOpcodePDU opcode (byte 0) - should be 0x01 for SCSI Command
flags: RawScsiCmdReqFlagsCommand flags (byte 1) - Final, Read, Write bits and task attributes
total_ahs_length: u8Total Additional Header Segments length (byte 4)
data_segment_length: [u8; 3]Data Segment Length (bytes 5-7) - length of immediate data
lun: LogicalUnitNumberLogical Unit Number (bytes 8-15)
initiator_task_tag: InitiatorTaskTagInitiator Task Tag (bytes 16-19) - unique command identifier
expected_data_transfer_length: U32<BigEndian>Expected Data Transfer Length (bytes 20-23) - total data expected
cmd_sn: U32<BigEndian>Command Sequence Number (bytes 24-27) - for ordering
exp_stat_sn: U32<BigEndian>Expected Status Sequence Number (bytes 28-31) - acknowledgment
scsi_descriptor_block: [u8; 16]SCSI Command Descriptor Block (bytes 32-47) - the actual SCSI command
Implementations§
Source§impl ScsiCommandRequest
impl ScsiCommandRequest
Sourcepub const DEFAULT_TAG: u32 = 0xffffffff_u32
pub const DEFAULT_TAG: u32 = 0xffffffff_u32
The default initiator task tag value.
Sourcepub fn to_bhs_bytes(&self, buf: &mut [u8]) -> Result<()>
pub fn to_bhs_bytes(&self, buf: &mut [u8]) -> Result<()>
Serializes the BHS into a byte buffer.
Sourcepub fn from_bhs_bytes(buf: &mut [u8]) -> Result<&mut Self>
pub fn from_bhs_bytes(buf: &mut [u8]) -> Result<&mut Self>
Deserializes the BHS from a byte buffer.
Trait Implementations§
Source§impl BasicHeaderSegment for ScsiCommandRequest
impl BasicHeaderSegment for ScsiCommandRequest
fn to_bhs_bytes(&self, buf: &mut [u8]) -> Result<()>
Source§fn get_opcode(&self) -> Result<BhsOpcode>
fn get_opcode(&self) -> Result<BhsOpcode>
Source§fn get_initiator_task_tag(&self) -> u32
fn get_initiator_task_tag(&self) -> u32
Source§fn get_ahs_length_bytes(&self) -> usize
fn get_ahs_length_bytes(&self) -> usize
Source§fn set_ahs_length_bytes(&mut self, len: u8)
fn set_ahs_length_bytes(&mut self, len: u8)
Source§fn get_data_length_bytes(&self) -> usize
fn get_data_length_bytes(&self) -> usize
Source§fn set_data_length_bytes(&mut self, len: u32)
fn set_data_length_bytes(&mut self, len: u32)
Source§fn total_length_bytes(&self) -> usize
fn total_length_bytes(&self) -> usize
fn get_header_diggest(&self, enable_header_digest: bool) -> usize
fn get_data_diggest(&self, enable_data_digest: bool) -> usize
Source§impl Debug for ScsiCommandRequest
impl Debug for ScsiCommandRequest
Source§impl Default for ScsiCommandRequest
impl Default for ScsiCommandRequest
Source§fn default() -> ScsiCommandRequest
fn default() -> ScsiCommandRequest
Source§impl<'a> From<&'a mut ScsiCommandRequest> for Pdu<'a>
impl<'a> From<&'a mut ScsiCommandRequest> for Pdu<'a>
Source§fn from(v: &'a mut ScsiCommandRequest) -> Pdu<'a>
fn from(v: &'a mut ScsiCommandRequest) -> Pdu<'a>
Source§impl FromBytes for ScsiCommandRequest
impl FromBytes for ScsiCommandRequest
Source§fn ref_from_bytes(
source: &[u8],
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
Self: KnownLayout + Immutable,
fn ref_from_bytes(
source: &[u8],
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
Self: KnownLayout + Immutable,
Source§fn ref_from_prefix(
source: &[u8],
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
Self: KnownLayout + Immutable,
fn ref_from_prefix(
source: &[u8],
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
Self: KnownLayout + Immutable,
Source§fn ref_from_suffix(
source: &[u8],
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
Self: Immutable + KnownLayout,
fn ref_from_suffix(
source: &[u8],
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>where
Self: Immutable + KnownLayout,
&Self. Read moreSource§fn mut_from_bytes(
source: &mut [u8],
) -> Result<&mut Self, ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>where
Self: IntoBytes + KnownLayout,
fn mut_from_bytes(
source: &mut [u8],
) -> Result<&mut Self, ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>where
Self: IntoBytes + KnownLayout,
Source§fn mut_from_prefix(
source: &mut [u8],
) -> Result<(&mut Self, &mut [u8]), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>where
Self: IntoBytes + KnownLayout,
fn mut_from_prefix(
source: &mut [u8],
) -> Result<(&mut Self, &mut [u8]), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>where
Self: IntoBytes + KnownLayout,
Source§fn mut_from_suffix(
source: &mut [u8],
) -> Result<(&mut [u8], &mut Self), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>where
Self: IntoBytes + KnownLayout,
fn mut_from_suffix(
source: &mut [u8],
) -> Result<(&mut [u8], &mut Self), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>where
Self: IntoBytes + KnownLayout,
Source§fn ref_from_bytes_with_elems(
source: &[u8],
count: usize,
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
fn ref_from_bytes_with_elems( source: &[u8], count: usize, ) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
Source§fn ref_from_prefix_with_elems(
source: &[u8],
count: usize,
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
fn ref_from_prefix_with_elems( source: &[u8], count: usize, ) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
Source§fn ref_from_suffix_with_elems(
source: &[u8],
count: usize,
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
fn ref_from_suffix_with_elems( source: &[u8], count: usize, ) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, Infallible>>
Source§fn mut_from_bytes_with_elems(
source: &mut [u8],
count: usize,
) -> Result<&mut Self, ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>
fn mut_from_bytes_with_elems( source: &mut [u8], count: usize, ) -> Result<&mut Self, ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>
Source§fn mut_from_prefix_with_elems(
source: &mut [u8],
count: usize,
) -> Result<(&mut Self, &mut [u8]), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>
fn mut_from_prefix_with_elems( source: &mut [u8], count: usize, ) -> Result<(&mut Self, &mut [u8]), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>
Source§fn mut_from_suffix_with_elems(
source: &mut [u8],
count: usize,
) -> Result<(&mut [u8], &mut Self), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>
fn mut_from_suffix_with_elems( source: &mut [u8], count: usize, ) -> Result<(&mut [u8], &mut Self), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, Infallible>>
Source§impl FromBytes for ScsiCommandRequest
impl FromBytes for ScsiCommandRequest
Source§impl FromZeros for ScsiCommandRequest
impl FromZeros for ScsiCommandRequest
impl Immutable for ScsiCommandRequest
Source§impl IntoBytes for ScsiCommandRequest
impl IntoBytes for ScsiCommandRequest
Source§fn as_mut_bytes(&mut self) -> &mut [u8] ⓘwhere
Self: FromBytes,
fn as_mut_bytes(&mut self) -> &mut [u8] ⓘwhere
Self: FromBytes,
Source§fn write_to(&self, dst: &mut [u8]) -> Result<(), SizeError<&Self, &mut [u8]>>where
Self: Immutable,
fn write_to(&self, dst: &mut [u8]) -> Result<(), SizeError<&Self, &mut [u8]>>where
Self: Immutable,
Source§impl KnownLayout for ScsiCommandRequest
impl KnownLayout for ScsiCommandRequest
Source§type PointerMetadata = <[u8; 16] as KnownLayout>::PointerMetadata
type PointerMetadata = <[u8; 16] as KnownLayout>::PointerMetadata
Self. Read moreSource§fn size_for_metadata(meta: Self::PointerMetadata) -> Option<usize>
fn size_for_metadata(meta: Self::PointerMetadata) -> Option<usize>
Self with the given pointer
metadata. Read moreSource§impl PartialEq for ScsiCommandRequest
impl PartialEq for ScsiCommandRequest
Source§fn eq(&self, other: &ScsiCommandRequest) -> bool
fn eq(&self, other: &ScsiCommandRequest) -> bool
self and other values to be equal, and is used by ==.Source§impl SendingData for ScsiCommandRequest
impl SendingData for ScsiCommandRequest
Source§fn get_final_bit(&self) -> bool
fn get_final_bit(&self) -> bool
Source§fn set_final_bit(&mut self)
fn set_final_bit(&mut self)
Source§fn get_continue_bit(&self) -> bool
fn get_continue_bit(&self) -> bool
Source§fn set_continue_bit(&mut self)
fn set_continue_bit(&mut self)
impl StructuralPartialEq for ScsiCommandRequest
Source§impl TryFromBytes for ScsiCommandRequestwhere
RawBhsOpcode: TryFromBytes,
RawScsiCmdReqFlags: TryFromBytes,
[u8; 2]: TryFromBytes,
u8: TryFromBytes,
[u8; 3]: TryFromBytes,
LogicalUnitNumber: TryFromBytes,
InitiatorTaskTag: TryFromBytes,
U32<BigEndian>: TryFromBytes,
[u8; 16]: TryFromBytes,
impl TryFromBytes for ScsiCommandRequestwhere
RawBhsOpcode: TryFromBytes,
RawScsiCmdReqFlags: TryFromBytes,
[u8; 2]: TryFromBytes,
u8: TryFromBytes,
[u8; 3]: TryFromBytes,
LogicalUnitNumber: TryFromBytes,
InitiatorTaskTag: TryFromBytes,
U32<BigEndian>: TryFromBytes,
[u8; 16]: TryFromBytes,
Source§fn try_ref_from_bytes(
source: &[u8],
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
Self: KnownLayout + Immutable,
fn try_ref_from_bytes(
source: &[u8],
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
Self: KnownLayout + Immutable,
Source§fn try_ref_from_prefix(
source: &[u8],
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
Self: KnownLayout + Immutable,
fn try_ref_from_prefix(
source: &[u8],
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
Self: KnownLayout + Immutable,
Source§fn try_ref_from_suffix(
source: &[u8],
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
Self: KnownLayout + Immutable,
fn try_ref_from_suffix(
source: &[u8],
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>where
Self: KnownLayout + Immutable,
Source§fn try_mut_from_bytes(
bytes: &mut [u8],
) -> Result<&mut Self, ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>where
Self: KnownLayout + IntoBytes,
fn try_mut_from_bytes(
bytes: &mut [u8],
) -> Result<&mut Self, ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>where
Self: KnownLayout + IntoBytes,
Source§fn try_mut_from_prefix(
source: &mut [u8],
) -> Result<(&mut Self, &mut [u8]), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>where
Self: KnownLayout + IntoBytes,
fn try_mut_from_prefix(
source: &mut [u8],
) -> Result<(&mut Self, &mut [u8]), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>where
Self: KnownLayout + IntoBytes,
Source§fn try_mut_from_suffix(
source: &mut [u8],
) -> Result<(&mut [u8], &mut Self), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>where
Self: KnownLayout + IntoBytes,
fn try_mut_from_suffix(
source: &mut [u8],
) -> Result<(&mut [u8], &mut Self), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>where
Self: KnownLayout + IntoBytes,
Source§fn try_ref_from_bytes_with_elems(
source: &[u8],
count: usize,
) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
fn try_ref_from_bytes_with_elems( source: &[u8], count: usize, ) -> Result<&Self, ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
Source§fn try_ref_from_prefix_with_elems(
source: &[u8],
count: usize,
) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
fn try_ref_from_prefix_with_elems( source: &[u8], count: usize, ) -> Result<(&Self, &[u8]), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
source as a &Self with
a DST length equal to count. Read moreSource§fn try_ref_from_suffix_with_elems(
source: &[u8],
count: usize,
) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
fn try_ref_from_suffix_with_elems( source: &[u8], count: usize, ) -> Result<(&[u8], &Self), ConvertError<AlignmentError<&[u8], Self>, SizeError<&[u8], Self>, ValidityError<&[u8], Self>>>
source as a &Self with
a DST length equal to count. Read moreSource§fn try_mut_from_bytes_with_elems(
source: &mut [u8],
count: usize,
) -> Result<&mut Self, ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>
fn try_mut_from_bytes_with_elems( source: &mut [u8], count: usize, ) -> Result<&mut Self, ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>
Source§fn try_mut_from_prefix_with_elems(
source: &mut [u8],
count: usize,
) -> Result<(&mut Self, &mut [u8]), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>
fn try_mut_from_prefix_with_elems( source: &mut [u8], count: usize, ) -> Result<(&mut Self, &mut [u8]), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>
source as a &mut Self
with a DST length equal to count. Read moreSource§fn try_mut_from_suffix_with_elems(
source: &mut [u8],
count: usize,
) -> Result<(&mut [u8], &mut Self), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>
fn try_mut_from_suffix_with_elems( source: &mut [u8], count: usize, ) -> Result<(&mut [u8], &mut Self), ConvertError<AlignmentError<&mut [u8], Self>, SizeError<&mut [u8], Self>, ValidityError<&mut [u8], Self>>>
source as a &mut Self
with a DST length equal to count. Read more