aboutsummaryrefslogtreecommitdiffstats
path: root/tools/bpf/bpftool/prog.c
diff options
context:
space:
mode:
authorStanislav Fomichev <sdf@google.com>2018-11-09 11:21:45 -0500
committerAlexei Starovoitov <ast@kernel.org>2018-11-10 18:56:11 -0500
commit3767a94b3253fc8c3df96913d7dec796619161c7 (patch)
treea7348ea5d18eb6f6283a1325ff5fd31e2ceda59b /tools/bpf/bpftool/prog.c
parent77380998d91dee8aafdbe42634776ba1ef692f1e (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.c24
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
1057err_unpin:
1058 if (first_prog_only)
1059 unlink(pinfile);
1060 else
1061 bpf_object__unpin_programs(obj, pinfile);
1041err_close_obj: 1062err_close_obj:
1042 bpf_object__close(obj); 1063 bpf_object__close(obj);
1043err_free_reuse_maps: 1064err_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"