summary refs log tree commit diff stats
path: root/ebpf/ebpf_rss.c
diff options
context:
space:
mode:
authorAndrew Melnychenko <andrew@daynix.com>2024-02-05 18:54:32 +0200
committerJason Wang <jasowang@redhat.com>2024-03-12 19:31:46 +0800
commit0524ea0510a33c616d87108d71a8456071e9daa1 (patch)
treec02bc9ef88433f4c6c1b730c6544f8fba2d7769d /ebpf/ebpf_rss.c
parent333b3e5fab751cce9f077b827563296c797ff399 (diff)
downloadfocaccia-qemu-0524ea0510a33c616d87108d71a8456071e9daa1.tar.gz
focaccia-qemu-0524ea0510a33c616d87108d71a8456071e9daa1.zip
ebpf: Added eBPF initialization by fds.
It allows using file descriptors of eBPF provided
outside of QEMU.
QEMU may be run without capabilities for eBPF and run
RSS program provided by management tool(g.e. libvirt).

Signed-off-by: Andrew Melnychenko <andrew@daynix.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'ebpf/ebpf_rss.c')
-rw-r--r--ebpf/ebpf_rss.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/ebpf/ebpf_rss.c b/ebpf/ebpf_rss.c
index f774d9636b..150aa40813 100644
--- a/ebpf/ebpf_rss.c
+++ b/ebpf/ebpf_rss.c
@@ -146,6 +146,33 @@ error:
     return false;
 }
 
+bool ebpf_rss_load_fds(struct EBPFRSSContext *ctx, int program_fd,
+                       int config_fd, int toeplitz_fd, int table_fd)
+{
+    if (ebpf_rss_is_loaded(ctx)) {
+        return false;
+    }
+
+    if (program_fd < 0 || config_fd < 0 || toeplitz_fd < 0 || table_fd < 0) {
+        return false;
+    }
+
+    ctx->program_fd = program_fd;
+    ctx->map_configuration = config_fd;
+    ctx->map_toeplitz_key = toeplitz_fd;
+    ctx->map_indirections_table = table_fd;
+
+    if (!ebpf_rss_mmap(ctx)) {
+        ctx->program_fd = -1;
+        ctx->map_configuration = -1;
+        ctx->map_toeplitz_key = -1;
+        ctx->map_indirections_table = -1;
+        return false;
+    }
+
+    return true;
+}
+
 static bool ebpf_rss_set_config(struct EBPFRSSContext *ctx,
                                 struct EBPFRSSConfig *config)
 {