libbpf 开发指南:设置libbpf的函数回调打印

news/2025/2/11 3:16:55/

目录

函数原型

代码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)


http://www.ppmy.cn/news/694331.html

相关文章

户外运动耳机选择哪个、最适合户外运动的蓝牙耳机推荐

还有哪个季节比秋天更适合爬山和徒步等户外运动的吗&#xff1f;秋天—没有夏日的骄阳&#xff0c;没有冬天的万物凋零&#xff0c;放眼望去都是墨绿和金黄&#xff0c;上山的话还可以采摘成熟的各种各样的果子…但是一个人的话难免有些落寞&#xff0c;要是有音乐的陪伴则会增…

流量计专用无线物联模块介绍

流量计广泛应用于工业供给水等系统。随着物联网的发展&#xff0c;离散式分布式安装的流量计需要把数据远程传输到物联网平台上去&#xff0c;因此&#xff0c;传统流量计需要加上一个无线物联网模块&#xff0c;才能实现数据的远程传输。 流量计一般采用RS485作为数据通信接口…

1174. 即时食物配送 II

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 题目&#xff1a; 配送表: Delivery --------------…

Ranger集成Solr

前言 对已经在正常使用的Ranger开启Solr存储审计日志。 可以手动安装或者使用ranger admin自带的solr安装程序来安装。当然官网也说了&#xff0c;用户可以选择手动安装然后集成&#xff0c;只要你足够勇敢 &#xff1a;&#xff09; 我们这里选择使用Ranger自带的安装程序来…

户外徒步用什么耳机好?户外运动耳机推荐

作为一个徒步爱好者&#xff0c;在长时间的户外行走的途中自然会准备一个耳机来陪伴我。市面上各种运动型耳机层出不穷&#xff0c;价格也从几十到上千不等。但是喜爱的运动项目不同对运动耳机的需求也不一样。今天我们就来盘带点一下市面上各产品的性能参数&#xff0c;哪一款…

证明HashSet、HashMap线程不安全、如何变成线程安全

证明HashSet、HashMap线程不安全、如何变成线程安全 &#xff08;1&#xff09;证明HashSet线程不安全 public static void main(String[] args) {Set<String> set new HashSet<>();for (int i 1; i <30 ; i) {new Thread(()->{set.add(UUID.randomUUID(…

wifi 7主要性能提升

提升1&#xff1a;更快。接近4倍的速率提升&#xff0c;高达36Gbps 提升2&#xff1a;低延迟。单用户低延迟提升80%&#xff0c;多用户低延迟提升25%。 wifi7的主要改变&#xff1a; 改变1&#xff1a;6GHz 320MHz 改变2&#xff1a;4096 QAM 改变3&#xff1a;MLO & M…

解析:网上的大流量卡有什么套路,网上买的流量卡和实际流量不符

在网上买的流量卡&#xff0c;到手的流量和网上介绍的流量怎么不符合&#xff0c;这种是什么情况呢&#xff0c;接下来&#xff0c;我们一块来看一下吧。 如果你激活后发现套餐和介绍的不符&#xff0c;可以了解一下&#xff0c;该套餐首月月租是不是按天折算&#xff0c;现在…