Skip to content

Feature parity with libbpf 1.0

insearchoflosttime edited this page Jul 29, 2022 · 3 revisions

One of the major milestones for libbpf-rs is to reach feature-parity with libbpf-1.0 so that any bpf userspace program writable in C may be writable in Rust.

There are some APIs that are still missing. This is a compiled list of what is still needed and will be kept up-to-date as we go along. We greatly welcome and appreciate any contributions towards this milestone.

libbpf-0.1

  • bpf_map_lookup_elem
  • bpf_btf_get_fd_by_id;
  • bpf_map__btf_key_type_id;
  • bpf_map__btf_value_type_id;
  • bpf_map_get_fd_by_id;
  • bpf_map_get_next_id;
  • bpf_map_get_next_key;
  • bpf_obj_get;
  • bpf_obj_get_info_by_fd;
  • bpf_obj_pin;
  • bpf_object__btf_fd;
  • bpf_object__find_map_by_name;
  • bpf_object__kversion;
  • bpf_object__open;
  • bpf_object__pin;
  • bpf_object__pin_maps;
  • bpf_object__pin_programs;
  • bpf_object__unpin_maps;
  • bpf_object__unpin_programs;
  • bpf_prog_attach;
  • bpf_prog_detach;
  • bpf_prog_detach2;
  • bpf_prog_get_fd_by_id;
  • bpf_prog_get_next_id;
  • bpf_prog_query;
  • bpf_program__unload;
  • bpf_prog_linfo__free;
  • bpf_prog_linfo__new;
  • bpf_prog_linfo__lfind_addr_func;
  • bpf_prog_linfo__lfind;
  • bpf_raw_tracepoint_open;
  • bpf_task_fd_query;
  • btf__fd;
  • btf__find_by_name;
  • btf__free;
  • btf__name_by_offset;
  • btf__new;
  • btf__resolve_size;
  • btf__resolve_type;
  • btf__type_by_id;
  • libbpf_attach_type_by_name;
  • libbpf_get_error;
  • libbpf_prog_type_by_name;
  • libbpf_strerror;

libbpf-0.0.2

  • bpf_object__btf
  • btf__get_raw_data
  • btf_ext__free
  • btf_ext__get_raw_data
  • btf_ext__new
  • bpf_object__find_map_fd_by_name

libbpf-0.0.3

libbpf-0.0.4

  • btf_dump__dump_type
  • btf_dump__free
  • btf__parse_elf

libbpf-0.0.5

  • bpf_btf_get_next_id

libbpf-0.0.6

  • bpf_map__get_pin_path
  • bpf_map__is_pinned
  • bpf_map__set_pin_path
  • btf__find_by_name_kind
  • libbpf_find_vmlinux_btf_id

libbpf-0.0.7

  • btf_dump__emit_type_decl
  • bpf_map_delete_batch
  • bpf_map_lookup_and_delete_batch
  • bpf_map_lookup_batch
  • bpf_map_update_batch
  • bpf_object__find_program_by_name
  • bpf_object__attach_skeleton
  • bpf_object__destroy_skeleton
  • bpf_object__detach_skeleton
  • bpf_object__load_skeleton
  • bpf_object__open_skeleton
  • btf__align_of
  • libbpf_find_kernel_btf

libbpf-0.0.8

  • bpf_prog_attach_opts
  • bpf_link_update
  • bpf_link_create

libbpf-0.0.9

  • bpf_enable_stats
  • bpf_link_get_fd_by_id
  • bpf_program__attach_iter

libbpf-0.1

  • bpf_map__ifindex;
  • bpf_map__map_flags;
  • bpf_map__max_entries;
  • bpf_map__numa_node;
  • bpf_map__set_map_flags;
  • bpf_map__set_numa_node;
  • bpf_program__autoload;
  • btf__parse;
  • btf__parse_raw;
  • btf__pointer_size;
  • btf__set_fd;
  • btf__set_pointer_size;

