diff options
| author | Andrew Melnychenko <andrew@daynix.com> | 2024-02-05 18:54:32 +0200 |
|---|---|---|
| committer | Jason Wang <jasowang@redhat.com> | 2024-03-12 19:31:46 +0800 |
| commit | 0524ea0510a33c616d87108d71a8456071e9daa1 (patch) | |
| tree | c02bc9ef88433f4c6c1b730c6544f8fba2d7769d /ebpf/ebpf_rss.c | |
| parent | 333b3e5fab751cce9f077b827563296c797ff399 (diff) | |
| download | focaccia-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.c | 27 |
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) { |