[OpenWrt-Devel] [PATCH] ar71xx: fix model string detection on NETGEAR WNDR3700/3800/WNDRMAC

Matthias Schiffer mschiffer at universe-factory.net
Mon Mar 23 16:27:08 EDT 2015


There were a few issues with the existing code to detect the model string:
* Always using the string starting with byte 56 would cut off the W of WNDR when
  the ID starts with 29763654+16+128 instead of 29763654+16+64
* The string contained garbage after the zero byte instead of cutting it off
  after the zero (which wasn't always visible using busybox tools, but could
  confuse other scripts)

Tested on a WNDR3700v1 and WNDR3700v2. Unfortunately I couldn't find any devices
which use the $'\xff.....' branch, all newer revisions of the WNDR3700v2 and
WNDRMAC devices actually contain their model name in the ART and thus use
the * branch as well.

The [ -z "$model" ] check was dropped as there is no way to actually hit this
unless no ART is found at all.

The awk command was carefully crafted to work both with gawk and the (horribly
broken) busybox awk.

Signed-off-by: Matthias Schiffer <mschiffer at universe-factory.net>
---
 target/linux/ar71xx/base-files/lib/ar71xx.sh | 28 ++++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
index d2fe6ef..4781dd7 100755
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -37,16 +37,28 @@ wndr3700_board_detect() {
 		machine="NETGEAR WNDR3700"
 		;;
 	"33373031")
-		local model
-		model=$(ar71xx_get_mtd_offset_size_format art 56 10 %c)
-		if [ -z "$model" ] || [ "$model" = $'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' ]; then
+		case "$(ar71xx_get_mtd_offset_size_format art 56 10 %c)" in
+		$'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff')
 			machine="NETGEAR WNDR3700v2"
-		elif [ -z "$model" ] || [ "$model" = $'\xff\xff\xff\xff\xff\xff\xff\xff\xffN' ]; then
+			;;
+		$'\xff\xff\xff\xff\xff\xff\xff\xff\xffN')
 			machine="NETGEAR WNDRMAC"
-		else
-			machine="NETGEAR $model"
-		fi
-		;;
+			;;
+		*)
+			# Use awk to remove everything after the first zero byte
+			model="$(ar71xx_get_mtd_offset_size_format art 41 32 %c | awk 'BEGIN{FS="[[:cntrl:]]"} {print $1; exit}')"
+			case $model in
+			'29763654+16+64'*)
+				machine="NETGEAR ${model:14}"
+				;;
+			'29763654+16+128'*)
+				machine="NETGEAR ${model:15}"
+				;;
+			*)
+				# Unknown ID
+				machine="NETGEAR $model"
+			esac
+		esac
 	esac
 
 	AR71XX_BOARD_NAME="$name"
-- 
2.3.3
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list