From 27c2ce563216601166bd9f22f062127875eb6266 Mon Sep 17 00:00:00 2001 From: Thomas Monjalon Date: Fri, 23 Jan 2015 13:31:59 +0100 Subject: [PATCH] maintainers: start a Linux-style file This MAINTAINERS file is inspired from the Linux one. Almost all files are split into areas in order to identify maintainers of each DPDK area. Note that a maintainer is not a git tree manager. Candidates are welcome to send a patch to sign up for one or several areas. There is a script to check coverage, especially when adding or moving files. Signed-off-by: Thomas Monjalon Acked-by: Neil Horman --- MAINTAINERS | 388 +++++++++++++++++++++++++++++++++++ scripts/check-maintainers.sh | 117 +++++++++++ 2 files changed, 505 insertions(+) create mode 100644 MAINTAINERS create mode 100755 scripts/check-maintainers.sh diff --git a/MAINTAINERS b/MAINTAINERS new file mode 100644 index 0000000000..1f7d04a9ec --- /dev/null +++ b/MAINTAINERS @@ -0,0 +1,388 @@ +DPDK Maintainers +================ + +The intention of this file is to provide a set of names that we can rely on +for helping in patch reviews and questions. +These names are additional recipients for emails sent to dev@dpdk.org. +Please avoid private emails. + +Descriptions of section entries: + + M: Maintainer's Full Name + T: Git tree location. + F: Files and directories with wildcard patterns. + A trailing slash includes all files and subdirectory files. + A wildcard includes all files but not subdirectories. + One pattern per line. Multiple F: lines acceptable. + X: Files and directories exclusion, same rules as F: + K: Keyword regex pattern to match content. + One regex pattern per line. Multiple K: lines acceptable. + + +General Project Administration +------------------------------ +M: Thomas Monjalon +T: git://dpdk.org/dpdk +F: MAINTAINERS +F: scripts/check-maintainers.sh + + +Security Issues +--------------- +M: maintainers@dpdk.org + + +Documentation (with overlaps) +------------- +F: doc/ + + +Build System +------------ +F: GNUmakefile +F: Makefile +F: config/ +F: mk/ +F: pkg/ +F: scripts/depdirs-rule.sh +F: scripts/gen-build-mk.sh +F: scripts/gen-config-h.sh +F: scripts/relpath.sh + + +Environment Abstraction Layer +----------------------------- + +EAL API and common code +M: Thomas Monjalon +F: lib/librte_eal/common/* +F: lib/librte_eal/common/include/* +F: lib/librte_eal/common/include/generic/ +F: app/test/test_alarm.c +F: app/test/test_atomic.c +F: app/test/test_byteorder.c +F: app/test/test_common.c +F: app/test/test_cpuflags.c +F: app/test/test_cycles.c +F: app/test/test_debug.c +F: app/test/test_devargs.c +F: app/test/test_eal* +F: app/test/test_errno.c +F: app/test/test_func_reentrancy.c +F: app/test/test_interrupts.c +F: app/test/test_logs.c +F: app/test/test_memcpy* +F: app/test/test_memory.c +F: app/test/test_memzone.c +F: app/test/test_pci.c +F: app/test/test_per_lcore.c +F: app/test/test_prefetch.c +F: app/test/test_rwlock.c +F: app/test/test_spinlock.c +F: app/test/test_string_fns.c +F: app/test/test_tailq.c +F: app/test/test_version.c + +Secondary process +K: RTE_PROC_ +F: doc/guides/prog_guide/multi_proc_support.rst +F: app/test/test_mp_secondary.c +F: examples/multi_process/ +F: doc/guides/sample_app_ug/multi_process.rst + +IBM Power +F: lib/librte_eal/common/include/arch/ppc_64/ + +Intel x86 +F: lib/librte_eal/common/include/arch/x86/ + +Linux EAL (with overlaps) +F: lib/librte_eal/linuxapp/Makefile +F: lib/librte_eal/linuxapp/eal/ +F: doc/guides/linux_gsg/ + +Linux UIO +F: lib/librte_eal/linuxapp/igb_uio/ +F: lib/librte_eal/linuxapp/eal/*uio* + +Linux VFIO +F: lib/librte_eal/linuxapp/eal/*vfio* + +Linux Xen +F: lib/librte_eal/linuxapp/xen_dom0/ +F: lib/librte_eal/linuxapp/eal/*xen* +F: lib/librte_eal/linuxapp/eal/include/exec-env/rte_dom0_common.h +F: lib/librte_mempool/rte_dom0_mempool.c +F: lib/librte_pmd_xenvirt/ +F: app/test-pmd/mempool_* +F: examples/vhost_xen/ +F: doc/guides/prog_guide/intel_dpdk_xen_based_packet_switch_sol.rst + +FreeBSD EAL (with overlaps) +F: lib/librte_eal/bsdapp/Makefile +F: lib/librte_eal/bsdapp/eal/ +F: doc/guides/freebsd_gsg/ + +FreeBSD contigmem +F: lib/librte_eal/bsdapp/contigmem/ + +FreeBSD UIO +F: lib/librte_eal/bsdapp/nic_uio/ + + +Core Libraries +-------------- + +Memory management +F: lib/librte_malloc/ +F: doc/guides/prog_guide/malloc_lib.rst +F: app/test/test_malloc.c +F: lib/librte_mempool/ +F: doc/guides/prog_guide/mempool_lib.rst +F: app/test/test_mempool* +F: app/test/test_func_reentrancy.c + +Ring queue +F: lib/librte_ring/ +F: app/test/test_ring* +F: app/test/test_func_reentrancy.c + +Packet buffer +F: lib/librte_mbuf/ +F: doc/guides/prog_guide/mbuf_lib.rst +F: app/test/test_mbuf.c + +Ethernet API +M: Thomas Monjalon +F: lib/librte_ether/ + + +Drivers +------- + +Link bonding +F: lib/librte_pmd_bond/ +F: doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst +F: app/test/test_link_bonding.c + +Linux KNI +F: lib/librte_eal/linuxapp/kni/ +F: lib/librte_kni/ +F: doc/guides/prog_guide/kernel_nic_interface.rst +F: app/test/test_kni.c +F: examples/kni/ +F: doc/guides/sample_app_ug/kernel_nic_interface.rst + +Linux AF_PACKET +F: lib/librte_pmd_af_packet/ + +Cisco enic +F: lib/librte_pmd_enic/ + +Intel e1000 +F: lib/librte_pmd_e1000/ + +Intel ixgbe +F: lib/librte_pmd_ixgbe/ + +Intel i40e +F: lib/librte_pmd_i40e/ + +RedHat virtio +F: lib/librte_pmd_virtio/ +F: doc/guides/prog_guide/poll_mode_drv_emulated_virtio_nic.rst +F: lib/librte_vhost/ +F: doc/guides/prog_guide/vhost_lib.rst +F: examples/vhost/ +F: doc/guides/sample_app_ug/vhost.rst + +VMware vmxnet3 +F: lib/librte_pmd_vmxnet3/ +F: doc/guides/prog_guide/poll_mode_drv_paravirtual_vmxnets_nic.rst + +PCAP PMD +F: lib/librte_pmd_pcap/ +F: doc/guides/prog_guide/libpcap_ring_based_poll_mode_drv.rst + +Ring PMD +F: lib/librte_pmd_ring/ +F: doc/guides/prog_guide/ring_lib.rst +F: app/test/test_pmd_ring.c + + +Packet processing +----------------- + +Network headers +F: lib/librte_net/ + +IP fragmentation & reassembly +F: lib/librte_ip_frag/ +F: doc/guides/prog_guide/ip_fragment_reassembly_lib.rst +F: examples/ip_fragmentation/ +F: doc/guides/sample_app_ug/ip_frag.rst +F: examples/ip_reassembly/ +F: doc/guides/sample_app_ug/ip_reassembly.rst + +Distributor +F: lib/librte_distributor/ +F: doc/guides/prog_guide/packet_distrib_lib.rst +F: app/test/test_distributor* +F: examples/distributor/ +F: doc/guides/sample_app_ug/dist_app.rst + +Hierarchical scheduler +F: lib/librte_sched/ +F: doc/guides/prog_guide/qos_framework.rst +F: app/test/test_red.c +F: app/test/test_sched.c +F: examples/qos_sched/ +F: doc/guides/sample_app_ug/qos_scheduler.rst + + +Packet Framework +---------------- +F: lib/librte_pipeline/ +F: lib/librte_port/ +F: lib/librte_table/ +F: doc/guides/prog_guide/packet_framework.rst +F: app/test/test_table* +F: app/test-pipeline/ +F: doc/guides/sample_app_ug/test_pipeline.rst +F: examples/ip_pipeline/ +F: doc/guides/sample_app_ug/internet_proto_ip_pipeline.rst + + +Algorithms +---------- + +ACL +F: lib/librte_acl/ +F: doc/guides/prog_guide/packet_classif_access_ctrl.rst +F: app/test-acl/ +F: app/test/test_acl.* +F: examples/l3fwd-acl/ +F: doc/guides/sample_app_ug/l3_forward_access_ctrl.rst + +Hashes +F: lib/librte_hash/ +F: doc/guides/prog_guide/hash_lib.rst +F: app/test/test_hash* +F: app/test/test_func_reentrancy.c + +LPM +F: lib/librte_lpm/ +F: doc/guides/prog_guide/lpm* +F: app/test/test_lpm* +F: app/test/test_func_reentrancy.c + +Traffic metering +F: lib/librte_meter/ +F: doc/guides/sample_app_ug/qos_scheduler.rst +F: app/test/test_meter.c +F: examples/qos_meter/ +F: doc/guides/sample_app_ug/qos_metering.rst + + +Other libraries +--------------- + +Configuration file +F: lib/librte_cfgfile/ + +Interactive command line +F: lib/librte_cmdline/ +F: app/cmdline_test/ +F: app/test/test_cmdline* +F: examples/cmdline/ +F: doc/guides/sample_app_ug/cmd_line.rst + +Qemu IVSHMEM +F: lib/librte_ivshmem/ +F: lib/librte_eal/linuxapp/eal/eal_ivshmem.c +F: doc/guides/prog_guide/ivshmem_lib.rst +F: app/test/test_ivshmem.c +F: examples/l2fwd-ivshmem/ + +Key/Value parsing +F: lib/librte_kvargs/ +F: app/test/test_kvargs.c + +Power management +F: lib/librte_power/ +F: doc/guides/prog_guide/power_man.rst +F: app/test/test_power* +F: examples/l3fwd-power/ +F: doc/guides/sample_app_ug/l3_forward_power_man.rst +F: examples/vm_power_manager/ +F: doc/guides/sample_app_ug/vm_power_management.rst + +Timers +F: lib/librte_timer/ +F: doc/guides/prog_guide/timer_lib.rst +F: app/test/test_timer* +F: examples/timer/ +F: doc/guides/sample_app_ug/timer.rst + + +Test Applications +----------------- + +Unit tests framework +F: app/test/autotest* +F: app/test/commands.c +F: app/test/packet_burst_generator.c +F: app/test/packet_burst_generator.h +F: app/test/process.h +F: app/test/test.c +F: app/test/test.h +F: app/test/test_pmd_perf.c +F: app/test/virtual_pmd.c +F: app/test/virtual_pmd.h + +Driver testing tool +F: app/test-pmd/ +F: doc/guides/testpmd_app_ug/ + + +Other Example Applications +-------------------------- + +F: examples/dpdk_qat/ +F: doc/guides/sample_app_ug/intel_quickassist.rst + +F: examples/exception_path/ +F: doc/guides/sample_app_ug/exception_path.rst + +F: examples/helloworld/ +F: doc/guides/sample_app_ug/hello_world.rst + +F: examples/ipv4_multicast/ +F: doc/guides/sample_app_ug/ipv4_multicast.rst + +F: examples/l2fwd/ +F: doc/guides/sample_app_ug/l2_forward_real_virtual.rst + +F: examples/l3fwd/ +F: doc/guides/sample_app_ug/l3_forward.rst + +F: examples/l3fwd-vf/ +F: doc/guides/sample_app_ug/l3_forward_virtual.rst + +F: examples/link_status_interrupt/ +F: doc/guides/sample_app_ug/link_status_intr.rst + +F: examples/load_balancer/ +F: doc/guides/sample_app_ug/load_balancer.rst + +F: examples/netmap_compat/ +F: doc/guides/sample_app_ug/netmap_compatibility.rst + +F: examples/quota_watermark/ +F: doc/guides/sample_app_ug/quota_watermark.rst + +F: examples/skeleton/ + +F: examples/vmdq/ +F: examples/vmdq_dcb/ +F: doc/guides/sample_app_ug/vmdq_dcb_forwarding.rst diff --git a/scripts/check-maintainers.sh b/scripts/check-maintainers.sh new file mode 100755 index 0000000000..2687cadaa5 --- /dev/null +++ b/scripts/check-maintainers.sh @@ -0,0 +1,117 @@ +#! /bin/sh + +# BSD LICENSE +# +# Copyright 2015 6WIND S.A. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of 6WIND S.A. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Do some basic checks in MAINTAINERS file + +cd $(dirname $0)/.. + +# Get files matching paths with wildcards and / meaning recursing +files () # [ ...] +{ + if [ -z "$1" ] ; then + return + fi + if [ -d .git ] ; then + git ls-files "$1" + else + find "$1" -type f | + sed 's,^\./,,' + fi | + # if not ended by / + if ! echo "$1" | grep -q '/[[:space:]]*$' ; then + # filter out deeper directories + sed "/\(\/[^/]*\)\{$(($(echo "$1" | grep -o / | wc -l) + 1))\}/d" + else + cat + fi + # next path + shift + files "$@" +} + +# Get all files matching F: and X: fields +parse_fx () # +{ + IFS=' +' + # parse each line excepted underlining + for line in $( (sed '/^-\+$/d' $1 ; echo) | sed 's,^$,§,') ; do + if echo "$line" | grep -q '^§$' ; then + # empty line delimit end of section + whitelist=$(files $flines) + blacklist=$(files $xlines) + match=$(aminusb "$whitelist" "$blacklist") + if [ -n "$match" ] ; then + echo "# $title" + echo "$match" + fi + # flush section + unset flines + unset xlines + elif echo "$line" | grep -q '^[A-Z]: ' ; then + # file matching pattern + flines=$(add_line_to_if "$line" "$flines" 'F: ') + # file exclusion pattern + xlines=$(add_line_to_if "$line" "$xlines" 'X: ') + else # assume it is a title + title="$line" + fi + done +} + +# Add a line to a set of lines if it begins with right pattern +add_line_to_if () # +{ + ( + echo "$2" + echo "$1" | sed -rn "s,^$3(.*),\1,p" + ) | + sed '/^$/d' +} + +# Subtract two sets of lines +aminusb () # +{ + printf "$1\n$2\n$2" | sort | uniq -u | sed '/^$/d' +} + +all=$(files ./) +listed=$(parse_fx MAINTAINERS | sed '/^#/d' | sort -u) + +echo '##########' +echo '# files not listed' +echo '##########' +aminusb "$all" "$listed" + +# TODO: check patterns that match nothing +# TODO: check overlaps +# TODO: check orphan areas