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);
我正在尝试在内核代码中的 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);