Re: [PATCH bpf-next 2/2] bpftool: Use feature list in bash completion

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jun 29, 2022 at 03:40:19PM +0100, Quentin Monnet wrote:
> Now that bpftool is able to produce a list of known program, map, attach
> types, let's use as much of this as we can in the bash completion file,
> so that we don't have to expand the list each time a new type is added
> to the kernel.
> 
> Also update the relevant test script to remove some checks that are no
> longer needed.
> 
> Signed-off-by: Quentin Monnet <quentin@xxxxxxxxxxxxx>
> ---
>  tools/bpf/bpftool/bash-completion/bpftool     | 21 ++++---------------
>  .../selftests/bpf/test_bpftool_synctypes.py   | 20 +++---------------
>  2 files changed, 7 insertions(+), 34 deletions(-)
> 
> diff --git a/tools/bpf/bpftool/bash-completion/bpftool b/tools/bpf/bpftool/bash-completion/bpftool
> index 9cef6516320b..ee177f83b179 100644
> --- a/tools/bpf/bpftool/bash-completion/bpftool
> +++ b/tools/bpf/bpftool/bash-completion/bpftool
> @@ -703,15 +703,8 @@ _bpftool()
>                              return 0
>                              ;;
>                          type)
> -                            local BPFTOOL_MAP_CREATE_TYPES='hash array \
> -                                prog_array perf_event_array percpu_hash \
> -                                percpu_array stack_trace cgroup_array lru_hash \
> -                                lru_percpu_hash lpm_trie array_of_maps \
> -                                hash_of_maps devmap devmap_hash sockmap cpumap \
> -                                xskmap sockhash cgroup_storage reuseport_sockarray \
> -                                percpu_cgroup_storage queue stack sk_storage \
> -                                struct_ops ringbuf inode_storage task_storage \
> -                                bloom_filter'
> +                            local BPFTOOL_MAP_CREATE_TYPES="$(bpftool feature list map_types | \
> +                                grep -v '^unspec$')"
>                              COMPREPLY=( $( compgen -W "$BPFTOOL_MAP_CREATE_TYPES" -- "$cur" ) )
>                              return 0
>                              ;;
> @@ -1039,14 +1032,8 @@ _bpftool()
>                      return 0
>                      ;;
>                  attach|detach)
> -                    local BPFTOOL_CGROUP_ATTACH_TYPES='cgroup_inet_ingress cgroup_inet_egress \
> -                        cgroup_inet_sock_create cgroup_sock_ops cgroup_device cgroup_inet4_bind \
> -                        cgroup_inet6_bind cgroup_inet4_post_bind cgroup_inet6_post_bind \
> -                        cgroup_inet4_connect cgroup_inet6_connect cgroup_inet4_getpeername \
> -                        cgroup_inet6_getpeername cgroup_inet4_getsockname cgroup_inet6_getsockname \
> -                        cgroup_udp4_sendmsg cgroup_udp6_sendmsg cgroup_udp4_recvmsg \
> -                        cgroup_udp6_recvmsg cgroup_sysctl cgroup_getsockopt cgroup_setsockopt \
> -                        cgroup_inet_sock_release'
> +                    local BPFTOOL_CGROUP_ATTACH_TYPES="$(bpftool feature list attach_types | \
> +                        grep '^cgroup_')"
>                      local ATTACH_FLAGS='multi override'
>                      local PROG_TYPE='id pinned tag name'
>                      # Check for $prev = $command first
> diff --git a/tools/testing/selftests/bpf/test_bpftool_synctypes.py b/tools/testing/selftests/bpf/test_bpftool_synctypes.py
> index e443e6542cb9..a6410bebe603 100755
> --- a/tools/testing/selftests/bpf/test_bpftool_synctypes.py
> +++ b/tools/testing/selftests/bpf/test_bpftool_synctypes.py
> @@ -471,12 +471,6 @@ class BashcompExtractor(FileExtractor):
>      def get_prog_attach_types(self):
>          return self.get_bashcomp_list('BPFTOOL_PROG_ATTACH_TYPES')
>  
> -    def get_map_types(self):
> -        return self.get_bashcomp_list('BPFTOOL_MAP_CREATE_TYPES')
> -
> -    def get_cgroup_attach_types(self):
> -        return self.get_bashcomp_list('BPFTOOL_CGROUP_ATTACH_TYPES')
> -
>  def verify(first_set, second_set, message):
>      """
>      Print all values that differ between two sets.
> @@ -516,17 +510,12 @@ def main():
>      man_map_types = man_map_info.get_map_types()
>      man_map_info.close()
>  
> -    bashcomp_info = BashcompExtractor()
> -    bashcomp_map_types = bashcomp_info.get_map_types()
> -
>      verify(source_map_types, help_map_types,
>              f'Comparing {BpfHeaderExtractor.filename} (bpf_map_type) and {MapFileExtractor.filename} (do_help() TYPE):')
>      verify(source_map_types, man_map_types,
>              f'Comparing {BpfHeaderExtractor.filename} (bpf_map_type) and {ManMapExtractor.filename} (TYPE):')
>      verify(help_map_options, man_map_options,
>              f'Comparing {MapFileExtractor.filename} (do_help() OPTIONS) and {ManMapExtractor.filename} (OPTIONS):')
> -    verify(source_map_types, bashcomp_map_types,
> -            f'Comparing {BpfHeaderExtractor.filename} (bpf_map_type) and {BashcompExtractor.filename} (BPFTOOL_MAP_CREATE_TYPES):')
>  
>      # Attach types (names)
>  
> @@ -542,8 +531,10 @@ def main():
>      man_prog_attach_types = man_prog_info.get_attach_types()
>      man_prog_info.close()
>  
> -    bashcomp_info.reset_read() # We stopped at map types, rewind
> +
> +    bashcomp_info = BashcompExtractor()
>      bashcomp_prog_attach_types = bashcomp_info.get_prog_attach_types()
> +    bashcomp_info.close()
>  
>      verify(source_prog_attach_types, help_prog_attach_types,
>              f'Comparing {ProgFileExtractor.filename} (bpf_attach_type) and {ProgFileExtractor.filename} (do_help() ATTACH_TYPE):')
> @@ -568,17 +559,12 @@ def main():
>      man_cgroup_attach_types = man_cgroup_info.get_attach_types()
>      man_cgroup_info.close()
>  
> -    bashcomp_cgroup_attach_types = bashcomp_info.get_cgroup_attach_types()
> -    bashcomp_info.close()
> -
>      verify(source_cgroup_attach_types, help_cgroup_attach_types,
>              f'Comparing {BpfHeaderExtractor.filename} (bpf_attach_type) and {CgroupFileExtractor.filename} (do_help() ATTACH_TYPE):')
>      verify(source_cgroup_attach_types, man_cgroup_attach_types,
>              f'Comparing {BpfHeaderExtractor.filename} (bpf_attach_type) and {ManCgroupExtractor.filename} (ATTACH_TYPE):')
>      verify(help_cgroup_options, man_cgroup_options,
>              f'Comparing {CgroupFileExtractor.filename} (do_help() OPTIONS) and {ManCgroupExtractor.filename} (OPTIONS):')
> -    verify(source_cgroup_attach_types, bashcomp_cgroup_attach_types,
> -            f'Comparing {BpfHeaderExtractor.filename} (bpf_attach_type) and {BashcompExtractor.filename} (BPFTOOL_CGROUP_ATTACH_TYPES):')
>  
>      # Options for remaining commands
>  

That is a nice simplification. Looks good to me.

Acked-by: Daniel Müller <deso@xxxxxxxxxx>



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux