162306a36Sopenharmony_ci#define _GNU_SOURCE 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#include <stdio.h> 462306a36Sopenharmony_ci#include <unistd.h> 562306a36Sopenharmony_ci#include <bpf/libbpf.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciint main(int argc, char **argv) 862306a36Sopenharmony_ci{ 962306a36Sopenharmony_ci struct bpf_link *link = NULL; 1062306a36Sopenharmony_ci struct bpf_program *prog; 1162306a36Sopenharmony_ci struct bpf_object *obj; 1262306a36Sopenharmony_ci char filename[256]; 1362306a36Sopenharmony_ci char command[256]; 1462306a36Sopenharmony_ci int ret = 0; 1562306a36Sopenharmony_ci FILE *f; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci if (!argv[1]) { 1862306a36Sopenharmony_ci fprintf(stderr, "ERROR: Run with the btrfs device argument!\n"); 1962306a36Sopenharmony_ci return 0; 2062306a36Sopenharmony_ci } 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci snprintf(filename, sizeof(filename), "%s.bpf.o", argv[0]); 2362306a36Sopenharmony_ci obj = bpf_object__open_file(filename, NULL); 2462306a36Sopenharmony_ci if (libbpf_get_error(obj)) { 2562306a36Sopenharmony_ci fprintf(stderr, "ERROR: opening BPF object file failed\n"); 2662306a36Sopenharmony_ci return 0; 2762306a36Sopenharmony_ci } 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci prog = bpf_object__find_program_by_name(obj, "bpf_prog1"); 3062306a36Sopenharmony_ci if (!prog) { 3162306a36Sopenharmony_ci fprintf(stderr, "ERROR: finding a prog in obj file failed\n"); 3262306a36Sopenharmony_ci goto cleanup; 3362306a36Sopenharmony_ci } 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci /* load BPF program */ 3662306a36Sopenharmony_ci if (bpf_object__load(obj)) { 3762306a36Sopenharmony_ci fprintf(stderr, "ERROR: loading BPF object file failed\n"); 3862306a36Sopenharmony_ci goto cleanup; 3962306a36Sopenharmony_ci } 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci link = bpf_program__attach(prog); 4262306a36Sopenharmony_ci if (libbpf_get_error(link)) { 4362306a36Sopenharmony_ci fprintf(stderr, "ERROR: bpf_program__attach failed\n"); 4462306a36Sopenharmony_ci link = NULL; 4562306a36Sopenharmony_ci goto cleanup; 4662306a36Sopenharmony_ci } 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci snprintf(command, 256, "mount %s tmpmnt/", argv[1]); 4962306a36Sopenharmony_ci f = popen(command, "r"); 5062306a36Sopenharmony_ci ret = pclose(f); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cicleanup: 5362306a36Sopenharmony_ci bpf_link__destroy(link); 5462306a36Sopenharmony_ci bpf_object__close(obj); 5562306a36Sopenharmony_ci return ret ? 0 : 1; 5662306a36Sopenharmony_ci} 57