Browse Source

Add a script for automatic models-file generation

Michael Schwarz 5 years ago
parent
commit
4ad485ae62
5 changed files with 108 additions and 351 deletions
  1. 1 0
      .gitignore
  2. 0 27
      models-short.txt
  3. 0 311
      models.txt
  4. 107 0
      scripts/buildModels.py
  5. 0 13
      scripts/check-models.sh

+ 1 - 0
.gitignore

@@ -4,3 +4,4 @@
 */modules
 */packages
 */sysupgrade/*-sysupgrade.*
+models.json

+ 0 - 27
models-short.txt

@@ -1,27 +0,0 @@
-[TP-Link CPE210]
-V1.0=tp-link-cpe210-v1.0
-V1.1=tp-link-cpe210-v1.1
-
-[TP-Link TL-WR841n(d)]
-V9=tp-link-tl-wr841n-nd-v9
-V10=tp-link-tl-wr841n-nd-v10
-V11=tp-link-tl-wr841n-nd-v11
-V12=tp-link-tl-wr841n-nd-v12
-
-[TP-Link TL-WR1043n(d)]
-V2=tp-link-tl-wr1043n-nd-v2
-V3=tp-link-tl-wr1043n-nd-v3
-V4=tp-link-tl-wr1043n-nd-v4
-V5=tp-link-tl-wr1043n-v5
-
-[Ubiquiti Nanostation]
-Loco M2=ubiquiti-nanostation-loco-m2
-Loco M2-XW=ubiquiti-loco-m-xw
-
-[Ubiquiti Rocket]
-M2=ubiquiti-rocket-m2
-M2-XW=ubiquiti-rocket-m-xw
-
-[Ubiquiti Unifi]
-Unifi=ubiquiti-unifi
-AP Outdoor+=ubiquiti-unifiap-outdoor+

+ 0 - 311
models.txt

@@ -1,311 +0,0 @@
-[8devices]
-Carambola 2=8devices-carambola2-board
-
-[A5]
-V11=a5-v11
-
-[ALFA]
-AP121=alfa-network-ap121
-AP121U=alfa-network-ap121u
-Hornet-UB=alfa-network-hornet-ub
-N2=alfa-network-n2-n5
-Tube2H=alfa-network-tube2h
-
-[Allnet]
-all0315n=allnet-all0315n
-
-[Buffalo]
-WZR-600DHP=buffalo-wzr-600dhp
-WZR-HP-AG300H=buffalo-wzr-hp-ag300h
-WZR-HP-G300NH=buffalo-wzr-hp-g300nh
-WZR-HP-G300NH2=buffalo-wzr-hp-g300nh2
-WZR-HP-G450H=buffalo-wzr-hp-g450h
-
-[D-Link DIR-505]
-A1=d-link-dir-505-rev-a1
-A2=d-link-dir-505-rev-a2
-
-[D-Link DIR-615]
-C1=d-link-dir-615-rev-c1
-D1=d-link-dir-615-d1
-D2=d-link-dir-615-d2
-D3=d-link-dir-615-d3
-D4=d-link-dir-615-d4
-H1=d-link-dir-615-h1
-
-[D-Link DIR-860L]
-B1=d-link-dir-860l-b1
-
-[GL-Inet]
-6408A=gl-inet-6408a-v1
-6416A=gl-inet-6416a-v1
-
-[GL Innovations]
-GL-AR150=gl-ar150
-GL-AR300M=gl-ar300m
-GL-AR750=gl-ar750
-
-[Linksys]
-WRT160NL=linksys-wrt160nl
-
-[Netgear WNDR3700]
-V1=netgear-wndr3700
-V2=netgear-wndr3700v2
-V4=netgear-wndr3700v4
-
-[Netgear WNDR3800]
-V1=netgear-wndr3800
-
-[Netgear WNDR4300]
-V1=netgear-wndr4300
-
-[Netgear WNDRMAC]
-V2=netgear-wndrmacv2
-
-[Onion]
-Omega=onion-omega
-
-[OpenMesh MR600]
-V1=openmesh-mr600
-V2=openmesh-mr600v2
-
-[OpenMesh MR900]
-V1=openmesh-mr900
-V2=openmesh-mr900v2
-
-[OpenMesh MR1750]
-V1=openmesh-mr1750
-V2=openmesh-mr1750v2
-
-[OpenMesh OM2P]
-V1=openmesh-om2p
-V2=openmesh-om2pv2
-
-[OpenMesh OM2P-HS]
-V1=openmesh-om2p-hs
-V2=openmesh-om2p-hsv2
-V3=openmesh-om2p-hsv3
-
-[OpenMesh OM2P-LC]
-V1=openmesh-om2p-lc
-
-[OpenMesh OM5P-AC]
-V1=openmesh-om5p-an
-
-[OpenMesh OM5P-AC]
-V1=openmesh-om5p-ac
-V2=openmesh-om5p-acv2
-
-[Raspberry PI]
-V1=raspberry-pi
-V2=raspberry-pi-2
-
-[TP-Link ArcherC5]
-C5v1=tp-link-archer-c5-v1
-C7v2=tp-link-archer-c7-v2
-C7v4=tp-link-archer-c7-v4
-C7v5=tp-link-archer-c7-v5
-C59v1=tp-link-archer-c59-v1
-
-[TP-Link CPE210]
-V1.0=tp-link-cpe210-v1.0
-V1.1=tp-link-cpe210-v1.1
-V2=tp-link-cpe210-v2.0
-
-[TP-Link CPE220]
-V1.1=tp-link-cpe220-v1.1
-
-[TP-Link RE450]
-RE450=tp-link-re450
-
-[TP-Link TL-MR13U]
-V1=tp-link-tl-mr13u-v1
-
-[TP-Link TL-MR3020]
-V1=tp-link-tl-mr3020-v1
-
-[TP-Link TL-MR3040]
-V1=tp-link-tl-mr3040-v1
-V2=tp-link-tl-mr3040-v2
-
-[TP-Link TL-MR3220]
-V1=tp-link-tl-mr3220-v1
-V2=tp-link-tl-mr3220-v2
-
-[TP-Link TL-MR3420]
-V1=tp-link-tl-mr3420-v1
-V2=tp-link-tl-mr3420-v2
-
-[TP-Link TL-WA701N]
-V1=tp-link-tl-wa701n-nd-v1
-V2=tp-link-tl-wa701n-nd-v2
-
-[TP-Link TL-WA730RE]
-V1=tp-link-tl-wa730re-v1
-
-[TP-Link TL-WA750RE]
-V1=tp-link-tl-wa750re-v1
-
-[TP-Link TL-WA801n(d)]
-V1=tp-link-tl-wa801n-nd-v1
-V2=tp-link-tl-wa801n-nd-v2
-V3=tp-link-tl-wa801n-nd-v3
-
-[TP-Link TL-WA810n]
-V1=tp-link-tl-wa810n-v1
-
-[TP-Link TL-WA830RE]
-V1=tp-link-tl-wa830re-v1
-V2=tp-link-tl-wa830re-v2
-
-[TP-Link TL-WA850RE]
-V1=tp-link-tl-wa850re-v1
-
-[TP-Link TL-WA860RE]
-V1=tp-link-tl-wa860re-v1
-
-[TP-Link TL-WA901n(d)]
-V1=tp-link-tl-wa901n-nd-v1
-V2=tp-link-tl-wa901n-nd-v2
-V3=tp-link-tl-wa901n-nd-v3
-V4=tp-link-tl-wa901n-nd-v4
-V5=tp-link-tl-wa901n-nd-v5
-
-[TP-Link TL-WA7210N]
-V2=tp-link-tl-wa7210n-v2
-
-[TP-Link TL-WA7510N]
-V1=tp-link-tl-wa7510n-v1
-
-[TP-Link TL-WDR3500]
-V1=tp-link-tl-wdr3500-v1
-
-[TP-Link TL-WDR3600]
-V1=tp-link-tl-wdr3600-v1
-
-[TP-Link TL-WDR4300]
-V1=tp-link-tl-wdr4300-v1
-
-[TP-Link TL-WDR4900]
-V1=tp-link-tl-wdr4900-v1
-
-[TP-Link TL-WR703n]
-V1=tp-link-tl-wr703n-v1
-
-[TP-Link TL-WR710n]
-V1=tp-link-tl-wr710n-v1
-V2=tp-link-tl-wr710n-v2
-V2.1=tp-link-tl-wr710n-v2.1
-
-[TP-Link TL-WR740n(d)]
-V1=tp-link-tl-wr740n-nd-v1
-V3=tp-link-tl-wr740n-nd-v3
-V4=tp-link-tl-wr740n-nd-v4
-V5=tp-link-tl-wr740n-nd-v5
-
-[TP-Link TL-WR741n(d)]
-V1=tp-link-tl-wr741n-nd-v1
-V2=tp-link-tl-wr741n-nd-v2
-V4=tp-link-tl-wr741n-nd-v4
-V5=tp-link-tl-wr741n-nd-v5
-
-[TP-Link TL-WR743n]
-V1=tp-link-tl-wr743n-nd-v1
-V2=tp-link-tl-wr743n-nd-v2
-
-[TP-Link TL-WR841n(d)]
-V3=tp-link-tl-wr841n-nd-v3
-V5=tp-link-tl-wr841n-nd-v5
-V7=tp-link-tl-wr841n-nd-v7
-V8=tp-link-tl-wr841n-nd-v8
-V9=tp-link-tl-wr841n-nd-v9
-V10=tp-link-tl-wr841n-nd-v10
-V11=tp-link-tl-wr841n-nd-v11
-V12=tp-link-tl-wr841n-nd-v12
-
-[TP-Link TL-WR842n(d)]
-V1=tp-link-tl-wr842n-nd-v1
-V2=tp-link-tl-wr842n-nd-v2
-V3=tp-link-tl-wr842n-nd-v3
-
-[TP-Link TL-WR843n(d)]
-V1=tp-link-tl-wr843n-nd-v1
-
-[TP-Link TL-WR940n(d)]
-V1=tp-link-tl-wr940n-v1
-V2=tp-link-tl-wr940n-v2
-V3=tp-link-tl-wr940n-v3
-V4=tp-link-tl-wr940n-v4
-V5=tp-link-tl-wr940n-v5
-V6=tp-link-tl-wr940n-v6
-
-[TP-Link TL-WR941n(d)]
-V2=tp-link-tl-wr941n-nd-v2
-V3=tp-link-tl-wr941n-nd-v3
-V4=tp-link-tl-wr941n-nd-v4
-V5=tp-link-tl-wr941n-nd-v5
-V6=tp-link-tl-wr941n-nd-v6
-
-[TP-Link TL-WR1043n(d)]
-V1=tp-link-tl-wr1043n-nd-v1
-V2=tp-link-tl-wr1043n-nd-v2
-V3=tp-link-tl-wr1043n-nd-v3
-V4=tp-link-tl-wr1043n-nd-v4
-V5=tp-link-tl-wr1043n-v5
-
-[TP-Link TL-WR2543n(d)]
-V1=tp-link-tl-wr2543n-nd-v1
-
-[TP-Link WBS210]
-V1.2=tp-link-wbs210-v1.20
-
-[Ubiquiti AirMax]
-airGateway=ubiquiti-airgateway
-airGateway-LR=ubiquiti-airgateway-lr
-airGateway-Pro=ubiquiti-airgateway-pro
-airRouter=ubiquiti-airrouter
-
-[Ubiquiti Bullet]
-Bullet=ubiquiti-bullet-m
-M2=ubiquiti-bullet-m2
-
-[Ubiquiti Loco]
-Loco M XW=ubiquiti-loco-m-xw
-
-[Ubiquiti Nanostation]
-Loco M2=ubiquiti-nanostation-loco-m2
-Loco M2-XW=ubiquiti-nanostation-loco-m2-xw
-M2=ubiquiti-nanostation-m2
-M-XW=ubiquiti-nanostation-m-xw
-M2-XW=ubiquiti-nanostation-m2-xw
-
-[Ubiquiti Picostation]
-M2=ubiquiti-picostation-m2
-
-[Ubiquiti Rocket]
-M-TI=ubiquiti-rocket-m-ti
-M-XW=ubiquiti-rocket-m-xw
-M2=ubiquiti-rocket-m2
-M2-TI=ubiquiti-rocket-m2-ti
-M2-XW=ubiquiti-rocket-m2-xw
-
-[Ubiquiti Unifi]
-Unifi=ubiquiti-unifi
-AP Pro=ubiquiti-unifi-ap-pro
-AP Outdoor=ubiquiti-unifiap-outdoor
-AP Outdoor+=ubiquiti-unifiap-outdoor+
-AP LR=ubiquiti-unifi-ap-lr
-
-[Ubiquiti Unifi AC]
-AC Lite=ubiquiti-unifi-ac-lite
-AC Mesh=ubiquiti-unifi-ac-mesh
-AC Mesh Pro=ubiquiti-unifi-ac-mesh-pro
-AC Pro=ubiquiti-unifi-ac-pro
-
-[Ubiquiti Edgerouter]
-ERX=ubnt-erx
-ERX-SFP=ubnt-erx-sfp
-
-[Western Digital]
-My Net N600=wd-my-net-n600
-My Net N750=wd-my-net-n750

+ 107 - 0
scripts/buildModels.py

@@ -0,0 +1,107 @@
+#!/usr/bin/python
+#
+
+import argparse
+import json
+import os
+import re
+
+# Some Data
+PREFIX = "gluon-ffho"
+VENDORS = {
+    '8devices' : '8 Devices',
+    'a5' : 'A5',
+    'alfa-network' : 'Alfa Network',
+    'allnet' : 'Allnet',
+    'avm' : 'AVM',
+    'buffalo' : 'Buffalo',
+    'd-link' : 'D-Link',
+    'gl' : 'GL',
+    'gl-inet' : 'GL.Inet',
+    'lemarker' : 'Lemarker',
+    'linksys' : 'Linksys',
+    'netgear' : 'Netgear',
+    'ocedo' : 'Ocedo',
+    'onion' : 'Onion',
+    'openmesh' : 'Openmesh',
+    'raspberri-pi' : 'Raspberri Pi',
+    'tp-link' : 'TP-Link',
+    'ubiquiti' : 'Ubiquiti',
+    'ubnt' : 'UBNT',
+    'vocore' : 'Vocore',
+    'wd-my-net' : 'WD My Net',
+    'x86' : 'x86',
+    'zbt' : 'ZBT',
+    'zyxel' : 'Zyxel'
+}
+
+def longestPrefixKeyMatch(string, dictionary):
+    maxlen = 0
+    retval = None
+    for key in dictionary:
+        if string.startswith(key):
+            if len(key) > maxlen:
+                maxlen = len(key)
+                retval = key
+    return retval
+
+def findFiles(directory):
+    retval = []
+    searchpath = directory + "/sysupgrade/"
+    factory = directory + "/factory/"
+    pattern = PREFIX + "-(([0-9]+\.?)+)-(.+)-sysupgrade\.([a-z\.]+)"
+    for f in os.listdir(searchpath):
+        m = re.search(pattern, f)
+        if m:
+            # extract info from filename
+            firmware = m.group(3)
+            imageversion = m.group(1)
+            imagetype = m.group(4)
+
+            vendor = 'Unknown'
+            model = 'Unknown'
+            vendor_key = longestPrefixKeyMatch(firmware, VENDORS)
+            if vendor_key:
+                vendor = VENDORS[vendor_key]
+                n = re.search(vendor_key + "-(.+)$", firmware)
+                if n: 
+                    model = n.group(1)
+
+            has_factory = False
+            if os.path.isfile(factory + PREFIX + "-" + imageversion + "-" + firmware + "." + imagetype):
+                has_factory = True
+
+            retval.append({'firmware' : firmware, 
+                'imagetype' : imagetype, 
+                'imageversion' : imageversion, 
+                'vendor' : vendor,
+                'model' : model,
+                'factory' : has_factory
+                })
+
+    return retval
+
+def buildDictForJSON(data):
+    retval = {}
+    for vendor in VENDORS:
+        retval[VENDORS[vendor]] = {}
+        for entry in data:
+            if entry['vendor'] == VENDORS[vendor]:
+                retval[VENDORS[vendor]][entry['model']] = entry
+    return retval
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(description='Build models.json file.')
+    parser.add_argument('directory', help='Directory where the firmware files are')
+    parser.add_argument('outputfile', help='Write output to file', nargs='?')
+
+    args = parser.parse_args()
+    files = findFiles(args.directory)
+    data = buildDictForJSON(files)
+
+    if args.outputfile:
+        with open(args.outputfile, "w") as fd:
+            json.dump(data, fd, sort_keys=True)
+    else:
+        print json.dumps(data, sort_keys=True)

+ 0 - 13
scripts/check-models.sh

@@ -1,13 +0,0 @@
-#!/bin/bash
-for file in ${BASE_DIR}/${VERSION}/factory/* ${BASE_DIR}/${VERSION}/sysupgrade/* ; do
-	MODEL=$(echo ${file} | \
-		awk -F'/' '{print $NF}' | \
-		sed -e 's;gluon-ffho-[\.~[:alnum:]]\+-\([-\.+[:alnum:]]\+\)\(\.[[:alpha:]]\+\)\+;\1;' \
-			-e 's/-sysupgrade//' \
-			-e 's/.img//')
-
-	grep ${MODEL} ${BASE_DIR}/models.txt > /dev/null
-	if [ $? != 0 ] ; then
-		echo ${MODEL}
-	fi
-done