57 lines · c
1#define _GNU_SOURCE2 3#include <stdio.h>4#include <unistd.h>5#include <bpf/libbpf.h>6 7int main(int argc, char **argv)8{9 struct bpf_link *link = NULL;10 struct bpf_program *prog;11 struct bpf_object *obj;12 char filename[256];13 char command[256];14 int ret = 0;15 FILE *f;16 17 if (!argv[1]) {18 fprintf(stderr, "ERROR: Run with the btrfs device argument!\n");19 return 0;20 }21 22 snprintf(filename, sizeof(filename), "%s.bpf.o", argv[0]);23 obj = bpf_object__open_file(filename, NULL);24 if (libbpf_get_error(obj)) {25 fprintf(stderr, "ERROR: opening BPF object file failed\n");26 return 0;27 }28 29 prog = bpf_object__find_program_by_name(obj, "bpf_prog1");30 if (!prog) {31 fprintf(stderr, "ERROR: finding a prog in obj file failed\n");32 goto cleanup;33 }34 35 /* load BPF program */36 if (bpf_object__load(obj)) {37 fprintf(stderr, "ERROR: loading BPF object file failed\n");38 goto cleanup;39 }40 41 link = bpf_program__attach(prog);42 if (libbpf_get_error(link)) {43 fprintf(stderr, "ERROR: bpf_program__attach failed\n");44 link = NULL;45 goto cleanup;46 }47 48 snprintf(command, 256, "mount %s tmpmnt/", argv[1]);49 f = popen(command, "r");50 ret = pclose(f);51 52cleanup:53 bpf_link__destroy(link);54 bpf_object__close(obj);55 return ret ? 0 : 1;56}57