dpdk/devtools/parse-flow-support.sh
<<
>>
Prefs
   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