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