diff options
| author | Jakub Kicinski <jakub.kicinski@netronome.com> | 2018-07-26 17:32:21 -0400 |
|---|---|---|
| committer | Daniel Borkmann <daniel@iogearbox.net> | 2018-07-27 01:18:44 -0400 |
| commit | 6748182c2d1850811a577fe060387f83d5fa0fe4 (patch) | |
| tree | e3d7389a2f79db94f5b29fc36eb5a28b4c761e4e /samples | |
| parent | e1a40ef418ca2d0ffb6d22f84a13cb0df66cf83c (diff) | |
samples: bpf: convert xdpsock_user.c to libbpf
Convert xdpsock_user.c to use libbpf instead of bpf_load.o.
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'samples')
| -rw-r--r-- | samples/bpf/Makefile | 2 | ||||
| -rw-r--r-- | samples/bpf/xdpsock_user.c | 38 |
2 files changed, 30 insertions, 10 deletions
diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile index 815dec22729d..f88d5683d6ee 100644 --- a/samples/bpf/Makefile +++ b/samples/bpf/Makefile | |||
| @@ -105,7 +105,7 @@ xdp_rxq_info-objs := xdp_rxq_info_user.o | |||
| 105 | syscall_tp-objs := bpf_load.o syscall_tp_user.o | 105 | syscall_tp-objs := bpf_load.o syscall_tp_user.o |
| 106 | cpustat-objs := bpf_load.o cpustat_user.o | 106 | cpustat-objs := bpf_load.o cpustat_user.o |
| 107 | xdp_adjust_tail-objs := xdp_adjust_tail_user.o | 107 | xdp_adjust_tail-objs := xdp_adjust_tail_user.o |
| 108 | xdpsock-objs := bpf_load.o xdpsock_user.o | 108 | xdpsock-objs := xdpsock_user.o |
| 109 | xdp_fwd-objs := xdp_fwd_user.o | 109 | xdp_fwd-objs := xdp_fwd_user.o |
| 110 | task_fd_query-objs := bpf_load.o task_fd_query_user.o $(TRACE_HELPERS) | 110 | task_fd_query-objs := bpf_load.o task_fd_query_user.o $(TRACE_HELPERS) |
| 111 | xdp_sample_pkts-objs := xdp_sample_pkts_user.o $(TRACE_HELPERS) | 111 | xdp_sample_pkts-objs := xdp_sample_pkts_user.o $(TRACE_HELPERS) |
diff --git a/samples/bpf/xdpsock_user.c b/samples/bpf/xdpsock_user.c index 1e82f7c617c3..4914788b6727 100644 --- a/samples/bpf/xdpsock_user.c +++ b/samples/bpf/xdpsock_user.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #include <sys/types.h> | 26 | #include <sys/types.h> |
| 27 | #include <poll.h> | 27 | #include <poll.h> |
| 28 | 28 | ||
| 29 | #include "bpf_load.h" | 29 | #include "bpf/libbpf.h" |
| 30 | #include "bpf_util.h" | 30 | #include "bpf_util.h" |
| 31 | #include <bpf/bpf.h> | 31 | #include <bpf/bpf.h> |
| 32 | 32 | ||
| @@ -891,7 +891,13 @@ static void l2fwd(struct xdpsock *xsk) | |||
| 891 | int main(int argc, char **argv) | 891 | int main(int argc, char **argv) |
| 892 | { | 892 | { |
| 893 | struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY}; | 893 | struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY}; |
| 894 | struct bpf_prog_load_attr prog_load_attr = { | ||
| 895 | .prog_type = BPF_PROG_TYPE_XDP, | ||
| 896 | }; | ||
| 897 | int prog_fd, qidconf_map, xsks_map; | ||
| 898 | struct bpf_object *obj; | ||
| 894 | char xdp_filename[256]; | 899 | char xdp_filename[256]; |
| 900 | struct bpf_map *map; | ||
| 895 | int i, ret, key = 0; | 901 | int i, ret, key = 0; |
| 896 | pthread_t pt; | 902 | pthread_t pt; |
| 897 | 903 | ||
| @@ -904,24 +910,38 @@ int main(int argc, char **argv) | |||
| 904 | } | 910 | } |
| 905 | 911 | ||
| 906 | snprintf(xdp_filename, sizeof(xdp_filename), "%s_kern.o", argv[0]); | 912 | snprintf(xdp_filename, sizeof(xdp_filename), "%s_kern.o", argv[0]); |
| 913 | prog_load_attr.file = xdp_filename; | ||
| 907 | 914 | ||
| 908 | if (load_bpf_file(xdp_filename)) { | 915 | if (bpf_prog_load_xattr(&prog_load_attr, &obj, &prog_fd)) |
| 909 | fprintf(stderr, "ERROR: load_bpf_file %s\n", bpf_log_buf); | 916 | exit(EXIT_FAILURE); |
| 917 | if (prog_fd < 0) { | ||
| 918 | fprintf(stderr, "ERROR: no program found: %s\n", | ||
| 919 | strerror(prog_fd)); | ||
| 910 | exit(EXIT_FAILURE); | 920 | exit(EXIT_FAILURE); |
| 911 | } | 921 | } |
| 912 | 922 | ||
| 913 | if (!prog_fd[0]) { | 923 | map = bpf_object__find_map_by_name(obj, "qidconf_map"); |
| 914 | fprintf(stderr, "ERROR: load_bpf_file: \"%s\"\n", | 924 | qidconf_map = bpf_map__fd(map); |
| 915 | strerror(errno)); | 925 | if (qidconf_map < 0) { |
| 926 | fprintf(stderr, "ERROR: no qidconf map found: %s\n", | ||
| 927 | strerror(qidconf_map)); | ||
| 928 | exit(EXIT_FAILURE); | ||
| 929 | } | ||
| 930 | |||
| 931 | map = bpf_object__find_map_by_name(obj, "xsks_map"); | ||
| 932 | xsks_map = bpf_map__fd(map); | ||
| 933 | if (xsks_map < 0) { | ||
| 934 | fprintf(stderr, "ERROR: no xsks map found: %s\n", | ||
| 935 | strerror(xsks_map)); | ||
| 916 | exit(EXIT_FAILURE); | 936 | exit(EXIT_FAILURE); |
| 917 | } | 937 | } |
| 918 | 938 | ||
| 919 | if (bpf_set_link_xdp_fd(opt_ifindex, prog_fd[0], opt_xdp_flags) < 0) { | 939 | if (bpf_set_link_xdp_fd(opt_ifindex, prog_fd, opt_xdp_flags) < 0) { |
| 920 | fprintf(stderr, "ERROR: link set xdp fd failed\n"); | 940 | fprintf(stderr, "ERROR: link set xdp fd failed\n"); |
| 921 | exit(EXIT_FAILURE); | 941 | exit(EXIT_FAILURE); |
| 922 | } | 942 | } |
| 923 | 943 | ||
| 924 | ret = bpf_map_update_elem(map_fd[0], &key, &opt_queue, 0); | 944 | ret = bpf_map_update_elem(qidconf_map, &key, &opt_queue, 0); |
| 925 | if (ret) { | 945 | if (ret) { |
| 926 | fprintf(stderr, "ERROR: bpf_map_update_elem qidconf\n"); | 946 | fprintf(stderr, "ERROR: bpf_map_update_elem qidconf\n"); |
| 927 | exit(EXIT_FAILURE); | 947 | exit(EXIT_FAILURE); |
| @@ -938,7 +958,7 @@ int main(int argc, char **argv) | |||
| 938 | /* ...and insert them into the map. */ | 958 | /* ...and insert them into the map. */ |
| 939 | for (i = 0; i < num_socks; i++) { | 959 | for (i = 0; i < num_socks; i++) { |
| 940 | key = i; | 960 | key = i; |
| 941 | ret = bpf_map_update_elem(map_fd[1], &key, &xsks[i]->sfd, 0); | 961 | ret = bpf_map_update_elem(xsks_map, &key, &xsks[i]->sfd, 0); |
| 942 | if (ret) { | 962 | if (ret) { |
| 943 | fprintf(stderr, "ERROR: bpf_map_update_elem %d\n", i); | 963 | fprintf(stderr, "ERROR: bpf_map_update_elem %d\n", i); |
| 944 | exit(EXIT_FAILURE); | 964 | exit(EXIT_FAILURE); |
