diff options
Diffstat (limited to 'tools/bpf/bpftool/map.c')
| -rw-r--r-- | tools/bpf/bpftool/map.c | 36 | 
1 files changed, 20 insertions, 16 deletions
| diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c index cae1f1119296..cc530a229812 100644 --- a/tools/bpf/bpftool/map.c +++ b/tools/bpf/bpftool/map.c @@ -53,6 +53,7 @@ const char * const map_type_name[] = {  	[BPF_MAP_TYPE_RINGBUF]			= "ringbuf",  	[BPF_MAP_TYPE_INODE_STORAGE]		= "inode_storage",  	[BPF_MAP_TYPE_TASK_STORAGE]		= "task_storage", +	[BPF_MAP_TYPE_BLOOM_FILTER]		= "bloom_filter",  };  const size_t map_type_name_size = ARRAY_SIZE(map_type_name); @@ -811,7 +812,7 @@ static struct btf *get_map_kv_btf(const struct bpf_map_info *info)  	if (info->btf_vmlinux_value_type_id) {  		if (!btf_vmlinux) {  			btf_vmlinux = libbpf_find_kernel_btf(); -			if (IS_ERR(btf_vmlinux)) +			if (libbpf_get_error(btf_vmlinux))  				p_err("failed to get kernel btf");  		}  		return btf_vmlinux; @@ -831,13 +832,13 @@ static struct btf *get_map_kv_btf(const struct bpf_map_info *info)  static void free_map_kv_btf(struct btf *btf)  { -	if (!IS_ERR(btf) && btf != btf_vmlinux) +	if (!libbpf_get_error(btf) && btf != btf_vmlinux)  		btf__free(btf);  }  static void free_btf_vmlinux(void)  { -	if (!IS_ERR(btf_vmlinux)) +	if (!libbpf_get_error(btf_vmlinux))  		btf__free(btf_vmlinux);  } @@ -862,8 +863,8 @@ map_dump(int fd, struct bpf_map_info *info, json_writer_t *wtr,  	if (wtr) {  		btf = get_map_kv_btf(info); -		if (IS_ERR(btf)) { -			err = PTR_ERR(btf); +		err = libbpf_get_error(btf); +		if (err) {  			goto exit_free;  		} @@ -1260,7 +1261,10 @@ static int do_pin(int argc, char **argv)  static int do_create(int argc, char **argv)  { -	struct bpf_create_map_attr attr = { NULL, }; +	LIBBPF_OPTS(bpf_map_create_opts, attr); +	enum bpf_map_type map_type = BPF_MAP_TYPE_UNSPEC; +	__u32 key_size = 0, value_size = 0, max_entries = 0; +	const char *map_name = NULL;  	const char *pinfile;  	int err = -1, fd; @@ -1275,30 +1279,30 @@ static int do_create(int argc, char **argv)  		if (is_prefix(*argv, "type")) {  			NEXT_ARG(); -			if (attr.map_type) { +			if (map_type) {  				p_err("map type already specified");  				goto exit;  			} -			attr.map_type = map_type_from_str(*argv); -			if ((int)attr.map_type < 0) { +			map_type = map_type_from_str(*argv); +			if ((int)map_type < 0) {  				p_err("unrecognized map type: %s", *argv);  				goto exit;  			}  			NEXT_ARG();  		} else if (is_prefix(*argv, "name")) {  			NEXT_ARG(); -			attr.name = GET_ARG(); +			map_name = GET_ARG();  		} else if (is_prefix(*argv, "key")) { -			if (parse_u32_arg(&argc, &argv, &attr.key_size, +			if (parse_u32_arg(&argc, &argv, &key_size,  					  "key size"))  				goto exit;  		} else if (is_prefix(*argv, "value")) { -			if (parse_u32_arg(&argc, &argv, &attr.value_size, +			if (parse_u32_arg(&argc, &argv, &value_size,  					  "value size"))  				goto exit;  		} else if (is_prefix(*argv, "entries")) { -			if (parse_u32_arg(&argc, &argv, &attr.max_entries, +			if (parse_u32_arg(&argc, &argv, &max_entries,  					  "max entries"))  				goto exit;  		} else if (is_prefix(*argv, "flags")) { @@ -1339,14 +1343,14 @@ static int do_create(int argc, char **argv)  		}  	} -	if (!attr.name) { +	if (!map_name) {  		p_err("map name not specified");  		goto exit;  	}  	set_max_rlimit(); -	fd = bpf_create_map_xattr(&attr); +	fd = bpf_map_create(map_type, map_name, key_size, value_size, max_entries, &attr);  	if (fd < 0) {  		p_err("map create failed: %s", strerror(errno));  		goto exit; @@ -1477,7 +1481,7 @@ static int do_help(int argc, char **argv)  		"                 devmap | devmap_hash | sockmap | cpumap | xskmap | sockhash |\n"  		"                 cgroup_storage | reuseport_sockarray | percpu_cgroup_storage |\n"  		"                 queue | stack | sk_storage | struct_ops | ringbuf | inode_storage |\n" -		"                 task_storage }\n" +		"                 task_storage | bloom_filter }\n"  		"       " HELP_SPEC_OPTIONS " |\n"  		"                    {-f|--bpffs} | {-n|--nomount} }\n"  		"", |