C - libbpf:映射"hash_map":结构作为值的hash_map中的未知字段"值"



所以我正在编译具有值中的结构的哈希映射的xdp程序

struct hash_elem {
int cnt;
struct bpf_spin_lock lock;
};
struct {
__uint(type, BPF_MAP_TYPE_HASH);
__uint(max_entries, 100);
__uint(key_size, sizeof(__u32));
__type(values, struct hash_elem);
} hash_map SEC(".maps");
struct a{struct bpf_spin_lock lock;};
struct {
__uint(type, BPF_MAP_TYPE_HASH);
__type(key, __u32);
__type(value, long);
__uint(max_entries, 2);
} hash_map1 SEC(".maps");
//static __u32 i=0;

SEC("xdp")
int  xdp_prog_simple(struct xdp_md *ctx)
{
int key=1;
struct hash_elem * val = bpf_map_lookup_elem(&hash_map, &key);
if (val) {
bpf_spin_lock(&val->lock);
val->cnt++;
bpf_spin_unlock(&val->lock);
}
}

但在加载程序时,它会导致异常

libbpf: map 'hash_map': unknown field 'values'.
ERR: loading BPF-OBJ file(./k.o) (-2): No such file or directory
ERR: loading file: ./k.o

发生这种情况是因为地图定义中的拼写错误。我想你想要:

struct {
__uint(type, BPF_MAP_TYPE_HASH);
__type(key, __u32);
__type(value, struct hash_elem);
__uint(max_entries, 100);
} hash_map SEC(".maps");
struct a{struct bpf_spin_lock lock;};
struct {
__uint(type, BPF_MAP_TYPE_HASH);
__type(key, __u32);
__type(value, long);
__uint(max_entries, 2);
} hash_map1 SEC(".maps");

注意第一个value字段上的差异。我还尽可能改用__type,尽管这不是必需的。

相关内容

  • 没有找到相关文章

最新更新