Commit c354ff2e authored by Quentin Monnet's avatar Quentin Monnet Committed by Daniel Borkmann
Browse files

tools: bpftool: show frozen status for maps



When listing maps, read their "frozen" status from procfs, and tell if
maps are frozen.

As commit log for map freezing command mentions that the feature might
be extended with flags (e.g. for write-only instead of read-only) in the
future, use an integer and not a boolean for JSON output.

Signed-off-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 1f8919b1
Loading
Loading
Loading
Loading
+27 −3
Original line number Diff line number Diff line
@@ -481,9 +481,11 @@ static int parse_elem(char **argv, struct bpf_map_info *info,

static int show_map_close_json(int fd, struct bpf_map_info *info)
{
	char *memlock;
	char *memlock, *frozen_str;
	int frozen = 0;

	memlock = get_fdinfo(fd, "memlock");
	frozen_str = get_fdinfo(fd, "frozen");

	jsonw_start_object(json_wtr);

@@ -533,6 +535,12 @@ static int show_map_close_json(int fd, struct bpf_map_info *info)
	}
	close(fd);

	if (frozen_str) {
		frozen = atoi(frozen_str);
		free(frozen_str);
	}
	jsonw_int_field(json_wtr, "frozen", frozen);

	if (info->btf_id)
		jsonw_int_field(json_wtr, "btf_id", info->btf_id);

@@ -555,9 +563,11 @@ static int show_map_close_json(int fd, struct bpf_map_info *info)

static int show_map_close_plain(int fd, struct bpf_map_info *info)
{
	char *memlock;
	char *memlock, *frozen_str;
	int frozen = 0;

	memlock = get_fdinfo(fd, "memlock");
	frozen_str = get_fdinfo(fd, "frozen");

	printf("%u: ", info->id);
	if (info->type < ARRAY_SIZE(map_type_name))
@@ -610,9 +620,23 @@ static int show_map_close_plain(int fd, struct bpf_map_info *info)
				printf("\n\tpinned %s", obj->path);
		}
	}
	printf("\n");

	if (frozen_str) {
		frozen = atoi(frozen_str);
		free(frozen_str);
	}

	if (!info->btf_id && !frozen)
		return 0;

	printf("\t");

	if (info->btf_id)
		printf("\n\tbtf_id %d", info->btf_id);
		printf("btf_id %d", info->btf_id);

	if (frozen)
		printf("%sfrozen", info->btf_id ? "  " : "");

	printf("\n");
	return 0;