首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libbpf:以结构为值的hash_map中的“散列映射”:未知字段“值”

libbpf:以结构为值的hash_map中的“散列映射”:未知字段“值”
EN

Stack Overflow用户
提问于 2022-08-21 08:12:34
回答 1查看 41关注 0票数 0

因此,我正在使用具有结构值的散列映射编译xdp程序。

代码语言:javascript
复制
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);
    }
}

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-21 10:05:15

这是因为您的地图定义中出现了错误。我想你想:

代码语言:javascript
复制
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,尽管这不是必需的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73432673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档