diff mbox series

[bpf-next,v7,5/5] bpftool: Show parameters of BPF task iterators.

Message ID 20220826003712.2810158-6-kuifeng@fb.com (mailing list archive)
State Superseded
Delegated to: BPF
Headers show
Series Parameterize task iterators. | expand

Checks

Context Check Description
netdev/tree_selection success Clearly marked for bpf-next, async
netdev/apply fail Patch does not apply to bpf-next
bpf/vmtest-bpf-next-PR success PR summary
bpf/vmtest-bpf-next-VM_Test-1 success Logs for build for s390x with gcc
bpf/vmtest-bpf-next-VM_Test-2 success Logs for build for x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-3 success Logs for build for x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-4 success Logs for llvm-toolchain
bpf/vmtest-bpf-next-VM_Test-5 success Logs for set-matrix
bpf/vmtest-bpf-next-VM_Test-6 success Logs for test_maps on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-7 success Logs for test_maps on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-8 success Logs for test_maps on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-9 success Logs for test_progs on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-10 success Logs for test_progs on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-11 success Logs for test_progs on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-12 success Logs for test_progs_no_alu32 on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-13 success Logs for test_progs_no_alu32 on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-14 success Logs for test_progs_no_alu32 on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-15 success Logs for test_verifier on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-16 success Logs for test_verifier on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-17 success Logs for test_verifier on x86_64 with llvm-16

Commit Message

Kui-Feng Lee Aug. 26, 2022, 12:37 a.m. UTC
Show tid or pid of iterators if giving an argument of tid or pid

For exampole, the commaned `bpftool link list` may list following
lines.

1: iter  prog 2  target_name bpf_map
2: iter  prog 3  target_name bpf_prog
33: iter  prog 225  target_name task_file  tid 1644
        pids test_progs(1644)

Link 33 is a task_file iterator with tid 1644.  For now, only targets
of task, task_file and task_vma may be with tid or pid to filter out
tasks other than that belong to a process (pid) or a thread (tid).

Signed-off-by: Kui-Feng Lee <kuifeng@fb.com>
---
 tools/bpf/bpftool/link.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

Comments

Quentin Monnet Aug. 26, 2022, 11:23 a.m. UTC | #1
On 26/08/2022 01:37, Kui-Feng Lee wrote:
> Show tid or pid of iterators if giving an argument of tid or pid
> 
> For exampole, the commaned `bpftool link list` may list following

s/exampole/example/, s/commaned/command/

> lines.
> 
> 1: iter  prog 2  target_name bpf_map
> 2: iter  prog 3  target_name bpf_prog
> 33: iter  prog 225  target_name task_file  tid 1644
>         pids test_progs(1644)
> 
> Link 33 is a task_file iterator with tid 1644.  For now, only targets
> of task, task_file and task_vma may be with tid or pid to filter out
> tasks other than that belong to a process (pid) or a thread (tid).

s/that belong/those belonging/?

