diff --git a/lib/dune b/lib/dune index 5ea0c27..5ca9800 100644 --- a/lib/dune +++ b/lib/dune @@ -11,7 +11,6 @@ (public_name rawlink.lowlevel) (modules rawlink_lowlevel) (libraries cstruct unix) - (preprocess (pps ppx_cstruct)) (foreign_stubs (language c) (names rawlink_stubs))) (library diff --git a/lib/rawlink_lowlevel.ml b/lib/rawlink_lowlevel.ml index bd212a3..56aa228 100644 --- a/lib/rawlink_lowlevel.ml +++ b/lib/rawlink_lowlevel.ml @@ -16,14 +16,20 @@ (* This module is supposed to be used internally only *) -[%%cstruct -type bpf_hdr = { - bh_sec: uint32_t; - bh_usec: uint32_t; - bh_caplen: uint32_t; - bh_datalen: uint32_t; - bh_hdrlen: uint16_t; -} [@@host_endian]] +(* Hand picked from: + [%%cstruct + type bpf_hdr = { + bh_sec: uint32_t; + bh_usec: uint32_t; + bh_caplen: uint32_t; + bh_datalen: uint32_t; + bh_hdrlen: uint16_t; + } [@@host_endian]] + *) +let get_bpf_hdr_bh_caplen v = Cstruct.HE.get_uint32 v 8 +let get_bpf_hdr_bh_datalen v = Cstruct.HE.get_uint32 v 12 +let get_bpf_hdr_bh_hdrlen v = Cstruct.HE.get_uint16 v 16 +(* omitted: all setters, get_bpf_hdr_bh_sec, get_bpf_hdr_bh_usec, hexdump_bpf_hdr_to_buffer *) type driver = | AF_PACKET diff --git a/lib/rawlink_lowlevel.mli b/lib/rawlink_lowlevel.mli new file mode 100644 index 0000000..ab2c23d --- /dev/null +++ b/lib/rawlink_lowlevel.mli @@ -0,0 +1,13 @@ +type driver = AF_PACKET | BPF +external opensock : + ?filter:string -> ?promisc:bool -> string -> Unix.file_descr + = "caml_rawlink_open" +external dhcp_server_filter : unit -> string = "caml_dhcp_server_filter" +external dhcp_client_filter : unit -> string = "caml_dhcp_client_filter" +external driver : unit -> driver = "caml_driver" +external unix_bytes_read : + Unix.file_descr -> Cstruct.buffer -> int -> int -> int + = "caml_unix_bytes_read" +external bpf_align : int -> int -> int = "caml_bpf_align" +val bpf_split_buffer : Cstruct.t -> int -> Cstruct.t list +val process_input : Cstruct.t -> int -> Cstruct.t list diff --git a/rawlink.opam b/rawlink.opam index 9c137cb..03513b1 100644 --- a/rawlink.opam +++ b/rawlink.opam @@ -13,7 +13,6 @@ depends: [ "ocaml" {>= "4.09.0"} "dune" {>= "3.2"} "cstruct" {>= "6.1.0"} - "ppx_cstruct" ] depexts: [ ["linux-headers"] {os-distribution = "alpine"}