diff --git a/src/.output/xdp_filter.o b/src/.output/xdp_filter.o index 299ef42..8f9616a 100644 Binary files a/src/.output/xdp_filter.o and b/src/.output/xdp_filter.o differ diff --git a/src/bin/xdp_filter b/src/bin/xdp_filter index 7720a05..03fddc4 100755 Binary files a/src/bin/xdp_filter and b/src/bin/xdp_filter differ diff --git a/src/user/include/modules/xdp.h b/src/user/include/modules/xdp.h index b1afe77..39112e0 100644 --- a/src/user/include/modules/xdp.h +++ b/src/user/include/modules/xdp.h @@ -37,7 +37,8 @@ int attach_xdp_all(struct xdp_filter_bpf *skel, __u32 ifindex, __u32 flags){ // Attach loaded xdp program skel->links.xdp_receive = bpf_program__attach_xdp(skel->progs.xdp_receive, ifindex); - err = libbpf_get_error(skel->links.xdp_receive); + + err = libbpf_get_error(skel->links.xdp_receive); if (err<0) { fprintf(stderr, "Failed to attach XDP program\n"); return -1; @@ -46,10 +47,9 @@ int attach_xdp_all(struct xdp_filter_bpf *skel, __u32 ifindex, __u32 flags){ return 0; } -int detach_xdp_all(__u32 ifindex, __u32 fd, __u32 flags){ - int err = bpf_set_link_xdp_fd(ifindex, fd, flags); +int detach_xdp_all(struct xdp_filter_bpf *skel){ + int err = bpf_link__destroy(skel->links.xdp_receive); if(err<0){ - perror("j"); fprintf(stderr, "Failed to detach XDP program\n"); return -1; } diff --git a/src/user/xdp_filter.c b/src/user/xdp_filter.c index ebe6e40..fe7b696 100644 --- a/src/user/xdp_filter.c +++ b/src/user/xdp_filter.c @@ -228,45 +228,15 @@ int main(int argc, char**argv){ perror("ERR"); goto cleanup; } - printf("A:%i", err);fflush(stdout); - detach_xdp_all(ifindex, -1, flags); - - sleep(2); - - err = attach_sched_all(skel); + detach_xdp_all(skel); if(err<0){ perror("ERR"); goto cleanup; } - printf("B:%i", err);fflush(stdout); - - exiting = false; - while (!exiting) { - err = ring_buffer__poll(rb, 100 /* timeout, ms */); - - //Checking if a signal occured - if (err == -EINTR) { - err = 0; - break; - } - if (err < 0) { - printf("Error polling ring buffer: %d\n", err); - break; - } - } - - err = detach_sched_all(skel); - if(err<0){ - perror("ERR"); - goto cleanup; - } - printf("C:%i", err);fflush(stdout); - - sleep(2); cleanup: ring_buffer__free(rb); - xdp_filter_bpf__destroy(skel); + //xdp_filter_bpf__destroy(skel); return err < 0 ? -err : 0;