Ты прав. b cc не делает различий между BPF_HASH_OF_MAPS
и BPF_ARRAY_OF_MAPS
, как минимум в том, как они выставлены . В ядре они на самом деле представляют собой две разные структуры данных, и BPF-карты ha sh могут иметь ключи разных размеров.
b cc определяет в жестком коде int
как тип ключа (сначала int
ниже) для карт BPF_HASH_OF_MAPS
:
#define BPF_HASH_OF_MAPS(_name, _inner_map_name, _max_entries) \
BPF_TABLE("hash_of_maps$" _inner_map_name, int, int, _name, _max_entries)
Чтобы использовать ключи различных типов, вы можете просто использовать BPF_TABLE
вместо BPF_HASH_OF_MAPS
.