Initial OpenWRT 23.05.0 merge (#963)

* Initial OpenWRT 23.05.0 merge

* Fix get_rfchannels for new iwinfo format

* Fix initial wlan name

* Move patches to 5.15 from 5.10

* Fix flash write problem on Ubiquiti devices

* Use new ssl patch

* Reduce binary sizes

* Have to have hostapd installed now, even on tiny builds

* Simplify device support

* Revert Mikrotik NAND sysupgrade system.
OpenWRT doesnt really support Mikrotik NAND devices after 2019 and the
new support appeared broken. So reverted to the 2022 mechanism which does
work and avoid upgrade problems.

* Fixes for tiny builds

* More tiny shrinking

* Fix newly added firewall rules

* Update permanent packages

* Update permanent packages

* Support for Nanobeam 2AC (2.4GHz) device. 20MHz channels only.

* Update support

* Add GL.iNet B1300

* Add to radios.json

* Update supported devices

* Dont force the LAN DHCP to run

* Revert CURL SSL test

* Fix radio count when there are no radios

* Switch the lan ports on the gl-b1300

* Add support for GL.iNET Beryl MT1300

* Fix visual lat/lon setting bug

* Make the setup "Save Changes" button also save the location data

* Fix location/map system with geo location fallback

* Recolor

* Fix default bandwidth selection

* Support multi-band radios

* Generic mechanism to set compat version to 1.1

* Switch ethernet ports

* 20 MHz channels only

* Update docs

* Add ham channels to Mediatek chips (20MHz only)

* Automatically update the permpkg list when we upgrade

* Fix 10MHz mode for Ubiquiti AC devices

* Fix tiny builds

* Bump the watch timeout for restarting olsrd
olsrd is reliable these days, and very occasionally this
was restarting it unnecessarily
This commit is contained in:
Tim Wilkinson 2023-12-06 10:12:11 -08:00 committed by GitHub
parent f4878471e0
commit 475f371bb8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
63 changed files with 1227 additions and 20089 deletions

View File

@ -79,14 +79,22 @@ jobs:
name: Build ath79/nand
command: make MAINTARGET=ath79 SUBTARGET=nand
no_output_timeout: 1h
- run:
name: Build ipq40xx/generic
command: make MAINTARGET=ipq40xx SUBTARGET=generic
no_output_timeout: 2h
- run:
name: Build ipq40xx/mikrotik
command: make MAINTARGET=ipq40xx SUBTARGET=mikrotik
no_output_timeout: 2h
no_output_timeout: 1h
- run:
name: Build x64/64
command: make MAINTARGET=x86 SUBTARGET=64
no_output_timeout: 2h
- run:
name: Build ramips/mt7621
command: make MAINTARGET=ipq40xx SUBTARGET=mt7621
no_output_timeout: 2h
- run:
name: Compress build files
command: tar -cjf ~/${CIRCLE_BRANCH}_${ARTIFACTS_FILE} -C ${MY_WORKING_DIRECTORY}/${ARTIFACTS_DIR} .
@ -126,14 +134,22 @@ jobs:
name: Build ath79/nand
command: make MAINTARGET=ath79 SUBTARGET=nand
no_output_timeout: 1h
- run:
name: Build ipq40xx/generic
command: make MAINTARGET=ipq40xx SUBTARGET=generic
no_output_timeout: 2h
- run:
name: Build ipq40xx/mikrotik
command: make MAINTARGET=ipq40xx SUBTARGET=mikrotik
no_output_timeout: 2h
no_output_timeout: 1h
- run:
name: Build x64/64
command: make MAINTARGET=x86 SUBTARGET=64
no_output_timeout: 2h
- run:
name: Build ramips/mt7621
command: make MAINTARGET=ipq40xx SUBTARGET=mt7621
no_output_timeout: 2h
- run:
name: Compress build files
command: tar -cjf ~/${CIRCLE_BRANCH}_${ARTIFACTS_FILE} -C ${MY_WORKING_DIRECTORY}/${ARTIFACTS_DIR} .

View File

@ -96,7 +96,7 @@ feeds-update: stamp-clean-feeds-updated .stamp-feeds-updated
cd $(OPENWRT_DIR); ./scripts/feeds install curl
cd $(OPENWRT_DIR); ./scripts/feeds install ntpclient
cd $(OPENWRT_DIR); ./scripts/feeds install socat
cd $(OPENWRT_DIR); ./scripts/feeds install luci-base
cd $(OPENWRT_DIR); ./scripts/feeds install luci-lib-base
cd $(OPENWRT_DIR); ./scripts/feeds install luci-lib-nixio
cd $(OPENWRT_DIR); ./scripts/feeds install luci-lib-ip
cd $(OPENWRT_DIR); ./scripts/feeds install luci-lib-jsonc

View File

@ -15,9 +15,9 @@ The 'target' and 'subtarget' identify the directory in which to find the image o
## Mikrotik
Model | SKUs | Band | Target | Subtarget | Image | RAM | Stability | Status
:------ | :----: | :----: | :------: | :---------: | :-----: | :---: | :---------: | :------
hAP ac lite <br> hAP ac lite TC | RB952Ui-5ac2nD <br> RB952Ui-5ac2nD-TC | 2 | ath79 | mikrotik | mikrotik-952ui-5ac2nd | 64MB | stable | released
hAP ac² | RBD52G-5HacD2HnD-TC | 2 | ipq40xx | mikrotik | mikrotik_hap-ac2 | 128MB | stable | released
hAP ac³ | RBD53iG-5HacD2HnD | 2 | ipq40xx | mikrotik | mikrotik_hap-ac3 | 256MB | stable | released
hAP ac lite <br> hAP ac lite TC | RB952Ui-5ac2nD <br> RB952Ui-5ac2nD-TC | 2 & 5 | ath79 | mikrotik | mikrotik-952ui-5ac2nd | 64MB | stable | released
hAP ac² | RBD52G-5HacD2HnD-TC | 2 & 5 | ipq40xx | mikrotik | mikrotik_hap-ac2 | 128MB | stable | released
hAP ac³ | RBD53iG-5HacD2HnD | 2 & 5 | ipq40xx | mikrotik | mikrotik_hap-ac3 | 256MB | stable | released
SXTsq Lite2 | RBSXTsq2nD | 2 | ath79 | mikrotik | mikrotik-sxt-2nd | 64MB | stable | released
SXTsq Lite5 | RBSXTsq5nD | 5 | ath79 | mikrotik | mikrotik-sxt-5nd | 64MB | stable | released
SXTsq 5 High Power | RBSXTsq5HPnD | 5 | ath79 | mikrotik | mikrotik-sxt-5hpnd | 64MB | stable | released
@ -47,6 +47,7 @@ Bullet M2 XW || 2 | ath79 | generic | ubnt_bullet-m-xw | 64MB | untested | relea
LiteAP 5AC | LAP-120 <br> LAP-120-US <br> LBE-5AC-16-120 <br> LBE-5AC-16-120-US | 5 | ath79 | generic | ubnt_lap-120 | 64MB | stable | released
LiteBeam AC5 Gen2 | LBE-5AC <br> LBE-5AC-US | 5 | ath79 | generic | ubnt_litebeam-ac-gen2 | 64MB | stable | released
LiteBeam M5 || 5 | ath79 | - | - | 64MB | untested | released
NanoBeam 2AC 13 (2WA) || 2 | ath79 | generic | ubnt_nanobeam-2ac-13 | 64MB | stable | nightly
NanoBeam AC 5 (WA) || 5 | ath79 | generic | ubnt_nanobeam-ac | 64MB | untested | released
NanoBeam AC 5 (XC) || 5 | ath79 | generic | ubnt_nanobeam-ac-xc | 64MB | stable | released
NanoBeam AC 5 Gen 2 (WA) || 5 | ath79 | generic | ubnt_nanobeam-ac-gen2 | 128MB | stable | released
@ -131,6 +132,8 @@ Model | SKUs | Band | Target | Subtarget | Image | RAM | Stability | Status
Shadow (16MB NOR) | GL-AR300M16 <br> GL-AR300M16-Ext | 2 | ath79 | generic | glinet_gl-ar300m16 | 64MB | stable | released
Shadow (128MB NAND) | GL-AR300M <br> GL-AR300M-Ext | 2 | ath79 | nand | gl-ar300m | 64MB | untested | released
Mudi | GL-E750 | 2 | ath79 | nand | gl-e750 | 128MB | untested | released
Convexa-B | GL-B1300 | 2 & 5 | ipq40xx | generic | gl-b1300 | 256MB | untested | nightly
Beryl | GL-MT1300 | 2 & 5 | ramips | mt7621 | gl-mt1300 | 256MB | untested | nightly (4)
**Sunset Devices** | | | | | | | |
White | GL-AR150 | 2 | ath79 | generic | glinet_gl-ar150 | 64MB | stable | sunset (3)
Microuter | GL-USB150 | 2 | ath79 | generic | glinet_gl-usb150 | 64MB | stable | sunset (3)
@ -146,6 +149,7 @@ Meraki MR-16 | MR16-HW | 5 | ath79 | - | - | 64MB | unsupported | **brick**
1. This device is supported for new installs. It can also be upgraded from 3.22.12.0 after first installing the [DangerousUpgrade package](https://github.com/kn6plv/DangerousUpgrade/raw/main/dangerousupgrade_0.1_all.ipk) to disable the firmware compatibility checks. Proceed carefully.
2. Tiny builds exclude support for *tunnels* and *WiFi AP* mode due to lack of resources. The relevant packages can be installed separately but this is not recommended.
3. These devices are no longer being manufactured by GL-iNET. They may not reboot reliably and you may need to power cycle them (several times) during an update.
4. 20MHz channels only.
Latest installation instructions are found at: https://docs.arednmesh.org/en/latest/

View File

@ -20,11 +20,11 @@ CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_tplink_wbs210-v1=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_tplink_wbs210-v2=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_tplink_wbs510-v1=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_tplink_wbs510-v2=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_ubnt_bullet-m-xw=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_ubnt_bullet-ac=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_ubnt_bullet-m-xw=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_ubnt_lap-120=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_ubnt_litebeam-ac-gen2=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_ubnt_nanobeam-2ac-13=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_ubnt_nanobeam-ac-gen2=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_ubnt_nanobeam-ac=y
CONFIG_TARGET_DEVICE_ath79_generic_DEVICE_ubnt_nanobeam-ac-xc=y

View File

@ -11,9 +11,11 @@ CONFIG_TARGET_DEVICE_ath79_tiny_DEVICE_ubnt_picostation-m=y
CONFIG_KERNEL_CC_STACKPROTECTOR_NONE=y
CONFIG_KERNEL_PRINTK=n
CONFIG_PACKAGE_ATH_SPECTRAL=n
CONFIG_PACKAGE_wpad-mini=m
CONFIG_PACKAGE_vtun=m
CONFIG_PACKAGE_ethtool=m
CONFIG_PACKAGE_iperf3=m
CONFIG_PACKAGE_libustream-mbedtls=m
CONFIG_PACKAGE_vtun=m
CONFIG_PACKAGE_wireguard=m
CONFIG_PACKAGE_wireguard-tools=m
CONFIG_PKG_CC_STACKPROTECTOR_NONE=y
CONFIG_PKG_FORTIFY_SOURCE_NONE=y

View File

@ -115,7 +115,6 @@ CONFIG_PACKAGE_lua-bit32=y
CONFIG_PACKAGE_luaposix=n
CONFIG_PACKAGE_luasocket=y
CONFIG_PACKAGE_lua=y
CONFIG_PACKAGE_luci-base=n
CONFIG_PACKAGE_luci-lib-base=y
CONFIG_PACKAGE_luci-lib-ip=y
CONFIG_PACKAGE_luci-lib-jsonc=y
@ -157,6 +156,8 @@ CONFIG_PACKAGE_wpad-mini=y
CONFIG_PACKAGE_xinetd=n
CONFIG_PACKAGE_zlib=m
CONFIG_PACKAGE_zram-swap=n
CONFIG_PKG_ASLR_PIE_NONE=y
CONFIG_PKG_RELRO_NONE=y
CONFIG_PREINITOPT=y
CONFIG_SECCOMP=n
CONFIG_STRIP_KERNEL_EXPORTS=y

3
configs/ipq40xx-generic.config Executable file
View File

@ -0,0 +1,3 @@
CONFIG_TARGET_ipq40xx=y
CONFIG_TARGET_ipq40xx_generic=y
CONFIG_TARGET_DEVICE_ipq40xx_generic_DEVICE_glinet_gl-b1300=y

3
configs/ramips-mt7621.config Executable file
View File

@ -0,0 +1,3 @@
CONFIG_TARGET_ramips=y
CONFIG_TARGET_ramips_mt7621=y
CONFIG_TARGET_DEVICE_ramips_mt7621_DEVICE_glinet_gl-mt1300=y

View File

@ -1 +1 @@
src-git arednpackages https://github.com/aredn/aredn_packages;develop
src-git arednpackages https://github.com/kn6plv/aredn_packages;working

View File

@ -1,3 +1,7 @@
#### Globals
config globals 'globals'
option packet_steering '1'
#### Loopback configuration
config interface loopback
option device "lo"

View File

@ -3,6 +3,7 @@ config dhcp
option start 5
option limit 20
option leasetime 12h
option force 1
config dhcp
option interface wan

View File

@ -1 +1 @@
KN6PLV-lz77decompression-d708f8c
KN6PLV-main-cdeb1b1d

View File

@ -4,6 +4,7 @@ ath10k-firmware-qca4019-ct
ath10k-firmware-qca9887-ct
ath10k-firmware-qca988x-ct
base-files
bnx2-firmware
busybox
ca-bundle
curl
@ -14,6 +15,9 @@ firewall4
fstools
fwtool
getrandom
grub2
grub2-bios-setup
grub2-efi
hostapd-common
iperf3
iw
@ -22,12 +26,17 @@ jansson4
jshn
jsonfilter
kernel
kmod-amazon-ena
kmod-amd-xgbe
kmod-ath
kmod-ath10k-ct
kmod-ath10k-ct-smallbuffers
kmod-ath9k
kmod-ath9k-common
kmod-bnx2
kmod-button-hotplug
kmod-cfg80211
kmod-crypto-acompress
kmod-crypto-aead
kmod-crypto-ccm
kmod-crypto-cmac
@ -43,42 +52,72 @@ kmod-crypto-null
kmod-crypto-rng
kmod-crypto-seqiv
kmod-crypto-sha256
kmod-crypto-sha512
kmod-e1000
kmod-e1000e
kmod-forcedeth
kmod-fs-vfat
kmod-gpio-button-hotplug
kmod-hwmon-core
kmod-i2c-algo-bit
kmod-i2c-core
kmod-igb
kmod-igc
kmod-input-core
kmod-ipip
kmod-iptunnel
kmod-iptunnel4
kmod-ixgbe
kmod-leds-gpio
kmod-ledtrig-gpio
kmod-lib-crc32c
kmod-lib-lzo
kmod-libphy
kmod-mac80211
kmod-mdio
kmod-mdio-devres
kmod-mii
kmod-nf-conntrack
kmod-nf-flow
kmod-nf-log
kmod-nf-nat
kmod-nf-reject
kmod-nfnetlink
kmod-nf-reject
kmod-nft-core
kmod-nft-fib
kmod-nft-nat
kmod-nft-offload
kmod-nls-base
kmod-nls-cp437
kmod-nls-iso8859-1
kmod-nls-utf8
kmod-phy-realtek
kmod-pps
kmod-ptp
kmod-r8169
kmod-tg3
kmod-tun
kmod-usb-core
kmod-usb-dwc3
kmod-usb-dwc3-qcom
libblkid1
libblobmsg-json20220515
libblobmsg-json20230523
libc
libcurl4
libf2fs6
libgcc1
libiperf3
libiwinfo20210430
libiwinfo20230701
libiwinfo-data
libiwinfo-lua
libiwinfo20210430
libjson-c5
libjson-script20220515
libjson-script20230523
liblua5.1.5
liblucihttp-lua
liblucihttp0
liblucihttp-lua
liblzo2
libmbedtls12
libmnl0
@ -86,13 +125,18 @@ libnftnl11
libnl-tiny1
libpthread
librt
libsmartcols1
libubox20220515
libubus-lua
libubox20230523
libubus20220601
libuci-lua
libubus20230605
libubus-lua
libuci20130104
libuci-lua
libuclient20201210
libucode20220812
libustream-mbedtls20201210
libuuid1
libxtables12
logd
lua
@ -101,6 +145,7 @@ luci-lib-base
luci-lib-ip
luci-lib-jsonc
luci-lib-nixio
mkf2fs
mtd
netifd
nftables-json
@ -114,8 +159,10 @@ olsrd-mod-txtinfo
olsrd-mod-watchdog
openwrt-keyring
opkg
partx-utils
procd
prometheus-exporter
r8169-firmware
rpcd
rpcd-mod-file
rpcd-mod-luci
@ -130,8 +177,11 @@ uci
uclient-fetch
ucode
ucode-mod-fs
ucode-mod-nl80211
ucode-mod-rtnl
ucode-mod-ubus
ucode-mod-uci
ucode-mod-uloop
uhttpd
urandom-seed
urngd

View File

@ -20,6 +20,16 @@
"gl.inet gl-ar750s (nor/nand)": {
"maxpower": "23"
},
"gl.inet gl-b1300": {
},
"gl.inet gl-mt1300": {
"wlan0": {
"bandwidths": [ 20 ]
},
"wlan1": {
"bandwidths": [ 20 ]
}
},
"tp-link cpe210 v1": {
"maxpower": "23",
"chanpower": {
@ -555,6 +565,14 @@
"maxpower": "22",
"pwroffset": "4"
},
"0xe4f2": {
"name": "Ubiquiti NanoBeam 2AC 13 (2WA)",
"wlan0": {
"bandwidths": [ 10, 20 ],
"maxpower": 21,
"pwroffset": 6
}
},
"0xe4f5": {
"name": "Ubiquiti NanoBeam AC (XC)",
"maxpower": "23",

View File

@ -1,15 +1,8 @@
#! /bin/sh
case "$(/usr/local/bin/get_boardid)" in
MikroTik\ hAP\ ac2|\
MikroTik\ hAP\ ac3|\
MikroTik\ SXTsq\ 5\ ac*|\
MikroTik\ LDF\ 5\ ac*|\
MikroTik\ LHG\ 5\ ac*)
sed -i "s/^compat_version = 1.0/compat_version = 1.1/" /etc/config.mesh/_setup
sed -i "s/^compat_version = 1.0/compat_version = 1.1/" /etc/config.mesh/_setup.default
/sbin/uci -q set system.@system[0].compat_version=1.1
/sbin/uci -q commit system
;;
*)
;;
esac
VER=$(jsonfilter -e '@.system.compat_version' < /etc/board.json)
if [ "${VER}" != "" ]; then
sed -i "s/^compat_version = 1.0/compat_version = ${VER}/" /etc/config.mesh/_setup
sed -i "s/^compat_version = 1.0/compat_version = ${VER}/" /etc/config.mesh/_setup.default
uci -q set system.@system[0].compat_version=${VER}
uci -q commit system
fi

View File

@ -0,0 +1,4 @@
#! /bin/sh
# Update the permanent package list so we can't uninstall any of the standard system
opkg list-installed | sed s/\ .*// > /etc/permpkg

View File

@ -71,6 +71,28 @@ function hardware.get_radio()
return radio_json
end
function hardware.get_radio_count()
local radio = hardware.get_radio()
if not radio then
return 0
elseif radio.wlan0 then
if radio.wlan1 then
return 2
else
return 1
end
else
local count = 0
if nixio.fs.stat("/sys/class/ieee80211") then
for file in nixio.fs.dir("/sys/class/ieee80211")
do
count = count + 1
end
end
return count
end
end
function hardware.get_radio_intf(wifiintf)
local radio = hardware.get_radio()
if radio and radio[wifiintf] then
@ -277,19 +299,25 @@ function hardware.get_default_channel(wifiintf)
for _, channel in ipairs(hardware.get_rfchannels(wifiintf))
do
if channel.frequency == 912 then
return { channel = 5, bandwidth = 5, rfband = "900MHz" }
return { channel = 5, bandwidth = 5, band = "900MHz" }
end
local bws = {}
for _, v in ipairs(hardware.get_rfbandwidths(wifiintf))
do
bws[v] = v
end
local bw = bws[10] or bws[20] or bws[5] or 0
if channel.frequency == 2397 then
return { channel = -2, bandwidth = 10, rfband = "2.4GHz" }
return { channel = -2, bandwidth = bw, band = "2.4GHz" }
end
if channel.frequency == 2412 then
return { channel = 1, bandwidth = 10, rfband = "2.4GHz" }
return { channel = 1, bandwidth = bw, band = "2.4GHz" }
end
if channel.frequency == 3420 then
return { channel = 84, bandwidth = 10, rfband = "3GHz" }
return { channel = 84, bandwidth = bw, band = "3GHz" }
end
if channel.frequency == 5745 then
return { channel = 149, bandwidth = 10, rfband = "5GHz" }
return { channel = 149, bandwidth = bw, band = "5GHz" }
end
end
return nil
@ -320,7 +348,7 @@ function hardware.get_rfchannels(wifiintf)
end
for line in f:lines()
do
local freq, num = line:match("(%d+%.%d+) GHz %(Channel (%-?%d+)%)")
local freq, num = line:match("(%d+%.%d+) GHz %(Band: .*, Channel (%-?%d+)%)")
if freq and not line:match("restricted") and not line:match("disabled") then
freq = tonumber("" .. freq:gsub("%.", "")) + freq_adjust
if freq >= freq_min and freq <= freq_max then

View File

@ -37,7 +37,7 @@
local nxo = require("nixio")
local ipc = require("luci.ip")
require("luci.http")
require('luci.ohttp')
require("uci")
function round2(num, idp)

554
files/usr/lib/lua/luci/ohttp.lua Executable file
View File

@ -0,0 +1,554 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2010-2018 Jo-Philipp Wich <jo@mein.io>
-- Licensed to the public under the Apache License 2.0.
local util = require "luci.util"
local coroutine = require "coroutine"
local table = require "table"
local lhttp = require "lucihttp"
local nixio = require "nixio"
local ltn12 = require "luci.ltn12"
local table, ipairs, pairs, type, tostring, tonumber, error =
table, ipairs, pairs, type, tostring, tonumber, error
module "luci.http"
HTTP_MAX_CONTENT = 1024*100 -- 100 kB maximum content size
context = util.threadlocal()
Request = util.class()
function Request.__init__(self, env, sourcein, sinkerr)
self.input = sourcein
self.error = sinkerr
-- File handler nil by default to let .content() work
self.filehandler = nil
-- HTTP-Message table
self.message = {
env = env,
headers = {},
params = urldecode_params(env.QUERY_STRING or ""),
}
self.parsed_input = false
end
function Request.formvalue(self, name, noparse)
if not noparse and not self.parsed_input then
self:_parse_input()
end
if name then
return self.message.params[name]
else
return self.message.params
end
end
function Request.formvaluetable(self, prefix)
local vals = {}
prefix = prefix and prefix .. "." or "."
if not self.parsed_input then
self:_parse_input()
end
local void = self.message.params[nil]
for k, v in pairs(self.message.params) do
if k:find(prefix, 1, true) == 1 then
vals[k:sub(#prefix + 1)] = tostring(v)
end
end
return vals
end
function Request.content(self)
if not self.parsed_input then
self:_parse_input()
end
return self.message.content, self.message.content_length
end
function Request.getcookie(self, name)
return lhttp.header_attribute("cookie; " .. (self:getenv("HTTP_COOKIE") or ""), name)
end
function Request.getenv(self, name)
if name then
return self.message.env[name]
else
return self.message.env
end
end
function Request.setfilehandler(self, callback)
self.filehandler = callback
if not self.parsed_input then
return
end
-- If input has already been parsed then uploads are stored as unlinked
-- temporary files pointed to by open file handles in the parameter
-- value table. Loop all params, and invoke the file callback for any
-- param with an open file handle.
local name, value
for name, value in pairs(self.message.params) do
if type(value) == "table" then
while value.fd do
local data = value.fd:read(1024)
local eof = (not data or data == "")
callback(value, data, eof)
if eof then
value.fd:close()
value.fd = nil
end
end
end
end
end
function Request._parse_input(self)
parse_message_body(
self.input,
self.message,
self.filehandler
)
self.parsed_input = true
end
function close()
if not context.eoh then
context.eoh = true
coroutine.yield(3)
end
if not context.closed then
context.closed = true
coroutine.yield(5)
end
end
function content()
return context.request:content()
end
function formvalue(name, noparse)
return context.request:formvalue(name, noparse)
end
function formvaluetable(prefix)
return context.request:formvaluetable(prefix)
end
function getcookie(name)
return context.request:getcookie(name)
end
-- or the environment table itself.
function getenv(name)
return context.request:getenv(name)
end
function setfilehandler(callback)
return context.request:setfilehandler(callback)
end
function header(key, value)
if not context.headers then
context.headers = {}
end
context.headers[key:lower()] = value
coroutine.yield(2, key, value)
end
function prepare_content(mime)
if not context.headers or not context.headers["content-type"] then
if mime == "application/xhtml+xml" then
if not getenv("HTTP_ACCEPT") or
not getenv("HTTP_ACCEPT"):find("application/xhtml+xml", nil, true) then
mime = "text/html; charset=UTF-8"
end
header("Vary", "Accept")
end
header("Content-Type", mime)
end
end
function source()
return context.request.input
end
function status(code, message)
code = code or 200
message = message or "OK"
context.status = code
coroutine.yield(1, code, message)
end
-- This function is as a valid LTN12 sink.
-- If the content chunk is nil this function will automatically invoke close.
function write(content, src_err)
if not content then
if src_err then
error(src_err)
else
close()
end
return true
elseif #content == 0 then
return true
else
if not context.eoh then
if not context.status then
status()
end
if not context.headers or not context.headers["content-type"] then
header("Content-Type", "text/html; charset=utf-8")
end
if not context.headers["cache-control"] then
header("Cache-Control", "no-cache")
header("Expires", "0")
end
if not context.headers["x-frame-options"] then
header("X-Frame-Options", "SAMEORIGIN")
end
if not context.headers["x-xss-protection"] then
header("X-XSS-Protection", "1; mode=block")
end
if not context.headers["x-content-type-options"] then
header("X-Content-Type-Options", "nosniff")
end
context.eoh = true
coroutine.yield(3)
end
coroutine.yield(4, content)
return true
end
end
function splice(fd, size)
coroutine.yield(6, fd, size)
end
function redirect(url)
if url == "" then url = "/" end
status(302, "Found")
header("Location", url)
close()
end
function build_querystring(q)
local s, n, k, v = {}, 1, nil, nil
for k, v in pairs(q) do
s[n+0] = (n == 1) and "?" or "&"
s[n+1] = util.urlencode(k)
s[n+2] = "="
s[n+3] = util.urlencode(v)
n = n + 4
end
return table.concat(s, "")
end
urldecode = util.urldecode
urlencode = util.urlencode
function write_json(x)
util.serialize_json(x, write)
end
-- from given url or string. Returns a table with urldecoded values.
-- Simple parameters are stored as string values associated with the parameter
-- name within the table. Parameters with multiple values are stored as array
-- containing the corresponding values.
function urldecode_params(url, tbl)
local parser, name
local params = tbl or { }
parser = lhttp.urlencoded_parser(function (what, buffer, length)
if what == parser.TUPLE then
name, value = nil, nil
elseif what == parser.NAME then
name = lhttp.urldecode(buffer)
elseif what == parser.VALUE and name then
params[name] = lhttp.urldecode(buffer) or ""
end
return true
end)
if parser then
parser:parse((url or ""):match("[^?]*$"))
parser:parse(nil)
end
return params
end
-- separated by "&". Tables are encoded as parameters with multiple values by
-- repeating the parameter name with each value.
function urlencode_params(tbl)
local k, v
local n, enc = 1, {}
for k, v in pairs(tbl) do
if type(v) == "table" then
local i, v2
for i, v2 in ipairs(v) do
if enc[1] then
enc[n] = "&"
n = n + 1
end
enc[n+0] = lhttp.urlencode(k)
enc[n+1] = "="
enc[n+2] = lhttp.urlencode(v2)
n = n + 3
end
else
if enc[1] then
enc[n] = "&"
n = n + 1
end
enc[n+0] = lhttp.urlencode(k)
enc[n+1] = "="
enc[n+2] = lhttp.urlencode(v)
n = n + 3
end
end
return table.concat(enc, "")
end
-- Content-Type. Stores all extracted data associated with its parameter name
-- in the params table within the given message object. Multiple parameter
-- values are stored as tables, ordinary ones as strings.
-- If an optional file callback function is given then it is fed with the
-- file contents chunk by chunk and only the extracted file name is stored
-- within the params table. The callback function will be called subsequently
-- with three arguments:
-- o Table containing decoded (name, file) and raw (headers) mime header data
-- o String value containing a chunk of the file data
-- o Boolean which indicates whether the current chunk is the last one (eof)
function mimedecode_message_body(src, msg, file_cb)
local parser, header, field
local len, maxlen = 0, tonumber(msg.env.CONTENT_LENGTH or nil)
parser, err = lhttp.multipart_parser(msg.env.CONTENT_TYPE, function (what, buffer, length)
if what == parser.PART_INIT then
field = { }
elseif what == parser.HEADER_NAME then
header = buffer:lower()
elseif what == parser.HEADER_VALUE and header then
if header:lower() == "content-disposition" and
lhttp.header_attribute(buffer, nil) == "form-data"
then
field.name = lhttp.header_attribute(buffer, "name")
field.file = lhttp.header_attribute(buffer, "filename")
field[1] = field.file
end
if field.headers then
field.headers[header] = buffer
else
field.headers = { [header] = buffer }
end
elseif what == parser.PART_BEGIN then
return not field.file
elseif what == parser.PART_DATA and field.name and length > 0 then
if field.file then
if file_cb then
file_cb(field, buffer, false)
msg.params[field.name] = msg.params[field.name] or field
else
if not field.fd then
field.fd = nixio.mkstemp(field.name)
end
if field.fd then
field.fd:write(buffer)
msg.params[field.name] = msg.params[field.name] or field
end
end
else
field.value = buffer
end
elseif what == parser.PART_END and field.name then
if field.file and msg.params[field.name] then
if file_cb then
file_cb(field, "", true)
elseif field.fd then
field.fd:seek(0, "set")
end
else
local val = msg.params[field.name]
if type(val) == "table" then
val[#val+1] = field.value or ""
elseif val ~= nil then
msg.params[field.name] = { val, field.value or "" }
else
msg.params[field.name] = field.value or ""
end
end
field = nil
elseif what == parser.ERROR then
err = buffer
end
return true
end, HTTP_MAX_CONTENT)
return ltn12.pump.all(src, function (chunk)
len = len + (chunk and #chunk or 0)
if maxlen and len > maxlen + 2 then
return nil, "Message body size exceeds Content-Length"
end
if not parser or not parser:parse(chunk) then
return nil, err
end
return true
end)
end
-- Content-Type. Stores all extracted data associated with its parameter name
-- in the params table within the given message object. Multiple parameter
-- values are stored as tables, ordinary ones as strings.
function urldecode_message_body(src, msg)
local err, name, value, parser
local len, maxlen = 0, tonumber(msg.env.CONTENT_LENGTH or nil)
parser = lhttp.urlencoded_parser(function (what, buffer, length)
if what == parser.TUPLE then
name, value = nil, nil
elseif what == parser.NAME then
name = lhttp.urldecode(buffer, lhttp.DECODE_PLUS)
elseif what == parser.VALUE and name then
local val = msg.params[name]
if type(val) == "table" then
val[#val+1] = lhttp.urldecode(buffer, lhttp.DECODE_PLUS) or ""
elseif val ~= nil then
msg.params[name] = { val, lhttp.urldecode(buffer, lhttp.DECODE_PLUS) or "" }
else
msg.params[name] = lhttp.urldecode(buffer, lhttp.DECODE_PLUS) or ""
end
elseif what == parser.ERROR then
err = buffer
end
return true
end, HTTP_MAX_CONTENT)
return ltn12.pump.all(src, function (chunk)
len = len + (chunk and #chunk or 0)
if maxlen and len > maxlen + 2 then
return nil, "Message body size exceeds Content-Length"
elseif len > HTTP_MAX_CONTENT then
return nil, "Message body size exceeds maximum allowed length"
end
if not parser or not parser:parse(chunk) then
return nil, err
end
return true
end)
end
-- This function will examine the Content-Type within the given message object
-- to select the appropriate content decoder.
-- Currently the application/x-www-urlencoded and application/form-data
-- mime types are supported. If the encountered content encoding can't be
-- handled then the whole message body will be stored unaltered as "content"
-- property within the given message object.
function parse_message_body(src, msg, filecb)
if msg.env.CONTENT_LENGTH or msg.env.REQUEST_METHOD == "POST" then
local ctype = lhttp.header_attribute(msg.env.CONTENT_TYPE, nil)
-- Is it multipart/mime ?
if ctype == "multipart/form-data" then
return mimedecode_message_body(src, msg, filecb)
-- Is it application/x-www-form-urlencoded ?
elseif ctype == "application/x-www-form-urlencoded" then
return urldecode_message_body(src, msg)
end
-- Unhandled encoding
-- If a file callback is given then feed it chunk by chunk, else
-- store whole buffer in message.content
local sink
-- If we have a file callback then feed it
if type(filecb) == "function" then
local meta = {
name = "raw",
encoding = msg.env.CONTENT_TYPE
}
sink = function( chunk )
if chunk then
return filecb(meta, chunk, false)
else
return filecb(meta, nil, true)
end
end
-- ... else append to .content
else
msg.content = ""
msg.content_length = 0
sink = function( chunk )
if chunk then
if ( msg.content_length + #chunk ) <= HTTP_MAX_CONTENT then
msg.content = msg.content .. chunk
msg.content_length = msg.content_length + #chunk
return true
else
return nil, "POST data exceeds maximum allowed length"
end
end
return true
end
end
-- Pump data...
while true do
local ok, err = ltn12.pump.step( src, sink )
if not ok and err then
return nil, err
elseif not ok then -- eof
return true
end
end
return true
end
return false
end

View File

@ -65,7 +65,7 @@ end
function watchdog()
while true
do
wait_for_ticks(21)
wait_for_ticks(223)
local pid = read_all(pidfile)
if pid and nixio.fs.stat("/proc/" .. pid) then

View File

@ -104,12 +104,6 @@ function M.reset_network(mode)
elseif mode == "scan-all" then
os.execute(IW .. " " .. wifi .. " scan > /dev/null 2>&1")
os.execute(IW .. " " .. wifi .. " scan passive > /dev/null 2>&1")
elseif mode == "reset" then
if chipset == "ath9k" then
write_all("/sys/kernel/debug/ieee80211/" .. phy .. "/ath9k/reset", "1")
else
write_all("/sys/kernel/debug/ieee80211/" .. phy .. "/ath10k/simulate_fw_crash", "hw-restart")
end
else
log:write("-- unknown")
end

View File

@ -764,6 +764,7 @@ c:commit("dhcp")
local config = ""
local ifacenum = 0
local ifacecount = 0
local devpaths = {}
if nixio.fs.stat(ieee80211) then
for devname in nixio.fs.dir(ieee80211)
do
@ -778,6 +779,11 @@ if nixio.fs.stat(ieee80211) then
if devpath:match("^platform.*/pci.*") then
devpath = devpath:match("^platform/(.*)")
end
local devpathc = devpaths[devpath] or 0
devpaths[devpath] = devpathc + 1
if devpathc > 0 then
devpath = devpath .. "+" .. devpathc
end
local is_mesh_rf = false
local htmode = "HT20"
local disabled = "0"

View File

@ -169,7 +169,7 @@ end
local parms = {}
local firmfile = ""
if os.getenv("REQUEST_METHOD") == "POST" then
require('luci.http')
require('luci.ohttp')
local request = luci.http.Request(nixio.getenv(),
function()
local v = io.read(1024)

View File

@ -765,7 +765,7 @@ end
-- read_postdata
local parms = {}
if os.getenv("REQUEST_METHOD") == "POST" then
require('luci.http')
require('luci.ohttp')
local request = luci.http.Request(nixio.getenv(),
function()
local v = io.read(1024)

View File

@ -300,7 +300,7 @@ local layout = layouts[get_board_type]
local configs = {}
if os.getenv("REQUEST_METHOD") == "POST" then
require('luci.http')
require('luci.ohttp')
local request = luci.http.Request(nixio.getenv(),
function()
local v = io.read(1024)

View File

@ -90,7 +90,7 @@ end
-- post data
if os.getenv("REQUEST_METHOD") == "POST" then
require('luci.http')
require('luci.ohttp')
local request = luci.http.Request(nixio.getenv(),
function()
local v = io.read(1024)

View File

@ -60,7 +60,7 @@ end
-- post_data
local parms = {}
if os.getenv("REQUEST_METHOD") == "POST" then
require('luci.http')
require('luci.ohttp')
local request = luci.http.Request(nixio.getenv(),
function()
local v = io.read(1024)

View File

@ -149,7 +149,7 @@ end
-- scan end
if os.getenv("REQUEST_METHOD") == "POST" then
require('luci.http')
require('luci.ohttp')
local request = luci.http.Request(nixio.getenv(),
function()
local v = io.read(1024)

View File

@ -41,7 +41,7 @@ require("aredn.http")
require("aredn.utils")
require("aredn.hardware")
require("uci")
require('luci.http')
require('luci.ohttp')
local html = require("aredn.html")
local aredn_info = require("aredn.info")
@ -176,7 +176,7 @@ passwd1 = ""
passwd2 = ""
wifi_intf = ""
local phycount = tonumber(capture("ls -1d /sys/class/ieee80211/* | wc -l"):chomp())
local phycount = aredn.hardware.get_radio_count()
local radio_name = (aredn.hardware.get_radio() or {}).name or ""
local M9model = radio_name:match("M9")
local M3model = radio_name:match("M3")
@ -428,48 +428,53 @@ if (parms.button_apply or parms.button_save) and wifi_enable == "1" then
os.execute("iw dev " .. wifi_intf .. " set txpower fixed " .. wifi_txpower .. "00 >/dev/null 2>&1")
end
if parms.button_updatelocation then
if (parms.button_updatelocation or parms.button_save) then
-- process gridsquare
local cursora = uci.cursor();
local cursorb = uci.cursor("/etc/config.mesh")
if parms.gridsquare ~= "" then
if parms.gridsquare:match("^[A-Z][A-Z]%d%d[a-z][a-z]$") then
cursora:set("aredn", "@location[0]", "gridsquare", parms.gridsquare)
cursorb:set("aredn", "@location[0]", "gridsquare", parms.gridsquare)
out("Gridsquare updated.")
if (cursora:get("aredn", "@location[0]", "gridsquare") or "") ~= parms.gridsquare then
if parms.gridsquare ~= "" then
if parms.gridsquare:match("^[A-Z][A-Z]%d%d[a-z][a-z]$") then
cursora:set("aredn", "@location[0]", "gridsquare", parms.gridsquare)
cursorb:set("aredn", "@location[0]", "gridsquare", parms.gridsquare)
out("Gridsquare updated.")
else
err("ERROR: Gridsquare format is: 2-uppercase letters, 2-digits, 2-lowercase letters. (AB12cd)")
end
else
err("ERROR: Gridsquare format is: 2-uppercase letters, 2-digits, 2-lowercase letters. (AB12cd)")
cursora:set("aredn", "@location[0]", "gridsquare", "")
cursorb:set("aredn", "@location[0]", "gridsquare", "")
out("Gridsquare purged.")
end
else
cursora:set("aredn", "@location[0]", "gridsquare", "")
cursorb:set("aredn", "@location[0]", "gridsquare", "")
out("Gridsquare purged.")
end
-- process lat/lng
if parms.latitude ~= "" and parms.longitude ~= "" then
if parms.latitude:match("^[-+]?%d%d?%.%d+$") and parms.longitude:match("^[-+]?%d%d?%d?%.%d+$") then
if tonumber(parms.latitude) >= -90 and tonumber(parms.latitude) <= 90 and tonumber(parms.longitude) >= -180 and tonumber(parms.longitude) <= 180 then
cursora:set("aredn", "@location[0]", "lat", parms.latitude)
cursorb:set("aredn", "@location[0]", "lat", parms.latitude)
cursora:set("aredn", "@location[0]", "lon", parms.longitude)
cursorb:set("aredn", "@location[0]", "lon", parms.longitude)
out("Lat/lon updated.")
if (cursora:get("aredn", "@location[0]", "lat") or "") ~= parms.latitude or (cursora:get("aredn", "@location[0]", "lon") or "") ~= parms.longitude then
if parms.latitude ~= "" and parms.longitude ~= "" then
if parms.latitude:match("^[-+]?%d%d?%.%d+$") and parms.longitude:match("^[-+]?%d%d?%d?%.%d+$") then
if tonumber(parms.latitude) >= -90 and tonumber(parms.latitude) <= 90 and tonumber(parms.longitude) >= -180 and tonumber(parms.longitude) <= 180 then
cursora:set("aredn", "@location[0]", "lat", parms.latitude)
cursorb:set("aredn", "@location[0]", "lat", parms.latitude)
cursora:set("aredn", "@location[0]", "lon", parms.longitude)
cursorb:set("aredn", "@location[0]", "lon", parms.longitude)
out("Lat/lon updated.")
else
err("ERROR: Lat/lon values must be between -90/90 and -180/180, respectively.")
end
else
err("ERROR: Lat/lon values must be between -90/90 and -180/180, respectively.")
err("ERROR: Lat/lon format is decimal: (ex. 30.121456 or -95.911154).")
end
else
err("ERROR: Lat/lon format is decimal: (ex. 30.121456 or -95.911154).")
cursora:set("aredn", "@location[0]", "lat", "")
cursorb:set("aredn", "@location[0]", "lat", "")
cursora:set("aredn", "@location[0]", "lon", "")
cursorb:set("aredn", "@location[0]", "lon", "")
out("Lat/lon purged.")
end
else
cursora:set("aredn", "@location[0]", "lat", "")
cursorb:set("aredn", "@location[0]", "lat", "")
cursora:set("aredn", "@location[0]", "lon", "")
cursorb:set("aredn", "@location[0]", "lon", "")
out("Lat/lon purged.")
end
cursora:commit("aredn")
cursorb:commit("aredn")
cursor = cursora
end
-- retrieve location data
@ -909,7 +914,19 @@ function foundLocation(position) {
}
function noLocation() {
alert('Could not find location. Try pinning it on the map.');
const req = new XMLHttpRequest();
req.addEventListener("load", function() {
try {
const json = JSON.parse(this.responseText);
foundLocation({ coords: { latitude: json.lat, longitude: json.lon }})
return;
}
catch (_) {
}
alert('Could not find location. Try pinning it on the map.');
});
req.open("GET", "http://ip-api.com/json");
req.send();
}
function updDist(x) {
@ -1441,14 +1458,11 @@ html.print("<table cellpadding=5 border=0><tr><th colspan=4>Optional Settings</t
html.print("<tr><td colspan=4><hr /></td></tr>")
html.print("<tr><td align=left>Latitude</td><td><input type=text name=latitude size=10 value='" .. lat .."' title='Latitude value (in decimal) (ie. 30.312354)' /></td>")
html.print("<td align='right' colspan='2'>")
html.print("<button type='button' id='findlocation' value='findloc' onClick='findLocation();'>Find Me!</button>&nbsp;")
local locdisabled = pingOK and "" or "disabled"
html.print("<button " .. locdisabled .. " type='button' id='findlocation' value='findloc' onClick='findLocation();'>Find Me!</button>&nbsp;")
html.print("<input type=submit name='button_updatelocation' value='Apply Location Settings' title='Immediately use these location settings'>")
html.print("&nbsp;<button type='button' id='hideshowmap' value='show' onClick='toggleMap(this);'>Show Map</button>&nbsp;")
if pingOK then
html.print("<input type='submit' name='button_uploaddata' value='Upload data to AREDN Servers' />&nbsp;")
else
html.print("<button disabled type='button' title='Only available if this node has internet access'>Upload data to AREDN Servers</button>&nbsp;")
end
html.print("&nbsp;<button " .. locdisabled .. " type='button' id='hideshowmap' value='show' onClick='toggleMap(this);'>Show Map</button>&nbsp;")
html.print("<input " .. locdisabled .. " type='submit' name='button_uploaddata' value='Upload data to AREDN Servers' />&nbsp;")
html.print("</td><tr><td align=left>Longitude</td><td><input type=text name=longitude size=10 value='" .. lon .. "' title='Longitude value (in decimal) (ie. -95.334454)' /></td><td align=left>Grid Square <input type=text name=gridsquare maxlength=6 size=6 value='" .. gridsquare .. "' title='Gridsquare value (ie. AB12cd)' /></td></tr><tr><td colspan=4><div id='map' style='height: 200px; display: none;'></div></td></tr><tr><td colspan=4><hr /></td></tr>")
html.print("<tr><td>Timezone </td><td><select name=time_zone_name tabindex=10>")

View File

@ -52,7 +52,7 @@ local dmode = "Realtime"
-- query string
local query = os.getenv("QUERY_STRING")
if query then
require('luci.http')
require('luci.ohttp')
local params = luci.http.urldecode_params(query)
if params.realtime then
dmode = "Realtime"

View File

@ -218,7 +218,7 @@ end
-- post data
if os.getenv("REQUEST_METHOD") == "POST" then
require('luci.http')
require('luci.ohttp')
local request = luci.http.Request(nixio.getenv(),
function()
local v = io.read(1024)

View File

@ -57,7 +57,7 @@ local VPNVER = "1.1"
-- post_data
local parms = {}
if os.getenv("REQUEST_METHOD") == "POST" then
require('luci.http')
require('luci.ohttp')
local request = luci.http.Request(nixio.getenv(),
function()
local v = io.read(1024)

View File

@ -61,7 +61,7 @@ local VPNVER = "1.0"
-- post_data
local parms = {}
if os.getenv("REQUEST_METHOD") == "POST" then
require('luci.http')
require('luci.ohttp')
local request = luci.http.Request(nixio.getenv(),
function()
local v = io.read(1024)

BIN
files/www/dot.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

After

Width:  |  Height:  |  Size: 788 B

View File

@ -2,5 +2,5 @@
OPENWRT_SRC=https://github.com/openwrt/openwrt.git
# what branch, tag or commit in this repo?
OPENWRT_COMMIT=v22.03.5
OPENWRT_COMMIT=v23.05.0

View File

@ -1,189 +0,0 @@
From d51e261e893451f9d0958a5ac39989d10b275e86 Mon Sep 17 00:00:00 2001
From: Andrew Cameron <apcameron@softhome.net>
Date: Sun, 6 Nov 2022 14:43:37 +0000
Subject: [PATCH 1/1] ath79: add support for TP-Link CPE605-v1 TP-Link
CPE605-v1 is an outdoor wireless CPE for 5 GHz with one Ethernet port based
on Atheros AR9344
Specifications:
- 560/450/225 MHz (CPU/DDR/AHB)
- 1x 10/100 Mbps Ethernet
- 64 MB of DDR2 RAM
- 8 MB of SPI-NOR Flash
- 23dBi high-gain directional antenna and a dedicated metal reflector
- Power, LAN, WLAN5G green LEDs
- 3x green RSSI LEDs
Flashing instructions:
Flash factory image through stock firmware WEB UI or through TFTP
To get to TFTP recovery just hold reset button while powering on for
around 4-5 seconds and release.
Rename factory image to recovery.bin
Stock TFTP server IP:192.168.0.100
Stock device TFTP adress:192.168.0.254
Signed-off-by: Andrew Cameron <apcameron@softhome.net>
---
.../ath79/dts/ar9344_tplink_cpe605-v1.dts | 33 +++++++++++++++++++
.../generic/base-files/etc/board.d/01_leds | 1 +
.../generic/base-files/etc/board.d/02_network | 1 +
target/linux/ath79/image/generic-tp-link.mk | 10 ++++++
4 files changed, 45 insertions(+)
create mode 100644 target/linux/ath79/dts/ar9344_tplink_cpe605-v1.dts
diff --git a/target/linux/ath79/dts/ar9344_tplink_cpe605-v1.dts b/target/linux/ath79/dts/ar9344_tplink_cpe605-v1.dts
new file mode 100644
index 0000000000..0c6eee7ba6
--- /dev/null
+++ b/target/linux/ath79/dts/ar9344_tplink_cpe605-v1.dts
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "ar9344_tplink_cpe.dtsi"
+
+/ {
+ model = "TP-Link CPE605 v1";
+ compatible = "tplink,cpe605-v1", "qca,ar9344";
+
+ aliases {
+ led-boot = &led_lan;
+ led-failsafe = &led_lan;
+ led-upgrade = &led_lan;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ led_lan: lan {
+ label = "green:lan";
+ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+ };
+
+ wlan5g {
+ label = "green:wlan5g";
+ gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "phy0tpt";
+ };
+ };
+};
+
+&eth1 {
+ compatible = "syscon", "simple-mfd";
+};
diff --git a/target/linux/ath79/generic/base-files/etc/board.d/01_leds b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
index 606a194f7e..54d764f907 100644
--- a/target/linux/ath79/generic/base-files/etc/board.d/01_leds
+++ b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
@@ -18,6 +18,7 @@ glinet,6416|\
glinet,gl-ar300m-lite|\
glinet,gl-ar300m16|\
pcs,cap324|\
+tplink,cpe605-v1|\
tplink,cpe610-v1|\
tplink,cpe610-v2|\
tplink,tl-wa1201-v2)
diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network
index e47f66c2f2..2fa0487981 100644
--- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
@@ -76,6 +76,7 @@ ath79_setup_interfaces()
tplink,cpe210-v3|\
tplink,cpe510-v2|\
tplink,cpe510-v3|\
+ tplink,cpe605-v1|\
tplink,cpe610-v1|\
tplink,cpe610-v2|\
tplink,cpe710-v1|\
diff --git a/target/linux/ath79/image/generic-tp-link.mk b/target/linux/ath79/image/generic-tp-link.mk
index 598085e50b..314ece1e03 100644
--- a/target/linux/ath79/image/generic-tp-link.mk
+++ b/target/linux/ath79/image/generic-tp-link.mk
@@ -350,6 +350,16 @@ define Device/tplink_cpe510-v3
endef
TARGET_DEVICES += tplink_cpe510-v3
+define Device/tplink_cpe605-v1
+ $(Device/tplink-safeloader-okli)
+ SOC := ar9344
+ IMAGE_SIZE := 7680k
+ DEVICE_MODEL := CPE605
+ DEVICE_VARIANT := v1
+ TPLINK_BOARD_ID := CPE605V1
+endef
+TARGET_DEVICES += tplink_cpe605-v1
+
define Device/tplink_cpe610-v1
$(Device/tplink-safeloader-okli)
SOC := ar9344
--
2.30.2
Index: openwrt/tools/firmware-utils/patches/0001-tplink-safeloader-add-TP-Link-CPE605-v1-Support.patch
===================================================================
--- /dev/null
+++ openwrt/tools/firmware-utils/patches/0001-tplink-safeloader-add-TP-Link-CPE605-v1-Support.patch
@@ -0,0 +1,64 @@
+From 2b43d1376a6945d07b2a87e48e3645eaa4f24d5a Mon Sep 17 00:00:00 2001
+From: Andrew Cameron <apcameron@softhome.net>
+Date: Wed, 9 Nov 2022 13:07:11 +0000
+Subject: [PATCH 1/1] tplink-safeloader: add TP-Link CPE605 v1 Support
+
+Enable creating images compatible with the TP-Link CPE605 v1 Router
+
+Signed-off-by: Andrew Cameron <apcameron@softhome.net>
+---
+ src/tplink-safeloader.c | 38 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 38 insertions(+)
+
+diff --git a/src/tplink-safeloader.c b/src/tplink-safeloader.c
+index 7f9081d..b920191 100644
+--- a/src/tplink-safeloader.c
++++ b/src/tplink-safeloader.c
+@@ -468,6 +468,44 @@ static struct device_info boards[] = {
+ .last_sysupgrade_partition = "support-list",
+ },
+
++ /** Firmware layout for the CPE605V1 */
++ {
++ .id = "CPE605V1",
++ .vendor = "CPE605(TP-LINK|UN|N150-5):1.0\r\n",
++ .support_list =
++ "SupportList:\r\n"
++ "CPE605(TP-LINK|UN|N150-5|00000000):1.0\r\n"
++ "CPE605(TP-LINK|EU|N150-5|45550000):1.0\r\n"
++ "CPE605(TP-LINK|US|N150-5|55530000):1.0\r\n"
++ "CPE605(TP-LINK|UN|N150-5):1.0\r\n"
++ "CPE605(TP-LINK|EU|N150-5):1.0\r\n"
++ "CPE605(TP-LINK|US|N150-5):1.0\r\n",
++ .part_trail = 0xff,
++ .soft_ver = SOFT_VER_DEFAULT,
++
++ .partitions = {
++ {"fs-uboot", 0x00000, 0x20000},
++ {"partition-table", 0x20000, 0x02000},
++ {"default-mac", 0x30000, 0x00020},
++ {"serial-number", 0x30100, 0x00020},
++ {"product-info", 0x31100, 0x00100},
++ {"device-info", 0x31400, 0x00400},
++ {"signature", 0x32000, 0x00400},
++ {"device-id", 0x33000, 0x00100},
++ {"firmware", 0x40000, 0x770000},
++ {"soft-version", 0x7b0000, 0x00100},
++ {"support-list", 0x7b1000, 0x01000},
++ {"user-config", 0x7c0000, 0x10000},
++ {"default-config", 0x7d0000, 0x10000},
++ {"log", 0x7e0000, 0x10000},
++ {"radio", 0x7f0000, 0x10000},
++ {NULL, 0, 0}
++ },
++
++ .first_sysupgrade_partition = "os-image",
++ .last_sysupgrade_partition = "support-list",
++ },
++
+ /** Firmware layout for the CPE610V1 */
+ {
+ .id = "CPE610V1",
+--
+2.30.2
+

View File

@ -1,10 +1,9 @@
--- a/target/linux/ath79/image/generic-tp-link.mk
+++ b/target/linux/ath79/image/generic-tp-link.mk
@@ -312,6 +312,7 @@ define Device/tplink_cpe220-v3
@@ -312,6 +312,7 @@
DEVICE_PACKAGES := rssileds
TPLINK_BOARD_ID := CPE220V3
LOADER_TYPE := elf
+ SUPPORTED_DEVICES += cpe220-v3
endef
TARGET_DEVICES += tplink_cpe220-v3

View File

@ -3,7 +3,7 @@
@@ -1,6 +1,6 @@
BOARDNAME:=Generic
-DEFAULT_PACKAGES += wpad-basic-wolfssl
-DEFAULT_PACKAGES += wpad-basic-mbedtls
+DEFAULT_PACKAGES += wpad-mini
define Target/Description
@ -14,8 +14,8 @@
KERNELNAME := vmlinux vmlinuz
IMAGES_DIR := ../../..
-DEFAULT_PACKAGES += wpad-basic-wolfssl
+DEFAULT_PACKAGES += wpad-mini
-DEFAULT_PACKAGES += wpad-basic-mbedtls yafut
+DEFAULT_PACKAGES += wpad-mini yafut
define Target/Description
Build firmware images for MikroTik devices based on Qualcomm Atheros
@ -25,7 +25,7 @@
FEATURES += nand
-DEFAULT_PACKAGES += wpad-basic-wolfssl
-DEFAULT_PACKAGES += wpad-basic-mbedtls
+DEFAULT_PACKAGES += wpad-mini
define Target/Description
@ -36,7 +36,7 @@
BOARDNAME:=Devices with small flash
FEATURES += small_flash
-DEFAULT_PACKAGES += wpad-basic-wolfssl
-DEFAULT_PACKAGES += wpad-basic-mbedtls
+DEFAULT_PACKAGES += wpad-mini
define Target/Description
@ -47,8 +47,8 @@
@@ -17,7 +17,7 @@
DEFAULT_PACKAGES += \
kmod-usb-dwc3-qcom \
kmod-leds-gpio kmod-gpio-button-hotplug swconfig \
- kmod-ath10k-ct wpad-basic-wolfssl \
kmod-leds-gpio kmod-gpio-button-hotplug \
- kmod-ath10k-ct wpad-basic-mbedtls \
+ kmod-ath10k-ct wpad-mini \
kmod-usb3 kmod-usb-dwc3 ath10k-firmware-qca4019-ct \
uboot-envtools

View File

@ -0,0 +1,28 @@
--- a/target/linux/generic/config-5.15
+++ b/target/linux/generic/config-5.15
@@ -3853,8 +3853,8 @@
# CONFIG_MTD_SPINAND_MT29F is not set
# CONFIG_MTD_SPI_NAND is not set
# CONFIG_MTD_SPI_NOR is not set
-# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set
-CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
+CONFIG_MTD_SPI_NOR_SWP_DISABLE=y
+# CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE is not set
# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set
# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set
# CONFIG_MTD_SPI_NOR_USE_VARIABLE_ERASE is not set
--- /dev/null
+++ b/target/linux/generic/backport-5.15/420-flash-fixes.patch
@@ -0,0 +1,11 @@
+--- a/drivers/mtd/spi-nor/spansion.c
++++ b/drivers/mtd/spi-nor/spansion.c
+@@ -254,7 +254,7 @@
+ { "s25fl016k", INFO(0xef4015, 0, 64 * 1024, 32,
+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
+ { "s25fl064k", INFO(0xef4017, 0, 64 * 1024, 128,
+- SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
++ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_HAS_LOCK) },
+ { "s25fl116k", INFO(0x014015, 0, 64 * 1024, 32,
+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
+ { "s25fl132k", INFO(0x014016, 0, 64 * 1024, 64, SECT_4K) },

View File

@ -1,15 +0,0 @@
--- /dev/null
+++ b/target/linux/generic/backport-5.10/420-spansion-flash.patch
@@ -0,0 +1,12 @@
+--- a/drivers/mtd/spi-nor/spansion.c
++++ b/drivers/mtd/spi-nor/spansion.c
+@@ -83,8 +83,7 @@
+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
+ { "s25fl016k", INFO(0xef4015, 0, 64 * 1024, 32,
+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
+- { "s25fl064k", INFO(0xef4017, 0, 64 * 1024, 128,
+- SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
++ { "s25fl064k", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_HAS_LOCK) },
+ { "s25fl116k", INFO(0x014015, 0, 64 * 1024, 32,
+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
+ { "s25fl132k", INFO(0x014016, 0, 64 * 1024, 64, SECT_4K) },

View File

@ -106,7 +106,7 @@ new file mode 100644
index 0000000000000..8e8b7a1689c87
--- /dev/null
+++ b/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig_lz77.c
@@ -0,0 +1,437 @@
@@ -0,0 +1,438 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2023 John Thomson
@ -461,6 +461,7 @@ index 0000000000000..8e8b7a1689c87
+ fallthrough;
+ case INSTR_LONG:
+ if (opcode->offset == 0) {
+ unsigned int i;
+ /* this is a non-matching group */
+ pr_debug(" non-match, len: 0x%x\n",
+ opcode->length);
@ -479,7 +480,7 @@ index 0000000000000..8e8b7a1689c87
+ }
+ }
+
+ unsigned int i; for (i = opcode->length; i > 0; --i) {
+ for (i = opcode->length; i > 0; --i) {
+ *output_ptr = lz77_mikrotik_wlan_get_byte(in, input_bit);
+ ++output_ptr;
+ input_bit += 8;

View File

@ -1,99 +0,0 @@
--- /dev/null
+++ b/package/kernel/mac80211/patches/ath/301-ath-reset.patch
@@ -0,0 +1,96 @@
+diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c
+index 4c81b1d7f417..fb7a2952d0ce 100644
+--- a/drivers/net/wireless/ath/ath9k/debug.c
++++ b/drivers/net/wireless/ath/ath9k/debug.c
+@@ -749,9 +749,9 @@ static int read_file_misc(struct seq_file *file, void *data)
+
+ static int read_file_reset(struct seq_file *file, void *data)
+ {
+- struct ieee80211_hw *hw = dev_get_drvdata(file->private);
+- struct ath_softc *sc = hw->priv;
++ struct ath_softc *sc = file->private;
+ static const char * const reset_cause[__RESET_TYPE_MAX] = {
++ [RESET_TYPE_USER] = "User reset",
+ [RESET_TYPE_BB_HANG] = "Baseband Hang",
+ [RESET_TYPE_BB_WATCHDOG] = "Baseband Watchdog",
+ [RESET_TYPE_FATAL_INT] = "Fatal HW Error",
+@@ -779,6 +779,55 @@ static int read_file_reset(struct seq_file *file, void *data)
+ return 0;
+ }
+
++static int open_file_reset(struct inode *inode, struct file *f)
++{
++ return single_open(f, read_file_reset, inode->i_private);
++}
++
++static ssize_t write_file_reset(struct file *file,
++ const char __user *user_buf,
++ size_t count, loff_t *ppos)
++{
++ struct ath_softc *sc = file_inode(file)->i_private;
++ struct ath_hw *ah = sc->sc_ah;
++ struct ath_common *common = ath9k_hw_common(ah);
++ unsigned long val;
++ char buf[32];
++ ssize_t len;
++
++ len = min(count, sizeof(buf) - 1);
++ if (copy_from_user(buf, user_buf, len))
++ return -EFAULT;
++
++ buf[len] = '\0';
++ if (kstrtoul(buf, 0, &val))
++ return -EINVAL;
++
++ if (val != 1)
++ return -EINVAL;
++
++ /* avoid rearming hw_reset_work on shutdown */
++ mutex_lock(&sc->mutex);
++ if (test_bit(ATH_OP_INVALID, &common->op_flags)) {
++ mutex_unlock(&sc->mutex);
++ return -EBUSY;
++ }
++
++ ath9k_queue_reset(sc, RESET_TYPE_USER);
++ mutex_unlock(&sc->mutex);
++
++ return count;
++}
++
++static const struct file_operations fops_reset = {
++ .read = seq_read,
++ .write = write_file_reset,
++ .open = open_file_reset,
++ .owner = THIS_MODULE,
++ .llseek = seq_lseek,
++ .release = single_release,
++};
++
+ void ath_debug_stat_tx(struct ath_softc *sc, struct ath_buf *bf,
+ struct ath_tx_status *ts, struct ath_txq *txq,
+ unsigned int flags)
+@@ -1393,8 +1442,8 @@ int ath9k_init_debug(struct ath_hw *ah)
+ read_file_queues);
+ debugfs_create_devm_seqfile(sc->dev, "misc", sc->debug.debugfs_phy,
+ read_file_misc);
+- debugfs_create_devm_seqfile(sc->dev, "reset", sc->debug.debugfs_phy,
+- read_file_reset);
++ debugfs_create_file("reset", 0600, sc->debug.debugfs_phy,
++ sc, &fops_reset);
+
+ ath9k_cmn_debug_recv(sc->debug.debugfs_phy, &sc->debug.stats.rxstats);
+ ath9k_cmn_debug_phy_err(sc->debug.debugfs_phy, &sc->debug.stats.rxstats);
+diff --git a/drivers/net/wireless/ath/ath9k/debug.h b/drivers/net/wireless/ath/ath9k/debug.h
+index 33826aa13687..389459c04d14 100644
+--- a/drivers/net/wireless/ath/ath9k/debug.h
++++ b/drivers/net/wireless/ath/ath9k/debug.h
+@@ -39,6 +39,7 @@ struct fft_sample_tlv;
+ #endif
+
+ enum ath_reset_type {
++ RESET_TYPE_USER,
+ RESET_TYPE_BB_HANG,
+ RESET_TYPE_BB_WATCHDOG,
+ RESET_TYPE_FATAL_INT,
+

View File

@ -58,10 +58,10 @@
+===================================================================
+--- a/net/wireless/util.c
++++ b/net/wireless/util.c
+@@ -76,13 +76,16 @@ int ieee80211_channel_to_frequency(int c
+ return 0; /* not supported */
+@@ -81,13 +81,16 @@ int ieee80211_channel_to_frequency(int c
+ switch (band) {
+ case NL80211_BAND_2GHZ:
+ case NL80211_BAND_LC:
++ chan = (int)(unsigned char)chan;
+ if (chan == 14)
+ return MHZ_TO_KHZ(2484);
@ -406,7 +406,7 @@
+ */
+ if (channel >= 1 && channel <= 14) {
+ status->band = NL80211_BAND_2GHZ;
++ } else if (channel >= -4 && channel <= -1) {
++ } else if ((s8)channel >= -4 && (s8)channel <= -1) {
++ status->band = NL80211_BAND_2GHZ;
+ } else if (channel >= 36 && channel <= ATH10K_MAX_5G_CHAN) {
+ status->band = NL80211_BAND_5GHZ;

View File

@ -13,18 +13,19 @@
uci -q batch <<-EOF
set wireless.radio${devidx}=wifi-device
set wireless.radio${devidx}.type=mac80211
@@ -174,13 +180,12 @@
set wireless.radio${devidx}.channel=${channel}
set wireless.radio${devidx}.band=${mode_band}
set wireless.radio${devidx}.htmode=$htmode
- set wireless.radio${devidx}.disabled=1
@@ -203,13 +203,13 @@
set wireless.${name}.channel=${channel}
set wireless.${name}.band=${mode_band}
set wireless.${name}.htmode=$htmode
- set wireless.${name}.disabled=1
set wireless.default_radio${devidx}=wifi-iface
set wireless.default_radio${devidx}.device=radio${devidx}
set wireless.default_radio${devidx}.network=lan
set wireless.default_radio${devidx}.mode=ap
- set wireless.default_radio${devidx}.ssid=OpenWrt
+ set wireless.default_radio${devidx}.ssid=${arednssid}
set wireless.default_radio${devidx}.encryption=none
set wireless.default_${name}=wifi-iface
set wireless.default_${name}.device=${name}
set wireless.default_${name}.network=lan
set wireless.default_${name}.mode=ap
- set wireless.default_${name}.ssid=OpenWrt
+ set wireless.default_${name}.ssid=${arednssid}
+ set wireless.default_${name}.ifname=$(echo ${name} | sed s/radio/wlan/)
set wireless.default_${name}.encryption=none
EOF
uci -q commit wireless

View File

@ -1,9 +1,9 @@
--- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
@@ -113,7 +113,9 @@ ath79_setup_interfaces()
ubnt,unifi|\
wd,mynet-wifi-rangeextender|\
winchannel,wb2000)
@@ -126,7 +126,9 @@ ath79_setup_interfaces()
zyxel,nwa1121-ni|\
zyxel,nwa1123-ac|\
zyxel,nwa1123-ni)
- ucidef_set_interface_lan "eth0"
+ ucidef_set_interfaces_lan_wan "eth0" "eth0.1"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
@ -186,9 +186,9 @@
--- a/target/linux/ath79/nand/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/nand/base-files/etc/board.d/02_network
@@ -9,7 +9,9 @@ ath79_setup_interfaces()
case "$board" in
aerohive,hiveap-121|\
glinet,gl-e750)
glinet,gl-e750|\
meraki,mr18)
- ucidef_set_interface_lan "eth0"
+ ucidef_set_interfaces_lan_wan "eth0" "eth0.1"
+ ucidef_set_interface "dtdlink" device "eth0.2" protocol "static"
@ -223,7 +223,7 @@
--- a/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network
@@ -22,14 +22,21 @@
@@ -23,15 +23,22 @@
mikrotik,routerboard-wap-2nd|\
mikrotik,routerboard-wap-g-5hact2hnd|\
mikrotik,routerboard-wapr-2nd)
@ -232,6 +232,7 @@
+ ucidef_set_interface "dtdlink" device "eth0.2 eth1.2" protocol "static"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
;;
mikrotik,routerboard-951ui-2hnd|\
- mikrotik,routerboard-951ui-2nd|\
- mikrotik,routerboard-952ui-5ac2nd)
+ mikrotik,routerboard-951ui-2nd)
@ -275,9 +276,9 @@
+ ucidef_set_interface "dtdlink" device "eth0.2 eth1.2" protocol "static"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
+ ;;
mikrotik,routerboard-951ui-2hnd|\
mikrotik,routerboard-951ui-2nd)
ucidef_set_interface_wan "eth1"
ucidef_add_switch "switch0" \
--- a/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network
@ -305,6 +306,19 @@
--- a/target/linux/ath79/tiny/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/tiny/base-files/etc/board.d/02_network
@@ -55,7 +55,9 @@
ubnt,nanobridge-m|\
ubnt,picostation-m|\
ubnt,nanostation-loco-m)
- ucidef_set_interface_lan "eth0"
+ ucidef_set_interfaces_lan_wan "eth0" "eth0.1"
+ ucidef_set_interface "dtdlink" device "eth0.2" protocol "static"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
;;
engenius,enh202-v1)
ucidef_set_interface_lan "eth0"
--- a/target/linux/ath79/tiny/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/tiny/base-files/etc/board.d/02_network
@@ -111,7 +111,10 @@
"0@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1"
;;

View File

@ -1,36 +1,41 @@
--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
@@ -30,12 +30,16 @@
engenius,emd1|\
@@ -26,7 +26,9 @@
pakedge,wr-1|\
teltonika,rutx50|\
zyxel,nbg6617)
- ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan"
+ ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
+ ucidef_set_interface "dtdlink" device "lan4.2" protocol "static"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
;;
8dev,jalapeno|\
alfa-network,ap120c-ac|\
@@ -54,11 +56,15 @@
meraki,mr33|\
meraki,mr74|\
mikrotik,lhgg-60ad|\
- mikrotik,sxtsq-5-ac|\
netgear,ex6100v2|\
netgear,ex6150v2|\
zyxel,wre6606)
ucidef_set_interface_lan "eth0"
netgear,ex6150v2)
ucidef_set_interface_lan "lan"
;;
+ mikrotik,sxtsq-5-ac)
+ ucidef_set_interfaces_lan_wan "lan" "lan.1"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
+ ucidef_set_interface "dtdlink" device "lan.2" protocol "static"
+ ;;
aruba,ap-303h|\
teltonika,rutx10)
ucidef_set_interfaces_lan_wan "eth0" "eth1"
--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
@@ -61,9 +61,9 @@
p2w,r619ac-64m|\
p2w,r619ac-128m|\
zyxel,nbg6617)
- ucidef_set_interfaces_lan_wan "eth0" "eth1"
- ucidef_add_switch "switch0" \
- "0u@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1"
+ ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
+ ucidef_set_interface "dtdlink" device "lan4.2" protocol "static"
avm,fritzbox-7530)
ucidef_set_interface_lan "lan1 lan2 lan3 lan4"
;;
@@ -83,7 +83,9 @@
glinet,gl-a1300|\
glinet,gl-b1300|\
mobipromo,cm520-79f)
- ucidef_set_interfaces_lan_wan "lan1 lan2" "wan"
+ ucidef_set_interfaces_lan_wan "lan1" "wan"
+ ucidef_set_interface "dtdlink" device "lan2.2" protocol "static"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
;;
avm,fritzbox-4040|\
linksys,ea6350v3|\
mikrotik,wap-ac|\
mikrotik,wap-ac-lte|\

View File

@ -0,0 +1,13 @@
--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
@@ -80,7 +80,9 @@
xiaomi,mi-router-4|\
xiaomi,mi-router-4a-gigabit|\
xiaomi,mi-router-4a-gigabit-v2)
- ucidef_set_interfaces_lan_wan "lan1 lan2" "wan"
+ ucidef_set_interfaces_lan_wan "lan2" "wan"
+ ucidef_set_interface "dtdlink" device "lan1.2" protocol "static"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
;;
bolt,arion)
ucidef_set_interfaces_lan_wan "lan" "wan"

View File

@ -1,13 +0,0 @@
--- a/target/linux/ath79/tiny/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/tiny/base-files/etc/board.d/02_network
@@ -57,7 +57,9 @@
ubnt,nanostation-loco-m|\
ubnt,powerbridge-m|\
ubnt,rocket-m)
- ucidef_set_interface_lan "eth0"
+ ucidef_set_interfaces_lan_wan "eth0" "eth0.1"
+ ucidef_set_interface "dtdlink" device "eth0.2" protocol "static"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
;;
engenius,enh202-v1)
ucidef_set_interface_lan "eth0"

View File

@ -5,7 +5,7 @@ Index: openwrt/feeds/packages/net/iperf3/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=iperf
PKG_VERSION:=3.11
PKG_VERSION:=3.15
-PKG_RELEASE:=1
+PKG_RELEASE:=1AREDN

View File

@ -1,5 +1,5 @@
--- /dev/null
+++ b/target/linux/ath79/patches-5.10/903-phy-ar8216-no-van-ports.patch
+++ b/target/linux/ath79/patches-5.15/903-phy-ar8216-no-van-ports.patch
@@ -0,0 +1,13 @@
+--- a/drivers/net/phy/ar8216.c
++++ b/drivers/net/phy/ar8216.c
@ -8,9 +8,9 @@
+ continue;
+
+- portmask[i] = 1 << AR8216_PORT_CPU;
++ for (j = 0; j < dev->ports; j++) {
++ portmask[i] |= (1 << j);
++ }
++ for (j = 0; j < dev->ports; j++) {
++ portmask[i] |= (1 << j);
++ }
+ portmask[AR8216_PORT_CPU] |= (1 << i);
+ }
+ }

View File

@ -1,15 +1,15 @@
--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
@@ -1096,7 +1096,11 @@ drv_mac80211_setup() {
@@ -1102,7 +1102,11 @@
wireless_set_data phy="$phy" txantenna="$txantenna" rxantenna="$rxantenna"
iw phy "$phy" set antenna $txantenna $rxantenna >/dev/null 2>&1
iw phy "$phy" set antenna_gain $antenna_gain >/dev/null 2>&1
- iw phy "$phy" set distance "$distance" >/dev/null 2>&1
+ if [ $distance -eq 0 -a -d /sys/kernel/debug/ieee80211/$phy/ath9k ]; then
+ iw phy "$phy" set distance auto
+ else
+ iw phy "$phy" set distance "$distance"
+ fi
+ if [ $distance -eq 0 -a -d /sys/kernel/debug/ieee80211/$phy/ath9k ]; then
+ iw phy "$phy" set distance auto
+ else
+ iw phy "$phy" set distance "$distance"
+ fi
if [ -n "$txpower" ]; then
iw phy "$phy" set txpower fixed "${txpower%%.*}00"

View File

@ -1,14 +1,14 @@
--- a/config/Config-build.in
+++ b/config/Config-build.in
@@ -156,7 +156,7 @@
@@ -160,7 +160,7 @@
Packages can choose to opt-out via setting PKG_BUILD_FLAGS:=no-lto
config IPV6
bool
prompt "Enable IPv6 support in packages"
- default y
+ default n
help
Enables IPv6 support in kernel (builtin) and packages.
- def_bool y
+ def_bool n
comment "Stripping options"
--- a/include/netfilter.mk
+++ b/include/netfilter.mk
@@ -325,7 +325,7 @@
@ -46,7 +46,7 @@
--- /dev/null
+++ b/package/network/config/firewall4/patches/001-disable-ipv6.patch
@@ -0,0 +1,119 @@
@@ -0,0 +1,139 @@
+--- a/root/usr/share/firewall4/main.uc
++++ b/root/usr/share/firewall4/main.uc
+@@ -33,14 +33,14 @@ function reload_sets() {
@ -166,3 +166,23 @@
+ {%+ include("zone-match.uc", { egress, rule }) -%}
+ {%+ if (zone.counter): -%}
+ counter {%+ endif -%}
+--- a/root/usr/share/firewall4/templates/mangle-rule.uc
+--- a/root/usr/share/firewall4/templates/mangle-rule.uc
+@@ -1,7 +1,7 @@
+ {%+ for (let src_devices in rule.src?.zone) }
+
+ {%+ if (rule.family && !rule.has_addrs): -%}
+- meta nfproto {{ fw4.nfproto(rule.family) }} {%+ endif -%}
++ {%+ endif -%}
+ {%+ if (!rule.proto.any && !rule.has_ports && !rule.icmp_types && !rule.icmp_codes): -%}
+ meta l4proto {{
+ (rule.proto.name == 'icmp' && rule.family == 6) ? 'ipv6-icmp' : rule.proto.name
+--- a/root/usr/share/firewall4/templates/zone-drop-invalid.uc
++++ a/root/usr/share/firewall4/templates/zone-drop-invalid.uc
+@@ -1,5 +1,5 @@
+ {%+ if (zone.masq ^ zone.masq6): -%}
+- meta nfproto {{ fw4.nfproto(zone.masq ? 4 : 6) }} {%+ endif -%}
++ {%+ endif -%}
+ {%+ include("zone-match.uc", { egress: true, rule }) -%}
+ ct state invalid {%+ if (zone.counter): -%}
+ counter {%+ endif -%}

File diff suppressed because it is too large Load Diff

View File

@ -1,102 +1,5 @@
diff --git a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
index 1955cd288f..0773f1a5af 100644
--- a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
+++ b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
@@ -65,7 +65,7 @@
#define AG71XX_TX_RING_SIZE_DEFAULT 128
#define AG71XX_RX_RING_SIZE_DEFAULT 256
-#define AG71XX_TX_RING_SIZE_MAX 128
+#define AG71XX_TX_RING_SIZE_MAX 256
#define AG71XX_RX_RING_SIZE_MAX 256
#ifdef CONFIG_AG71XX_DEBUG
diff --git a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
index 2fc18d5979..d553c62401 100644
--- a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
+++ b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
@@ -34,7 +34,7 @@ MODULE_PARM_DESC(msg_level, "Message level (-1=defaults,0=none,...,16=all)");
#define ETH_SWITCH_HEADER_LEN 2
-static int ag71xx_tx_packets(struct ag71xx *ag, bool flush);
+static int ag71xx_tx_packets(struct ag71xx *ag, bool flush, int budget);
static inline unsigned int ag71xx_max_frame_len(unsigned int mtu)
{
@@ -478,7 +478,7 @@ static void ag71xx_fast_reset(struct ag71xx *ag)
mii_reg = ag71xx_rr(ag, AG71XX_REG_MII_CFG);
rx_ds = ag71xx_rr(ag, AG71XX_REG_RX_DESC);
- ag71xx_tx_packets(ag, true);
+ ag71xx_tx_packets(ag, true, 0);
reset_control_assert(ag->mac_reset);
udelay(10);
@@ -1245,7 +1245,7 @@ static bool ag71xx_check_dma_stuck(struct ag71xx *ag)
return false;
}
-static int ag71xx_tx_packets(struct ag71xx *ag, bool flush)
+static int ag71xx_tx_packets(struct ag71xx *ag, bool flush, int budget)
{
struct ag71xx_ring *ring = &ag->tx_ring;
bool dma_stuck = false;
@@ -1278,7 +1278,7 @@ static int ag71xx_tx_packets(struct ag71xx *ag, bool flush)
if (!skb)
continue;
- dev_kfree_skb_any(skb);
+ napi_consume_skb(skb, budget);
ring->buf[i].skb = NULL;
bytes_compl += ring->buf[i].len;
@@ -1352,7 +1352,11 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int limit)
dev->stats.rx_packets++;
dev->stats.rx_bytes += pktlen;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,12,0)
skb = build_skb(ring->buf[i].rx_buf, ag71xx_buffer_size(ag));
+#else
+ skb = napi_build_skb(ring->buf[i].rx_buf, ag71xx_buffer_size(ag));
+#endif
if (!skb) {
skb_free_frag(ring->buf[i].rx_buf);
goto next;
@@ -1400,7 +1404,7 @@ static int ag71xx_poll(struct napi_struct *napi, int limit)
int tx_done;
int rx_done;
- tx_done = ag71xx_tx_packets(ag, false);
+ tx_done = ag71xx_tx_packets(ag, false, limit);
DBG("%s: processing RX ring\n", dev->name);
rx_done = ag71xx_rx_packets(ag, limit);
diff --git a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_mdio.c b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_mdio.c
index a58ee3346b..fd05dbd0ca 100644
--- a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_mdio.c
+++ b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_mdio.c
@@ -201,10 +201,6 @@ static int ag71xx_mdio_probe(struct platform_device *pdev)
mii_bus->parent = amdev;
snprintf(mii_bus->id, MII_BUS_ID_SIZE, "%s.%d", np->name, bus_count++);
- if (!builtin_switch &&
- of_property_read_u32(np, "phy-mask", &mii_bus->phy_mask))
- mii_bus->phy_mask = 0;
-
for (i = 0; i < PHY_MAX_ADDR; i++)
mii_bus->irq[i] = PHY_POLL;
--- a/target/linux/ath79/dts/qca9558_ubnt_rocket-5ac-lite.dts
+++ b/target/linux/ath79/dts/qca9558_ubnt_rocket-5ac-lite.dts
@@ -21,7 +21,6 @@
&mdio0 {
status = "okay";
- phy-mask = <4>;
phy4: ethernet-phy@4 {
phy-mode = "sgmii";
reg = <4>;
@@ -36,6 +35,14 @@
nvmem-cell-names = "mac-address";
phy-mode = "sgmii";

View File

@ -277,7 +277,7 @@ Index: openwrt/package/kernel/ath10k-ct/patches/999-0002-ath10k-5_10Mhz.patch
+ * OUI specified by WMI_SCAN_PROB_REQ_OUI_CMDID to the Probe Request frame.
--- /dev/null
+++ openwrt/package/kernel/ath10k-ct/patches/999-0004-ath10k-coverage.patch
@@ -0,0 +1,26 @@
@@ -0,0 +1,34 @@
+--- a/ath10k-5.15/hw.c
++++ b/ath10k-5.15/hw.c
+@@ -655,23 +655,6 @@
@ -304,3 +304,11 @@ Index: openwrt/package/kernel/ath10k-ct/patches/999-0002-ath10k-5_10Mhz.patch
+
+ /* Recalculate the register values by adding the additional propagation
+ * delay (3us per coverage class).
+@@ -719,7 +719,6 @@
+
+ ath10k_wmi_dbglog_cfg(ar, fw_dbglog_mask, fw_dbglog_level);
+
+-store_regs:
+ /* After an error we will not retry setting the coverage class. */
+ spin_lock_bh(&ar->data_lock);
+ ar->fw_coverage.coverage_class = value;

View File

@ -0,0 +1,88 @@
--- /dev/null
+++ b/package/kernel/mt76/patches/001-extend-channels.patch
@@ -0,0 +1,85 @@
+--- a/mac80211.c
++++ b/mac80211.c
+@@ -29,6 +29,10 @@
+ }
+
+ static const struct ieee80211_channel mt76_channels_2ghz[] = {
++ CHAN2G(-4, 2387),
++ CHAN2G(-3, 2392),
++ CHAN2G(-2, 2397),
++ CHAN2G(-1, 2402),
+ CHAN2G(1, 2412),
+ CHAN2G(2, 2417),
+ CHAN2G(3, 2422),
+@@ -64,19 +68,61 @@
+ CHAN5G(120, 5600),
+ CHAN5G(124, 5620),
+ CHAN5G(128, 5640),
++
++ CHAN5G(131, 5655),
+ CHAN5G(132, 5660),
++ CHAN5G(133, 5665),
++ CHAN5G(134, 5670),
++ CHAN5G(135, 5675),
+ CHAN5G(136, 5680),
++ CHAN5G(137, 5685),
++ CHAN5G(138, 5690),
++ CHAN5G(139, 5695),
+ CHAN5G(140, 5700),
++ CHAN5G(141, 5705),
++ CHAN5G(142, 5710),
++ CHAN5G(143, 5715),
+ CHAN5G(144, 5720),
+-
++ CHAN5G(145, 5725),
++ CHAN5G(146, 5730),
++ CHAN5G(147, 5735),
++ CHAN5G(148, 5740),
+ CHAN5G(149, 5745),
++ CHAN5G(150, 5750),
++ CHAN5G(151, 5755),
++ CHAN5G(152, 5760),
+ CHAN5G(153, 5765),
++ CHAN5G(154, 5770),
++ CHAN5G(155, 5775),
++ CHAN5G(156, 5780),
+ CHAN5G(157, 5785),
++ CHAN5G(158, 5790),
++ CHAN5G(159, 5795),
++ CHAN5G(160, 5800),
+ CHAN5G(161, 5805),
++ CHAN5G(162, 5810),
++ CHAN5G(163, 5815),
++ CHAN5G(164, 5820),
+ CHAN5G(165, 5825),
++ CHAN5G(166, 5830),
++ CHAN5G(167, 5835),
++ CHAN5G(168, 5840),
+ CHAN5G(169, 5845),
++ CHAN5G(170, 5850),
++ CHAN5G(171, 5855),
++ CHAN5G(172, 5860),
+ CHAN5G(173, 5865),
++ CHAN5G(174, 5870),
++ CHAN5G(175, 5875),
++ CHAN5G(176, 5880),
+ CHAN5G(177, 5885),
++ CHAN5G(178, 5890),
++ CHAN5G(179, 5895),
++ CHAN5G(180, 5900),
++ CHAN5G(181, 5905),
++ CHAN5G(182, 5910),
++ CHAN5G(183, 5915),
++ CHAN5G(184, 5920),
+ };
+
+ static const struct ieee80211_channel mt76_channels_6ghz[] = {
+@@ -175,7 +221,7 @@
+ EXPORT_SYMBOL_GPL(mt76_rates);
+
+ static const struct cfg80211_sar_freq_ranges mt76_sar_freq_ranges[] = {
+- { .start_freq = 2402, .end_freq = 2494, },
++ { .start_freq = 2382, .end_freq = 2494, },
+ { .start_freq = 5150, .end_freq = 5350, },
+ { .start_freq = 5350, .end_freq = 5470, },
+ { .start_freq = 5470, .end_freq = 5725, },

View File

@ -1,6 +1,6 @@
--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
@@ -1081,7 +1081,7 @@
@@ -1086,7 +1086,7 @@
staidx=0
[ -n "$chanbw" ] && {
@ -9,14 +9,12 @@
[ -f "$file" ] && echo "$chanbw" > "$file"
done
}
--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
@@ -1098,6 +1098,8 @@
iw phy "$phy" set antenna_gain $antenna_gain >/dev/null 2>&1
if [ $distance -eq 0 -a -d /sys/kernel/debug/ieee80211/$phy/ath9k ]; then
iw phy "$phy" set distance auto
+ elif [ $distance -eq 0 -a -d /sys/kernel/debug/ieee80211/$phy/ath10k ]; then
+ iw phy "$phy" set distance auto
else
iw phy "$phy" set distance "$distance"
fi
@@ -1104,6 +1104,8 @@
iw phy "$phy" set antenna $txantenna $rxantenna >/dev/null 2>&1
if [ $distance -eq 0 -a -d /sys/kernel/debug/ieee80211/$phy/ath9k ]; then
iw phy "$phy" set distance auto
+ elif [ $distance -eq 0 -a -d /sys/kernel/debug/ieee80211/$phy/ath10k ]; then
+ iw phy "$phy" set distance auto
else
iw phy "$phy" set distance "$distance"
fi

View File

@ -38,9 +38,10 @@
--- /dev/null
+++ b/target/linux/ath79/dts/ar9344_mikrotik_routerboard-ldf-5nd.dts
@@ -0,0 +1,91 @@
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "ar9344_mikrotik_routerboard.dtsi"
+#include "ar9344_mikrotik_routerboard-16m-nor.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
@ -132,9 +133,10 @@
+};
--- /dev/null
+++ b/target/linux/ath79/dts/ar9344_mikrotik_routerboard-sxt-5nd.dts
@@ -0,0 +1,91 @@
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "ar9344_mikrotik_routerboard.dtsi"
+#include "ar9344_mikrotik_routerboard-16m-nor.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
@ -237,11 +239,10 @@
+};
--- a/target/linux/ipq40xx/image/mikrotik.mk
+++ b/target/linux/ipq40xx/image/mikrotik.mk
@@ -62,3 +62,27 @@
DEVICE_PACKAGES := rssileds
@@ -71,6 +71,30 @@
endef
TARGET_DEVICES += mikrotik_sxtsq-5-ac
+
+define Device/mikrotik_ldf-5acd
+ $(call Device/mikrotik_nor)
+ DEVICE_MODEL := RouterBOARD LDF 5 AC (RBLDFG-5acD)
@ -265,6 +266,11 @@
+ DEVICE_PACKAGES := rssileds
+endef
+TARGET_DEVICES += mikrotik_lhgg-5acd-xl
+
define Device/mikrotik_wap-ac
$(call Device/mikrotik_nor)
DEVICE_MODEL := wAP ac
--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
@@ -35,6 +35,8 @@
@ -511,7 +517,7 @@
+ status = "okay";
+};
+
+&gmac0 {
+&gmac {
+ status = "okay";
+};
+
@ -551,49 +557,44 @@
+};
--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -197,6 +197,8 @@
mikrotik,cap-ac |\
mikrotik,hap-ac2 |\
@@ -210,6 +210,8 @@
mikrotik,hap-ac3 |\
mikrotik,hap-ac3-lte6-kit |\
mikrotik,sxtsq-5-ac |\
+ mikrotik,lhgg-5acd* |\
+ mikrotik,ldf-5acd |\
mikrotik,sxtsq-5-ac)
wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x8000 0x2f20 ) || \
@@ -236,6 +237,8 @@
mikrotik,cap-ac |\
mikrotik,wap-ac |\
mikrotik,wap-ac-lte |\
mikrotik,wap-r-ac)
@@ -249,6 +251,8 @@
mikrotik,hap-ac2 |\
mikrotik,hap-ac3 |\
mikrotik,hap-ac3-lte6-kit |\
+ mikrotik,lhgg-5acd* |\
+ mikrotik,ldf-5acd |\
mikrotik,sxtsq-5-ac)
wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0xaf20 0x2f20 ) || \
mikrotik,wap-ac |\
mikrotik,wap-ac-lte |\
mikrotik,wap-r-ac)
@@ -265,6 +269,8 @@
mikrotik,hap-ac3 |\
mikrotik,hap-ac3-lte6-kit |\
mikrotik,sxtsq-5-ac |\
+ mikrotik,lhgg-5acd*|\
+ mikrotik,ldf-5acd|\
mikrotik,wap-ac |\
mikrotik,wap-ac-lte |\
mikrotik,wap-r-ac)
--- a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
@@ -163,12 +163,14 @@
;;
@@ -181,6 +181,8 @@
mikrotik,cap-ac|\
mikrotik,hap-ac2|\
mikrotik,hap-ac3-lte6-kit|\
+ mikrotik,lhgg-5acd*|\
+ mikrotik,ldf-5acd|\
mikrotik,lhgg-60ad|\
mikrotik,sxtsq-5-ac)
[ "$(rootfs_type)" = "tmpfs" ] && mtd erase firmware
default_do_upgrade "$1"
;;
mikrotik,hap-ac3)
platform_do_upgrade_mikrotik_nand "$1"
;;
netgear,rbr50 |\
--- a/target/linux/ath79/image/common-mikrotik.mk
+++ b/target/linux/ath79/image/common-mikrotik.mk
@@ -17,5 +17,4 @@
IMAGE/sysupgrade.bin = append-kernel | kernel2minor -s 2048 -e -c | \
sysupgrade-tar kernel=$$$$@ | append-metadata
DEVICE_PACKAGES := nand-utils
- DEFAULT := n
endef
mikrotik,sxtsq-5-ac|\
mikrotik,wap-ac|\
--- a/target/linux/ath79/image/mikrotik.mk
+++ b/target/linux/ath79/image/mikrotik.mk
@@ -28,6 +28,16 @@
@ -668,246 +669,14 @@
--- /dev/null
+++ b/target/linux/ath79/dts/ar9342_mikrotik_routerboard-912uag-5hpnd.dts
@@ -0,0 +1,240 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include "ar9344.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include "ar9342_mikrotik_routerboard-912uag-2hpnd.dts"
+
+/ {
+ compatible = "mikrotik,routerboard-912uag-5hpnd", "qca,ar9342";
+ model = "MikroTik RouterBOARD 912UAG-5HPnD";
+
+ aliases {
+ led-boot = &led_power;
+ led-failsafe = &led_power;
+ led-running = &led_power;
+ led-upgrade = &led_power;
+ };
+
+ gpio_key: gpio_key {
+ compatible = "mikrotik,gpio-rb91x-key";
+ gpio-controller;
+ #gpio-cells = <2>;
+ gpio = <&gpio 15 GPIO_ACTIVE_HIGH>;
+ };
+
+ gpio_latch: gpio_latch {
+ compatible = "gpio-latch";
+ gpio-controller;
+ #gpio-cells = <2>;
+ gpios = <&gpio 0 GPIO_ACTIVE_HIGH>,
+ <&gpio 1 GPIO_ACTIVE_HIGH>,
+ <&gpio 2 GPIO_ACTIVE_HIGH>,
+ <&gpio 3 GPIO_ACTIVE_HIGH>,
+ <0>, /* Not connected */
+ <&gpio 13 GPIO_ACTIVE_HIGH>,
+ <&gpio 14 GPIO_ACTIVE_HIGH>,
+ <&gpio_key 0 GPIO_ACTIVE_HIGH>,
+ <&gpio 11 GPIO_ACTIVE_LOW>; /* Latch Enable */
+ };
+
+ nand_gpio {
+ compatible = "mikrotik,rb91x-nand";
+
+ gpios = <&gpio_latch 3 GPIO_ACTIVE_HIGH>, /* Read */
+ <&gpio 4 GPIO_ACTIVE_HIGH>, /* Ready (RDY) */
+ <&gpio_latch 5 GPIO_ACTIVE_LOW>, /* Chip Enable (nCE) */
+ <&gpio_latch 6 GPIO_ACTIVE_HIGH>, /* Command Latch Enable (CLE) */
+ <&gpio_latch 7 GPIO_ACTIVE_HIGH>, /* Address Latch Enable (ALE) */
+ <&gpio 12 GPIO_ACTIVE_LOW>, /* Read/Write Enable (nRW) */
+ <&gpio_latch 8 GPIO_ACTIVE_LOW>, /* Latch Enable (nLE) */
+ <&gpio_key 2 GPIO_ACTIVE_HIGH>; /* Key poll disable */
+
+ partitions {
+ compatible = "fixed-partitions";
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "booter";
+ reg = <0x0 0x0040000>;
+ read-only;
+ };
+
+ partition@40000 {
+ label = "kernel";
+ reg = <0x0040000 0x03c0000>;
+ };
+
+ partition@400000 {
+ label = "ubi";
+ reg = <0x0400000 0x7c00000>;
+ };
+ };
+ };
+
+ keys {
+ compatible = "gpio-keys-polled";
+ poll-interval = <20>;
+
+ button@0 {
+ label = "reset";
+ linux,code = <KEY_RESTART>;
+ gpios = <&gpio_key 1 GPIO_ACTIVE_LOW>;
+ };
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ led_power: power {
+ label = "green:power";
+ gpios = <&gpio_latch 1 GPIO_ACTIVE_HIGH>;
+ default-state = "on";
+ };
+
+ user {
+ label = "green:user";
+ gpios = <&gpio_latch 2 GPIO_ACTIVE_HIGH>;
+ };
+
+ led1 {
+ label = "green:led1";
+ gpios = <&ssr 0 GPIO_ACTIVE_HIGH>;
+ };
+
+ led2 {
+ label = "green:led2";
+ gpios = <&ssr 1 GPIO_ACTIVE_HIGH>;
+ };
+
+ led3 {
+ label = "green:led3";
+ gpios = <&ssr 2 GPIO_ACTIVE_HIGH>;
+ };
+
+ led4 {
+ label = "green:led4";
+ gpios = <&ssr 3 GPIO_ACTIVE_HIGH>;
+ };
+
+ led5 {
+ label = "green:led5";
+ gpios = <&ssr 4 GPIO_ACTIVE_HIGH>;
+ };
+ };
+
+ gpio-export {
+ compatible = "gpio-export";
+
+ beeper {
+ gpio-export,name = "beeper";
+ gpio-export,output = <1>; /* Must be 1 to avoid EMI induced clicking noise */
+ gpios = <&ssr 5 GPIO_ACTIVE_HIGH>;
+ };
+
+ usb_power {
+ gpio-export,name = "power-usb";
+ gpio-export,output = <1>;
+ gpios = <&ssr 6 GPIO_ACTIVE_HIGH>;
+ };
+
+ pcie_power {
+ gpio-export,name = "power-pcie";
+ gpio-export,output = <0>;
+ gpios = <&ssr 7 GPIO_ACTIVE_HIGH>;
+ };
+ };
+};
+
+&ref {
+ clock-frequency = <40000000>;
+};
+
+&spi {
+ status = "okay";
+
+ compatible = "qca,ar7100-spi";
+
+ cs-gpios = <0>, <&gpio_latch 0 GPIO_ACTIVE_LOW>;
+
+ flash@0 {
+ compatible = "jedec,spi-nor";
+ reg = <0>;
+ spi-max-frequency = <50000000>;
+
+ partitions {
+ compatible = "mikrotik,routerboot-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "routerboot";
+ reg = <0x0 0x0>;
+ read-only;
+ };
+
+ hard_config: hard_config {
+ read-only;
+ };
+
+ bios {
+ size = <0x1000>;
+ read-only;
+ };
+
+ soft_config {
+ };
+ };
+ };
+
+ ssr: ssr@1 {
+ compatible = "fairchild,74hc595";
+ gpio-controller;
+ #gpio-cells = <2>;
+ registers-number = <1>;
+ reg = <1>;
+ spi-max-frequency = <50000000>;
+ };
+};
+
+&mdio0 {
+ status = "okay";
+
+ phy-mask = <0>;
+
+ phy0: ethernet-phy@0 {
+ reg = <0>;
+ };
+};
+
+&eth0 {
+ status = "okay";
+
+ phy-mode = "rgmii-id";
+ phy-handle = <&phy0>;
+ pll-data = <0x02000000 0x00000101 0x00001313>;
+
+ gmac-config {
+ device = <&gmac>;
+ rgmii-gmac0 = <1>;
+ rxd-delay = <1>;
+ txd-delay = <1>;
+ };
+};
+
+&wmac {
+ status = "okay";
+ qca,no-eeprom;
+};
+
+&pcie {
+ status = "okay";
+};
+
+&usb {
+ status = "okay";
+};
+
+&usb_phy {
+ status = "okay";
+};
--- /dev/null
+++ b/target/linux/ath79/dts/ar9342_mikrotik_routerboard-911g-5hpnd-qrt.dts
@ -922,19 +691,23 @@
+};
--- a/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network
@@ -15,6 +15,8 @@
@@ -14,8 +14,10 @@
ucidef_add_switch "switch1" \
"0@eth1" "1:lan:4" "2:lan:1" "3:lan:2" "4:lan:3"
;;
+ mikrotik,routerboard-911g-5hpnd*|\
mikrotik,routerboard-911-lite|\
mikrotik,routerboard-912uag-2hpnd|\
+ mikrotik,routerboard-912uag-5hpnd|\
mikrotik,routerboard-lhg-2nd|\
mikrotik,routerboard-lhg-5nd|\
mikrotik,routerboard-mapl-2nd|\
@@ -69,6 +70,8 @@
@@ -73,8 +75,10 @@
local mac_base="$(cat /sys/firmware/mikrotik/hard_config/mac_base)"
case "$board" in
+ mikrotik,routerboard-911g-5hpnd*|\
mikrotik,routerboard-911-lite|\
mikrotik,routerboard-912uag-2hpnd|\
+ mikrotik,routerboard-912uag-5hpnd|\
mikrotik,routerboard-lhg-2nd|\
@ -942,10 +715,12 @@
mikrotik,routerboard-map-2nd|\
--- a/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
+++ b/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
@@ -24,6 +24,8 @@
@@ -23,8 +23,10 @@
case "$FIRMWARE" in
"ath9k-eeprom-ahb-18100000.wmac.bin")
case $board in
+ mikrotik,routerboard-911g-5hpnd*|\
mikrotik,routerboard-911-lite|\
mikrotik,routerboard-912uag-2hpnd|\
+ mikrotik,routerboard-912uag-5hpnd|\
mikrotik,routerboard-lhg-2nd|\
@ -953,15 +728,16 @@
mikrotik,routerboard-sxt-5nd|\
--- a/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh
@@ -33,6 +33,8 @@
@@ -30,7 +30,9 @@
case "$board" in
mikrotik,routerboard-493g|\
+ mikrotik,routerboard-911g-5hpnd*|\
mikrotik,routerboard-912uag-2hpnd|\
+ mikrotik,routerboard-912uag-5hpnd|\
mikrotik,routerboard-921gs-5hpacd-15s|\
mikrotik,routerboard-921gs-5hpacd-19s|\
mikrotik,routerboard-922uags-5hpacd|\
mikrotik,routerboard-951g-2hnd|\
--- a/target/linux/ath79/image/mikrotik.mk
+++ b/target/linux/ath79/image/mikrotik.mk
@@ -18,6 +18,24 @@

View File

@ -1,130 +0,0 @@
#
# Migration our hardware from the ath79-tiny build as upgrades dont work in that mode :-(
#
--- a/target/linux/ath79/image/generic-ubnt.mk
+++ b/target/linux/ath79/image/generic-ubnt.mk
@@ -295,3 +295,85 @@
SUPPORTED_DEVICES += uap-pro
endef
TARGET_DEVICES += ubnt_unifi-ap-pro
+
+define Device/ubnt_airrouter
+ $(Device/ubnt-xm)
+ SOC := ar7241
+ DEVICE_MODEL := AirRouter
+ SUPPORTED_DEVICES += airrouter
+endef
+TARGET_DEVICES += ubnt_airrouter
+
+define Device/ubnt_nanobridge-m
+ $(Device/ubnt-xm)
+ SOC := ar7241
+ DEVICE_MODEL := NanoBridge M
+ DEVICE_PACKAGES += rssileds
+ SUPPORTED_DEVICES += bullet-m
+endef
+TARGET_DEVICES += ubnt_nanobridge-m
+
+define Device/ubnt_bullet-m-ar7240
+ $(Device/ubnt-xm)
+ SOC := ar7240
+ DEVICE_MODEL := Bullet M
+ DEVICE_VARIANT := XM (AR7240)
+ DEVICE_PACKAGES += rssileds
+ SUPPORTED_DEVICES += bullet-m
+endef
+TARGET_DEVICES += ubnt_bullet-m-ar7240
+
+define Device/ubnt_bullet-m-ar7241
+ $(Device/ubnt-xm)
+ SOC := ar7241
+ DEVICE_MODEL := Bullet M
+ DEVICE_VARIANT := XM (AR7241)
+ DEVICE_PACKAGES += rssileds
+ SUPPORTED_DEVICES += bullet-m ubnt,bullet-m
+endef
+TARGET_DEVICES += ubnt_bullet-m-ar7241
+
+define Device/ubnt_picostation-m
+ $(Device/ubnt-xm)
+ SOC := ar7241
+ DEVICE_MODEL := Picostation M
+ DEVICE_PACKAGES += rssileds
+ SUPPORTED_DEVICES += bullet-m
+endef
+TARGET_DEVICES += ubnt_picostation-m
+
+define Device/ubnt_nanostation-m
+ $(Device/ubnt-xm)
+ SOC := ar7241
+ DEVICE_MODEL := Nanostation M
+ DEVICE_PACKAGES += rssileds
+ SUPPORTED_DEVICES += nanostation-m
+endef
+TARGET_DEVICES += ubnt_nanostation-m
+
+define Device/ubnt_nanostation-loco-m
+ $(Device/ubnt-xm)
+ SOC := ar7241
+ DEVICE_MODEL := Nanostation Loco M
+ DEVICE_PACKAGES += rssileds
+ SUPPORTED_DEVICES += bullet-m
+endef
+TARGET_DEVICES += ubnt_nanostation-loco-m
+
+define Device/ubnt_powerbridge-m
+ $(Device/ubnt-xm)
+ SOC := ar7241
+ DEVICE_MODEL := PowerBridge M
+ DEVICE_PACKAGES += rssileds
+ SUPPORTED_DEVICES += bullet-m
+endef
+TARGET_DEVICES += ubnt_powerbridge-m
+
+define Device/ubnt_rocket-m
+ $(Device/ubnt-xm)
+ SOC := ar7241
+ DEVICE_MODEL := Rocket M
+ DEVICE_PACKAGES += rssileds
+ SUPPORTED_DEVICES += rocket-m
+endef
+TARGET_DEVICES += ubnt_rocket-m
--- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
@@ -536,6 +536,20 @@
ucidef_set_interface "dtdlink" device "eth0.2 eth1.2" protocol "static"
ucidef_set_interface "wifi" device "wlan0" protocol "static"
;;
+ ubnt,nanostation-m)
+ ucidef_set_interfaces_lan_wan "eth0 eth1" "eth0.1 eth1.1"
+ ucidef_set_interface "dtdlink" device "eth0.2 eth1.2" protocol "static"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
+ ;;
+ ubnt,bullet-m-ar7241|\
+ ubnt,nanobridge-m|\
+ ubnt,powerbridge-m|\
+ ubnt,rocket-m)
+ ucidef_set_interfaces_lan_wan "eth0" "eth0.1"
+ ucidef_set_interface "dtdlink" device "eth0.2" protocol "static"
+ ucidef_set_interface "wifi" device "wlan0" protocol "static"
+ ;;
+
*)
ucidef_set_interfaces_lan_wan "eth0" "eth0.1"
ucidef_set_interface "dtdlink" device "eth0.2" protocol "static"
--- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
+++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
@@ -139,6 +139,13 @@
caldata_extract "art" 0x1000 0x1000
ath9k_patch_mac $(nvram get wl0_hwaddr)
;;
+ ubnt,nanostation-m|\
+ ubnt,bullet-m-ar7241|\
+ ubnt,nanobridge-m|\
+ ubnt,powerbridge-m|\
+ ubnt,rocket-m)
+ caldata_extract "art" 0x1000 0x1000
+ ;;
*)
caldata_die "board $board is not supported yet"
;;

