On Tue, 10 Dec 2019 17:06:42 +0100, Paul Chaignon wrote: > When working with frequently modified BPF programs, both the ID and the > tag may change. bpftool currently doesn't provide a "stable" way to match > such programs. > > This patch implements lookup by name for programs. The show and dump > commands will return all programs with the given name, whereas other > commands will error out if several programs have the same name. > > Signed-off-by: Paul Chaignon <paul.chaignon@xxxxxxxxxx> > @@ -164,7 +165,7 @@ prog_parse_fds(int *argc, char ***argv, int *fds) > } > return 1; > } else if (is_prefix(**argv, "tag")) { > - unsigned char tag[BPF_TAG_SIZE]; > + char tag[BPF_TAG_SIZE]; Perhaps better to change the argument to prog_fd_by_nametag() to void *? > > NEXT_ARGP(); > > @@ -176,7 +177,20 @@ prog_parse_fds(int *argc, char ***argv, int *fds) > } > NEXT_ARGP(); > > - return prog_fd_by_tag(tag, fds); > + return prog_fd_by_nametag(tag, fds, true); > + } else if (is_prefix(**argv, "name")) { > + char *name; > + > + NEXT_ARGP(); > + > + name = **argv; > + if (strlen(name) > BPF_OBJ_NAME_LEN - 1) { Is this needed? strncmp will simply never match, is it preferred to hard error? > + p_err("can't parse name"); > + return -1; > + } > + NEXT_ARGP(); > + > + return prog_fd_by_nametag(name, fds, false); > } else if (is_prefix(**argv, "pinned")) { > char *path; > > @@ -191,7 +205,7 @@ prog_parse_fds(int *argc, char ***argv, int *fds) > return 1; > } > > - p_err("expected 'id', 'tag' or 'pinned', got: '%s'?", **argv); > + p_err("expected 'id', 'tag', 'name' or 'pinned', got: '%s'?", **argv); > return -1; > } >