I want to pass a buffer of a network packet to C. I already figured out how to do that for simple OCaml types but I don’t know how to pass a buffer from this CStruct library.
The library that I’m using uses https://github.com/mirage/ocaml-cstruct which I don’t know why but looks like it mimics a C struct, so I guess it should be easy to pass this as a buffer to C.
This is how the buffer is created in my code:
let buf = Cstruct.create size in
If we look at its code, it calls https://github.com/mirage/ocaml-cstruct/blob/master/lib/cstruct.ml#L98 which is
let buffer = Bigarray_compat.(Array1.create char c_layout len) in
{ buffer ; len ; off = 0 }
For a recent version of OCaml, Bigarray is just the standar lib Bigarray, it’s simply a module that does
include Stdlib.Bigarray
I couldn’t find anything about passing a bigarray to C as a pointer that can be read.