目录
函数原型
代码demo
makefile
cmake
函数原型
/* libbpf_set_print() sets user-provided log callback function to be used for libbpf warnings and informational messages.This function is thread-safe.Parameters:fn – The log print function. If NULL, libbpf won’t print anything.Returns:Pointer to old print function.*/ LIBBPF_API libbpf_print_fn_t libbpf_set_print (libbpf_print_fn_t fn)
代码demo
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <bpf/libbpf.h> #include <linux/bpf.h> #include "bpf_helpers.h" static int custom_print_fn(enum libbpf_print_level level, const char *format, va_list args) {const char *level_prefix;switch (level) {case LIBBPF_DEBUG:level_prefix = "DEBUG";break;case LIBBPF_INFO:level_prefix = "INFO";break;case LIBBPF_WARN:level_prefix = "WARN";break;case LIBBPF_ERROR:level_prefix = "ERROR";break;default:level_prefix = "UNKNOWN";break;}printf("[%s] ", level_prefix);return vprintf(format, args); }int main() {libbpf_set_print(custom_print_fn);struct bpf_insn prog[] = {BPF_MOV64_IMM(BPF_REG_0, 0),BPF_EXIT_INSN(),};struct bpf_load_program_attr attr = {.prog_type = BPF_PROG_TYPE_XDP,.insns = prog,.insn_cnt = sizeof(prog) / sizeof(struct bpf_insn),.license = "GPL",};int prog_fd = bpf_load_program_xattr(&attr, NULL, 0);if (prog_fd < 0) {perror("Failed to load BPF program");return 1;}printf("BPF program loaded successfully\n");close(prog_fd);return 0; }
makefile
CC = gcc CFLAGS = -Wall -Wextra -Werror LDFLAGS = $(shell pkg-config --libs libbpf)all: libbpf_print_callback_demolibbpf_print_callback_demo: libbpf_print_callback_demo.o$(CC) -o $@ $^ $(LDFLAGS)libbpf_print_callback_demo.o: libbpf_print_callback_demo.c$(CC) $(CFLAGS) -c $<clean:rm -f *.o libbpf_print_callback_demo.PHONY: all clean
cmake
cmake_minimum_required(VERSION 3.10) project(libbpf_print_callback_demo LANGUAGES C)set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF)find_package(PkgConfig REQUIRED) pkg_check_modules(LIBBPF REQUIRED IMPORTED_TARGET libbpf)add_executable(libbpf_print_callback_demo libbpf_print_callback_demo.c) target_link_libraries(libbpf_print_callback_demo PRIVATE PkgConfig::LIBBPF)