bpf: Implement an interface to register bpf_iter targets
authorYonghong Song <yhs@fb.com>
Sat, 9 May 2020 17:58:59 +0000 (10:58 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Sun, 10 May 2020 00:05:25 +0000 (17:05 -0700)
commitae24345da54e452880808b011fa2d8a0bbd191ba
tree7164a9f76d2fdb61070e81525fb2a628c2dab71e
parent8086fbaf49345f988deec539ec8e182b02914401
bpf: Implement an interface to register bpf_iter targets

The target can call bpf_iter_reg_target() to register itself.
The needed information:
  target:           target name
  seq_ops:          the seq_file operations for the target
  init_seq_private  target callback to initialize seq_priv during file open
  fini_seq_private  target callback to clean up seq_priv during file release
  seq_priv_size:    the private_data size needed by the seq_file
                    operations

The target name represents a target which provides a seq_ops
for iterating objects.

The target can provide two callback functions, init_seq_private
and fini_seq_private, called during file open/release time.
For example, /proc/net/{tcp6, ipv6_route, netlink, ...}, net
name space needs to be setup properly during file open and
released properly during file release.

Function bpf_iter_unreg_target() is also implemented to unregister
a particular target.

Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/20200509175859.2474669-1-yhs@fb.com
include/linux/bpf.h
kernel/bpf/Makefile
kernel/bpf/bpf_iter.c [new file with mode: 0644]