xref: /dpdk/devtools/parse-flow-support.sh (revision bdf4a3c6)
1947dff12SThomas Monjalon#! /bin/sh -e
2947dff12SThomas Monjalon# SPDX-License-Identifier: BSD-3-Clause
3947dff12SThomas Monjalon# Copyright 2021 Mellanox Technologies, Ltd
4947dff12SThomas Monjalon
5947dff12SThomas Monjalon# Parse rte_flow support of a driver directory,
6947dff12SThomas Monjalon# and optionally show difference with a doc file in .ini format.
7947dff12SThomas Monjalon
8947dff12SThomas Monjalondir=$1 # drivers/net/foo
9947dff12SThomas Monjalonref=$2 # doc/guides/nics/features/foo.ini
10947dff12SThomas Monjalon
11947dff12SThomas Monjalonif [ -z "$dir" ]; then
12947dff12SThomas Monjalon	echo "directory argument is required" >&2
13947dff12SThomas Monjalon	exit 1
14947dff12SThomas Monjalonfi
15947dff12SThomas Monjalon
16947dff12SThomas Monjalon# sorting order
17947dff12SThomas Monjalonexport LC_COLLATE=C
18947dff12SThomas Monjalon
19947dff12SThomas Monjalon# exclude exceptions
20947dff12SThomas Monjalonexclude() # <pattern>
21947dff12SThomas Monjalon{
22947dff12SThomas Monjalon	case $(basename $dir) in
23947dff12SThomas Monjalon		bnxt)
24947dff12SThomas Monjalon			filter=$(sed -n "/$1/{N;/TYPE_NOT_SUPPORTED/P;}" \
25a2417601SKishore Padmanabha				$dir/tf_ulp/ulp_rte_handler_tbl.c |
26947dff12SThomas Monjalon				grep -wo "$1[[:alnum:]_]*" | sort -u |
27947dff12SThomas Monjalon				tr '\n' '|' | sed 's,.$,\n,')
28*bdf4a3c6SKishore Padmanabha			exceptions='RTE_FLOW_ACTION_TYPE_SHARED'
29*bdf4a3c6SKishore Padmanabha			grep -vE "$filter" | grep -vE $exceptions;;
30947dff12SThomas Monjalon		*) cat
31947dff12SThomas Monjalon	esac
32947dff12SThomas Monjalon}
33947dff12SThomas Monjalon
34947dff12SThomas Monjalon# include exceptions
35947dff12SThomas Monjaloninclude() # <pattern>
36947dff12SThomas Monjalon{
37947dff12SThomas Monjalon	case $(basename $dir) in
38947dff12SThomas Monjalon	esac
39947dff12SThomas Monjalon}
40947dff12SThomas Monjalon
41947dff12SThomas Monjalon# generate INI section
42947dff12SThomas Monjalonlist() # <title> <pattern>
43947dff12SThomas Monjalon{
44947dff12SThomas Monjalon	echo "[$1]"
45947dff12SThomas Monjalon	git grep -who "$2[[:alnum:]_]*" $dir |
46947dff12SThomas Monjalon	(exclude $2; include $2) | sort -u |
47947dff12SThomas Monjalon	awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
48947dff12SThomas Monjalon}
49947dff12SThomas Monjalon
50947dff12SThomas Monjalonrte_flow_support() # <category>
51947dff12SThomas Monjalon{
52947dff12SThomas Monjalon	title="rte_flow $1s"
53947dff12SThomas Monjalon	pattern=$(echo "RTE_FLOW_$1_TYPE_" | awk '{print toupper($0)}')
54947dff12SThomas Monjalon	list "$title" "$pattern" | grep -vwE 'void|indirect|end'
55947dff12SThomas Monjalon}
56947dff12SThomas Monjalon
57947dff12SThomas Monjalonif [ -z "$ref" ]; then # generate full tables
58947dff12SThomas Monjalon	rte_flow_support item
59947dff12SThomas Monjalon	echo
60947dff12SThomas Monjalon	rte_flow_support action
61947dff12SThomas Monjalon	exit 0
62947dff12SThomas Monjalonfi
63947dff12SThomas Monjalon
64947dff12SThomas Monjalon# compare with reference input
65947dff12SThomas Monjalonrte_flow_compare() # <category>
66947dff12SThomas Monjalon{
67947dff12SThomas Monjalon	section="rte_flow $1s]"
68947dff12SThomas Monjalon	{
69947dff12SThomas Monjalon		rte_flow_support $1
70947dff12SThomas Monjalon		sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
71947dff12SThomas Monjalon	} |
72947dff12SThomas Monjalon	sed '/]/d' | # ignore section title
73947dff12SThomas Monjalon	sed 's, *=.*,,' | # ignore value (better in doc than generated one)
74947dff12SThomas Monjalon	sort | uniq -u | # show differences
75947dff12SThomas Monjalon	sed "s,^,$1 ," # prefix with category name
76947dff12SThomas Monjalon}
77947dff12SThomas Monjalon
78947dff12SThomas Monjalonrte_flow_compare item
79947dff12SThomas Monjalonrte_flow_compare action
80