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>
This commit is contained in:
parent
333b3e5fab
commit
0524ea0510
@ -28,6 +28,12 @@ bool ebpf_rss_load(struct EBPFRSSContext *ctx)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ebpf_rss_load_fds(struct EBPFRSSContext *ctx, int program_fd,
|
||||||
|
int config_fd, int toeplitz_fd, int table_fd)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool ebpf_rss_set_all(struct EBPFRSSContext *ctx, struct EBPFRSSConfig *config,
|
bool ebpf_rss_set_all(struct EBPFRSSContext *ctx, struct EBPFRSSConfig *config,
|
||||||
uint16_t *indirections_table, uint8_t *toeplitz_key)
|
uint16_t *indirections_table, uint8_t *toeplitz_key)
|
||||||
{
|
{
|
||||||
|
@ -146,6 +146,33 @@ error:
|
|||||||
return false;
|
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,
|
static bool ebpf_rss_set_config(struct EBPFRSSContext *ctx,
|
||||||
struct EBPFRSSConfig *config)
|
struct EBPFRSSConfig *config)
|
||||||
{
|
{
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
#ifndef QEMU_EBPF_RSS_H
|
#ifndef QEMU_EBPF_RSS_H
|
||||||
#define QEMU_EBPF_RSS_H
|
#define QEMU_EBPF_RSS_H
|
||||||
|
|
||||||
|
#define EBPF_RSS_MAX_FDS 4
|
||||||
|
|
||||||
struct EBPFRSSContext {
|
struct EBPFRSSContext {
|
||||||
void *obj;
|
void *obj;
|
||||||
int program_fd;
|
int program_fd;
|
||||||
@ -41,6 +43,9 @@ bool ebpf_rss_is_loaded(struct EBPFRSSContext *ctx);
|
|||||||
|
|
||||||
bool ebpf_rss_load(struct EBPFRSSContext *ctx);
|
bool ebpf_rss_load(struct EBPFRSSContext *ctx);
|
||||||
|
|
||||||
|
bool ebpf_rss_load_fds(struct EBPFRSSContext *ctx, int program_fd,
|
||||||
|
int config_fd, int toeplitz_fd, int table_fd);
|
||||||
|
|
||||||
bool ebpf_rss_set_all(struct EBPFRSSContext *ctx, struct EBPFRSSConfig *config,
|
bool ebpf_rss_set_all(struct EBPFRSSContext *ctx, struct EBPFRSSConfig *config,
|
||||||
uint16_t *indirections_table, uint8_t *toeplitz_key);
|
uint16_t *indirections_table, uint8_t *toeplitz_key);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user