Я пытаюсь создать хэш-карту в 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-адреса источника и получателя из пакета, который я обрабатываю:
__u32 src_ip = ip->saddr;
__u32 dst_ip = ip->daddr;
Однако, когда я печатаю значение, полученное с карты, я получаю:
value found=18446637648727971896
Принимая во внимание, что фактические адреса src и dst в распечатке, которую я только что выше, показывают:
src= 763730773, dst= 2818323142
Я просто не понимаю, как правильно получить/сохранить на карте. Любые указатели на это?
Спасибо.