美文网首页
ebpf入门

ebpf入门

作者: wwq2020 | 来源:发表于2023-10-18 16:28 被阅读0次

简介

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

相关文章

  • eCapture 一个神奇的开源工具

    一 前言 前段时间,一直对eBPF感兴趣,也写了一些eBPF的入门介绍文章,朋友就发来个连接说这是一个好东西,我看...

  • ebpf

    接上篇udp压测场景性能较差,想用ebpf优化下性能,毕竟ebpf已经有LB方案可以替代ipvs,基于更低的cpu...

  • [漏洞复现]Ubuntu16.04本地提权(CVE-2017-1

    漏洞概述: 该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中,当用户提供恶意BPF程序使eBPF验...

  • CVE-2017-16995 ubuntu16.04

    该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中,当用户提供恶意BPF程序使eBPF验证器模块产生...

  • eBPF深度探索: 高效DNS监控实现

    eBPF可以灵活扩展Linux内核机制,本文通过实现一个DNS监控工具为例,介绍了怎样开发实际的eBPF应用。原文...

  • 为什么k8s管理员要懂eBPF

    本文主要目的是让你了解eBPF的来龙去脉,以及为什么它在观察容器和Kubernetes集群时特别有用。 eBPF有...

  • eBPF verifier

    源:https://www.kernel.org/doc/Documentation/networking/fil...

  • linux调优工具

    eBPF https://www.cnblogs.com/charlieroro/p/13403672.html[...

  • 从零开始的内核ebpf开发之旅

    引言 内核研究与开发是计算机底层处于与硬件打交道的部位,ebpf可以理解为是内核开发的一个模块。在研究ebpf开发...

  • ebpf开发环境

    安装开发环境 必要的开发工具: libbpf-dev 这个库很可能需要从源码安装,具体的步骤你可以参考 libbp...

网友评论

      本文标题:ebpf入门

      本文链接:https://www.haomeiwen.com/subject/hydcidtx.html