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