xref: /dpdk/devtools/parse-flow-support.sh (revision daa02b5cddbb8e11b31d41e2bf7bb1ae64dcae2f)
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# sorting order
17export LC_COLLATE=C
18
19# exclude exceptions
20exclude() # <pattern>
21{
22	case $(basename $dir) in
23		bnxt)
24			filter=$(sed -n "/$1/{N;/TYPE_NOT_SUPPORTED/P;}" \
25				$dir/tf_ulp/ulp_rte_handler_tbl.c |
26				grep -wo "$1[[:alnum:]_]*" | sort -u |
27				tr '\n' '|' | sed 's,.$,\n,')
28			exceptions='RTE_FLOW_ACTION_TYPE_SHARED'
29			grep -vE "$filter" | grep -vE $exceptions;;
30		*) cat
31	esac
32}
33
34# include exceptions
35include() # <pattern>
36{
37	case $(basename $dir) in
38	esac
39}
40
41# generate INI section
42list() # <title> <pattern>
43{
44	echo "[$1]"
45	git grep -who "$2[[:alnum:]_]*" $dir |
46	(exclude $2; include $2) | sort -u |
47	awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
48}
49
50rte_flow_support() # <category>
51{
52	title="rte_flow $1s"
53	pattern=$(echo "RTE_FLOW_$1_TYPE_" | awk '{print toupper($0)}')
54	list "$title" "$pattern" | grep -vwE 'void|indirect|end'
55}
56
57if [ -z "$ref" ]; then # generate full tables
58	rte_flow_support item
59	echo
60	rte_flow_support action
61	exit 0
62fi
63
64# compare with reference input
65rte_flow_compare() # <category>
66{
67	section="rte_flow $1s]"
68	{
69		rte_flow_support $1
70		sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
71	} |
72	sed '/]/d' | # ignore section title
73	sed 's, *=.*,,' | # ignore value (better in doc than generated one)
74	sort | uniq -u | # show differences
75	sed "s,^,$1 ," # prefix with category name
76}
77
78rte_flow_compare item
79rte_flow_compare action
80