History

bpftool: print program device bound info

If program is bound to a device, print the name of the relevant interface or unknown if the netdev has since been removed.

Jakub Kicinski committed 9 years ago

Commit 928631e1 parent bd601b62 files · +38 −0Browse files

Unified · Split

2 files
  1. tools/bpf/bpftool/prog.c +31 −0
  2. tools/include/uapi/linux/bpf.h +7 −0
tools/bpf/bpftool/prog.c+31−0
@@ -41,6 +41,7 @@ · 40 unmodified lines
4141 #include <string.h>
4242 #include <time.h>
4343 #include <unistd.h>
44+#include <net/if.h>
4445 #include <sys/types.h>
4546 #include <sys/stat.h>
4647
@@ -229,6 +230,21 @@ static void print_prog_json(struct bpf_prog_info *info, int fd) · 182 unmodified lines
229230 info->tag[0], info->tag[1], info->tag[2], info->tag[3],
230231 info->tag[4], info->tag[5], info->tag[6], info->tag[7]);
231232
233+ if (info->status & BPF_PROG_STATUS_DEV_BOUND) {
234+ jsonw_name(json_wtr, "dev");
235+ if (info->ifindex) {
236+ char name[IF_NAMESIZE];
237+
238+ if (!if_indextoname(info->ifindex, name))
239+ jsonw_printf(json_wtr, "\"ifindex:%d\"",
240+ info->ifindex);
241+ else
242+ jsonw_printf(json_wtr, "\"%s\"", name);
243+ } else {
244+ jsonw_printf(json_wtr, "\"unknown\"");
245+ }
246+ }
247+
232248 if (info->load_time) {
233249 char buf[32];
234250
@@ -274,6 +290,21 @@ static void print_prog_plain(struct bpf_prog_info *info, int fd) · 39 unmodified lines
274290
275291 printf("tag ");
276292 fprint_hex(stdout, info->tag, BPF_TAG_SIZE, "");
293+ printf(" ");
294+
295+ if (info->status & BPF_PROG_STATUS_DEV_BOUND) {
296+ printf("dev ");
297+ if (info->ifindex) {
298+ char name[IF_NAMESIZE];
299+
300+ if (!if_indextoname(info->ifindex, name))
301+ printf("ifindex:%d ", info->ifindex);
302+ else
303+ printf("%s ", name);
304+ } else {
305+ printf("unknown ");
306+ }
307+ }
277308 printf("\n");
278309
279310 if (info->load_time) {
tools/include/uapi/linux/bpf.h+7−0
@@ -259,6 +259,7 @@ union bpf_attr { · 258 unmodified lines
259259 __u32 kern_version; /* checked when prog_type=kprobe */
260260 __u32 prog_flags;
261261 char prog_name[BPF_OBJ_NAME_LEN];
262+ __u32 prog_target_ifindex; /* ifindex of netdev to prep for */
262263 };
263264
264265 struct { /* anonymous struct used by BPF_OBJ_* commands */
@@ -893,6 +894,10 @@ enum sk_action { · 628 unmodified lines
893894
894895 #define BPF_TAG_SIZE 8
895896
897+enum bpf_prog_status {
898+ BPF_PROG_STATUS_DEV_BOUND = (1 << 0),
899+};
900+
896901 struct bpf_prog_info {
897902 __u32 type;
898903 __u32 id;
@@ -906,6 +911,8 @@ struct bpf_prog_info { · 7 unmodified lines
906911 __u32 nr_map_ids;
907912 __aligned_u64 map_ids;
908913 char name[BPF_OBJ_NAME_LEN];
914+ __u32 ifindex;
915+ __u32 status;
909916 } __attribute__((aligned(8)));
910917
911918 struct bpf_map_info {