xref: /dpdk/devtools/parse-flow-support.sh (revision 7917b0d38e92e8b9ec5a870415b791420e10f11a)
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		*) cat
37	esac
38}
39
40# include exceptions
41include() # <pattern>
42{
43	case $(basename $dir) in
44	esac
45}
46
47# generate INI section
48list() # <title> <pattern>
49{
50	echo "[$1]"
51	git grep -who "$2[[:alnum:]_]*" $dir |
52	(exclude $2; include $2) | sort -u |
53	awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
54}
55
56rte_flow_support() # <category>
57{
58	title="rte_flow $1s"
59	pattern=$(echo "RTE_FLOW_$1_TYPE_" | awk '{print toupper($0)}')
60	list "$title" "$pattern" | grep -vwE 'void|indirect|end'
61}
62
63if [ -z "$ref" ]; then # generate full tables
64	rte_flow_support item
65	echo
66	rte_flow_support action
67	exit 0
68fi
69
70# compare with reference input
71rte_flow_compare() # <category>
72{
73	section="rte_flow $1s]"
74	{
75		rte_flow_support $1
76		sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
77	} |
78	sed '/]/d' | # ignore section title
79	sed 's, *=.*,,' | # ignore value (better in doc than generated one)
80	sort | uniq -u | # show differences
81	sed "s,^,$1 ," # prefix with category name
82}
83
84rte_flow_compare item
85rte_flow_compare action
86