Module Libbpf

See index for example usage

module C : module type of C

Entry point for the underlying C primatives

val major_version : int
val minor_version : int
val version_string : string
val bpf_attach_type_str : C.Types.Bpf_attach_type.t -> string
val bpf_map_type_str : C.Types.Bpf_map_type.t -> string
val bpf_prog_type_str : C.Types.Bpf_prog_type.t -> string
type bpf_object = C.Types.bpf_object Ctypes.structure Ctypes.ptr
type bpf_program = {
  1. name : string;
  2. fd : int;
  3. ptr : C.Types.bpf_program Ctypes.structure Ctypes.ptr;
}
type bpf_map = {
  1. fd : int;
  2. ptr : C.Types.bpf_map Ctypes.structure Ctypes.ptr;
}
val bpf_object_open : string -> bpf_object

bpf_object_open path opens and tries to read the bpf_object found at path path in the filesystem. Libbpf parses the BPF object file and discovers BPF maps, BPF programs, and global variables. After a BPF app is opened, user space apps can make additional adjustments (setting BPF program types, if necessary; pre-setting initial values for global variables, etc.) before all the entities are created and loaded.

Fails if object file is in invalid format or path does not exist

val bpf_object_load : bpf_object -> unit

bpf_object_load obj tries to load obj. Libbpf parses the BPF object file and discovers BPF maps, BPF programs, and global variables. After a BPF app is opened, user space apps can make additional adjustments (setting BPF program types, if necessary; pre-setting initial values for global variables, etc.) before all the entities are created and loaded.

val bpf_object_find_program_by_name : bpf_object -> string -> bpf_program

bpf_object_find_program_by_name obj name locates the program identifier name within the obj.

Fails if name is not found

val bpf_program_attach : bpf_program -> bpf_link

bpf_program_attach prog attaches the prog in the kernel to start respond to events. Libbpf attaches BPF programs to various BPF hook points (e.g., tracepoints, kprobes, cgroup hooks, network packet processing pipeline, etc.). During this phase, BPF programs perform useful work such as processing packets, or updating BPF maps and global variables that can be read from user space

Fails if link could not be attached

val bpf_program_fd : bpf_program -> int

bpf_map_fd prog returns the fd of the prog

val bpf_object_find_map_by_name : bpf_object -> string -> bpf_map

bpf_object_find_map_by_name obj name locates the bpf_map identifier name within obj.

Fails if map is not found

val bpf_map_fd : bpf_map -> int

bpf_map_fd map returns the fd of the map

bpf_link_destroy link detaches and unloads the bpf program associated to link from the kernel

val bpf_object_close : bpf_object -> unit

bpf_object_close obj tearsdown obj. BPF maps are destroyed, and all the resources used by the BPF app are freed.

with_bpf_object_open_load_link obj_path program_names ?before_link fn performs opening and loading of the provided filesystem path to the bpf_object obj_path. This helper runs before_link before the program attaches the bpf programs specified in program_names. Initialization code should go here. fn is passed the bpf_object and the list of program links if all steps were successful. Ensures all the proper shutdown and cleanup of bpf_object resources and links

val bpf_map_lookup_value : key_ty:'a Ctypes.typ -> val_ty:'b Ctypes.typ -> val_zero:'b -> bpf_map -> 'a -> 'b

bpf_map_lookup_value key_ty val_ty val_zero map k flags Looks up the value associated with the key k. If key is invalid, no value is found or the size of key/value is not in sync, it will return an error. bpf_map_lookup_value expects key_ty and val_ty to verify the types are coherent in your bpf map declaration. val_zero is merely an initialization value that will be overwritten.

val bpf_map_update_elem : key_ty:'a Ctypes.typ -> val_ty:'b Ctypes.typ -> bpf_map -> 'a -> 'b -> unit

bpf_map_update_elem key_ty val_ty map k v flags updates the value associated the key k to v. If key is invalid or the size of key/value is not in sync, it will return an error. bpf_map_update_elem expects key_ty and val_ty to verify the types are coherent in your bpf map declaration.