目录
函数原型
/* 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_demo libbpf_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)