aboutsummaryrefslogtreecommitdiffstats
path: root/samples
diff options
context:
space:
mode:
authorJakub Kicinski <jakub.kicinski@netronome.com>2018-07-26 17:32:21 -0400
committerDaniel Borkmann <daniel@iogearbox.net>2018-07-27 01:18:44 -0400
commit6748182c2d1850811a577fe060387f83d5fa0fe4 (patch)
treee3d7389a2f79db94f5b29fc36eb5a28b4c761e4e /samples
parente1a40ef418ca2d0ffb6d22f84a13cb0df66cf83c (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/Makefile2
-rw-r--r--samples/bpf/xdpsock_user.c38
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
105syscall_tp-objs := bpf_load.o syscall_tp_user.o 105syscall_tp-objs := bpf_load.o syscall_tp_user.o
106cpustat-objs := bpf_load.o cpustat_user.o 106cpustat-objs := bpf_load.o cpustat_user.o
107xdp_adjust_tail-objs := xdp_adjust_tail_user.o 107xdp_adjust_tail-objs := xdp_adjust_tail_user.o
108xdpsock-objs := bpf_load.o xdpsock_user.o 108xdpsock-objs := xdpsock_user.o
109xdp_fwd-objs := xdp_fwd_user.o 109xdp_fwd-objs := xdp_fwd_user.o
110task_fd_query-objs := bpf_load.o task_fd_query_user.o $(TRACE_HELPERS) 110task_fd_query-objs := bpf_load.o task_fd_query_user.o $(TRACE_HELPERS)
111xdp_sample_pkts-objs := xdp_sample_pkts_user.o $(TRACE_HELPERS) 111xdp_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)
891int main(int argc, char **argv) 891int 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);