Re: [PATCH bpf-next 2/3] bpftool: match programs by name
From: Jakub Kicinski <hidden>
Date: 2019-12-10 21:06:49
Also in:
bpf
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 <redacted>
quoted hunk ↗ jump to hunk
@@ -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 *?
quoted hunk ↗ jump to hunk
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?
quoted hunk ↗ jump to hunk
+ 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; }