ar71xx: verify hardware id of firmware images on TP-Link boards
[openwrt.git] / target / linux / ar71xx / base-files / lib / ar71xx.sh
1 #!/bin/sh
2 #
3 # Copyright (C) 2009-2011 OpenWrt.org
4 #
5
6 AR71XX_BOARD_NAME=
7 AR71XX_MODEL=
8
9 ar71xx_get_mem_total() {
10         $(awk '/MemTotal:/ {print($2)}' /proc/meminfo)
11 }
12
13 ar71xx_get_mtd_part_magic() {
14         local part="$1"
15         local mtd
16
17         mtd=$(find_mtd_part $part)
18         [ -z "$mtd" ] && return
19
20         dd if=$mtd bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
21 }
22
23 wndr3700_board_detect() {
24         local machine="$1"
25         local magic
26         local name
27
28         name="wndr3700"
29
30         magic="$(ar71xx_get_mtd_part_magic firmware)"
31         case $magic in
32         "33373030")
33                 machine="NETGEAR WNDR3700"
34                 ;;
35         "33373031")
36                 local mt
37
38                 mt=$(ar71xx_get_mem_total)
39                 if [ "$mt" -lt "65536" ]; then
40                         machine="NETGEAR WNDR3700v2"
41                 else
42                         machine="NETGEAR WNDR3800"
43                 fi
44                 ;;
45         esac
46
47         AR71XX_BOARD_NAME="$name"
48         AR71XX_MODEL="$machine"
49 }
50
51 tplink_get_hwid() {
52         local part
53         local hwid
54
55         part=$(find_mtd_part firmware)
56         [ -z "$part" ] && return 1
57
58         dd if=$part bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
59 }
60
61 ar71xx_board_detect() {
62         local machine
63         local name
64
65         machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo)
66
67         case "$machine" in
68         *"AirRouter")
69                 name="airrouter"
70                 ;;
71         *ALL0258N)
72                 name="all0258n"
73                 ;;
74         *AP121)
75                 name="ap121"
76                 ;;
77         *AP121-MINI)
78                 name="ap121-mini"
79                 ;;
80         *AP81)
81                 name="ap81"
82                 ;;
83         *AP83)
84                 name="ap83"
85                 ;;
86         *AP96)
87                 name="ap96"
88                 ;;
89         *AW-NR580)
90                 name="aw-nr580"
91                 ;;
92         *DB120)
93                 name="db120"
94                 ;;
95         *"DIR-600 rev. A1")
96                 name="dir-600-a1"
97                 ;;
98         *"DIR-825 rev. B1")
99                 name="dir-825-b1"
100                 ;;
101         *EAP7660D)
102                 name="eap7660d"
103                 ;;
104         *JA76PF)
105                 name="ja76pf"
106                 ;;
107         *"Bullet M")
108                 name="bullet-m"
109                 ;;
110         *"Nanostation M")
111                 name="nanostation-m"
112                 ;;
113         *JWAP003)
114                 name="jwap003"
115                 ;;
116         *LS-SR71)
117                 name="ls-sr71"
118                 ;;
119         *MZK-W04NU)
120                 name="mzk-w04nu"
121                 ;;
122         *MZK-W300NH)
123                 name="mzk-w300nh"
124                 ;;
125         *"NBG460N/550N/550NH")
126                 name="nbg460n_550n_550nh"
127                 ;;
128         *OM2P)
129                 name="om2p"
130                 ;;
131         *PB42)
132                 name="pb42"
133                 ;;
134         *PB44)
135                 name="pb44"
136                 ;;
137         *PB92)
138                 name="pb92"
139                 ;;
140         *"RouterBOARD 411/A/AH")
141                 name="rb-411"
142                 ;;
143         *"RouterBOARD 411U")
144                 name="rb-411u"
145                 ;;
146         *"RouterBOARD 433/AH")
147                 name="rb-433"
148                 ;;
149         *"RouterBOARD 433UAH")
150                 name="rb-433u"
151                 ;;
152         *"RouterBOARD 450")
153                 name="rb-450"
154                 ;;
155         *"RouterBOARD 450G")
156                 name="rb-450g"
157                 ;;
158         *"RouterBOARD 493/AH")
159                 name="rb-493"
160                 ;;
161         *"RouterBOARD 493G")
162                 name="rb-493g"
163                 ;;
164         *"RouterBOARD 750")
165                 name="rb-750"
166                 ;;
167         *"Rocket M")
168                 name="rocket-m"
169                 ;;
170         *RouterStation)
171                 name="routerstation"
172                 ;;
173         *"RouterStation Pro")
174                 name="routerstation-pro"
175                 ;;
176         *TEW-632BRP)
177                 name="tew-632brp"
178                 ;;
179         *TL-WR1043ND)
180                 name="tl-wr1043nd"
181                 ;;
182         *"DIR-615 rev. C1")
183                 name="dir-615-c1"
184                 ;;
185         *TL-MR3220)
186                 name="tl-mr3220"
187                 ;;
188         *TL-MR3420)
189                 name="tl-mr3420"
190                 ;;
191         *TL-WA901ND)
192                 name="tl-wa901nd"
193                 ;;
194         *"TL-WA901ND v2")
195                 name="tl-wa901nd-v2"
196                 ;;
197         *TL-WR741ND)
198                 name="tl-wr741nd"
199                 ;;
200         *"TL-WR741ND v4")
201                 name="tl-wr741nd-v4"
202                 ;;
203         *"TL-WR841N v1")
204                 name="tl-wr841n-v1"
205                 ;;
206         *TL-WR941ND)
207                 name="tl-wr941nd"
208                 ;;
209         *"TL-WR703N v1")
210                 name="tl-wr703n"
211                 ;;
212         *UniFi)
213                 name="unifi"
214                 ;;
215         *WHR-G301N)
216                 name="whr-g301n"
217                 ;;
218         *WHR-HP-GN)
219                 name="whr-hp-gn"
220                 ;;
221         *WP543)
222                 name="wp543"
223                 ;;
224         *"WNDR3700/WNDR3800")
225                 wndr3700_board_detect "$machine"
226                 ;;
227         *WNR2000)
228                 name="wnr2000"
229                 ;;
230         *WRT160NL)
231                 name="wrt160nl"
232                 ;;
233         *WRT400N)
234                 name="wrt400n"
235                 ;;
236         *WZR-HP-AG300H)
237                 name="wzr-hp-ag300h"
238                 ;;
239         *WZR-HP-G300NH)
240                 name="wzr-hp-g300nh"
241                 ;;
242         *WZR-HP-G450H)
243                 name="wzr-hp-g450h"
244                 ;;
245         *WHR-HP-G300N)
246                 name="whr-hp-g300n"
247                 ;;
248         *ZCN-1523H-2)
249                 name="zcn-1523h-2"
250                 ;;
251         *ZCN-1523H-5)
252                 name="zcn-1523h-5"
253                 ;;
254         esac
255
256         [ -z "$name" ] && name="unknown"
257
258         [ -z "$AR71XX_BOARD_NAME" ] && AR71XX_BOARD_NAME="$name"
259         [ -z "$AR71XX_MODEL" ] && AR71XX_MODEL="$machine"
260
261         [ -e "/tmp/sysinfo/" ] || mkdir -p "/tmp/sysinfo/"
262
263         echo "$AR71XX_BOARD_NAME" > /tmp/sysinfo/board_name
264         echo "$AR71XX_MODEL" > /tmp/sysinfo/model
265 }
266
267 ar71xx_board_name() {
268         local name
269
270         [ -f /tmp/sysinfo/board_name ] && name=$(cat /tmp/sysinfo/board_name)
271         [ -z "$name" ] && name="unknown"
272
273         echo "$name"
274 }