aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Crispin <john@openwrt.org>2015-03-29 12:58:01 +0000
committerJohn Crispin <john@openwrt.org>2015-03-29 12:58:01 +0000
commit23d37c1208cea03ecb3b4d50e7074fd147917114 (patch)
tree10aff95575d734eed867f5ac3dd7c20a1037edf3
parent8d8f01088a00bee0ddb9bd7d377d776cf034d35a (diff)
downloadupstream-23d37c1208cea03ecb3b4d50e7074fd147917114.tar.gz
upstream-23d37c1208cea03ecb3b4d50e7074fd147917114.tar.bz2
upstream-23d37c1208cea03ecb3b4d50e7074fd147917114.zip
ar71xx: fix model string detection on NETGEAR WNDR3700/3800/WNDRMAC
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+64 instead of 29763654+16+128 * 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 a WNDR3700v2 using the new 29763654+16+64 ID in the ART. Furthermore, tested against ART dumps of a WNDR3700v2 using the old $'\xff...' value and a WNDR3800. The [ -z "$model" ] check was dropped as there is no way to actually hit this unless no ART partition is found at all. The awk command was carefully crafted to work both with gawk and the (horribly broken) busybox awk. Fixes #18992. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net> SVN-Revision: 45140
-rwxr-xr-xtarget/linux/ar71xx/base-files/lib/ar71xx.sh28
1 files changed, 19 insertions, 9 deletions
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
index d2fe6efeb3..802524c545 100755
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -37,16 +37,26 @@ 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
- machine="NETGEAR WNDR3700v2"
- elif [ -z "$model" ] || [ "$model" = $'\xff\xff\xff\xff\xff\xff\xff\xff\xffN' ]; then
- machine="NETGEAR WNDRMAC"
- else
+ # 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
+ $'\xff'*)
+ if [ "${model:24:1}" = 'N' ]; then
+ machine="NETGEAR WNDRMAC"
+ else
+ machine="NETGEAR WNDR3700v2"
+ fi
+ ;;
+ '29763654+16+64'*)
+ machine="NETGEAR ${model:14}"
+ ;;
+ '29763654+16+128'*)
+ machine="NETGEAR ${model:15}"
+ ;;
+ *)
+ # Unknown ID
machine="NETGEAR $model"
- fi
- ;;
+ esac
esac
AR71XX_BOARD_NAME="$name"