ebpf入门

2023-10-18  本文已影响0人  wwq2020

简介

bpf程序分为user-space-program(USP)和kernel-space-program(KSP)
他们互相不可直接通信,通过buffer交换数据
运行bpf程序在linux 5.8之后需要CAP_BPF,之前需要CAP_SYS_ADMIN

准备环境

此处使用的是ubuntu,需要root权限

apt-get install clang
apt-get install make
apt install libbpf-dev
wget https://github.com/libbpf/bpftool/releases/download/v7.2.0/bpftool-v7.2.0-amd64.tar.gz
tar zxvf bpftool-v7.2.0-amd64.tar.gz
mv bpftool /usr/bin

demo

创建hello.bpf.c,内容如下

#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>

int counter = 0;

SEC("xdp")
int hello(struct xdp_md *ctx) {
    bpf_printk("Hello World %d", counter);
    counter++; 
    return XDP_PASS;
}

char LICENSE[] SEC("license") = "Dual BSD/GPL";

创建makefile,内容如下

TARGETS = hello hello-func

all: $(TARGETS)
.PHONY: all

$(TARGETS): %: %.bpf.o 

%.bpf.o: %.bpf.c
        clang \
            -target bpf \
                -I/usr/include/$(shell uname -m)-linux-gnu \
                -g \
            -O2 -o $@ -c $<

clean: 
        - rm *.bpf.o
        - rm -f /sys/fs/bpf/hello 
        - rm -f /sys/fs/bpf/hello-func

编译bpf程序

make hello

加载bpf程序

bpftool prog load hello.bpf.o /sys/fs/bpf/hello

attach到网卡

bpftool net attach xdp name hello dev lo

测试

在一个终端执行

bpftool prog trace log(也可以使用cat /sys/kernel/debug/tracing/trace_pipe)

在另一个终端执行

ping localhost

修改hello.bpf.c

把XDP_PASS改为XDP_DROP

从网卡detach

bpftool net detach xdp  dev lo

卸载bpf程序

rm /sys/fs/bpf/hello

编译bpf程序

make hello

加载bpf程序

bpftool prog load hello.bpf.o /sys/fs/bpf/hello

attach到网卡

bpftool net attach xdp name hello dev lo

测试

在一个终端执行

bpftool prog trace log(也可以使用cat /sys/kernel/debug/tracing/trace_pipe)

在另一个终端执行

ping localhost

可以看到此时ping是不通的

一些命令

查看内核已加载到bpf程序
bpftool prog list
查看指定id的bpf程序的字节码
bpftool prog dump xlated id ${id} linum

bpftool prog show name hello

查看内核加载的map
bpftool map list

查看内核加载的map
bpftool map show id

查看内核加载的map内容
bpftool map dump id ${id}

查看内核加载的map内容某个key的value
bpftool map lookup id ${id} key 100 0 0 0 0 0 0 0


更新内核加载的map内容某个key的value
bpftool map update id ${id} key 5 0 0 0 0 0 0 0 value 0 0 0 0 0 0 0 1

一些工具

bpftool
bpftrace
bcc
上一篇下一篇

猜你喜欢

热点阅读