new file mode 100644
@@ -0,0 +1,48 @@
+/*
+ * QEMU eBPF binary declaration routine.
+ *
+ * Developed by Daynix Computing LTD (http://www.daynix.com)
+ *
+ * Authors:
+ * Andrew Melnychenko <andrew@daynix.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * later. See the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+#include "qemu/queue.h"
+#include "ebpf/ebpf.h"
+
+struct ElfBinaryDataEntry {
+ const char *id;
+ const void * (*fn)(size_t *);
+
+ QSLIST_ENTRY(ElfBinaryDataEntry) node;
+};
+
+static QSLIST_HEAD(, ElfBinaryDataEntry) ebpf_elf_obj_list =
+ QSLIST_HEAD_INITIALIZER();
+
+void ebpf_register_binary_data(const char *id, const void * (*fn)(size_t *))
+{
+ struct ElfBinaryDataEntry *data = NULL;
+
+ data = g_malloc0(sizeof(*data));
+ data->fn = fn;
+ data->id = id;
+
+ QSLIST_INSERT_HEAD(&ebpf_elf_obj_list, data, node);
+}
+
+const void *ebpf_find_binary_by_id(const char *id, size_t *sz)
+{
+ struct ElfBinaryDataEntry *it = NULL;
+ QSLIST_FOREACH(it, &ebpf_elf_obj_list, node) {
+ if (strcmp(id, it->id) == 0) {
+ return it->fn(sz);
+ }
+ }
+
+ return NULL;
+}
new file mode 100644
@@ -0,0 +1,25 @@
+/*
+ * QEMU eBPF binary declaration routine.
+ *
+ * Developed by Daynix Computing LTD (http://www.daynix.com)
+ *
+ * Authors:
+ * Andrew Melnychenko <andrew@daynix.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * later. See the COPYING file in the top-level directory.
+ */
+
+#ifndef EBPF_H
+#define EBPF_H
+
+void ebpf_register_binary_data(const char *id, const void * (*fn)(size_t *));
+const void *ebpf_find_binary_by_id(const char *id, size_t *sz);
+
+#define ebpf_binary_init(id, fn) \
+static void __attribute__((constructor)) ebpf_binary_init_ ## fn(void) \
+{ \
+ ebpf_register_binary_data(id, fn); \
+}
+
+#endif /* EBPF_H */
@@ -21,6 +21,8 @@
#include "ebpf/ebpf_rss.h"
#include "ebpf/rss.bpf.skeleton.h"
+#include "ebpf/ebpf.h"
+
#include "trace.h"
void ebpf_rss_init(struct EBPFRSSContext *ctx)
@@ -237,3 +239,5 @@ void ebpf_rss_unload(struct EBPFRSSContext *ctx)
ctx->obj = NULL;
ctx->program_fd = -1;
}
+
+ebpf_binary_init("rss", rss_bpf__elf_bytes)
@@ -1 +1,2 @@
+softmmu_ss.add(files('ebpf.c'))
softmmu_ss.add(when: libbpf, if_true: files('ebpf_rss.c'), if_false: files('ebpf_rss-stub.c'))
Now, the binary objects may be retrieved by id/name. It would require for future qmp commands that may require specific eBPF blob. Signed-off-by: Andrew Melnychenko <andrew@daynix.com> --- ebpf/ebpf.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ ebpf/ebpf.h | 25 +++++++++++++++++++++++++ ebpf/ebpf_rss.c | 4 ++++ ebpf/meson.build | 1 + 4 files changed, 78 insertions(+) create mode 100644 ebpf/ebpf.c create mode 100644 ebpf/ebpf.h