Guía de desarrollo de libbpf: obtenga el descriptor de archivo asociado con el enlace eBPF proporcionado

Tabla de contenido

Prototipos de funciones y explicaciones.

Demostración de código

archivo make

cmake

Rendimiento esperado


Prototipos de funciones y explicaciones.

LIBBPF_API int bpf_link__fd(const struct bpf_link *enlace);

Descripción de parámetros:

  • enlace: un puntero a una estructura bpf_link, que indica el enlace eBPF en el que se operará.

Valor de retorno: un número entero que representa el descriptor de archivo asociado con el enlace eBPF dado. Si ocurre un error, se devolverá un número negativo.

Demostración de código

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

SEC("kprobe/__x64_sys_getpid")
int bpf_prog1(struct pt_regs *ctx) {
    bpf_printk("sys_getpid llamado\n");
    devolver 0;
}
#include <stdio.h>
#incluir <stdlib.h>
#incluir <string.h>
#incluir <unistd.h>
#incluir <arpa/inet.h>
#incluir <errno.h>
#incluir <fcntl.h>
#incluir <linux/bpf.h>
#incluir <bpf/bpf.h>
#incluir <bpf/libbpf.h>

int principal(int argc, char **argv) {
    si (argc != 2) {
        fprintf(stderr, "Uso: %s <bpf_program.o>\n", argv[0]);
        devolver 1;
    }
}
    devolver 0;
    bpf_object__unload(obj);
    bpf_link__destroy(enlace);
    getchar();
    printf("Presione Enter para desconectar y destruir el enlace BPF...\n");
    // Espere a que el usuario ingrese para desconectar y destruir el enlace
    }
        devolver 1;
        fprintf(stderr, "Error al obtener el descriptor del archivo de enlace BPF: %s\n", strerror(errno));
    si (fd < 0) {
    }
        devolver 1;
        fprintf(stderr, "Error al adjuntar el programa BPF: %s\n", strerror(errno));
    if (libbpf_get_error(enlace)) {
    enlace = bpf_program__attach(prog);
    }
        devolver 1;
        fprintf(stderr, "Error al cargar el programa BPF: %s\n", strerror(errno));
    if (bpf_prog_load(bpf_program_path, BPF_PROG_TYPE_KPROBE, &obj, &prog)) {
    estructura bpf_link *enlace = NULL;
    estructura bpf_program *prog = NULL;
    estructura bpf_object *obj = NULL;







archivo make

CC=gcc
CFLAGS=-I/usr/include/bpf -I./include
LDFLAGS=-lbpf

todos: prueba

prueba: prueba.c
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

limpiar:
	rm -f prueba

cmake

cmake_minimum_required(VERSIÓN 2.8)
proyecto(prueba)

set(CMAKE_C_FLAGS "-I/usr/include/bpf -I./include")

add_executable(prueba prueba.c)
target_link_libraries(prueba bpf)

Rendimiento esperado

hacer

./manifestación

Descriptor de archivo de enlace BPF:3
Presione Enter para desconectar y destruir el enlace BPF...

Supongo que te gusta

Origin blog.csdn.net/qq_32378713/article/details/131570304
Recomendado
Clasificación