|
@@ -25,6 +25,8 @@
|
|
#include "ebpf/rss.bpf.skeleton.h"
|
|
#include "ebpf/rss.bpf.skeleton.h"
|
|
#include "ebpf/ebpf.h"
|
|
#include "ebpf/ebpf.h"
|
|
|
|
|
|
|
|
+#include "trace.h"
|
|
|
|
+
|
|
void ebpf_rss_init(struct EBPFRSSContext *ctx)
|
|
void ebpf_rss_init(struct EBPFRSSContext *ctx)
|
|
{
|
|
{
|
|
if (ctx != NULL) {
|
|
if (ctx != NULL) {
|
|
@@ -55,18 +57,21 @@ static bool ebpf_rss_mmap(struct EBPFRSSContext *ctx)
|
|
PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
ctx->map_configuration, 0);
|
|
ctx->map_configuration, 0);
|
|
if (ctx->mmap_configuration == MAP_FAILED) {
|
|
if (ctx->mmap_configuration == MAP_FAILED) {
|
|
|
|
+ trace_ebpf_error("eBPF RSS", "can not mmap eBPF configuration array");
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
ctx->mmap_toeplitz_key = mmap(NULL, qemu_real_host_page_size(),
|
|
ctx->mmap_toeplitz_key = mmap(NULL, qemu_real_host_page_size(),
|
|
PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
ctx->map_toeplitz_key, 0);
|
|
ctx->map_toeplitz_key, 0);
|
|
if (ctx->mmap_toeplitz_key == MAP_FAILED) {
|
|
if (ctx->mmap_toeplitz_key == MAP_FAILED) {
|
|
|
|
+ trace_ebpf_error("eBPF RSS", "can not mmap eBPF toeplitz key");
|
|
goto toeplitz_fail;
|
|
goto toeplitz_fail;
|
|
}
|
|
}
|
|
ctx->mmap_indirections_table = mmap(NULL, qemu_real_host_page_size(),
|
|
ctx->mmap_indirections_table = mmap(NULL, qemu_real_host_page_size(),
|
|
PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
ctx->map_indirections_table, 0);
|
|
ctx->map_indirections_table, 0);
|
|
if (ctx->mmap_indirections_table == MAP_FAILED) {
|
|
if (ctx->mmap_indirections_table == MAP_FAILED) {
|
|
|
|
+ trace_ebpf_error("eBPF RSS", "can not mmap eBPF indirection table");
|
|
goto indirection_fail;
|
|
goto indirection_fail;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -108,12 +113,14 @@ bool ebpf_rss_load(struct EBPFRSSContext *ctx)
|
|
|
|
|
|
rss_bpf_ctx = rss_bpf__open();
|
|
rss_bpf_ctx = rss_bpf__open();
|
|
if (rss_bpf_ctx == NULL) {
|
|
if (rss_bpf_ctx == NULL) {
|
|
|
|
+ trace_ebpf_error("eBPF RSS", "can not open eBPF RSS object");
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
|
|
|
|
bpf_program__set_type(rss_bpf_ctx->progs.tun_rss_steering_prog, BPF_PROG_TYPE_SOCKET_FILTER);
|
|
bpf_program__set_type(rss_bpf_ctx->progs.tun_rss_steering_prog, BPF_PROG_TYPE_SOCKET_FILTER);
|
|
|
|
|
|
if (rss_bpf__load(rss_bpf_ctx)) {
|
|
if (rss_bpf__load(rss_bpf_ctx)) {
|
|
|
|
+ trace_ebpf_error("eBPF RSS", "can not load RSS program");
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
|
|
|