bpftool: add pinmaps argument to the load/loadall
This new additional argument lets users pin all maps from the object at specified path. Signed-off-by: Stanislav Fomichev <sdf@google.com> Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
77380998d9
commit
3767a94b32
@ -80,7 +80,7 @@ DESCRIPTION
|
|||||||
contain a dot character ('.'), which is reserved for future
|
contain a dot character ('.'), which is reserved for future
|
||||||
extensions of *bpffs*.
|
extensions of *bpffs*.
|
||||||
|
|
||||||
**bpftool prog { load | loadall }** *OBJ* *PATH* [**type** *TYPE*] [**map** {**idx** *IDX* | **name** *NAME*} *MAP*] [**dev** *NAME*]
|
**bpftool prog { load | loadall }** *OBJ* *PATH* [**type** *TYPE*] [**map** {**idx** *IDX* | **name** *NAME*} *MAP*] [**dev** *NAME*] [**pinmaps** *MAP_DIR*]
|
||||||
Load bpf program(s) from binary *OBJ* and pin as *PATH*.
|
Load bpf program(s) from binary *OBJ* and pin as *PATH*.
|
||||||
**bpftool prog load** pins only the first program from the
|
**bpftool prog load** pins only the first program from the
|
||||||
*OBJ* as *PATH*. **bpftool prog loadall** pins all programs
|
*OBJ* as *PATH*. **bpftool prog loadall** pins all programs
|
||||||
@ -96,6 +96,8 @@ DESCRIPTION
|
|||||||
use, referring to it by **id** or through a **pinned** file.
|
use, referring to it by **id** or through a **pinned** file.
|
||||||
If **dev** *NAME* is specified program will be loaded onto
|
If **dev** *NAME* is specified program will be loaded onto
|
||||||
given networking device (offload).
|
given networking device (offload).
|
||||||
|
Optional **pinmaps** argument can be provided to pin all
|
||||||
|
maps under *MAP_DIR* directory.
|
||||||
|
|
||||||
Note: *PATH* must be located in *bpffs* mount. It must not
|
Note: *PATH* must be located in *bpffs* mount. It must not
|
||||||
contain a dot character ('.'), which is reserved for future
|
contain a dot character ('.'), which is reserved for future
|
||||||
|
@ -346,7 +346,7 @@ _bpftool()
|
|||||||
_bpftool_get_map_ids
|
_bpftool_get_map_ids
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
pinned)
|
pinned|pinmaps)
|
||||||
_filedir
|
_filedir
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
@ -358,6 +358,7 @@ _bpftool()
|
|||||||
COMPREPLY=( $( compgen -W "map" -- "$cur" ) )
|
COMPREPLY=( $( compgen -W "map" -- "$cur" ) )
|
||||||
_bpftool_once_attr 'type'
|
_bpftool_once_attr 'type'
|
||||||
_bpftool_once_attr 'dev'
|
_bpftool_once_attr 'dev'
|
||||||
|
_bpftool_once_attr 'pinmaps'
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -802,6 +802,7 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)
|
|||||||
struct map_replace *map_replace = NULL;
|
struct map_replace *map_replace = NULL;
|
||||||
struct bpf_program *prog = NULL, *pos;
|
struct bpf_program *prog = NULL, *pos;
|
||||||
unsigned int old_map_fds = 0;
|
unsigned int old_map_fds = 0;
|
||||||
|
const char *pinmaps = NULL;
|
||||||
struct bpf_object *obj;
|
struct bpf_object *obj;
|
||||||
struct bpf_map *map;
|
struct bpf_map *map;
|
||||||
const char *pinfile;
|
const char *pinfile;
|
||||||
@ -906,6 +907,13 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)
|
|||||||
goto err_free_reuse_maps;
|
goto err_free_reuse_maps;
|
||||||
}
|
}
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
|
} else if (is_prefix(*argv, "pinmaps")) {
|
||||||
|
NEXT_ARG();
|
||||||
|
|
||||||
|
if (!REQ_ARGS(1))
|
||||||
|
goto err_free_reuse_maps;
|
||||||
|
|
||||||
|
pinmaps = GET_ARG();
|
||||||
} else {
|
} else {
|
||||||
p_err("expected no more arguments, 'type', 'map' or 'dev', got: '%s'?",
|
p_err("expected no more arguments, 'type', 'map' or 'dev', got: '%s'?",
|
||||||
*argv);
|
*argv);
|
||||||
@ -1028,6 +1036,14 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pinmaps) {
|
||||||
|
err = bpf_object__pin_maps(obj, pinmaps);
|
||||||
|
if (err) {
|
||||||
|
p_err("failed to pin all maps");
|
||||||
|
goto err_unpin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (json_output)
|
if (json_output)
|
||||||
jsonw_null(json_wtr);
|
jsonw_null(json_wtr);
|
||||||
|
|
||||||
@ -1038,6 +1054,11 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_unpin:
|
||||||
|
if (first_prog_only)
|
||||||
|
unlink(pinfile);
|
||||||
|
else
|
||||||
|
bpf_object__unpin_programs(obj, pinfile);
|
||||||
err_close_obj:
|
err_close_obj:
|
||||||
bpf_object__close(obj);
|
bpf_object__close(obj);
|
||||||
err_free_reuse_maps:
|
err_free_reuse_maps:
|
||||||
@ -1071,7 +1092,8 @@ static int do_help(int argc, char **argv)
|
|||||||
" %s %s pin PROG FILE\n"
|
" %s %s pin PROG FILE\n"
|
||||||
" %s %s { load | loadall } OBJ PATH \\\n"
|
" %s %s { load | loadall } OBJ PATH \\\n"
|
||||||
" [type TYPE] [dev NAME] \\\n"
|
" [type TYPE] [dev NAME] \\\n"
|
||||||
" [map { idx IDX | name NAME } MAP]\n"
|
" [map { idx IDX | name NAME } MAP]\\\n"
|
||||||
|
" [pinmaps MAP_DIR]\n"
|
||||||
" %s %s attach PROG ATTACH_TYPE MAP\n"
|
" %s %s attach PROG ATTACH_TYPE MAP\n"
|
||||||
" %s %s detach PROG ATTACH_TYPE MAP\n"
|
" %s %s detach PROG ATTACH_TYPE MAP\n"
|
||||||
" %s %s help\n"
|
" %s %s help\n"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user