libbpf-0.2

  • bpf_prog_bind_map;
  • bpf_prog_test_run_opts;
  • bpf_program__attach_freplace;
  • btf__add_array;
  • btf__add_const;
  • btf__add_enum;
  • btf__add_enum_value;
  • btf__add_datasec;
  • btf__add_datasec_var_info;
  • btf__add_field;
  • btf__add_func;
  • btf__add_func_param;
  • btf__add_func_proto;
  • btf__add_fwd;
  • btf__add_int;
  • btf__add_ptr;
  • btf__add_restrict;
  • btf__add_str;
  • btf__add_struct;
  • btf__add_typedef;
  • btf__add_union;
  • btf__add_var;
  • btf__add_volatile;
  • btf__endianness;
  • btf__find_str;
  • btf__new_empty;
  • btf__set_endianness;
  • btf__str_by_offset;

libbpf-0.3

  • btf__base_btf;
  • btf__parse_elf_split;
  • btf__parse_raw_split;
  • btf__parse_split;
  • btf__new_empty_split;
  • btf__new_split;
  • ring_buffer__epoll_fd;

libbpf-0.4

  • btf__add_float;
  • btf__add_type;
  • bpf_linker__add_file;
  • bpf_linker__finalize;
  • bpf_linker__free;
  • bpf_linker__new;
  • bpf_map__inner_map;
  • bpf_object__set_kversion;

libbpf-0.5

  • bpf_map__initial_value;
  • bpf_map__pin_path;
  • bpf_map_lookup_and_delete_elem_flags;
  • bpf_program__attach_kprobe_opts;
  • bpf_program__attach_perf_event_opts;
  • bpf_program__attach_tracepoint_opts;
  • bpf_program__attach_uprobe_opts;
  • bpf_object__gen_loader;
  • btf__load_from_kernel_by_id;
  • btf__load_from_kernel_by_id_split;
  • btf__load_into_kernel;
  • btf__load_module_btf;
  • btf__load_vmlinux_btf;
  • btf_dump__dump_type_data;
  • libbpf_set_strict_mode;

libbpf-0.6

  • bpf_map__map_extra;
  • bpf_map__set_map_extra;
  • bpf_object__next_map;
  • bpf_object__next_program;
  • bpf_object__prev_map;
  • bpf_object__prev_program;
  • bpf_prog_load;
  • bpf_program__insns;
  • btf__add_btf;
  • btf__add_decl_tag;
  • btf__add_type_tag;
  • btf__dedup;
  • btf__raw_data;
  • btf__type_cnt;
  • btf_dump__new;
  • libbpf_major_version;
  • libbpf_minor_version;
  • libbpf_version_string;
  • perf_buffer__new_raw;

libbpf-0.7

  • bpf_btf_load;
  • bpf_program__log_buf;
  • bpf_program__log_level;
  • bpf_program__set_log_buf;
  • bpf_program__set_log_level;
  • bpf_xdp_attach;
  • bpf_xdp_detach;
  • bpf_xdp_query;
  • bpf_xdp_query_id;
  • btf_ext__raw_data;
  • libbpf_probe_bpf_helper;
  • libbpf_probe_bpf_map_type;
  • libbpf_probe_bpf_prog_type;
  • libbpf_set_memlock_rlim;

libbpf-0.8

  • bpf_map__autocreate;
  • bpf_map__get_next_key;
  • bpf_map__delete_elem;
  • bpf_map__lookup_and_delete_elem;
  • bpf_map__lookup_elem;
  • bpf_map__set_autocreate;
  • bpf_map__update_elem;
  • bpf_map_delete_elem_flags;
  • bpf_object__destroy_subskeleton;
  • bpf_object__open_subskeleton;
  • bpf_program__attach_kprobe_multi_opts;
  • bpf_program__attach_trace_opts;
  • bpf_program__attach_usdt;
  • bpf_program__set_insns;
  • libbpf_register_prog_handler;
  • libbpf_unregister_prog_handler;

libbpf-1.0

  • bpf_prog_query_opts;
  • bpf_program__attach_ksyscall;
  • btf__add_enum64;
  • btf__add_enum64_value;
  • libbpf_bpf_attach_type_str;
  • libbpf_bpf_link_type_str;
  • libbpf_bpf_map_type_str;
  • libbpf_bpf_prog_type_str;
  • perf_buffer__buffer;