The doc check currently does not look into the Intel drivers, nor does
it handle multiple drivers in a single code.

Add helpers to extract driver names from paths and map them to code
directories.

When a driver name matches its code directory, report differences in
both directions (code vs doc, doc vs code).

When multiple docs share one code directory, only report doc items
not in code to avoid false positives.

Also rename doc files to match their code directory names.

Signed-off-by: David Marchand <[email protected]>
---
 MAINTAINERS                                   |  2 +-
 devtools/check-doc-vs-code.sh                 | 67 +++++++++++++++++--
 .../features/{afpacket.ini => af_packet.ini}  |  2 +-
 .../features/{cxgbevf.ini => cxgbe_vf.ini}    |  2 +-
 4 files changed, 63 insertions(+), 10 deletions(-)
 rename doc/guides/nics/features/{afpacket.ini => af_packet.ini} (70%)
 rename doc/guides/nics/features/{cxgbevf.ini => cxgbe_vf.ini} (90%)

diff --git a/MAINTAINERS b/MAINTAINERS
index 1720cff62e..e05bea2f0c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -679,7 +679,7 @@ F: examples/bond/
 Linux AF_PACKET
 M: Stephen Hemminger <[email protected]>
 F: drivers/net/af_packet/
-F: doc/guides/nics/features/afpacket.ini
+F: doc/guides/nics/features/af_packet.ini
 F: app/test/test_pmd_af_packet.c
 
 Linux AF_XDP
diff --git a/devtools/check-doc-vs-code.sh b/devtools/check-doc-vs-code.sh
index 80d77907f0..4dacb78b2e 100755
--- a/devtools/check-doc-vs-code.sh
+++ b/devtools/check-doc-vs-code.sh
@@ -36,30 +36,83 @@ has_file_change() # <pattern>
        changed_files | grep -q "$1"
 }
 
+net_driver_from_path() # <path>
+{
+       sed -rn '
+               s,.*drivers/net/intel/([^/]*)/.*,\1,p; t
+               s,.*drivers/net/([^./]*)/.*,\1,p; t
+               s,.*doc/guides/nics/features/([^./]*).*,\1,p'
+}
+
 changed_net_drivers()
 {
-       net_paths='drivers/net/|doc/guides/nics/features/'
        [ -n "$drivers" ] ||
                drivers=$(changed_files |
-                       sed -rn "s,^($net_paths)([^./]*).*,\2,p" |
+                       net_driver_from_path |
                        sort -u)
        echo "$drivers"
 }
 
 all_net_drivers()
 {
-       find $rootdir/drivers/net -mindepth 1 -maxdepth 1 -type d |
-       sed 's,.*/,,' |
-       sort
+       {
+               find $rootdir/drivers/net -name meson.build
+               ls $rootdir/doc/guides/nics/features/*.ini
+       } |
+       net_driver_from_path |
+       sort -u
+}
+
+driver_code_dir() # <driver>
+{
+       drv=$(echo "$1" | sed -r 's/_(dcf|vec|vf)$//')
+       case $drv in
+       enetc|enetc4)
+               echo "$rootdir/drivers/net/enetc" ;;
+       igb|igc|e1000)
+               echo "$rootdir/drivers/net/intel/e1000" ;;
+       ixgbe|i40e|ice|fm10k|ipn3ke|idpf|cpfl|iavf)
+               echo "$rootdir/drivers/net/intel/$drv" ;;
+       *)
+               echo "$rootdir/drivers/net/$drv" ;;
+       esac
+}
+
+# compare doc vs code items:
+# - if driver matches code dir: report differences in both directions
+# - otherwise: only report doc items not in code (shared code directory)
+flow_item_diff() # <driver> <code_dir> <doc_items> <code_items>
+{
+       {
+               [ -n "$3" ] && echo "$3"
+               [ -n "$4" ] && {
+                       echo "$4"
+                       [ "$1" != $(basename "$2") ] && echo "$4"
+               }
+       } | sort | uniq -u
 }
 
 check_rte_flow() # <driver>
 {
-       code=$rootdir/drivers/net/$1
+       code=$(driver_code_dir $1)
        doc=$rootdir/doc/guides/nics/features/$1.ini
        [ -d $code ] || return 0
        [ -f $doc ] || return 0
-       report=$($selfdir/parse-flow-support.sh $code $doc)
+       code_support=$($selfdir/parse-flow-support.sh $code)
+       report=$(
+               for category in item action; do
+                       section="rte_flow ${category}s]"
+                       code_items=$(echo "$code_support" | sed -n 
"/$section/,/]/p" |
+                               sed '/]/d' | sed 's, *=.*,,' | sed '/^$/d' | 
sort -u)
+                       doc_items=$(sed -n "/$section/,/]/p" "$doc" |
+                               sed '/]/d' | sed 's, *=.*,,' | sed '/^$/d' | 
sort -u)
+                       if [ -n "$doc_items" ] || [ -n "$code_items" ]; then
+                               flow_item_diff $1 $code "$doc_items" 
"$code_items"
+                       fi |
+                       grep . |
+                       sed "s,^,$category ,"
+               done
+       )
        if [ -n "$report" ]; then
                error "rte_flow doc out of sync for $1"
                echo "$report" | sed 's,^,\t,'
diff --git a/doc/guides/nics/features/afpacket.ini 
b/doc/guides/nics/features/af_packet.ini
similarity index 70%
rename from doc/guides/nics/features/afpacket.ini
rename to doc/guides/nics/features/af_packet.ini
index bc669dfb8a..b1cbc54aca 100644
--- a/doc/guides/nics/features/afpacket.ini
+++ b/doc/guides/nics/features/af_packet.ini
@@ -1,5 +1,5 @@
 ;
-; Supported features of the 'afpacket' network poll mode driver.
+; Supported features of the 'af_packet' network poll mode driver.
 ;
 ; Refer to default.ini for the full list of available PMD features.
 ;
diff --git a/doc/guides/nics/features/cxgbevf.ini 
b/doc/guides/nics/features/cxgbe_vf.ini
similarity index 90%
rename from doc/guides/nics/features/cxgbevf.ini
rename to doc/guides/nics/features/cxgbe_vf.ini
index a921cda6b1..b77b202272 100644
--- a/doc/guides/nics/features/cxgbevf.ini
+++ b/doc/guides/nics/features/cxgbe_vf.ini
@@ -1,5 +1,5 @@
 ;
-; Supported features of the 'cxgbevf' network poll mode driver.
+; Supported features of the 'cxgbe_vf' network poll mode driver.
 ;
 ; Refer to default.ini for the full list of available PMD features.
 ;
-- 
2.54.0

Reply via email to