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

BPF hashmap not showing correct value when retrieving

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

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

我只是不明白如何在地图中正确 retrieve/store。有什么建议吗?

谢谢。

查找函数returns指向您的值的指针:

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

您是否尝试取消引用它?类似于:

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