Skip to main content

NakProcedure

Enum NakProcedure 

Source
pub enum NakProcedure {
    Immediate(Duration),
    Deferred(Duration),
}
Expand description

The way the Nak procedure is implemented is the following:

  • In Immediate mode, upon reception of each file data PDU, if the received segment is at the end of the file and there is a gap between the previously received segment and the new segment, a nak is sent with the new gap but only after delay has elapsed (if any delay was set). If the NAK timer has timed out, the nak sent covers the gaps from the entire file, not only the last gap. After the EOF is received, the procedure is the same as in deferred mode.
  • In Deferred mode, a nak covering the gaps from the entire file is sent after the EOF has been received and each time the nak timer times out.

The delay parameter is useful when PDUs come out of order to avoid sending NAKs prematurely. One scenario when this may happen is when utilizing multiple links of different latencies. The delay should be set to cover the difference in latency between the slowest link and the fastest link. If the delay is greater than 0, the NAKs will not be sent immediately but only if the gap persists after the delay has passed.

NAK timer (note that this is different and probably much larger than the delay parameter mentioned above):

  • In Immediate mode the NAK timer is started at the beginning of the transaction.
  • In Deferred mode the NAK timer is started after EOF is received.
  • If the NAK timer times out and it is determined that new data has been received since the last nak sending, the timer counter is reset to 0.
  • If the NAK timer expired more than the predefined limit (without any new data being received), the NakLimitReached fault will be raised.

Variants§

§

Immediate(Duration)

§

Deferred(Duration)

Trait Implementations§

Source§

impl Clone for NakProcedure

Source§

fn clone(&self) -> NakProcedure

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 Copy for NakProcedure

Source§

impl Debug for NakProcedure

Source§

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

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

impl Eq for NakProcedure

Source§

impl PartialEq for NakProcedure

Source§

fn eq(&self, other: &NakProcedure) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for NakProcedure

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
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.

Source§

impl<T> Instrument for T

Source§

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

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

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

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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