map_def
struct btf_map_def *map_def, struct btf_map_def *inner_def)
if (!get_map_field_int(map_name, btf, m, &map_def->map_type))
map_def->parts |= MAP_DEF_MAP_TYPE;
if (!get_map_field_int(map_name, btf, m, &map_def->max_entries))
map_def->parts |= MAP_DEF_MAX_ENTRIES;
if (!get_map_field_int(map_name, btf, m, &map_def->map_flags))
map_def->parts |= MAP_DEF_MAP_FLAGS;
if (!get_map_field_int(map_name, btf, m, &map_def->numa_node))
map_def->parts |= MAP_DEF_NUMA_NODE;
if (map_def->key_size && map_def->key_size != sz) {
map_name, map_def->key_size, sz);
map_def->key_size = sz;
map_def->parts |= MAP_DEF_KEY_SIZE;
if (map_def->key_size && map_def->key_size != sz) {
map_name, map_def->key_size, (ssize_t)sz);
map_def->key_size = sz;
map_def->key_type_id = t->type;
map_def->parts |= MAP_DEF_KEY_SIZE | MAP_DEF_KEY_TYPE;
if (map_def->value_size && map_def->value_size != sz) {
map_name, map_def->value_size, sz);
map_def->value_size = sz;
map_def->parts |= MAP_DEF_VALUE_SIZE;
if (map_def->value_size && map_def->value_size != sz) {
map_name, map_def->value_size, (ssize_t)sz);
map_def->value_size = sz;
map_def->value_type_id = t->type;
map_def->parts |= MAP_DEF_VALUE_SIZE | MAP_DEF_VALUE_TYPE;
bool is_map_in_map = bpf_map_type__is_map_in_map(map_def->map_type);
bool is_prog_array = map_def->map_type == BPF_MAP_TYPE_PROG_ARRAY;
if (map_def->value_size && map_def->value_size != 4) {
map_name, map_def->value_size);
map_def->value_size = 4;
map_def->parts |= MAP_DEF_INNER_MAP;
map_def->pinning = val;
map_def->parts |= MAP_DEF_PINNING;
map_def->map_extra = map_extra;
map_def->parts |= MAP_DEF_MAP_EXTRA;
if (map_def->map_type == BPF_MAP_TYPE_UNSPEC) {
struct btf_map_def map_def = {}, inner_def = {};
err = parse_btf_map_def(map->name, obj->btf, def, strict, &map_def, &inner_def);
fill_map_from_def(map, &map_def);
if (map_def.pinning == LIBBPF_PIN_BY_NAME) {
if (map_def.parts & MAP_DEF_INNER_MAP) {
struct btf_map_def *map_def, struct btf_map_def *inner_def);
struct map_def initial_maps[] = {
struct map_def insert_split = { "split_map", 1400, 1600 };
struct map_def expected_after_split[] = {
struct map_def *merged;
struct map_def insert_eclipse = { "eclipse_map", 2500, 4500 };
struct map_def expected_final[] = {
struct map_def *merged = &args->merged[args->i];
static int check_maps(struct map_def *merged, unsigned int size, struct maps *maps)
struct map_def bpf_progs[] = {
struct map_def merged12[] = {
struct map_def merged3[] = {