bpftool: Support link show for netns-attached links
authorJakub Sitnicki <jakub@cloudflare.com>
Sun, 31 May 2020 08:28:42 +0000 (10:28 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Mon, 1 Jun 2020 22:21:03 +0000 (15:21 -0700)
Make `bpf link show` aware of new link type, that is links attached to
netns. When listing netns-attached links, display netns inode number as its
identifier and link attach type.

Sample session:

  # readlink /proc/self/ns/net
  net:[4026532251]
  # bpftool prog show
  357: flow_dissector  tag a04f5eef06a7f555  gpl
          loaded_at 2020-05-30T16:53:51+0200  uid 0
          xlated 16B  jited 37B  memlock 4096B
  358: flow_dissector  tag a04f5eef06a7f555  gpl
          loaded_at 2020-05-30T16:53:51+0200  uid 0
          xlated 16B  jited 37B  memlock 4096B
  # bpftool link show
  108: netns  prog 357
          netns_ino 4026532251  attach_type flow_dissector
  # bpftool link -jp show
  [{
          "id": 108,
          "type": "netns",
          "prog_id": 357,
          "netns_ino": 4026532251,
          "attach_type": "flow_dissector"
      }
  ]

  (... after netns is gone ...)

  # bpftool link show
  108: netns  prog 357
          netns_ino 0  attach_type flow_dissector
  # bpftool link -jp show
  [{
          "id": 108,
          "type": "netns",
          "prog_id": 357,
          "netns_ino": 0,
          "attach_type": "flow_dissector"
      }
  ]

Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200531082846.2117903-9-jakub@cloudflare.com
tools/bpf/bpftool/link.c

index 1ff416eff3d7a5aac1312f47ce12e1bfdc376900..fca57ee8fafe45f2c92a150ee009c58d53d76fc5 100644 (file)
@@ -17,6 +17,7 @@ static const char * const link_type_name[] = {
        [BPF_LINK_TYPE_TRACING]                 = "tracing",
        [BPF_LINK_TYPE_CGROUP]                  = "cgroup",
        [BPF_LINK_TYPE_ITER]                    = "iter",
+       [BPF_LINK_TYPE_NETNS]                   = "netns",
 };
 
 static int link_parse_fd(int *argc, char ***argv)
@@ -122,6 +123,11 @@ static int show_link_close_json(int fd, struct bpf_link_info *info)
                                   info->cgroup.cgroup_id);
                show_link_attach_type_json(info->cgroup.attach_type, json_wtr);
                break;
+       case BPF_LINK_TYPE_NETNS:
+               jsonw_uint_field(json_wtr, "netns_ino",
+                                info->netns.netns_ino);
+               show_link_attach_type_json(info->netns.attach_type, json_wtr);
+               break;
        default:
                break;
        }
@@ -190,6 +196,10 @@ static int show_link_close_plain(int fd, struct bpf_link_info *info)
                printf("\n\tcgroup_id %zu  ", (size_t)info->cgroup.cgroup_id);
                show_link_attach_type_plain(info->cgroup.attach_type);
                break;
+       case BPF_LINK_TYPE_NETNS:
+               printf("\n\tnetns_ino %u  ", info->netns.netns_ino);
+               show_link_attach_type_plain(info->netns.attach_type);
+               break;
        default:
                break;
        }