检索时BPF哈希图未显示正确值

问题描述

我正在尝试在内核代码中的 BPF 中创建一个哈希图,如下所示:

struct bpf_map_def SEC("maps") hash_map = {
    .type = BPF_MAP_TYPE_HASH,.key_size = sizeof(__u32),.value_size = sizeof(__u32),.max_entries = 1000,};

然后我只需按如下方式插入并从地图中检索:

__u32 key = src_ip;
__u32 init_val = dst_ip;
__u32 *value;

value = bpf_map_lookup_elem(&hash_map,&key);
if (value) {
    trace_printk("value found=%lu\n",value);
}

其中 src_ip 和 dst_ip 是我正在处理的数据包的源 IP 和目标 IP:

__u32 src_ip = ip->saddr;
__u32 dst_ip = ip->daddr;

但是,当我打印从地图获得的值时:

value found=18446637648727971896

而我上面显示的打印中的实际 src 和 dst 地址:

src= 763730773,dst= 2818323142

我只是不明白如何正确地在地图中检索/存储。对此有任何指示吗?

谢谢。

解决方法

查找函数返回一个指向您的值的指针:

void *bpf_map_lookup_elem(struct bpf_map *map,const void *key);

您是否尝试取消引用它?类似的东西:

trace_printk("value found=%lu\n",*value);