View File

@ -0,0 +1,37 @@
--- a/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh
@@ -7,7 +7,8 @@
return 0
}
-RAMFS_COPY_BIN='yafut'
+RAMFS_COPY_BIN='fw_printenv fw_setenv nandwrite'
+RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock'
platform_do_upgrade_mikrotik_nand() {
CI_KERNPART=none
@@ -20,7 +21,8 @@
board_dir=${board_dir%/}
[ -n "$board_dir" ] || return
- tar xf "$1" ${board_dir}/kernel -O | yafut -d "$fw_mtd" -w -i - -o kernel -m 0755 || return
+ mtd erase kernel
+ tar xf "$1" ${board_dir}/kernel -O | nandwrite -o "$fw_mtd" -
nand_do_upgrade "$1"
}
--- a/target/linux/ath79/image/common-mikrotik.mk
+++ b/target/linux/ath79/image/common-mikrotik.mk
@@ -17,9 +17,7 @@
define Device/mikrotik_nand
$(Device/mikrotik)
- IMAGE/sysupgrade.bin = append-kernel | sysupgrade-tar | append-metadata
- DEVICE_COMPAT_MESSAGE := \
- NAND images switched to yafut. If running older image, reinstall from initramfs.
- DEVICE_COMPAT_VERSION := 1.1
-
+ IMAGE/sysupgrade.bin = append-kernel | kernel2minor -s 2048 -e -c | \
+ sysupgrade-tar kernel=$$$$@ | append-metadata
+ DEVICE_PACKAGES := nand-utils
endef

