From f8e4f6617674e603e9d164728a2611d73562e6f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reynir=20Bj=C3=B6rnsson?= Date: Mon, 9 Sep 2024 08:57:13 +0200 Subject: [PATCH 1/3] Don't depend on ppx_cstruct, add mli file The cstruct ppx was expanded and manually added in the source file. It was only used in one place for a relatively small struct. The hexdump function was omitted. A lib/rawlink_lowlevel.mli file was added with all members exposed. The intent is to eventually unexpose what is not needed. --- lib/dune | 1 - lib/rawlink_lowlevel.ml | 30 ++++++++++++++++++++++-------- lib/rawlink_lowlevel.mli | 24 ++++++++++++++++++++++++ rawlink.opam | 1 - 4 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 lib/rawlink_lowlevel.mli 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..01a84c9 100644 --- a/lib/rawlink_lowlevel.ml +++ b/lib/rawlink_lowlevel.ml @@ -16,14 +16,28 @@ (* 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 sizeof_bpf_hdr = 18 +let get_bpf_hdr_bh_sec v = Cstruct.HE.get_uint32 v 0 +let get_bpf_hdr_bh_usec v = Cstruct.HE.get_uint32 v 4 +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 +let set_bpf_hdr_bh_sec v x = Cstruct.HE.set_uint32 v 0 x +let set_bpf_hdr_bh_usec v x = Cstruct.HE.set_uint32 v 4 x +let set_bpf_hdr_bh_caplen v x = Cstruct.HE.set_uint32 v 8 x +let set_bpf_hdr_bh_datalen v x = Cstruct.HE.set_uint32 v 12 x +let set_bpf_hdr_bh_hdrlen v x = Cstruct.HE.set_uint16 v 16 x +(* omitted: 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..a69c33f --- /dev/null +++ b/lib/rawlink_lowlevel.mli @@ -0,0 +1,24 @@ +val sizeof_bpf_hdr : int +val get_bpf_hdr_bh_sec : Cstruct.t -> Cstruct.uint32 +val get_bpf_hdr_bh_usec : Cstruct.t -> Cstruct.uint32 +val get_bpf_hdr_bh_caplen : Cstruct.t -> Cstruct.uint32 +val get_bpf_hdr_bh_datalen : Cstruct.t -> Cstruct.uint32 +val get_bpf_hdr_bh_hdrlen : Cstruct.t -> Cstruct.uint16 +val set_bpf_hdr_bh_sec : Cstruct.t -> Cstruct.uint32 -> unit +val set_bpf_hdr_bh_usec : Cstruct.t -> Cstruct.uint32 -> unit +val set_bpf_hdr_bh_caplen : Cstruct.t -> Cstruct.uint32 -> unit +val set_bpf_hdr_bh_datalen : Cstruct.t -> Cstruct.uint32 -> unit +val set_bpf_hdr_bh_hdrlen : Cstruct.t -> Cstruct.uint16 -> unit +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"} From aa45a73c49dd5ce1ed6b7c28a621885cfc3d1223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reynir=20Bj=C3=B6rnsson?= Date: Mon, 9 Sep 2024 09:15:50 +0200 Subject: [PATCH 2/3] Rawlink_lowlevel: Omit setters They seem to be unused, and to me they seem at most useful for mock testing. --- lib/rawlink_lowlevel.ml | 7 +------ lib/rawlink_lowlevel.mli | 5 ----- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/lib/rawlink_lowlevel.ml b/lib/rawlink_lowlevel.ml index 01a84c9..33bb2ae 100644 --- a/lib/rawlink_lowlevel.ml +++ b/lib/rawlink_lowlevel.ml @@ -32,12 +32,7 @@ let get_bpf_hdr_bh_usec v = Cstruct.HE.get_uint32 v 4 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 -let set_bpf_hdr_bh_sec v x = Cstruct.HE.set_uint32 v 0 x -let set_bpf_hdr_bh_usec v x = Cstruct.HE.set_uint32 v 4 x -let set_bpf_hdr_bh_caplen v x = Cstruct.HE.set_uint32 v 8 x -let set_bpf_hdr_bh_datalen v x = Cstruct.HE.set_uint32 v 12 x -let set_bpf_hdr_bh_hdrlen v x = Cstruct.HE.set_uint16 v 16 x -(* omitted: hexdump_bpf_hdr_to_buffer *) +(* omitted: all setters, hexdump_bpf_hdr_to_buffer *) type driver = | AF_PACKET diff --git a/lib/rawlink_lowlevel.mli b/lib/rawlink_lowlevel.mli index a69c33f..6d2ace8 100644 --- a/lib/rawlink_lowlevel.mli +++ b/lib/rawlink_lowlevel.mli @@ -4,11 +4,6 @@ val get_bpf_hdr_bh_usec : Cstruct.t -> Cstruct.uint32 val get_bpf_hdr_bh_caplen : Cstruct.t -> Cstruct.uint32 val get_bpf_hdr_bh_datalen : Cstruct.t -> Cstruct.uint32 val get_bpf_hdr_bh_hdrlen : Cstruct.t -> Cstruct.uint16 -val set_bpf_hdr_bh_sec : Cstruct.t -> Cstruct.uint32 -> unit -val set_bpf_hdr_bh_usec : Cstruct.t -> Cstruct.uint32 -> unit -val set_bpf_hdr_bh_caplen : Cstruct.t -> Cstruct.uint32 -> unit -val set_bpf_hdr_bh_datalen : Cstruct.t -> Cstruct.uint32 -> unit -val set_bpf_hdr_bh_hdrlen : Cstruct.t -> Cstruct.uint16 -> unit type driver = AF_PACKET | BPF external opensock : ?filter:string -> ?promisc:bool -> string -> Unix.file_descr From 5f93320e627f1e23992c37ffdb7b55f8234dc296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reynir=20Bj=C3=B6rnsson?= Date: Mon, 9 Sep 2024 09:23:38 +0200 Subject: [PATCH 3/3] Omit more cstruct ppx generated code --- lib/rawlink_lowlevel.ml | 5 +---- lib/rawlink_lowlevel.mli | 6 ------ 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/lib/rawlink_lowlevel.ml b/lib/rawlink_lowlevel.ml index 33bb2ae..56aa228 100644 --- a/lib/rawlink_lowlevel.ml +++ b/lib/rawlink_lowlevel.ml @@ -26,13 +26,10 @@ bh_hdrlen: uint16_t; } [@@host_endian]] *) -let sizeof_bpf_hdr = 18 -let get_bpf_hdr_bh_sec v = Cstruct.HE.get_uint32 v 0 -let get_bpf_hdr_bh_usec v = Cstruct.HE.get_uint32 v 4 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, hexdump_bpf_hdr_to_buffer *) +(* 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 index 6d2ace8..ab2c23d 100644 --- a/lib/rawlink_lowlevel.mli +++ b/lib/rawlink_lowlevel.mli @@ -1,9 +1,3 @@ -val sizeof_bpf_hdr : int -val get_bpf_hdr_bh_sec : Cstruct.t -> Cstruct.uint32 -val get_bpf_hdr_bh_usec : Cstruct.t -> Cstruct.uint32 -val get_bpf_hdr_bh_caplen : Cstruct.t -> Cstruct.uint32 -val get_bpf_hdr_bh_datalen : Cstruct.t -> Cstruct.uint32 -val get_bpf_hdr_bh_hdrlen : Cstruct.t -> Cstruct.uint16 type driver = AF_PACKET | BPF external opensock : ?filter:string -> ?promisc:bool -> string -> Unix.file_descr