Skip to main content

GetLayerReply

Struct GetLayerReply 

Source
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 the splitdirfdstream bytes).
  • fds[1..=dir_count] — the dirfds region (dir_count slots total). The real objects-directory fd sits at a sparse, hash-determined index within this region; the remaining (gap) slots hold inert dummy fds that reconstruct never dereferences. The sparse placement is encoded in each FileBackedData chunk’s dirfd_index; the client passes the whole region to drain_splitdirfdstream / reconstruct unchanged 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 the splitdirfdstream-v0 feature.

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: u32

Number 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

Source§

fn clone(&self) -> GetLayerReply

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GetLayerReply

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for GetLayerReply

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl From<GetLayerReply> for __CfsctlServiceReplyStreamParams

Source§

fn from(v: GetLayerReply) -> Self

Converts to this type from the input type.
Source§

impl Serialize for GetLayerReply

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Type for GetLayerReply

Source§

const TYPE: &'static Type<'static>

The type information.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<S> CanonJsonSerialize for S
where S: Serialize,

§

fn to_canon_json_writer<W>(&self, writer: W) -> Result<(), Error>
where W: Write,

Serialize the given data structure as JSON into the I/O stream.
§

fn to_canon_json_vec(&self) -> Result<Vec<u8>, Error>

Serialize the given data structure as a JSON byte vector.
§

fn to_canon_json_string(&self) -> Result<String, Error>

Serialize the given data structure as a String.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,