结构类型可以是bpf哈希映射的值吗



我希望bpf哈希映射中的值是一个结构,但它不起作用。谁知道BPF是否允许这样做?代码般的打击。

另外,我还有第二个问题,如何在bpf程序中调用内核函数?

typedef struct my_value {
u64 ts;
unsigned char opcode;
unsigned int pages;
pid_t pid;
} MY_VAL;
struct {
__uint(type, BPF_MAP_TYPE_HASH);
__uint(max_entries, 8192);
//__type(key, pid_t);
__type(key, u64);
__type(value, MY_VAL);
} _start SEC(".maps");

当我使用时

struct my_value e;
e.pages= 10;
u64 pate = 0x456;
bpf_map_update_elem(&_start, &pate, &e, BPF_ANY);

出现错误:

79:(85(调用bpf_map_update_elem#2从堆栈的无效间接读取-32+0大小8已处理51 insns(限制1000000(max_states_per_insn 0 total_states 3 peak_states 2 mark_read 1

关于您的错误:如果您试图用堆栈中未初始化的日期更新映射,验证器会拒绝您的程序,这就是您创建值时发生的情况。

尝试初始化整个结构:

struct my_value e;
memset(&e, 0, sizeof(e));
e.pages= 10;

关于您的第二个问题:您可以从eBPF程序中调用eBPFhelpers,您可以从内核中调用少数白名单函数,但此时不能仅从内核调用任何函数。不过,一些不依赖于内核内部的函数可能会在程序中重新实现。

相关内容

  • 没有找到相关文章

最新更新