sig
  type t = {
    hw_type : Arp.HwType.t;
    proto_type : Arp.HwProto.t;
    operation : Arp.Op.t;
    sender_hw : Bitstring.bitstring;
    sender_proto : Bitstring.bitstring;
    target_hw : Bitstring.bitstring;
    target_proto : Bitstring.bitstring;
  }
  val make_request :
    Arp.HwType.t ->
    Arp.HwProto.t ->
    Bitstring.bitstring ->
    Bitstring.bitstring -> Bitstring.bitstring -> Arp.Pdu.t
  val make_reply :
    Arp.HwType.t ->
    Arp.HwProto.t ->
    Bitstring.bitstring ->
    Bitstring.bitstring ->
    Bitstring.bitstring -> Bitstring.bitstring -> Arp.Pdu.t
  val random : unit -> Arp.Pdu.t
  val pack : Arp.Pdu.t -> Bitstring.bitstring
  val unpack : string * int * int -> Arp.Pdu.t option
end