pub struct GetLayerReply {
pub dir_count: u32,
}Expand description
Reply from GetLayer: the number of diff-directory slots in the logical FD array.
GetLayer is a streaming method (more): it yields multiple frames,
each carrying a batch of FDs. The client MUST concatenate the FD batches
from all frames (in arrival order) to reconstruct the full logical FD array:
fds[0]— data pipe read end (carries thesplitdirfdstreambytes).fds[1..=dir_count]— the dirfds region (dir_countslots total). The real objects-directory fd sits at a sparse, hash-determined index within this region; the remaining (gap) slots hold inert dummy fds thatreconstructnever dereferences. The sparse placement is encoded in eachFileBackedDatachunk’sdirfd_index; the client passes the whole region todrain_splitdirfdstream/reconstructunchanged and must NOT assume the dir is at a fixed index.fds[dir_count+1..]— opaque lifetime FDs. The client MUST hold every one of these open until it has finished reading and processing all dir fds, then close them all to signal completion to the server. The count of trailing FDs is unspecified by contract; the client keeps open whatever it does not otherwise recognise. This lifetime-FD convention is part of thesplitdirfdstream-v0feature.
Each transport frame carries at most MAX_FDS_PER_FRAME (240) fds, safely
below the kernel SCM_MAX_FD (253) limit. Every frame carries the same
dir_count; the client should use the value from any frame (they are all
identical). The stream terminates when a frame with continues=false is
received.
A non-streaming (more=false) call delivers all fds in a single frame; if
the layer requires more than MAX_FDS_PER_FRAME fds the call returns
FdLimitExceeded and the client must retry with more=true.
Fields§
§dir_count: u32Number of diff-directory file descriptors in the full logical FD array
(i.e. fds[1..=dir_count] after concatenating all frames’ batches).
Trait Implementations§
Source§impl Clone for GetLayerReply
impl Clone for GetLayerReply
Source§fn clone(&self) -> GetLayerReply
fn clone(&self) -> GetLayerReply
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for GetLayerReply
impl Debug for GetLayerReply
Source§impl<'de> Deserialize<'de> for GetLayerReply
impl<'de> Deserialize<'de> for GetLayerReply
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl From<GetLayerReply> for __CfsctlServiceReplyStreamParams
impl From<GetLayerReply> for __CfsctlServiceReplyStreamParams
Source§fn from(v: GetLayerReply) -> Self
fn from(v: GetLayerReply) -> Self
Source§impl Serialize for GetLayerReply
impl Serialize for GetLayerReply
Auto Trait Implementations§
impl Freeze for GetLayerReply
impl RefUnwindSafe for GetLayerReply
impl Send for GetLayerReply
impl Sync for GetLayerReply
impl Unpin for GetLayerReply
impl UnsafeUnpin for GetLayerReply
impl UnwindSafe for GetLayerReply
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<S> CanonJsonSerialize for Swhere
S: Serialize,
impl<S> CanonJsonSerialize for Swhere
S: Serialize,
§fn to_canon_json_writer<W>(&self, writer: W) -> Result<(), Error>where
W: Write,
fn to_canon_json_writer<W>(&self, writer: W) -> Result<(), Error>where
W: Write,
§fn to_canon_json_vec(&self) -> Result<Vec<u8>, Error>
fn to_canon_json_vec(&self) -> Result<Vec<u8>, Error>
§fn to_canon_json_string(&self) -> Result<String, Error>
fn to_canon_json_string(&self) -> Result<String, Error>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more