diff options
author | Stanislav Fomichev <sdf@google.com> | 2018-11-09 11:21:45 -0500 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2018-11-10 18:56:11 -0500 |
commit | 3767a94b3253fc8c3df96913d7dec796619161c7 (patch) | |
tree | a7348ea5d18eb6f6283a1325ff5fd31e2ceda59b /tools/bpf/bpftool/prog.c | |
parent | 77380998d91dee8aafdbe42634776ba1ef692f1e (diff) |
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>
Diffstat (limited to 'tools/bpf/bpftool/prog.c')
-rw-r--r-- | tools/bpf/bpftool/prog.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index 97d930042cd5..c2ce4220bbca 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c | |||
@@ -802,6 +802,7 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) | |||
802 | struct map_replace *map_replace = NULL; | 802 | struct map_replace *map_replace = NULL; |
803 | struct bpf_program *prog = NULL, *pos; | 803 | struct bpf_program *prog = NULL, *pos; |
804 | unsigned int old_map_fds = 0; | 804 | unsigned int old_map_fds = 0; |
805 | const char *pinmaps = NULL; | ||
805 | struct bpf_object *obj; | 806 | struct bpf_object *obj; |
806 | struct bpf_map *map; | 807 | struct bpf_map *map; |
807 | const char *pinfile; | 808 | const char *pinfile; |
@@ -906,6 +907,13 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) | |||
906 | goto err_free_reuse_maps; | 907 | goto err_free_reuse_maps; |
907 | } | 908 | } |
908 | NEXT_ARG(); | 909 | NEXT_ARG(); |
910 | } else if (is_prefix(*argv, "pinmaps")) { | ||
911 | NEXT_ARG(); | ||
912 | |||
913 | if (!REQ_ARGS(1)) | ||
914 | goto err_free_reuse_maps; | ||
915 | |||
916 | pinmaps = GET_ARG(); | ||
909 | } else { | 917 | } else { |
910 | p_err("expected no more arguments, 'type', 'map' or 'dev', got: '%s'?", | 918 | p_err("expected no more arguments, 'type', 'map' or 'dev', got: '%s'?", |
911 | *argv); | 919 | *argv); |
@@ -1028,6 +1036,14 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) | |||
1028 | } | 1036 | } |
1029 | } | 1037 | } |
1030 | 1038 | ||
1039 | if (pinmaps) { | ||
1040 | err = bpf_object__pin_maps(obj, pinmaps); | ||
1041 | if (err) { | ||
1042 | p_err("failed to pin all maps"); | ||
1043 | goto err_unpin; | ||
1044 | } | ||
1045 | } | ||
1046 | |||
1031 | if (json_output) | 1047 | if (json_output) |
1032 | jsonw_null(json_wtr); | 1048 | jsonw_null(json_wtr); |
1033 | 1049 | ||
@@ -1038,6 +1054,11 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) | |||
1038 | 1054 | ||
1039 | return 0; | 1055 | return 0; |
1040 | 1056 | ||
1057 | err_unpin: | ||
1058 | if (first_prog_only) | ||
1059 | unlink(pinfile); | ||
1060 | else | ||
1061 | bpf_object__unpin_programs(obj, pinfile); | ||
1041 | err_close_obj: | 1062 | err_close_obj: |
1042 | bpf_object__close(obj); | 1063 | bpf_object__close(obj); |
1043 | err_free_reuse_maps: | 1064 | err_free_reuse_maps: |
@@ -1071,7 +1092,8 @@ static int do_help(int argc, char **argv) | |||
1071 | " %s %s pin PROG FILE\n" | 1092 | " %s %s pin PROG FILE\n" |
1072 | " %s %s { load | loadall } OBJ PATH \\\n" | 1093 | " %s %s { load | loadall } OBJ PATH \\\n" |
1073 | " [type TYPE] [dev NAME] \\\n" | 1094 | " [type TYPE] [dev NAME] \\\n" |
1074 | " [map { idx IDX | name NAME } MAP]\n" | 1095 | " [map { idx IDX | name NAME } MAP]\\\n" |
1096 | " [pinmaps MAP_DIR]\n" | ||
1075 | " %s %s attach PROG ATTACH_TYPE MAP\n" | 1097 | " %s %s attach PROG ATTACH_TYPE MAP\n" |
1076 | " %s %s detach PROG ATTACH_TYPE MAP\n" | 1098 | " %s %s detach PROG ATTACH_TYPE MAP\n" |
1077 | " %s %s help\n" | 1099 | " %s %s help\n" |