1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- From: Matthias Schiffer <mschiffer@universe-factory.net>
- Date: Sun, 29 Mar 2015 13:23:26 +0200
- Subject: 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>
- diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
- index a698ce5..1838cb4 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"
|