1open Libbpf
2
3let obj_path = "minimal.bpf.o"
4let program_names = [ "handle_tp" ]
5let map = "globals"
6
7(* Load PID into BPF map*)
8let before_link obj =
9 let pid = Unix.getpid () |> Signed.Long.of_int in
10 let global_map = bpf_object_find_map_by_name obj map in
11 bpf_map_update_elem ~key_ty:Ctypes.int ~val_ty:Ctypes.long global_map 0 pid
12
13let () =
14 with_bpf_object_open_load_link ~obj_path ~program_names ~before_link
15 (fun _obj _link ->
16 let exitting = ref true in
17 let sig_handler = Sys.Signal_handle (fun _ -> exitting := false) in
18 Sys.(set_signal sigint sig_handler);
19 Sys.(set_signal sigterm sig_handler);
20
21 Printf.printf
22 "Successfully started! Please run `sudo cat \
23 /sys/kernel/debug/tracing/trace_pipe` to see output of the BPF \
24 programs.\n\
25 %!";
26
27 (* Loop until Ctrl-C is called *)
28 while !exitting do
29 Printf.eprintf ".%!";
30 Unix.sleepf 1.0
31 done)