Module Segment.Rx

Parameters

module T : Mirage_time.S
module ACK : Ack.M

Signature

type segment = {
  1. header : Tcp_packet.t;
  2. payload : Cstruct.t;
}

Individual received TCP segment

val pp_segment : Stdlib.Format.formatter -> segment -> unit
type t

Queue of receive segments

val pp : Stdlib.Format.formatter -> t -> unit
val create : rx_data:(Cstruct.t list option * Sequence.t option) Lwt_mvar.t -> ack:ACK.t -> wnd:Window.t -> state:State.t -> tx_ack:(Sequence.t * int) Lwt_mvar.t -> t
val is_empty : t -> bool
val input : t -> segment -> unit Lwt.t

Given the current receive queue and an incoming packet, update the window, extract any ready segments into the user receive queue, and signal any acks to the Tx queue