sig
  type flags = {
    urg : bool;
    ack : bool;
    psh : bool;
    rst : bool;
    syn : bool;
    fin : bool;
  }
  val string_of_flags : Tcp.Pdu.flags -> string
  val print_flags : Batteries.Format.formatter -> Tcp.Pdu.flags -> unit
  type t = {
    src_port : Tcp.Port.t;
    dst_port : Tcp.Port.t;
    seq_num : Tcp.SeqNum.t;
    ack_num : Tcp.SeqNum.t;
    win_size : int;
    flags : Tcp.Pdu.flags;
    urg_ptr : int;
    options : Bitstring.bitstring;
    payload : Tools.Payload.t;
  }
  val make :
    ?src_port:Tcp.Port.t ->
    ?dst_port:Tcp.Port.t ->
    ?seq_num:Tcp.SeqNum.t ->
    ?ack_num:Tcp.SeqNum.t ->
    ?urg:bool ->
    ?ack:bool ->
    ?psh:bool ->
    ?rst:bool ->
    ?syn:bool ->
    ?fin:bool ->
    ?win_size:int ->
    ?urg_ptr:int ->
    ?options:Bitstring.bitstring -> Tools.Payload.outer_t -> Tcp.Pdu.t
  val random : unit -> Tcp.Pdu.t
  val make_reset_of : Tcp.Pdu.t -> Tcp.Pdu.t
  val pack : Tcp.Pdu.t -> Bitstring.bitstring
  val unpack : string * int * int -> Tcp.Pdu.t option
end