> 
> Signed-off-by: Kui-Feng Lee <kuifeng@fb.com>
> ---
>  tools/bpf/bpftool/link.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c
> index 7a20931c3250..f96c18bb7a42 100644
> --- a/tools/bpf/bpftool/link.c
> +++ b/tools/bpf/bpftool/link.c
> @@ -83,6 +83,13 @@ static bool is_iter_map_target(const char *target_name)
>  	       strcmp(target_name, "bpf_sk_storage_map") == 0;
>  }
>  
> +static bool is_iter_task_target(const char *target_name)
> +{
> +	return strcmp(target_name, "task") == 0 ||
> +		strcmp(target_name, "task_file") == 0 ||
> +		strcmp(target_name, "task_vma") == 0;
> +}
> +
>  static void show_iter_json(struct bpf_link_info *info, json_writer_t *wtr)
>  {
>  	const char *target_name = u64_to_ptr(info->iter.target_name);
> @@ -91,6 +98,12 @@ static void show_iter_json(struct bpf_link_info *info, json_writer_t *wtr)
>  
>  	if (is_iter_map_target(target_name))
>  		jsonw_uint_field(wtr, "map_id", info->iter.map.map_id);
> +	else if (is_iter_task_target(target_name)) {
> +		if (info->iter.task.tid)
> +			jsonw_uint_field(wtr, "tid", info->iter.task.tid);
> +		if (info->iter.task.pid)
> +			jsonw_uint_field(wtr, "pid", info->iter.task.pid);
> +	}
>  }
>  
>  static int get_prog_info(int prog_id, struct bpf_prog_info *info)
> @@ -208,6 +221,12 @@ static void show_iter_plain(struct bpf_link_info *info)
>  
>  	if (is_iter_map_target(target_name))
>  		printf("map_id %u  ", info->iter.map.map_id);
> +	else if (is_iter_task_target(target_name)) {
> +		if (info->iter.task.tid)
> +			printf("tid %u ", info->iter.task.tid);
> +		else if (info->iter.task.pid)
> +			printf("pid %u ", info->iter.task.pid);

Looks good, thanks! I note that you have an "if ... else ..." here, vs.
two "if"s above for the JSON output. Could you please make this consistent?

Thanks,
Quentin
Kui-Feng Lee Aug. 26, 2022, 10:58 p.m. UTC | #2
On Fri, 2022-08-26 at 12:23 +0100, Quentin Monnet wrote:
> !-------------------------------------------------------------------|
>   This Message Is From an External Sender
> 
> > -------------------------------------------------------------------
> > !
> 
> On 26/08/2022 01:37, Kui-Feng Lee wrote:
> > Show tid or pid of iterators if giving an argument of tid or pid
> > 
> > For exampole, the commaned `bpftool link list` may list following
> 
> s/exampole/example/, s/commaned/command/
> 
> > lines.
> > 
> > 1: iter  prog 2  target_name bpf_map
> > 2: iter  prog 3  target_name bpf_prog
> > 33: iter  prog 225  target_name task_file  tid 1644
> >         pids test_progs(1644)
> > 
> > Link 33 is a task_file iterator with tid 1644.  For now, only
> > targets
> > of task, task_file and task_vma may be with tid or pid to filter
> > out
> > tasks other than that belong to a process (pid) or a thread (tid).
> 
> s/that belong/those belonging/?
> 
> > 
> > Signed-off-by: Kui-Feng Lee <kuifeng@fb.com>
> > ---
> >  tools/bpf/bpftool/link.c | 19 +++++++++++++++++++
> >  1 file changed, 19 insertions(+)
> > 
> > diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c
> > index 7a20931c3250..f96c18bb7a42 100644
> > --- a/tools/bpf/bpftool/link.c
> > +++ b/tools/bpf/bpftool/link.c
> > @@ -83,6 +83,13 @@ static bool is_iter_map_target(const char
> > *target_name)
> >                strcmp(target_name, "bpf_sk_storage_map") == 0;
> >  }
> >  
> > +static bool is_iter_task_target(const char *target_name)
> > +{
> > +       return strcmp(target_name, "task") == 0 ||
> > +               strcmp(target_name, "task_file") == 0 ||
> > +               strcmp(target_name, "task_vma") == 0;
> > +}
> > +
> >  static void show_iter_json(struct bpf_link_info *info,
> > json_writer_t *wtr)
> >  {
> >         const char *target_name = u64_to_ptr(info-
> > >iter.target_name);
> > @@ -91,6 +98,12 @@ static void show_iter_json(struct bpf_link_info
> > *info, json_writer_t *wtr)
> >  
> >         if (is_iter_map_target(target_name))
> >                 jsonw_uint_field(wtr, "map_id", info-
> > >iter.map.map_id);
> > +       else if (is_iter_task_target(target_name)) {
> > +               if (info->iter.task.tid)
> > +                       jsonw_uint_field(wtr, "tid", info-
> > >iter.task.tid);
> > +               if (info->iter.task.pid)
> > +                       jsonw_uint_field(wtr, "pid", info-
> > >iter.task.pid);
> > +       }
> >  }
> >  
> >  static int get_prog_info(int prog_id, struct bpf_prog_info *info)
> > @@ -208,6 +221,12 @@ static void show_iter_plain(struct
> > bpf_link_info *info)
> >  
> >         if (is_iter_map_target(target_name))
> >                 printf("map_id %u  ", info->iter.map.map_id);
> > +       else if (is_iter_task_target(target_name)) {
> > +               if (info->iter.task.tid)
> > +                       printf("tid %u ", info->iter.task.tid);
> > +               else if (info->iter.task.pid)
> > +                       printf("pid %u ", info->iter.task.pid);
> 
> Looks good, thanks! I note that you have an "if ... else ..." here,
> vs.
> two "if"s above for the JSON output. Could you please make this
> consistent?

Sure!
diff mbox series

Patch

diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c
index 7a20931c3250..f96c18bb7a42 100644
--- a/tools/bpf/bpftool/link.c
+++ b/tools/bpf/bpftool/link.c
@@ -83,6 +83,13 @@  static bool is_iter_map_target(const char *target_name)
 	       strcmp(target_name, "bpf_sk_storage_map") == 0;
 }
 
+static bool is_iter_task_target(const char *target_name)
+{
+	return strcmp(target_name, "task") == 0 ||
+		strcmp(target_name, "task_file") == 0 ||
+		strcmp(target_name, "task_vma") == 0;
+}
+
 static void show_iter_json(struct bpf_link_info *info, json_writer_t *wtr)
 {
 	const char *target_name = u64_to_ptr(info->iter.target_name);
@@ -91,6 +98,12 @@  static void show_iter_json(struct bpf_link_info *info, json_writer_t *wtr)
 
 	if (is_iter_map_target(target_name))
 		jsonw_uint_field(wtr, "map_id", info->iter.map.map_id);
+	else if (is_iter_task_target(target_name)) {
+		if (info->iter.task.tid)
+			jsonw_uint_field(wtr, "tid", info->iter.task.tid);
+		if (info->iter.task.pid)
+			jsonw_uint_field(wtr, "pid", info->iter.task.pid);
+	}
 }
 
 static int get_prog_info(int prog_id, struct bpf_prog_info *info)
@@ -208,6 +221,12 @@  static void show_iter_plain(struct bpf_link_info *info)
 
 	if (is_iter_map_target(target_name))
 		printf("map_id %u  ", info->iter.map.map_id);
+	else if (is_iter_task_target(target_name)) {
+		if (info->iter.task.tid)
+			printf("tid %u ", info->iter.task.tid);
+		else if (info->iter.task.pid)
+			printf("pid %u ", info->iter.task.pid);
+	}
 }
 
 static int show_link_close_plain(int fd, struct bpf_link_info *info)