1#! /bin/sh -e 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright 2021 Mellanox Technologies, Ltd 4 5# Parse rte_flow support of a driver directory, 6# and optionally show difference with a doc file in .ini format. 7 8dir=$1 # drivers/net/foo 9ref=$2 # doc/guides/nics/features/foo.ini 10 11if [ -z "$dir" ]; then 12 echo "directory argument is required" >&2 13 exit 1 14fi 15 16# test git-grep for -o (--only-matching) option 17if ! git grep -qo git -- $0 >/dev/null 2>&1; then 18 echo "git version >= 2.19 is required" >&2 19 exit 1 20fi 21 22# sorting order 23export LC_COLLATE=C 24 25# exclude exceptions 26exclude() # <pattern> 27{ 28 case $(basename $dir) in 29 bnxt) 30 filter=$(sed -n "/$1/{N;/TYPE_NOT_SUPPORTED/P;}" \ 31 $dir/tf_ulp/ulp_rte_handler_tbl.c | 32 grep -wo "$1[[:alnum:]_]*" | sort -u | 33 tr '\n' '|' | sed 's,.$,\n,') 34 exceptions='RTE_FLOW_ACTION_TYPE_SHARED' 35 grep -vE "$filter" | grep -vE $exceptions;; 36 dpaa2) 37 filter=$(sed -n "/$1/{N;/Skip this/P;}" \ 38 $dir/dpaa2_flow.c | 39 grep -wo "$1[[:alnum:]_]*" | sort -u | 40 tr '\n' '|' | sed 's,.$,\n,') 41 [ "$1" = 'RTE_FLOW_ITEM_TYPE_' -a -z "$filter" ] && cat || 42 grep -vE "$filter";; 43 *) cat 44 esac 45} 46 47# include exceptions 48include() # <pattern> 49{ 50 case $(basename $dir) in 51 esac 52} 53 54# generate INI section 55list() # <title> <pattern> 56{ 57 echo "[$1]" 58 git grep -who "$2[[:alnum:]_]*" $dir | 59 (exclude $2; include $2) | sort -u | 60 awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}' 61} 62 63rte_flow_support() # <category> 64{ 65 title="rte_flow $1s" 66 pattern=$(echo "RTE_FLOW_$1_TYPE_" | awk '{print toupper($0)}') 67 list "$title" "$pattern" | grep -vwE 'void|indirect|end' 68} 69 70if [ -z "$ref" ]; then # generate full tables 71 rte_flow_support item 72 echo 73 rte_flow_support action 74 exit 0 75fi 76 77# compare with reference input 78rte_flow_compare() # <category> 79{ 80 section="rte_flow $1s]" 81 { 82 rte_flow_support $1 83 sed -n "/$section/,/]/p" "$ref" | sed '/^$/d' 84 } | 85 sed '/]/d' | # ignore section title 86 sed 's, *=.*,,' | # ignore value (better in doc than generated one) 87 sort | uniq -u | # show differences 88 sed "s,^,$1 ," # prefix with category name 89} 90 91rte_flow_compare item 92rte_flow_compare action 93