pub struct ServerFeatures(/* private fields */);Expand description
Features supported by an NBD server implementation.
Derived from transmission flags but excluding administrative flags like HAS_FLAGS and READ_ONLY. These flags allow the server to advertise which features it supports.
For each flag, the server:
- MAY set the flag for features it supports
- MUST NOT set the flag for features it does not support
- The client MUST NOT use a feature documented as ‘exposed’ by a flag unless that flag was set
Available flags:
ServerFeatures::SEND_FLUSH(0x0004): Exposes support forNBD_CMD_FLUSH.ServerFeatures::SEND_FUA(0x0008): Exposes support forNBD_CMD_FLAG_FUA(Force Unit Access).ServerFeatures::ROTATIONAL(0x0010): Indicates the export has characteristics of a rotational medium. The client MAY schedule I/O accesses accordingly.ServerFeatures::SEND_TRIM(0x0020): Exposes support forNBD_CMD_TRIM.ServerFeatures::SEND_WRITE_ZEROES(0x0040): Exposes support forNBD_CMD_WRITE_ZEROESandNBD_CMD_FLAG_NO_HOLE.ServerFeatures::SEND_DF(0x0080): Do not fragment a structured reply. Indicates the server supports theNBD_CMD_FLAG_DFrequest flag.ServerFeatures::CAN_MULTI_CONN(0x0100): Indicates that the server operates without cache or with a shared cache, makingFLUSHandFUAoperations visible across all connections. Without this flag, clients SHOULD NOT multiplex commands over multiple connections.ServerFeatures::SEND_RESIZE(0x0200): Exposes support for the experimental RESIZE extension.ServerFeatures::SEND_CACHE(0x0400): Documents that the server understandsNBD_CMD_CACHE. Note that some servers may support the command without this bit, and this flag doesn’t guarantee the command will succeed.ServerFeatures::SEND_FAST_ZERO(0x0800): Allows clients to detect ifNBD_CMD_WRITE_ZEROESis faster than a corresponding write via theNBD_CMD_FLAG_FAST_ZEROrequest flag.ServerFeatures::BLOCK_STATUS_PAYLOAD(0x1000): Defined by the experimental EXTENDED_HEADERS extension.
Implementations§
Source§impl ServerFeatures
impl ServerFeatures
pub const SEND_FLUSH: Self
pub const SEND_FUA: Self
pub const ROTATIONAL: Self
pub const SEND_TRIM: Self
pub const SEND_WRITE_ZEROES: Self
pub const SEND_DF: Self
pub const CAN_MULTI_CONN: Self
pub const SEND_RESIZE: Self
pub const SEND_CACHE: Self
pub const SEND_FAST_ZERO: Self
pub const BLOCK_STATUS_PAYLOAD: Self
Source§impl ServerFeatures
impl ServerFeatures
Sourcepub const fn bits(&self) -> u16
pub const fn bits(&self) -> u16
Get the underlying bits value.
The returned value is exactly the bits set in this flags value.
Sourcepub const fn from_bits(bits: u16) -> Option<Self>
pub const fn from_bits(bits: u16) -> Option<Self>
Convert from a bits value.
This method will return None if any unknown bits are set.
Sourcepub const fn from_bits_truncate(bits: u16) -> Self
pub const fn from_bits_truncate(bits: u16) -> Self
Convert from a bits value, unsetting any unknown bits.
Sourcepub const fn from_bits_retain(bits: u16) -> Self
pub const fn from_bits_retain(bits: u16) -> Self
Convert from a bits value exactly.
Sourcepub fn from_name(name: &str) -> Option<Self>
pub fn from_name(name: &str) -> Option<Self>
Get a flags value with the bits of a flag with the given name set.
This method will return None if name is empty or doesn’t
correspond to any named flag.
Sourcepub const fn intersects(&self, other: Self) -> bool
pub const fn intersects(&self, other: Self) -> bool
Whether any set bits in a source flags value are also set in a target flags value.
Sourcepub const fn contains(&self, other: Self) -> bool
pub const fn contains(&self, other: Self) -> bool
Whether all set bits in a source flags value are also set in a target flags value.
Sourcepub fn remove(&mut self, other: Self)
pub fn remove(&mut self, other: Self)
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
remove won’t truncate other, but the ! operator will.
Sourcepub fn toggle(&mut self, other: Self)
pub fn toggle(&mut self, other: Self)
The bitwise exclusive-or (^) of the bits in two flags values.
Sourcepub fn set(&mut self, other: Self, value: bool)
pub fn set(&mut self, other: Self, value: bool)
Call insert when value is true or remove when value is false.
Sourcepub const fn intersection(self, other: Self) -> Self
pub const fn intersection(self, other: Self) -> Self
The bitwise and (&) of the bits in two flags values.
Sourcepub const fn union(self, other: Self) -> Self
pub const fn union(self, other: Self) -> Self
The bitwise or (|) of the bits in two flags values.
Sourcepub const fn difference(self, other: Self) -> Self
pub const fn difference(self, other: Self) -> Self
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.
Sourcepub const fn symmetric_difference(self, other: Self) -> Self
pub const fn symmetric_difference(self, other: Self) -> Self
The bitwise exclusive-or (^) of the bits in two flags values.
Sourcepub const fn complement(self) -> Self
pub const fn complement(self) -> Self
The bitwise negation (!) of the bits in a flags value, truncating the result.
Source§impl ServerFeatures
impl ServerFeatures
Sourcepub const fn iter(&self) -> Iter<ServerFeatures>
pub const fn iter(&self) -> Iter<ServerFeatures>
Yield a set of contained flags values.
Each yielded flags value will correspond to a defined named flag. Any unknown bits will be yielded together as a final flags value.
Sourcepub const fn iter_names(&self) -> IterNames<ServerFeatures>
pub const fn iter_names(&self) -> IterNames<ServerFeatures>
Yield a set of contained named flags values.
This method is like iter, except only yields bits in contained named flags.
Any unknown bits, or bits not corresponding to a contained flag will not be yielded.
Trait Implementations§
Source§impl Binary for ServerFeatures
impl Binary for ServerFeatures
Source§impl BitAnd for ServerFeatures
impl BitAnd for ServerFeatures
Source§impl BitAndAssign for ServerFeatures
impl BitAndAssign for ServerFeatures
Source§fn bitand_assign(&mut self, other: Self)
fn bitand_assign(&mut self, other: Self)
The bitwise and (&) of the bits in two flags values.
Source§impl BitOr for ServerFeatures
impl BitOr for ServerFeatures
Source§fn bitor(self, other: ServerFeatures) -> Self
fn bitor(self, other: ServerFeatures) -> Self
The bitwise or (|) of the bits in two flags values.
Source§type Output = ServerFeatures
type Output = ServerFeatures
| operator.Source§impl BitOrAssign for ServerFeatures
impl BitOrAssign for ServerFeatures
Source§fn bitor_assign(&mut self, other: Self)
fn bitor_assign(&mut self, other: Self)
The bitwise or (|) of the bits in two flags values.
Source§impl BitXor for ServerFeatures
impl BitXor for ServerFeatures
Source§impl BitXorAssign for ServerFeatures
impl BitXorAssign for ServerFeatures
Source§fn bitxor_assign(&mut self, other: Self)
fn bitxor_assign(&mut self, other: Self)
The bitwise exclusive-or (^) of the bits in two flags values.
Source§impl Debug for ServerFeatures
impl Debug for ServerFeatures
Source§impl Extend<ServerFeatures> for ServerFeatures
impl Extend<ServerFeatures> for ServerFeatures
Source§fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
The bitwise or (|) of the bits in each flags value.
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl Flags for ServerFeatures
impl Flags for ServerFeatures
Source§const FLAGS: &'static [Flag<ServerFeatures>]
const FLAGS: &'static [Flag<ServerFeatures>]
Source§fn from_bits_retain(bits: u16) -> ServerFeatures
fn from_bits_retain(bits: u16) -> ServerFeatures
Source§fn contains_unknown_bits(&self) -> bool
fn contains_unknown_bits(&self) -> bool
true if any unknown bits are set.Source§fn from_bits_truncate(bits: Self::Bits) -> Self
fn from_bits_truncate(bits: Self::Bits) -> Self
Source§fn from_name(name: &str) -> Option<Self>
fn from_name(name: &str) -> Option<Self>
Source§fn iter_names(&self) -> IterNames<Self>
fn iter_names(&self) -> IterNames<Self>
Source§fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
Source§fn contains(&self, other: Self) -> boolwhere
Self: Sized,
fn contains(&self, other: Self) -> boolwhere
Self: Sized,
Source§fn insert(&mut self, other: Self)where
Self: Sized,
fn insert(&mut self, other: Self)where
Self: Sized,
|) of the bits in two flags values.Source§fn remove(&mut self, other: Self)where
Self: Sized,
fn remove(&mut self, other: Self)where
Self: Sized,
&!). Read moreSource§fn toggle(&mut self, other: Self)where
Self: Sized,
fn toggle(&mut self, other: Self)where
Self: Sized,
^) of the bits in two flags values.Source§fn intersection(self, other: Self) -> Self
fn intersection(self, other: Self) -> Self
&) of the bits in two flags values.Source§fn difference(self, other: Self) -> Self
fn difference(self, other: Self) -> Self
&!). Read moreSource§fn symmetric_difference(self, other: Self) -> Self
fn symmetric_difference(self, other: Self) -> Self
^) of the bits in two flags values.Source§fn complement(self) -> Self
fn complement(self) -> Self
!) of the bits in a flags value, truncating the result.Source§impl FromIterator<ServerFeatures> for ServerFeatures
impl FromIterator<ServerFeatures> for ServerFeatures
Source§fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
The bitwise or (|) of the bits in each flags value.
Source§impl IntoIterator for ServerFeatures
impl IntoIterator for ServerFeatures
Source§impl LowerHex for ServerFeatures
impl LowerHex for ServerFeatures
Source§impl Not for ServerFeatures
impl Not for ServerFeatures
Source§impl Octal for ServerFeatures
impl Octal for ServerFeatures
Source§impl PublicFlags for ServerFeatures
impl PublicFlags for ServerFeatures
Source§impl Sub for ServerFeatures
impl Sub for ServerFeatures
Source§fn sub(self, other: Self) -> Self
fn sub(self, other: Self) -> Self
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.
Source§type Output = ServerFeatures
type Output = ServerFeatures
- operator.Source§impl SubAssign for ServerFeatures
impl SubAssign for ServerFeatures
Source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.