Commit c975d94a authored by Daniel Borkmann's avatar Daniel Borkmann
Browse files

Merge branch 'bpf-drop-libbpf-from-preload'



Alexei Starovoitov says:

====================
CO-RE in the kernel support allows bpf preload to switch to light
skeleton and remove libbpf dependency.

This reduces the size of bpf_preload_umd from 300kbyte to 19kbyte
and eventually will make "kernel skeleton" possible.
====================

Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parents 533de4ae e96f2d64
Loading
Loading
Loading
Loading
+2 −26
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0

LIBBPF_SRCS = $(srctree)/tools/lib/bpf/
LIBBPF_OUT = $(abspath $(obj))/libbpf
LIBBPF_A = $(LIBBPF_OUT)/libbpf.a
LIBBPF_DESTDIR = $(LIBBPF_OUT)
LIBBPF_INCLUDE = $(LIBBPF_DESTDIR)/include

# Although not in use by libbpf's Makefile, set $(O) so that the "dummy" test
# in tools/scripts/Makefile.include always succeeds when building the kernel
# with $(O) pointing to a relative path, as in "make O=build bindeb-pkg".
$(LIBBPF_A): | $(LIBBPF_OUT)
	$(Q)$(MAKE) -C $(LIBBPF_SRCS) O=$(LIBBPF_OUT)/ OUTPUT=$(LIBBPF_OUT)/   \
		DESTDIR=$(LIBBPF_DESTDIR) prefix=			       \
		$(LIBBPF_OUT)/libbpf.a install_headers

libbpf_hdrs: $(LIBBPF_A)

.PHONY: libbpf_hdrs

$(LIBBPF_OUT):
	$(call msg,MKDIR,$@)
	$(Q)mkdir -p $@
LIBBPF_INCLUDE = $(LIBBPF_SRCS)/..

userccflags += -I $(srctree)/tools/include/ -I $(srctree)/tools/include/uapi \
	-I $(LIBBPF_INCLUDE) -Wno-unused-result

userprogs := bpf_preload_umd

clean-files := libbpf/

$(obj)/iterators/iterators.o: | libbpf_hdrs

bpf_preload_umd-objs := iterators/iterators.o
bpf_preload_umd-userldlibs := $(LIBBPF_A) -lelf -lz

$(obj)/bpf_preload_umd: $(LIBBPF_A)
$(obj)/bpf_preload_umd:

$(obj)/bpf_preload_umd_blob.o: $(obj)/bpf_preload_umd

+3 −3
Original line number Diff line number Diff line
@@ -35,15 +35,15 @@ endif

.PHONY: all clean

all: iterators.skel.h
all: iterators.lskel.h

clean:
	$(call msg,CLEAN)
	$(Q)rm -rf $(OUTPUT) iterators

iterators.skel.h: $(OUTPUT)/iterators.bpf.o | $(BPFTOOL)
iterators.lskel.h: $(OUTPUT)/iterators.bpf.o | $(BPFTOOL)
	$(call msg,GEN-SKEL,$@)
	$(Q)$(BPFTOOL) gen skeleton $< > $@
	$(Q)$(BPFTOOL) gen skeleton -L $< > $@


$(OUTPUT)/iterators.bpf.o: iterators.bpf.c $(BPFOBJ) | $(OUTPUT)
+21 −7
Original line number Diff line number Diff line
@@ -10,20 +10,36 @@
#include <bpf/libbpf.h>
#include <bpf/bpf.h>
#include <sys/mount.h>
#include "iterators.skel.h"
#include "iterators.lskel.h"
#include "bpf_preload_common.h"

int to_kernel = -1;
int from_kernel = 0;

static int send_link_to_kernel(struct bpf_link *link, const char *link_name)
static int __bpf_obj_get_info_by_fd(int bpf_fd, void *info, __u32 *info_len)
{
	union bpf_attr attr;
	int err;

	memset(&attr, 0, sizeof(attr));
	attr.info.bpf_fd = bpf_fd;
	attr.info.info_len = *info_len;
	attr.info.info = (long) info;

	err = skel_sys_bpf(BPF_OBJ_GET_INFO_BY_FD, &attr, sizeof(attr));
	if (!err)
		*info_len = attr.info.info_len;
	return err;
}

static int send_link_to_kernel(int link_fd, const char *link_name)
{
	struct bpf_preload_info obj = {};
	struct bpf_link_info info = {};
	__u32 info_len = sizeof(info);
	int err;

	err = bpf_obj_get_info_by_fd(bpf_link__fd(link), &info, &info_len);
	err = __bpf_obj_get_info_by_fd(link_fd, &info, &info_len);
	if (err)
		return err;
	obj.link_id = info.id;
@@ -37,7 +53,6 @@ static int send_link_to_kernel(struct bpf_link *link, const char *link_name)

int main(int argc, char **argv)
{
	struct rlimit rlim = { RLIM_INFINITY, RLIM_INFINITY };
	struct iterators_bpf *skel;
	int err, magic;
	int debug_fd;
@@ -55,7 +70,6 @@ int main(int argc, char **argv)
		printf("bad start magic %d\n", magic);
		return 1;
	}
	setrlimit(RLIMIT_MEMLOCK, &rlim);
	/* libbpf opens BPF object and loads it into the kernel */
	skel = iterators_bpf__open_and_load();
	if (!skel) {
@@ -72,10 +86,10 @@ int main(int argc, char **argv)
		goto cleanup;

	/* send two bpf_link IDs with names to the kernel */
	err = send_link_to_kernel(skel->links.dump_bpf_map, "maps.debug");
	err = send_link_to_kernel(skel->links.dump_bpf_map_fd, "maps.debug");
	if (err)
		goto cleanup;
	err = send_link_to_kernel(skel->links.dump_bpf_prog, "progs.debug");
	err = send_link_to_kernel(skel->links.dump_bpf_prog_fd, "progs.debug");
	if (err)
		goto cleanup;

+428 −0

File added.

Preview size limit exceeded, changes collapsed.

+0 −412

File deleted.

Preview size limit exceeded, changes collapsed.

Loading