77
patches/753-ubiquiti-2ac.patch Executable file
View File

@ -0,0 +1,77 @@
--- a/target/linux/ath79/image/generic-ubnt.mk
+++ b/target/linux/ath79/image/generic-ubnt.mk
@@ -79,6 +79,13 @@
endef
TARGET_DEVICES += ubnt_nanobeam-ac-gen2
+define Device/ubnt_nanobeam-2ac-13
+ $(Device/ubnt-2wa)
+ DEVICE_MODEL := NanoBeam 2AC 13
+ DEVICE_PACKAGES += kmod-ath10k-ct-smallbuffers ath10k-firmware-qca988x-ct rssileds
+endef
+TARGET_DEVICES += ubnt_nanobeam-2ac-13
+
define Device/ubnt_nanobeam-ac-xc
$(Device/ubnt-xc)
SOC := qca9558
--- /dev/null
+++ b/target/linux/ath79/dts/ar9342_ubnt_nanobeam-2ac-13.dts
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "ar9342_ubnt_wa_1port.dtsi"
+
+/ {
+ compatible = "ubnt,nanobeam-2ac-13", "ubnt,wa", "qca,ar9342";
+ model = "Ubiquiti NanoBeam 2AC 13 (2WA)";
+
+ aliases {
+ led-boot = &led_rssi3;
+ led-failsafe = &led_rssi3;
+ led-upgrade = &led_rssi3;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ rssi0 {
+ label = "blue:rssi0";
+ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+ };
+
+ rssi1 {
+ label = "blue:rssi1";
+ gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
+ };
+
+ rssi2 {
+ label = "blue:rssi2";
+ gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+ };
+
+ led_rssi3: rssi3 {
+ label = "blue:rssi3";
+ gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+ };
+ };
+};
--- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
@@ -103,6 +103,7 @@
ubnt,lap-120|\
ubnt,litebeam-ac-gen2|\
ubnt,nanobeam-ac|\
+ ubnt,nanobeam-2ac-13|\
ubnt,nanobeam-ac-xc|\
ubnt,nanobeam-ac-gen2-xc|\
ubnt,nanobeam-m5-1[69]|\
--- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -43,6 +43,7 @@
ubnt,lap-120|\
ubnt,litebeam-ac-gen2|\
ubnt,nanobeam-ac|\
+ ubnt,nanobeam-2ac-13|\
ubnt,nanobeam-ac-gen2|\
ubnt,nanobeam-ac-gen2-xc|\
ubnt,nanobeam-ac-xc|\

