xref: /dpdk/devtools/parse-flow-support.sh (revision d5f81030df75c587885245ff1b14f123448a97c7)
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