View File

@ -62,15 +62,15 @@
DEVICE_MODEL := AirRouter
- SUPPORTED_DEVICES += airrouter
+ SUPPORTED_DEVICES += airrouter ubnt,airrouter
DEFAULT := n
endef
TARGET_DEVICES += ubnt_airrouter
@@ -13,7 +13,7 @@
@@ -14,7 +14,7 @@
SOC := ar7241
DEVICE_MODEL := NanoBridge M
DEVICE_PACKAGES += rssileds
- SUPPORTED_DEVICES += bullet-m
+ SUPPORTED_DEVICES += bullet-m ubnt,bullet-m
DEFAULT := n
endef
TARGET_DEVICES += ubnt_nanobridge-m

View File

@ -1,10 +1,8 @@
0001-ath79-add-support-for-TP-Link-CPE605-v1.patch
001-ath79-cpe220v3-sysupgrade-supported.patch
001-ath79-reverse-wpad-basic-wolfssl.patch
006-rocket-m-flash-fix.patch
001-ath79-reverse-wpad-basic-mbedtls.patch
006-flash-fixes.patch
010-lz77-decompression-support.patch
100-remove-rcbutton-reset.patch
701-ath9k-reset.patch
701-extended-spectrum.patch
702-enable-country-hx.patch
703-fix-dnsmasq.patch
@ -13,8 +11,8 @@
705-aredn-banner.patch
706-MeshNode-SSID.patch
708-define-aredn-ath79-networks.patch
708-define-aredn-rocket-m-networks.patch
708-define-aredn-ipq40xx-networks.patch
708-define-aredn-ramips-networks.patch
709-iperf-fw-restart.patch
710-no-ping6-traceroute6.patch
711-aredn-ports-dumbswitch-ar8216.patch
@ -25,20 +23,21 @@
717-fix-olsrd-oparse-error.patch
718-temp-remove-olsrd-pud.patch
719-disable-ipv6.patch
730-ipq40xx-dsa.patch
731-ag71xx-updates-and-fixes.patch
742-5-and-10mhz-ath10k-ct-support.patch
742-radio-extend-mediatek-support.patch
743-mac80211-ath10k.patch
744-dd-wrt-firmware.patch
745-ath10k-more-scan-channels.patch
746-rocket-m-xw-support.patch
747-mikrotik-extra-support.patch
748-powerbeam-m5-300-support.patch
749-copy-tiny-nodes-to-generic.patch
749-fix-tiny.patch
749-ubiquiti-extra-support.patch
749-ubiquiti-firmware-version.patch
750-ibss-2g-fix.patch
751-x86.patch
752-mikrotik-nand-revert.patch
753-ubiquiti-2ac.patch
800-upgrade-compatibility.patch
801-mikrotik-lhg-variants.patch