From bc2572b3d51cda02f2de18c099974fd3b6ba07a6 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 8 Jan 2023 19:07:47 +0100
Subject: [PATCH 001/129] set makefile to build from master - update patches
for gluon master - update README
---
Makefile | 2 +-
README.md | 5 +-
i18n/fr.po | 68 ++++++++++
...re-the-correct-version-for-fritz7360.patch | 107 ----------------
patches/targets-fix-bridge.patch | 38 ------
patches/targets-ipq40xx-fritz-box-7520.patch | 12 --
patches/targets-lantiq-xrx200-devices.patch | 116 +++++++++++++-----
7 files changed, 159 insertions(+), 189 deletions(-)
create mode 100644 i18n/fr.po
delete mode 100644 patches/0001-xrx200-ensure-the-correct-version-for-fritz7360.patch
delete mode 100644 patches/targets-fix-bridge.patch
delete mode 100644 patches/targets-ipq40xx-fritz-box-7520.patch
diff --git a/Makefile b/Makefile
index 4612275..67a4d6e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := v2022.1.x
+GLUON_GIT_REF := master #v2022.1.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
diff --git a/README.md b/README.md
index 37d3b7a..5decb83 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,10 @@
This repository contains the site configuration for the Freifunk Aachen Gluon
firmware.
-This branch is compatible to Gluon v2022.1.x which is based on OpenWRT 22.03
+This is the `next` branch which is compatible to Gluon master.
+
+Nothing is guaranteed here, it might get force-pushed from time to time to be rebased onto v2022.1.x.
+It provides an option to test devices which are available in Gluon's master branch but are not released yet.
This config uses the upstream `gluon-mesh-vpn-wireguard` [^gluon-meshvpn] implementation.
Registration of the wireguard keys is done using a custom `wg-registration` package which sends the key through POST to our broker.
diff --git a/i18n/fr.po b/i18n/fr.po
new file mode 100644
index 0000000..7d91e99
--- /dev/null
+++ b/i18n/fr.po
@@ -0,0 +1,68 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2015-08-06 20:28+0100\n"
+"Last-Translator: Tobias Bernot \n"
+"Language-Team: French\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "gluon-config-mode:welcome"
+msgstr ""
+"Bienvenue dans l'assistant de configuration pour votre nouveau nœud "
+"Freifunk. Remplissez le formulaire suivant en fonction de vos besoins "
+"et enregistrez le."
+
+msgid "gluon-config-mode:domain"
+msgstr "Domaine"
+
+msgid "gluon-config-mode:domain-select"
+msgstr "Ici, vous avez la possibilité de sélectionner le domaine dans lequel "
+"se trouve votre nœud. N'oubliez pas que votre nœud ne peut se connecter "
+"qu'aux nœuds du domaine sélectionné."
+
+msgid "gluon-config-mode:pubkey"
+msgstr ""
+" "
+
+msgid "gluon-config-mode:novpn"
+msgstr ""
+"Vous avez choisi de ne pas utiliser "
+"le réseau VPN. Votre nœud ne pourra se connecter au réseau Freifunk que si "
+"d'autres nœuds à portée ont déjà une connexion.
"
+
+msgid "gluon-config-mode:reboot"
+msgstr ""
+"Votre nœud <%= pcdata(hostname) %> es en train de redémarrer et "
+"va ensuite éssayer de se connecter avec les autres nœuds du réseau Freifunk "
+"Vous pourrez trouver plus d'informations sur votre groupe Freifunk sur la page "
+" de ton "
+"groupe .
"
+" Pour retrouver cette page de configuration veuillier appuyez pendant le "
+"fonctionement normal pendant 3 Secondes sur le bouton reset. L'appareil va "
+"ensuite redémarer en mode configuration.
"
+"Profitez votre de nœud et amusez vous à découvrir le réseau Freifunk!
"
+
+# Leave empty to use the default text, which can be found in:
+# package/gluon-config-mode-hostname/i18n/
+msgid "gluon-config-mode:hostname-help"
+msgstr ""
+
+# Leave empty to use the default text, which can be found in:
+# package/gluon-config-mode-geo-location/i18n/
+msgid "gluon-config-mode:geo-location-help"
+msgstr ""
+
+msgid "gluon-config-mode:altitude-label"
+msgstr ""
+
+# Leave empty to use the default text, which can be found in:
+# package/gluon-config-mode-contact-info/i18n/
+msgid "gluon-config-mode:contact-help"
+msgstr ""
+
+msgid "gluon-config-mode:contact-note"
+msgstr ""
diff --git a/patches/0001-xrx200-ensure-the-correct-version-for-fritz7360.patch b/patches/0001-xrx200-ensure-the-correct-version-for-fritz7360.patch
deleted file mode 100644
index e6fba02..0000000
--- a/patches/0001-xrx200-ensure-the-correct-version-for-fritz7360.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 449bbb4e66bdf09706aac68a103200848249787a Mon Sep 17 00:00:00 2001
-From: Grische
-Date: Sun, 18 Sep 2022 14:05:21 +0200
-Subject: [PATCH] xrx200: ensure the correct version for fritz7360
-
----
- ...re-the-correct-version-for-fritz7360.patch | 88 +++++++++++++++++++
- 1 file changed, 88 insertions(+)
- create mode 100644 patches/openwrt/0007-xrx200-ensure-the-correct-version-for-fritz7360.patch
-
-diff --git a/patches/openwrt/0007-xrx200-ensure-the-correct-version-for-fritz7360.patch b/patches/openwrt/0007-xrx200-ensure-the-correct-version-for-fritz7360.patch
-new file mode 100644
-index 00000000..260ffaac
---- /dev/null
-+++ b/patches/openwrt/0007-xrx200-ensure-the-correct-version-for-fritz7360.patch
-@@ -0,0 +1,88 @@
-+From c9ea8ac5566d8d11c16f36577323c830d18e4300 Mon Sep 17 00:00:00 2001
-+From: Grische
-+Date: Sun, 18 Sep 2022 14:03:16 +0200
-+Subject: [PATCH] xrx200: ensure the correct version for fritz7360
-+
-+https://github.com/freifunk-gluon/gluon/pull/2648
-+---
-+ .../base-files/lib/preinit/01_sysinfo.sh | 68 +++++++++++++++++++
-+ 1 file changed, 68 insertions(+)
-+ create mode 100644 target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh
-+
-+diff --git a/target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh b/target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh
-+new file mode 100644
-+index 0000000000..d91b3dd614
-+--- /dev/null
-++++ b/target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh
-+@@ -0,0 +1,68 @@
-++set_sysinfo_xrx200_for_fritz7360_model() {
-++ local board_name=$1
-++ local model
-++ local urlader_version urlader_memsize urlader_flashsize
-++ local hexdump_format='4/1 "%02x""\n"'
-++
-++ # Values are based on urlader-parser-py
-++ # https://github.com/grische/urlader-parser-py/blob/42970bf8dec7962317df4ff734c57ebf36df8905/parser.py#L77-L84
-++ urlader_version="$(dd if=/dev/mtd0ro bs=1 skip=$((0x580+0x0)) count=4 | hexdump -e "${hexdump_format}")"
-++ if [ "${urlader_version}" != "00000003" ]; then
-++ logger -s -p warn -t sysinfo-xrx200 "unexpected urlader version found: ${urlader_version}"
-++ return
-++ fi
-++
-++ urlader_memsize="$(dd if=/dev/mtd0ro bs=1 skip=$((0x580+0x4)) count=4 | hexdump -e "${hexdump_format}")"
-++ if [ "${urlader_memsize}" != "08000000" ]; then
-++ logger -s -p warn -t sysinfo-xrx200 "unexpected memsize found: ${urlader_memsize}"
-++ return
-++ fi
-++
-++ urlader_flashsize="$(dd if=/dev/mtd0ro bs=1 skip=$((0x580+0x8)) count=4 | hexdump -e "${hexdump_format}")"
-++ case "${urlader_flashsize}" in
-++ "02000000") # 32MB
-++ # see vr9_avm_fritz7360-v2.dts
-++ board_name="avm,fritz7360-v2"
-++ model="AVM FRITZ!Box 7360 V2"
-++ ;;
-++ "01000000") # 16MB
-++ # see vr9_avm_fritz7360sl.dts
-++ board_name="avm,fritz7360sl"
-++ model="AVM FRITZ!Box 7360 SL"
-++ ;;
-++ *)
-++ logger -s -p warn -t sysinfo-xrx200 "unexpected flashsize found: ${urlader_flashsize}"
-++ return
-++ ;;
-++ esac
-++
-++ logger -s -p notice -t sysinfo-xrx200 "detected ${board_name} from urlader partition /dev/mtd0ro. Enforcing model ${model}."
-++ echo "${board_name}" > /tmp/sysinfo/board_name
-++ echo "${model}" > /tmp/sysinfo/model
-++}
-++
-++do_sysinfo_xrx200() {
-++ local reported_board board_name model
-++
-++ [ -d /proc/device-tree ] || return
-++ reported_board="$(strings /proc/device-tree/compatible | head -1)"
-++
-++ mkdir -p /tmp/sysinfo
-++ # 7360 is notoriously known for not writing "v2" on their labels and many
-++ # routers have flashed the wrong firmware with the wrong flash layout.
-++ # We ensure that the underlying hardware is reported correctly, so that
-++ # future upgrades will use the correct flash layout.
-++ # Using 7360v2 hardware, an upgrade from a 7360v1/sl firmware to a 7360v2
-++ # is working.
-++ case "${reported_board}" in
-++ *7360*)
-++ set_sysinfo_xrx200_for_fritz7360_model "${reported_board}"
-++ ;;
-++ *)
-++ # fall back to OpenWRT's sysinfo detection
-++ return
-++ ;;
-++ esac
-++}
-++
-++boot_hook_add preinit_main do_sysinfo_xrx200
-+--
-+2.25.1
-+
---
-2.25.1
-
diff --git a/patches/targets-fix-bridge.patch b/patches/targets-fix-bridge.patch
deleted file mode 100644
index 8d40f96..0000000
--- a/patches/targets-fix-bridge.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-index cf21e907..d9b05b0a 100755
---- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-@@ -67,6 +67,14 @@ elseif platform.match('ramips', 'mt7621', {
- 'netgear,wac104',
- }) then
- lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
-+elseif platform.match('ipq40xx', 'generic', {
-+ 'avm,fritz-box-7530',
-+}) then
-+ lan_ifname, wan_ifname = 'eth0.2 eth0.3 eth0.4', 'eth0.1'
-+elseif platform.match('lantiq', 'xrx200', {
-+ 'arcadyan,vgv7510kw22-nor',
-+}) then
-+ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan'
- end
-
- if wan_ifname and lan_ifname then
-diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/115-swconfig b/package/gluon-core/luasrc/lib/gluon/upgrade/115-swconfig
-index 719d90c0..19824c7f 100755
---- a/package/gluon-core/luasrc/lib/gluon/upgrade/115-swconfig
-+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/115-swconfig
-@@ -7,12 +7,13 @@ local switch_vlans = {
- -- device identifier, lan ports, wan ports
- ["ubnt,unifiac-mesh-pro"] = {"3 0t", "2 0t"},
- ["ubnt,unifiac-pro"] = {"2 0t", "3 0t"},
-+ ["avm,fritz-box-7530"] = {"2 3 4", "1"},
- }
-
- local board_name = platform.get_board_name()
- local assignments = switch_vlans[board_name]
-
--if not platform.match('ath79', 'generic') or not assignments then
-+if not assignments then
- return
- end
-
diff --git a/patches/targets-ipq40xx-fritz-box-7520.patch b/patches/targets-ipq40xx-fritz-box-7520.patch
deleted file mode 100644
index 4bd89d8..0000000
--- a/patches/targets-ipq40xx-fritz-box-7520.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index e3fc746b..d5194a37 100644
---- a/targets/ipq40xx-generic
-+++ b/targets/ipq40xx-generic
-@@ -50,6 +50,7 @@ device('avm-fritz-box-4040', 'avm_fritzbox-4040', {
-
- device('avm-fritz-box-7530', 'avm_fritzbox-7530', {
- factory = false,
-+ aliases = {'avm-fritz-box-7520'},
- })
-
- device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', {
diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch
index d16810e..99fb40d 100644
--- a/patches/targets-lantiq-xrx200-devices.patch
+++ b/patches/targets-lantiq-xrx200-devices.patch
@@ -1,44 +1,100 @@
+From 697cc96f7ce11f292cae7e437e646c12842a4723 Mon Sep 17 00:00:00 2001
+From: Florian Maurer
+Date: Sun, 11 Dec 2022 20:01:32 +0100
+Subject: [PATCH 1/2] lantiq-xrx200: add Arcadyan VGV7510KW22 (o2 Box 6431)
+
+---
+ docs/user/supported_devices.rst | 4 ++++
+ package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac | 3 +++
+ package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces | 4 ++++
+ targets/lantiq-xrx200 | 5 +++++
+ 4 files changed, 16 insertions(+)
+
+diff --git a/docs/user/supported_devices.rst b/docs/user/supported_devices.rst
+index d4727adaf1..54b8e26e6d 100644
+--- a/docs/user/supported_devices.rst
++++ b/docs/user/supported_devices.rst
+@@ -238,6 +238,10 @@ ipq806x-generic
+ lantiq-xrx200
+ -------------
+
++* Arcadyan
++
++ - VGV7510KW22 (o2 Box 6431)
++
+ * AVM
+
+ - FRITZ!Box 7360 (v1, v2) [#avmflash]_ [#lan_as_wan]_
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-index 597201f3..72d73190 100755
+index 597201f3..7244caef 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-@@ -90,6 +90,10 @@ local primary_addrs = {
- {'lantiq', 'xway', {
- 'netgear,dgn3500b',
- }},
-+ {'lantiq', 'xrx200', {
-+ 'arcadyan,vgv7510kw22-nor',
-+ 'avm,fritz7430',
-+ }},
- {'ramips', 'mt7620', {
- 'netgear,ex3700',
- 'tplink,archer-c2-v1',
+@@ -87,6 +87,10 @@ local primary_addrs = {
+ {'ipq806x', 'generic', {
+ 'netgear,r7800',
+ }},
++ {'lantiq', 'xrx200', {
++ 'arcadyan,vgv7510kw22-nor',
++ 'avm,fritz7430',
++ }},
+ {'lantiq', 'xway', {
+ 'netgear,dgn3500b',
+ }},
+diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
+index 997c115974..fe34b849d0 100755
+--- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
+@@ -67,6 +67,10 @@ elseif platform.match('ramips', 'mt7621', {
+ 'netgear,wac104',
+ }) then
+ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
++elseif platform.match('lantiq', 'xrx200', {
++ 'arcadyan,vgv7510kw22-nor',
++}) then
++ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
+ elseif platform.match('realtek', 'rtl838x', {
+ 'd-link,dgs-1210-10p',
+ }) then
diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200
-index 364c0c31..7590efd5 100644
+index 047db6da..978fb2af 100644
--- a/targets/lantiq-xrx200
+++ b/targets/lantiq-xrx200
-@@ -47,6 +47,10 @@ device('avm-fritz-box-7412', 'avm_fritz7412', {
- factory = false,
+@@ -47,6 +47,15 @@ device('avm-fritz-box-7412', 'avm_fritz7412', {
+ factory = false,
})
+device('avm-fritz-box-7430', 'avm_fritz7430', {
-+ factory = false,
++ factory = false,
+})
-+
- -- TP-Link
-
- -- CAVEAT: These devices don't have a dedicated WAN port.
-@@ -63,3 +67,11 @@ device('tp-link-td-w8980', 'tplink_tdw8980', {
- aliases = {'tp-link-td-w9980'},
- broken = true, -- 5GHz unsupported
- })
-+
-+
-+-- O2
+
+device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', {
-+ factory = false,
-+ aliases = {'o2-box-6431'},
++ factory = false,
++ aliases = {'o2-box-6431'},
+})
++
+ -- TP-Link
+
+ -- CAVEAT: These devices don't have a dedicated WAN port.
+
+From 264ec4bdf6c0cbbc68ada925eefcccf157befe57 Mon Sep 17 00:00:00 2001
+From: Florian Maurer
+Date: Sun, 11 Dec 2022 21:49:17 +0100
+Subject: [PATCH 2/2] update lan, wan separation for o2 6431
+
+---
+ package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
-\ No newline at end of file
+diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
+index fe34b849d0..063ab1a1d5 100755
+--- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
+@@ -70,7 +70,7 @@ elseif platform.match('ramips', 'mt7621', {
+ elseif platform.match('lantiq', 'xrx200', {
+ 'arcadyan,vgv7510kw22-nor',
+ }) then
+- lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
++ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan'
+ elseif platform.match('realtek', 'rtl838x', {
+ 'd-link,dgs-1210-10p',
+ }) then
From b3c2831566d42e3f420540d324316364485a6834 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 14 Jan 2023 14:34:30 +0000
Subject: [PATCH 002/129] add final o2box support, clean next
---
Makefile | 2 +-
modules | 6 +--
...h => targets-lantiq-xrx200-devices1.patch} | 0
patches/targets-lantiq-xrx200-devices2.patch | 44 +++++++++++++++++++
4 files changed, 46 insertions(+), 6 deletions(-)
rename patches/{targets-lantiq-xrx200-devices.patch => targets-lantiq-xrx200-devices1.patch} (100%)
create mode 100644 patches/targets-lantiq-xrx200-devices2.patch
diff --git a/Makefile b/Makefile
index 67a4d6e..4b875a3 100644
--- a/Makefile
+++ b/Makefile
@@ -39,7 +39,7 @@ else
GLUON_AUTOUPDATER_ENABLED := 1
EXP_FALLBACK = $(shell date '+%Y%m%d')
BUILD_NUMBER ?= $(EXP_FALLBACK)
- GLUON_RELEASE := $(shell git describe --tags)~exp$(BUILD_NUMBER)
+ GLUON_RELEASE := $(shell git describe --tags)-next$(BUILD_NUMBER)
endif
JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l)
diff --git a/modules b/modules
index a96ea9c..df2f360 100644
--- a/modules
+++ b/modules
@@ -1,8 +1,4 @@
-GLUON_SITE_FEEDS="ssidchanger ffac eulenfunk ffho"
-
-PACKAGES_SSIDCHANGER_REPO=https://github.com/ffac/gluon-ssid-changer.git
-PACKAGES_SSIDCHANGER_COMMIT=f962ab17723be144849ff988909e3a794d612d56
-PACKAGES_SSIDCHANGER_BRANCH=2019.1.x
+GLUON_SITE_FEEDS="ffac eulenfunk ffho"
PACKAGES_FFAC_REPO=https://github.com/maurerle/gluon-mesh-vpn-wireguard.git
PACKAGES_FFAC_COMMIT=fb9dd6ae7eb80c8ad8d88b3088dd592569cf8860
diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices1.patch
similarity index 100%
rename from patches/targets-lantiq-xrx200-devices.patch
rename to patches/targets-lantiq-xrx200-devices1.patch
diff --git a/patches/targets-lantiq-xrx200-devices2.patch b/patches/targets-lantiq-xrx200-devices2.patch
new file mode 100644
index 0000000..609378e
--- /dev/null
+++ b/patches/targets-lantiq-xrx200-devices2.patch
@@ -0,0 +1,44 @@
+diff --git a/patches/openwrt/0040-o2box.patch b/patches/openwrt/0040-o2box.patch
+new file mode 100644
+index 00000000..d80bef7e
+--- /dev/null
++++ b/patches/openwrt/0040-o2box.patch
+@@ -0,0 +1,38 @@
++From 2e3d1edf59109d6329a00d90b1e953261d602af5 Mon Sep 17 00:00:00 2001
++From: Florian Maurer
++Date: Tue, 10 Jan 2023 13:39:50 +0100
++Subject: [PATCH] lantiq: xrx200: Fix wifi LED on o2 box 6431
++
++Wifi LED did not work using phy0radio, which somehow slipped through in
++the previous testing
++
++Signed-off-by: Florian Maurer
++---
++ .../arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi | 1 +
++ target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds | 1 -
++ 2 files changed, 1 insertion(+), 1 deletion(-)
++
++diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi
++index 1158aa371e..1a7a11db42 100644
++--- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi
+++++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi
++@@ -80,6 +80,7 @@
++ wifi: wifi {
++ label = "green:wlan";
++ gpios = <&gpio 20 GPIO_ACTIVE_LOW>;
+++ linux,default-trigger = "phy0tpt";
++ };
++
++ power_red: power2 {
++diff --git a/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds b/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds
++index 8f59538b83..0c80aaa3b8 100644
++--- a/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds
+++++ b/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds
++@@ -30,7 +30,6 @@ arcadyan,arv7519rw22)
++ arcadyan,vgv7510kw22-nor|\
++ arcadyan,vgv7510kw22-brn)
++ ucidef_set_led_netdev "internet" "internet" "$led_internet" "wan"
++- ucidef_set_led_wlan "wifi" "wifi" "green:wlan" "phy0radio"
++ ;;
++ zyxel,p-2812hnu-f1|\
++ zyxel,p-2812hnu-f3)
From e10fc884313e2cacd0d96eb63bc25cce0237f009 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 4 Feb 2023 09:10:02 +0000
Subject: [PATCH 003/129] improve build logs
---
Makefile | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 4b875a3..3c18dc7 100644
--- a/Makefile
+++ b/Makefile
@@ -23,6 +23,7 @@ GLUON_TARGETS ?= \
ramips-mt7620 \
ramips-mt7621 \
ramips-mt76x8 \
+ realtek-rtl838x \
rockchip-armv8 \
sunxi-cortexa7 \
x86-64 \
@@ -44,7 +45,7 @@ endif
JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l)
-GLUON_MAKE := ${MAKE} -j ${JOBS} -C ${GLUON_BUILD_DIR} \
+GLUON_MAKE := ${MAKE} --no-print-directory -C ${GLUON_BUILD_DIR} \
GLUON_RELEASE=${GLUON_RELEASE} \
GLUON_AUTOUPDATER_BRANCH=${GLUON_AUTOUPDATER_BRANCH} \
GLUON_AUTOUPDATER_ENABLED=${GLUON_AUTOUPDATER_ENABLED}
@@ -62,7 +63,7 @@ info:
build: gluon-prepare
for target in ${GLUON_TARGETS}; do \
echo ""Building target $$target""; \
- ${GLUON_MAKE} download all GLUON_TARGET="$$target"; \
+ ${GLUON_MAKE} -j ${JOBS} download all GLUON_TARGET="$$target"; \
done
manifest: build
From 6e427f28d2c5fbfea4b46266c18d78c5a513ff89 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 4 Feb 2023 09:22:39 +0000
Subject: [PATCH 004/129] update master
---
patches/targets-lantiq-xrx200-devices1.patch | 100 -------------------
patches/targets-lantiq-xrx200-devices2.patch | 44 --------
patches/targets-lantiq-xway-fb-7330.patch | 16 ---
3 files changed, 160 deletions(-)
delete mode 100644 patches/targets-lantiq-xrx200-devices1.patch
delete mode 100644 patches/targets-lantiq-xrx200-devices2.patch
delete mode 100644 patches/targets-lantiq-xway-fb-7330.patch
diff --git a/patches/targets-lantiq-xrx200-devices1.patch b/patches/targets-lantiq-xrx200-devices1.patch
deleted file mode 100644
index 99fb40d..0000000
--- a/patches/targets-lantiq-xrx200-devices1.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From 697cc96f7ce11f292cae7e437e646c12842a4723 Mon Sep 17 00:00:00 2001
-From: Florian Maurer
-Date: Sun, 11 Dec 2022 20:01:32 +0100
-Subject: [PATCH 1/2] lantiq-xrx200: add Arcadyan VGV7510KW22 (o2 Box 6431)
-
----
- docs/user/supported_devices.rst | 4 ++++
- package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac | 3 +++
- package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces | 4 ++++
- targets/lantiq-xrx200 | 5 +++++
- 4 files changed, 16 insertions(+)
-
-diff --git a/docs/user/supported_devices.rst b/docs/user/supported_devices.rst
-index d4727adaf1..54b8e26e6d 100644
---- a/docs/user/supported_devices.rst
-+++ b/docs/user/supported_devices.rst
-@@ -238,6 +238,10 @@ ipq806x-generic
- lantiq-xrx200
- -------------
-
-+* Arcadyan
-+
-+ - VGV7510KW22 (o2 Box 6431)
-+
- * AVM
-
- - FRITZ!Box 7360 (v1, v2) [#avmflash]_ [#lan_as_wan]_
-diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-index 597201f3..7244caef 100755
---- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-@@ -87,6 +87,10 @@ local primary_addrs = {
- {'ipq806x', 'generic', {
- 'netgear,r7800',
- }},
-+ {'lantiq', 'xrx200', {
-+ 'arcadyan,vgv7510kw22-nor',
-+ 'avm,fritz7430',
-+ }},
- {'lantiq', 'xway', {
- 'netgear,dgn3500b',
- }},
-diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-index 997c115974..fe34b849d0 100755
---- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-@@ -67,6 +67,10 @@ elseif platform.match('ramips', 'mt7621', {
- 'netgear,wac104',
- }) then
- lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
-+elseif platform.match('lantiq', 'xrx200', {
-+ 'arcadyan,vgv7510kw22-nor',
-+}) then
-+ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
- elseif platform.match('realtek', 'rtl838x', {
- 'd-link,dgs-1210-10p',
- }) then
-diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200
-index 047db6da..978fb2af 100644
---- a/targets/lantiq-xrx200
-+++ b/targets/lantiq-xrx200
-@@ -47,6 +47,15 @@ device('avm-fritz-box-7412', 'avm_fritz7412', {
- factory = false,
- })
-
-+device('avm-fritz-box-7430', 'avm_fritz7430', {
-+ factory = false,
-+})
-+
-+device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', {
-+ factory = false,
-+ aliases = {'o2-box-6431'},
-+})
-+
- -- TP-Link
-
- -- CAVEAT: These devices don't have a dedicated WAN port.
-
-From 264ec4bdf6c0cbbc68ada925eefcccf157befe57 Mon Sep 17 00:00:00 2001
-From: Florian Maurer
-Date: Sun, 11 Dec 2022 21:49:17 +0100
-Subject: [PATCH 2/2] update lan, wan separation for o2 6431
-
----
- package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-index fe34b849d0..063ab1a1d5 100755
---- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-@@ -70,7 +70,7 @@ elseif platform.match('ramips', 'mt7621', {
- elseif platform.match('lantiq', 'xrx200', {
- 'arcadyan,vgv7510kw22-nor',
- }) then
-- lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
-+ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan'
- elseif platform.match('realtek', 'rtl838x', {
- 'd-link,dgs-1210-10p',
- }) then
diff --git a/patches/targets-lantiq-xrx200-devices2.patch b/patches/targets-lantiq-xrx200-devices2.patch
deleted file mode 100644
index 609378e..0000000
--- a/patches/targets-lantiq-xrx200-devices2.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-diff --git a/patches/openwrt/0040-o2box.patch b/patches/openwrt/0040-o2box.patch
-new file mode 100644
-index 00000000..d80bef7e
---- /dev/null
-+++ b/patches/openwrt/0040-o2box.patch
-@@ -0,0 +1,38 @@
-+From 2e3d1edf59109d6329a00d90b1e953261d602af5 Mon Sep 17 00:00:00 2001
-+From: Florian Maurer
-+Date: Tue, 10 Jan 2023 13:39:50 +0100
-+Subject: [PATCH] lantiq: xrx200: Fix wifi LED on o2 box 6431
-+
-+Wifi LED did not work using phy0radio, which somehow slipped through in
-+the previous testing
-+
-+Signed-off-by: Florian Maurer
-+---
-+ .../arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi | 1 +
-+ target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds | 1 -
-+ 2 files changed, 1 insertion(+), 1 deletion(-)
-+
-+diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi
-+index 1158aa371e..1a7a11db42 100644
-+--- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi
-++++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi
-+@@ -80,6 +80,7 @@
-+ wifi: wifi {
-+ label = "green:wlan";
-+ gpios = <&gpio 20 GPIO_ACTIVE_LOW>;
-++ linux,default-trigger = "phy0tpt";
-+ };
-+
-+ power_red: power2 {
-+diff --git a/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds b/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds
-+index 8f59538b83..0c80aaa3b8 100644
-+--- a/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds
-++++ b/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds
-+@@ -30,7 +30,6 @@ arcadyan,arv7519rw22)
-+ arcadyan,vgv7510kw22-nor|\
-+ arcadyan,vgv7510kw22-brn)
-+ ucidef_set_led_netdev "internet" "internet" "$led_internet" "wan"
-+- ucidef_set_led_wlan "wifi" "wifi" "green:wlan" "phy0radio"
-+ ;;
-+ zyxel,p-2812hnu-f1|\
-+ zyxel,p-2812hnu-f3)
diff --git a/patches/targets-lantiq-xway-fb-7330.patch b/patches/targets-lantiq-xway-fb-7330.patch
deleted file mode 100644
index 3bd4d5e..0000000
--- a/patches/targets-lantiq-xway-fb-7330.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff --git a/targets/lantiq-xway b/targets/lantiq-xway
-index bfbc195a..e4b6874a 100644
---- a/targets/lantiq-xway
-+++ b/targets/lantiq-xway
-@@ -2,6 +2,11 @@ device('avm-fritz-box-7312', 'avm_fritz7312', {
- factory = false,
- })
-
-+device('avm-fritz-box-7320', 'avm_fritz7320', {
-+ factory = false,
-+ aliases = {'avm-fritz-box-7330', 'avm-fritz-box-7330-sl'},
-+})
-+
- device('netgear-dgn3500b', 'netgear_dgn3500b', {
- factory_ext = '.img',
- })
From aedc1ac81b3a1da6a6db572a50c84b6df56acdb3 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 5 Feb 2023 17:28:13 +0000
Subject: [PATCH 005/129] add cudy devices
---
patches/targets-ramips-mt7621.patch | 39 +++++++++++++++++++++++------
1 file changed, 31 insertions(+), 8 deletions(-)
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index 70d1e4f..0317ff8 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,15 +1,38 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 6744e5c6..99a125ad 100644
+index 4e6e1cff..3bef6c52 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
-@@ -4,6 +4,10 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', {
- factory = false,
- })
+@@ -7,6 +7,33 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', {
+
+ -- Cudy
-+device('asus-rt-ax53u', 'asus_rt-ax53u', {
++device('cudy-x6', 'cudy_x6', {
+ factory = false,
+})
+
-
- -- Cudy
-
++device('cudy-wr1300', 'cudy_wr1300', {
++ factory = false,
++})
++
++--device('cudy-m1800', 'cudy_m1800', {
++-- factory = false,
++--})
++--
++--device('cudy-wr1300-v1', 'cudy_wr1300-v1', {
++-- factory = false,
++--})
++--
++--device('cudy-wr1300-v2', 'cudy_wr1300-v2', {
++-- factory = false,
++-- manifest_aliases = {
++-- 'cudy-wr1300-v3',
++-- },
++--})
++
++device('cudy-wr2100', 'cudy_wr2100', {
++ factory = false,
++})
++
+ device('cudy-wr2100', 'cudy_wr2100', {
+ factory = false,
+ })
From 819bd3e0525da9a0cf0d152201357038a4c93718 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 5 Mar 2023 16:05:03 +0000
Subject: [PATCH 006/129] add devices
---
Makefile | 5 -----
patches/targets-ath79-generic.patch | 13 ++++++++++---
patches/targets-ramips-mt76x8.patch | 19 +++++++++++++++++++
3 files changed, 29 insertions(+), 8 deletions(-)
create mode 100644 patches/targets-ramips-mt76x8.patch
diff --git a/Makefile b/Makefile
index 3c18dc7..26e5410 100644
--- a/Makefile
+++ b/Makefile
@@ -8,10 +8,6 @@ SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
GLUON_TARGETS ?= \
ath79-generic \
ath79-nand \
- bcm27xx-bcm2708 \
- bcm27xx-bcm2709 \
- bcm27xx-bcm2710 \
- bcm27xx-bcm2711 \
ipq40xx-generic \
ipq806x-generic \
lantiq-xrx200 \
@@ -23,7 +19,6 @@ GLUON_TARGETS ?= \
ramips-mt7620 \
ramips-mt7621 \
ramips-mt76x8 \
- realtek-rtl838x \
rockchip-armv8 \
sunxi-cortexa7 \
x86-64 \
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 4f042c8..ac2b6fa 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index 74eda3e8..7e9a1585 100644
+index 1a8ddcc7..c832f0c6 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -155,6 +155,14 @@ device('netgear-wndr3700-v2', 'netgear_wndr3700-v2', {
+@@ -226,6 +226,14 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', {
factory_ext = '.img',
})
@@ -17,7 +17,7 @@ index 74eda3e8..7e9a1585 100644
-- OCEDO
-@@ -443,6 +451,23 @@ device('tp-link-wbs210-v1', 'tplink_wbs210-v1', {
+@@ -542,6 +550,23 @@ device('tp-link-wbs210-v1', 'tplink_wbs210-v1', {
},
})
@@ -41,3 +41,10 @@ index 74eda3e8..7e9a1585 100644
device('tp-link-wbs210-v2', 'tplink_wbs210-v2')
device('tp-link-wbs510-v1', 'tplink_wbs510-v1', {
+@@ -610,3 +635,6 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+ })
+
+ device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
++
++device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite')
++
diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch
new file mode 100644
index 0000000..5e86c40
--- /dev/null
+++ b/patches/targets-ramips-mt76x8.patch
@@ -0,0 +1,19 @@
+diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8
+index b11b7672..95a4c343 100644
+--- a/targets/ramips-mt76x8
++++ b/targets/ramips-mt76x8
+@@ -80,6 +80,14 @@ device('tp-link-tl-mr3420-v5', 'tplink_tl-mr3420-v5', {
+ },
+ })
+
++device('tp-link-tl-mr6400-v5', 'tplink_tl-mr6400-v5', {
++ factory = false,
++ extra_images = {
++ {'-squashfs-tftp-recovery', '-bootloader', '.bin'},
++ },
++})
++
++
+ device('tp-link-tl-wa801nd-v5', 'tplink_tl-wa801nd-v5', {
+ factory = false,
+ extra_images = {
From 0aed0f627184a47dbb5a0f1123c725342966f94d Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Mon, 6 Mar 2023 01:27:35 +0000
Subject: [PATCH 007/129] openwrt master build
---
Makefile | 4 ++--
patches/targets-mediatek-mt7622.patch | 13 +++++++++++
patches/targets-ramips-mt7621.patch | 32 ++++++++++-----------------
3 files changed, 27 insertions(+), 22 deletions(-)
create mode 100644 patches/targets-mediatek-mt7622.patch
diff --git a/Makefile b/Makefile
index 26e5410..4b773fa 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
-GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := master #v2022.1.x
+GLUON_GIT_URL := https://github.com/maurerle/gluon.git
+GLUON_GIT_REF := next #master #v2022.1.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
diff --git a/patches/targets-mediatek-mt7622.patch b/patches/targets-mediatek-mt7622.patch
new file mode 100644
index 0000000..1b25eff
--- /dev/null
+++ b/patches/targets-mediatek-mt7622.patch
@@ -0,0 +1,13 @@
+diff --git a/targets/mediatek-mt7622 b/targets/mediatek-mt7622
+index 8376c397..7ab6330a 100644
+--- a/targets/mediatek-mt7622
++++ b/targets/mediatek-mt7622
+@@ -17,3 +17,8 @@ device('xiaomi-redmi-router-ax6s', 'xiaomi_redmi-router-ax6s', {
+ factory = false,
+ })
+
++-- Netgear
++
++device('netgear-wax206', 'netgear_wax206', {
++ factory_ext = '.img',
++})
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index 0317ff8..bc95f40 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 4e6e1cff..3bef6c52 100644
+index 4e6e1cff..ba01e29e 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
-@@ -7,6 +7,33 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', {
+@@ -7,6 +7,25 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', {
-- Cudy
@@ -10,27 +10,19 @@ index 4e6e1cff..3bef6c52 100644
+ factory = false,
+})
+
-+device('cudy-wr1300', 'cudy_wr1300', {
-+ factory = false,
++device('cudy-m1800', 'cudy_m1800', {
++ factory = false,
+})
+
-+--device('cudy-m1800', 'cudy_m1800', {
-+-- factory = false,
-+--})
-+--
-+--device('cudy-wr1300-v1', 'cudy_wr1300-v1', {
-+-- factory = false,
-+--})
-+--
-+--device('cudy-wr1300-v2', 'cudy_wr1300-v2', {
-+-- factory = false,
-+-- manifest_aliases = {
-+-- 'cudy-wr1300-v3',
-+-- },
-+--})
++device('cudy-wr1300-v1', 'cudy_wr1300-v1', {
++ factory = false,
++})
+
-+device('cudy-wr2100', 'cudy_wr2100', {
-+ factory = false,
++device('cudy-wr1300-v2', 'cudy_wr1300-v2', {
++ factory = false,
++ manifest_aliases = {
++ 'cudy-wr1300-v3',
++ },
+})
+
device('cudy-wr2100', 'cudy_wr2100', {
From 9456ff20830b9e90285dac601b06ef34b709ba42 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Mon, 6 Mar 2023 02:57:34 +0100
Subject: [PATCH 008/129] use different segments
---
site.conf | 44 ++++++++++++++++++++++++++++++++++++++++----
1 file changed, 40 insertions(+), 4 deletions(-)
diff --git a/site.conf b/site.conf
index 497796d..e15208c 100644
--- a/site.conf
+++ b/site.conf
@@ -104,11 +104,47 @@
pubkey_privacy = false,
wireguard = {
- broker = '01.wg-test.freifunk-aachen.de:8000/api/add_key',
+ broker = '01.wg-node.freifunk-aachen.de:8000/api/add_key',
peers = {
- sn01 = {
+ sn20 = {
public_key = 'jp47kK4OEkXf+VSsgKSYGji6mn6vrbXVeBMKwhx1on4=',
- endpoint = '01.wg-test.freifunk-aachen.de:51820'
+ endpoint = '01.wg-node.freifunk-aachen.de:51820'
+ },
+ sn11 = {
+ public_key = 'EuHYG/4MZZYf+ViX8gy2HY0A2RGR0Im45mZXmD6ThxI=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51811'
+ },
+ sn12 = {
+ public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsNjugaSIJ7VBHM=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51812'
+ },
+ sn13 = {
+ public_key = 'ibMJXBMiC3jFA4rSMjcTqsueszOSder7N8Dpw1W+liQ=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51813'
+ },
+ sn14 = {
+ public_key = 'e4jSvixMGi89JAKnTpHA86GoHmBc6owOckTUslhNVxA=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51814'
+ },
+ sn15 = {
+ public_key = 'yY8Z5YbrAc518Z4Z/Bvlum8pB1VARZ316miql/uu1C0=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51815'
+ },
+ sn16 = {
+ public_key = 'RtPF/2EYZNJEKI/DJh+6R2M1FNsQUbCE0nvNSzXZW10=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51816'
+ },
+ sn17 = {
+ public_key = 'fA+lVmeVGIBcshSO1ZH8uHRqPainM7xS3wEhGTX+2DA=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51817'
+ },
+ sn18 = {
+ public_key = 'u8rkarH+ZNGZoMWD6aGLgnRHzSj95S5fbiBuQXvyFV0=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51818'
+ },
+ sn19 = {
+ public_key = 'Zk4LZXhYW+gj9dN/afKH634yYLDNBUDXEFxejHy7wgs=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51819'
},
},
mtu = 1406,
@@ -181,7 +217,7 @@
'http://updates.freifunk-aachen.de/from-2022.1.x/experimental/sysupgrade',
'http://updates.ffac.rocks/from-2022.1.x/experimental/sysupgrade',
'http://updates.aachen.freifunk.net/from-2022.1.x/experimental/sysupgrade',
- 'http://01.wg-test.freifunk-aachen.de:8080/release_images/from-2022.1.x/experimental/sysupgrade',
+ 'http://01.wg-node.freifunk-aachen.de/release_images/from-2022.1.x/experimental/sysupgrade',
},
good_signatures = 1,
pubkeys = {
From d484f80d0b6b63587d4c3fb7736ff8b65489fc27 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Mon, 6 Mar 2023 02:59:28 +0100
Subject: [PATCH 009/129] better docs for v2023.1.x branch
---
README.md | 2 +-
site.conf | 20 ++++++++++----------
site.mk | 4 ++--
3 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/README.md b/README.md
index 5decb83..7b05429 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
This repository contains the site configuration for the Freifunk Aachen Gluon
firmware.
-This is the `next` branch which is compatible to Gluon master.
+This is the `v2023.1.x` branch which is compatible with currents Openwrt Master and will be merged into v2023.1.x once released.
Nothing is guaranteed here, it might get force-pushed from time to time to be rebased onto v2022.1.x.
It provides an option to test devices which are available in Gluon's master branch but are not released yet.
diff --git a/site.conf b/site.conf
index e15208c..5b6a3e4 100644
--- a/site.conf
+++ b/site.conf
@@ -176,9 +176,9 @@
stable = {
name = 'stable',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2022.1.x/stable/sysupgrade',
- 'http://updates.ffac.rocks/from-2022.1.x/stable/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2022.1.x/stable/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2023.1.x/stable/sysupgrade',
+ 'http://updates.ffac.rocks/from-2023.1.x/stable/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2023.1.x/stable/sysupgrade',
},
good_signatures = 4,
pubkeys = {
@@ -195,9 +195,9 @@
beta = {
name = 'beta',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2022.1.x/beta/sysupgrade',
- 'http://updates.ffac.rocks/from-2022.1.x/beta/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2022.1.x/beta/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2023.1.x/beta/sysupgrade',
+ 'http://updates.ffac.rocks/from-2023.1.x/beta/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2023.1.x/beta/sysupgrade',
},
good_signatures = 3,
pubkeys = {
@@ -214,10 +214,10 @@
experimental = {
name = 'experimental',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2022.1.x/experimental/sysupgrade',
- 'http://updates.ffac.rocks/from-2022.1.x/experimental/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2022.1.x/experimental/sysupgrade',
- 'http://01.wg-node.freifunk-aachen.de/release_images/from-2022.1.x/experimental/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2023.1.x/experimental/sysupgrade',
+ 'http://updates.ffac.rocks/from-2023.1.x/experimental/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2023.1.x/experimental/sysupgrade',
+ 'http://01.wg-node.freifunk-aachen.de/release_images/from-2023.1.x/experimental/sysupgrade',
},
good_signatures = 1,
pubkeys = {
diff --git a/site.mk b/site.mk
index 23edfcf..1cc6179 100644
--- a/site.mk
+++ b/site.mk
@@ -39,12 +39,12 @@ GLUON_SITE_PACKAGES := \
# gluon-mesh-wireless-sae
# GLUON_FEATURES_standard := wireless-encryption-wpa3
-DEFAULT_GLUON_RELEASE := 2022.1-1~exp$(shell date '+%Y%m%d%H')
+DEFAULT_GLUON_RELEASE := 2023.1-1~exp$(shell date '+%Y%m%d%H')
# Allow overriding the release number from the command line
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
-DEFAULT_GLUON_CHECKOUT := v2022.1.x
+DEFAULT_GLUON_CHECKOUT := v2023.1.x
GLUON_CHECKOUT ?= $(DEFAULT_GLUON_CHECKOUT)
From b4c65451e3b6d1215645833bbce9441efd5614e8 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Mon, 6 Mar 2023 11:29:22 +0000
Subject: [PATCH 010/129] remove mbedtls from build
---
site.mk | 3 +++
1 file changed, 3 insertions(+)
diff --git a/site.mk b/site.mk
index 1cc6179..7446133 100644
--- a/site.mk
+++ b/site.mk
@@ -36,6 +36,9 @@ GLUON_SITE_PACKAGES := \
ff-wg-registration \
respondd-module-airtime
+# https://forum.openwrt.org/t/replacing-libustream-mbedtls-and-wpad-basic-mbedtls-packages-with-openssl-variants/153263
+GLUON_SITE_PACKAGES += -wpad-basic-mbedtls -libustream-mbedtls -libmbedtls
+
# gluon-mesh-wireless-sae
# GLUON_FEATURES_standard := wireless-encryption-wpa3
From e4bfe516e0227ed4dc2a6f443853d119d8ba9f65 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Fri, 24 Mar 2023 20:03:14 +0100
Subject: [PATCH 011/129] stay with openssl for sftp for now
---
contrib/genpkglist.py | 7 ++++++-
site.conf | 2 ++
site.mk | 18 +++++++++++++-----
3 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py
index 234757b..fdef249 100755
--- a/contrib/genpkglist.py
+++ b/contrib/genpkglist.py
@@ -178,9 +178,13 @@ def render(self):
])
pkglists.append(PKGS_PCI_NET)
+PKGS_VIRT = PackageList('VIRT', ['qemu-ga'])
+pkglists.append(PKGS_VIRT)
+
PKGS_TLS = PackageList('TLS', [
'ca-bundle',
- 'libustream-openssl'
+ 'libustream-openssl',
+ 'openssh-sftp-server'
])
pkglists.append(PKGS_TLS)
@@ -291,6 +295,7 @@ def render(self):
add_pkglist(PKGS_USB_STORAGE). \
add_pkglist(PKGS_PCI). \
add_pkglist(PKGS_PCI_NET). \
+ add_pkglist(PKGS_VIRT). \
add_pkglist(PKGS_TLS)
targets.get('x86-legacy').add_pkglist(PKGS_TLS)
diff --git a/site.conf b/site.conf
index 5b6a3e4..c4c0cb7 100644
--- a/site.conf
+++ b/site.conf
@@ -190,6 +190,7 @@
'8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius
'342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
'f5790bb64dd695f5f87469c47ecda11e218a35f5da807367110d1cb6354eb005', -- Sellerie
+ 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
},
},
beta = {
@@ -209,6 +210,7 @@
'8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius
'342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
'f5790bb64dd695f5f87469c47ecda11e218a35f5da807367110d1cb6354eb005', -- Sellerie
+ 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
},
},
experimental = {
diff --git a/site.mk b/site.mk
index 7446133..cdb418e 100644
--- a/site.mk
+++ b/site.mk
@@ -169,13 +169,21 @@ INCLUDE_PCI_NET := \
EXCLUDE_PCI_NET := \
-kmod-bnx2
+INCLUDE_VIRT := \
+ qemu-ga
+
+EXCLUDE_VIRT := \
+ -qemu-ga
+
INCLUDE_TLS := \
ca-bundle \
- libustream-openssl
+ libustream-openssl \
+ openssh-sftp-server
EXCLUDE_TLS := \
-ca-bundle \
- -libustream-openssl
+ -libustream-openssl \
+ -openssh-sftp-server
ifeq ($(GLUON_TARGET),ath79-generic)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS)
@@ -309,17 +317,17 @@ ifeq ($(GLUON_TARGET),sunxi-cortexa7)
endif
ifeq ($(GLUON_TARGET),x86-64)
- GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+ GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT)
endif
ifeq ($(GLUON_TARGET),x86-generic)
- GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+ GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT)
endif
ifeq ($(GLUON_TARGET),x86-geode)
- GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+ GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT)
endif
From 5d134311877d3bb0d451e5a13af2def42bdc762a Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 26 Mar 2023 01:40:09 +0100
Subject: [PATCH 012/129] remove forced package removal - set to v2023
---
Makefile | 2 +-
site.mk | 3 ---
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
index 4b773fa..4731981 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/maurerle/gluon.git
-GLUON_GIT_REF := next #master #v2022.1.x
+GLUON_GIT_REF := next #v2023.1.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
diff --git a/site.mk b/site.mk
index cdb418e..6da0377 100644
--- a/site.mk
+++ b/site.mk
@@ -36,9 +36,6 @@ GLUON_SITE_PACKAGES := \
ff-wg-registration \
respondd-module-airtime
-# https://forum.openwrt.org/t/replacing-libustream-mbedtls-and-wpad-basic-mbedtls-packages-with-openssl-variants/153263
-GLUON_SITE_PACKAGES += -wpad-basic-mbedtls -libustream-mbedtls -libmbedtls
-
# gluon-mesh-wireless-sae
# GLUON_FEATURES_standard := wireless-encryption-wpa3
From f34748258ca54a0585bd0f58d4fa175e185e2b62 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 26 Mar 2023 11:33:00 +0200
Subject: [PATCH 013/129] qemu-ga is only available for x86-64
---
contrib/genpkglist.py | 2 +-
site.mk | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py
index fdef249..d33f52b 100755
--- a/contrib/genpkglist.py
+++ b/contrib/genpkglist.py
@@ -295,9 +295,9 @@ def render(self):
add_pkglist(PKGS_USB_STORAGE). \
add_pkglist(PKGS_PCI). \
add_pkglist(PKGS_PCI_NET). \
- add_pkglist(PKGS_VIRT). \
add_pkglist(PKGS_TLS)
+targets.get('x86-64').add_pkglist(PKGS_VIRT)
targets.get('x86-legacy').add_pkglist(PKGS_TLS)
if __name__ == '__main__':
diff --git a/site.mk b/site.mk
index 6da0377..f768eff 100644
--- a/site.mk
+++ b/site.mk
@@ -319,12 +319,12 @@ ifeq ($(GLUON_TARGET),x86-64)
endif
ifeq ($(GLUON_TARGET),x86-generic)
- GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT)
+ GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
endif
ifeq ($(GLUON_TARGET),x86-geode)
- GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT)
+ GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
endif
From 919b5437e1f97c7fb33435dd71e47f3b9d1d71ae Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 26 Mar 2023 11:57:39 +0200
Subject: [PATCH 014/129] add changelog of v2023.1.1
---
CHANGELOG.md | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7088968..d3b8a17 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
# Freifunk Aachen Firmware Changelog
-## v2022.1.x
+## v2023.1.x
+
+## v2023.1.1
+ - switch to openwrt master
+ - remove mbedtls and stay with openssl for now
## v2022.1.11
- add anonymization on status page
From 7cc015e7f3fbcdcdf83fd3b95dce950127ba023b Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 26 Mar 2023 11:59:03 +0200
Subject: [PATCH 015/129] experimental update server
---
site.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/site.conf b/site.conf
index c4c0cb7..db3b89c 100644
--- a/site.conf
+++ b/site.conf
@@ -219,7 +219,7 @@
'http://updates.freifunk-aachen.de/from-2023.1.x/experimental/sysupgrade',
'http://updates.ffac.rocks/from-2023.1.x/experimental/sysupgrade',
'http://updates.aachen.freifunk.net/from-2023.1.x/experimental/sysupgrade',
- 'http://01.wg-node.freifunk-aachen.de/release_images/from-2023.1.x/experimental/sysupgrade',
+ 'http://community-build.freifunk-aachen.de/firmware/from-2023.1.x/experimental/sysupgrade',
},
good_signatures = 1,
pubkeys = {
From e501fab6335afe4abc083386ae99cdd0de68e35f Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 26 Mar 2023 14:26:58 +0200
Subject: [PATCH 016/129] use ffac repos
---
Makefile | 4 ++--
modules | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index 4731981..2b8fcd1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
-GLUON_GIT_URL := https://github.com/maurerle/gluon.git
-GLUON_GIT_REF := next #v2023.1.x
+GLUON_GIT_URL := https://github.com/ffac/gluon.git
+GLUON_GIT_REF := aa6e677da826a34c3f4a8bbe42a44b22a46e74a7 #next v2023.1.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
diff --git a/modules b/modules
index df2f360..fabde48 100644
--- a/modules
+++ b/modules
@@ -1,6 +1,6 @@
GLUON_SITE_FEEDS="ffac eulenfunk ffho"
-PACKAGES_FFAC_REPO=https://github.com/maurerle/gluon-mesh-vpn-wireguard.git
+PACKAGES_FFAC_REPO=https://github.com/ffac/gluon-mesh-vpn-wireguard.git
PACKAGES_FFAC_COMMIT=fb9dd6ae7eb80c8ad8d88b3088dd592569cf8860
PACKAGES_FFAC_BRANCH=main
From 56f66c5aec8391cfaad48f192d952adf5343250b Mon Sep 17 00:00:00 2001
From: FFAC
Date: Sun, 26 Mar 2023 14:10:17 +0000
Subject: [PATCH 017/129] remove duplicate device definition
---
patches/targets-ath79-generic.patch | 30 +++--------------------------
1 file changed, 3 insertions(+), 27 deletions(-)
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index ac2b6fa..6dbeac7 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index 1a8ddcc7..c832f0c6 100644
+index a5d0e484..185b811b 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -226,6 +226,14 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', {
+@@ -222,6 +222,14 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', {
factory_ext = '.img',
})
@@ -17,31 +17,7 @@ index 1a8ddcc7..c832f0c6 100644
-- OCEDO
-@@ -542,6 +550,23 @@ device('tp-link-wbs210-v1', 'tplink_wbs210-v1', {
- },
- })
-
-+device('tp-link-re355-v1', 'tplink_re355-v1', {
-+ manifest_aliases = {
-+ 'tp-link-re355', -- upgrade from OpenWrt 19.07
-+ },
-+ packages = ATH10K_PACKAGES_QCA9880,
-+ broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant
-+ class = 'tiny', -- Only 6M of usable Firmware space
-+})
-+
-+device('tp-link-re450-v1', 'tplink_re450-v1', {
-+ packages = ATH10K_PACKAGES_QCA9880,
-+ manifest_aliases = {
-+ 'tp-link-re450', -- upgrade from OpenWrt 19.07
-+ },
-+ class = 'tiny', -- Only 6M of usable Firmware space
-+})
-+
- device('tp-link-wbs210-v2', 'tplink_wbs210-v2')
-
- device('tp-link-wbs510-v1', 'tplink_wbs510-v1', {
-@@ -610,3 +635,6 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -606,3 +614,6 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
From fc21bd2b6637cd81c64d1db2c28ead660c0b7ea5 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 26 Mar 2023 17:43:04 +0200
Subject: [PATCH 018/129] add djfe signing key
---
site.conf | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/site.conf b/site.conf
index db3b89c..6699ec6 100644
--- a/site.conf
+++ b/site.conf
@@ -191,6 +191,7 @@
'342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
'f5790bb64dd695f5f87469c47ecda11e218a35f5da807367110d1cb6354eb005', -- Sellerie
'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
+ '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe
},
},
beta = {
@@ -211,6 +212,7 @@
'342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
'f5790bb64dd695f5f87469c47ecda11e218a35f5da807367110d1cb6354eb005', -- Sellerie
'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
+ '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe
},
},
experimental = {
@@ -221,7 +223,7 @@
'http://updates.aachen.freifunk.net/from-2023.1.x/experimental/sysupgrade',
'http://community-build.freifunk-aachen.de/firmware/from-2023.1.x/experimental/sysupgrade',
},
- good_signatures = 1,
+ good_signatures = 2,
pubkeys = {
'e1505aadd3c5674a93ff2c8596b2cb2d857b068b18f9a398a182b003a5e5040b', -- Bob (Build Server @skydisk)
'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM
@@ -232,6 +234,7 @@
'342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
'f5790bb64dd695f5f87469c47ecda11e218a35f5da807367110d1cb6354eb005', -- Sellerie
'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
+ '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe
},
},
},
From 34e58df353ae67d71606b3b42c04010eac89a005 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Mon, 27 Mar 2023 22:27:42 +0200
Subject: [PATCH 019/129] update gluon git ref
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 2b8fcd1..5407ea1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/ffac/gluon.git
-GLUON_GIT_REF := aa6e677da826a34c3f4a8bbe42a44b22a46e74a7 #next v2023.1.x
+GLUON_GIT_REF := c62565e940bf06488b5ab6ab504f24829ce19780 #next v2023.1.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
From 72d67a2754001fc905a6c604edb3ff892525b923 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Sun, 2 Apr 2023 10:57:38 +0200
Subject: [PATCH 020/129] update patches
* fix patch issues caused by merge
* readd 020-interfaces for FB7530
* improve support for Ubiquiti Rocket 5AC Lite
* add cellular support for TP-Link TL-MR6400 v5
* add newline to EOF of site.mk
---
patches/010-primary-mac.patch | 13 +-----------
patches/020-interfaces.patch | 14 +++++--------
patches/cellular.patch | 30 +++++++++++++++++++++++++++
patches/targets-ath79-generic.patch | 12 ++++++-----
patches/targets-ipq40xx-devices.patch | 13 +++---------
site.mk | 2 +-
6 files changed, 47 insertions(+), 37 deletions(-)
create mode 100644 patches/cellular.patch
diff --git a/patches/010-primary-mac.patch b/patches/010-primary-mac.patch
index f99fbac..87ddb25 100644
--- a/patches/010-primary-mac.patch
+++ b/patches/010-primary-mac.patch
@@ -1,5 +1,5 @@
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-index 597201f3..44562247 100755
+index b1a1bab..5ce9635 100644
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
@@ -81,6 +81,7 @@ local primary_addrs = {
@@ -10,14 +10,3 @@ index 597201f3..44562247 100755
'plasmacloud,pa1200',
'plasmacloud,pa2200',
}},
-@@ -90,6 +91,10 @@ local primary_addrs = {
- {'lantiq', 'xway', {
- 'netgear,dgn3500b',
- }},
-+ {'lantiq', 'xrx200', {
-+ 'arcadyan,vgv7510kw22-nor',
-+ 'avm,fritz7430',
-+ }},
- {'ramips', 'mt7620', {
- 'netgear,ex3700',
- 'tplink,archer-c2-v1',
diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch
index ce7f6d3..e504aa1 100644
--- a/patches/020-interfaces.patch
+++ b/patches/020-interfaces.patch
@@ -1,8 +1,8 @@
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-index cf21e907..f9fed670 100755
+index 063ab1a..51150e4 100644
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-@@ -67,6 +67,14 @@ elseif platform.match('ramips', 'mt7621', {
+@@ -67,6 +67,10 @@ elseif platform.match('ramips', 'mt7621', {
'netgear,wac104',
}) then
lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
@@ -10,10 +10,6 @@ index cf21e907..f9fed670 100755
+ 'avm,fritz-box-7530',
+}) then
+ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
-+elseif platform.match('lantiq', 'xrx200', {
-+ 'arcadyan,vgv7510kw22-nor',
-+}) then
-+ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan'
- end
-
- if wan_ifname and lan_ifname then
+ elseif platform.match('lantiq', 'xrx200', {
+ 'arcadyan,vgv7510kw22-nor',
+ }) then
diff --git a/patches/cellular.patch b/patches/cellular.patch
new file mode 100644
index 0000000..defcb0f
--- /dev/null
+++ b/patches/cellular.patch
@@ -0,0 +1,30 @@
+diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+index 6debe8c..5e9e161 100644
+--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
++++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+@@ -85,6 +85,10 @@ function M.is_cellular_device()
+ 'wavlink,ws-wn572hp3-4g',
+ }) then
+ return true
++ elseif M.match('ramips', 'mt76x8', {
++ 'tplink,tl-mr6400-v5',
++ }) then
++ return true
+ end
+
+ return false
+diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
+index b60d8e6..4631d4f 100644
+--- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
+@@ -58,6 +58,10 @@ elseif platform.match('ramips', 'mt7621', {
+ 'wavlink,ws-wn572hp3-4g',
+ }) then
+ setup_ncm_qmi('/dev/ttyUSB2', 'ncm', 15)
++elseif platform.match('ramips', 'mt76x8', {
++ 'tplink,tl-mr6400-v5',
++}) then
++ setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
+ end
+
+ uci:save('network')
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 6dbeac7..eb094ef 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index a5d0e484..185b811b 100644
+index a5d0e48..2ea8ea9 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -222,6 +222,14 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', {
+@@ -222,6 +222,15 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', {
factory_ext = '.img',
})
@@ -14,13 +14,15 @@ index a5d0e484..185b811b 100644
+ factory_ext = '.img',
+ aliases = {'netgear-wndr3800chmychart'},
+})
++
-- OCEDO
-@@ -606,3 +614,6 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -606,3 +615,7 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
+
-+device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite')
-+
++device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite'), {
++ packages = ATH10K_PACKAGES_QCA9888,
++})
diff --git a/patches/targets-ipq40xx-devices.patch b/patches/targets-ipq40xx-devices.patch
index 54f0b99..c46416d 100644
--- a/patches/targets-ipq40xx-devices.patch
+++ b/patches/targets-ipq40xx-devices.patch
@@ -1,16 +1,8 @@
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index 901f7c7e..585580e7 100644
+index 8420a56..cf0023d 100644
--- a/targets/ipq40xx-generic
+++ b/targets/ipq40xx-generic
-@@ -50,6 +50,7 @@ device('avm-fritz-box-4040', 'avm_fritzbox-4040', {
-
- device('avm-fritz-box-7530', 'avm_fritzbox-7530', {
- factory = false,
-+ aliases = {'avm-fritz-box-7520'},
- })
-
- device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', {
-@@ -86,6 +87,14 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
+@@ -87,6 +87,15 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
device('linksys-ea6350v3', 'linksys_ea6350v3')
@@ -22,6 +14,7 @@ index 901f7c7e..585580e7 100644
+ factory = false,
+ broken = true, -- 3rd WiFi radio not supported (5GHz DFS channels 100+)
+})
++
-- NETGEAR
diff --git a/site.mk b/site.mk
index 612311b..f768eff 100644
--- a/site.mk
+++ b/site.mk
@@ -331,4 +331,4 @@ endif
ifeq ($(GLUON_TARGET),x86-legacy)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS)
-endif
\ No newline at end of file
+endif
From 6b51b589763e0e5cdf8a9b93c3866c3ef63a6194 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Tue, 4 Apr 2023 11:58:33 +0200
Subject: [PATCH 021/129] update openwrt master
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 1ffd419..c95e99a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/ffac/gluon.git
-GLUON_GIT_REF := c62565e940bf06488b5ab6ab504f24829ce19780 #next v2023.1.x
+GLUON_GIT_REF := 7c71eb5571c516b43d12a896127fee0dff760e40 #next v2023.1.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
From de3dc1b81ace51f4793fd456b39ecf5569e4ba54 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Tue, 11 Apr 2023 18:17:24 +0200
Subject: [PATCH 022/129] remove upstreamed patch
(cherry picked from commit 8143877f9ebef078fec4642d07cd07af7ba81101)
---
.../0004-vxlan-fix-performance-issues.patch | 100 ------------------
1 file changed, 100 deletions(-)
delete mode 100644 patches/0004-vxlan-fix-performance-issues.patch
diff --git a/patches/0004-vxlan-fix-performance-issues.patch b/patches/0004-vxlan-fix-performance-issues.patch
deleted file mode 100644
index 58e5cb3..0000000
--- a/patches/0004-vxlan-fix-performance-issues.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From 486d735cb74f3c66ba08747de2b1cefc7e63b8d9 Mon Sep 17 00:00:00 2001
-From: CodeFetch
-Date: Tue, 22 Dec 2020 04:44:39 +0100
-Subject: [PATCH 1/1] vxlan: fix performance issues
-
-This commit includes the patches for fixing issue #2155.
----
- ...ance-issues-with-VXLAN-encapsulation.patch | 80 +++++++++++++++++++
- 1 file changed, 80 insertions(+)
- create mode 100644 patches/openwrt/9010-kernel-fix-performance-issues-with-VXLAN-encapsulation.patch
-
-diff --git a/patches/openwrt/9010-kernel-fix-performance-issues-with-VXLAN-encapsulation.patch b/patches/openwrt/9010-kernel-fix-performance-issues-with-VXLAN-encapsulation.patch
-new file mode 100644
-index 00000000..14b4cc78
---- /dev/null
-+++ b/patches/openwrt/9010-kernel-fix-performance-issues-with-VXLAN-encapsulation.patch
-@@ -0,0 +1,80 @@
-+From: CodeFetch
-+Date: Tue, 22 Dec 2020 04:35:17 +0100
-+Subject: kernel: fix performance issues with VXLAN encapsulation
-+
-+VXLAN did not consider the needed headroom of it's lower device which thus
-+lead to costly expansions of the headroom. See:
-+https://patchwork.ozlabs.org/project/netdev/list/?series=216897
-+
-+This commit includes the needed patches.
-+
-+Signed-off-by: Vincent Wiemann
-+
-+diff --git a/target/linux/generic/pending-4.14/690-vxlan-add_needed_headroom_for_lower_device.patch b/target/linux/generic/pending-4.14/690-vxlan-add_needed_headroom_for_lower_device.patch
-+new file mode 100644
-+index 0000000000000000000000000000000000000000..1a380e62289094f0819a058ab07df0e60f0070cd
-+--- /dev/null
-++++ b/target/linux/generic/pending-4.14/690-vxlan-add_needed_headroom_for_lower_device.patch
-+@@ -0,0 +1,35 @@
-++From: Sven Eckelmann
-++Subject: [PATCH 1/2] vxlan: Add needed_headroom for lower device
-++Date: Thu, 26 Nov 2020 13:52:46 +0100
-++
-++It was observed that sending data via batadv over vxlan (on top of
-++wireguard) reduced the performance massively compared to raw ethernet or
-++batadv on raw ethernet. A check of perf data showed that the
-++vxlan_build_skb was calling all the time pskb_expand_head to allocate
-++enough headroom for:
-++
-++ min_headroom = LL_RESERVED_SPACE(dst->dev) + dst->header_len
-++ + VXLAN_HLEN + iphdr_len;
-++
-++But the vxlan_config_apply only requested needed headroom for:
-++
-++ lowerdev->hard_header_len + VXLAN6_HEADROOM or VXLAN_HEADROOM
-++
-++So it completely ignored the needed_headroom of the lower device. The first
-++caller of net_dev_xmit could therefore never make sure that enough headroom
-++was allocated for the rest of the transmit path.
-++
-++Cc: Annika Wickert
-++Signed-off-by: Sven Eckelmann
-++Tested-by: Annika Wickert
-++Signed-off-by: Vincent Wiemann
-++--- a/drivers/net/vxlan.c
-+++++ b/drivers/net/vxlan.c
-++@@ -3184,6 +3184,7 @@ static void vxlan_config_apply(struct ne
-++ dev->gso_max_segs = lowerdev->gso_max_segs;
-++
-++ needed_headroom = lowerdev->hard_header_len;
-+++ needed_headroom += lowerdev->needed_headroom;
-++
-++ max_mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM :
-++ VXLAN_HEADROOM);
-+diff --git a/target/linux/generic/pending-4.14/691-vxlan-copy_needed_tailroom_from_lowerdev.patch b/target/linux/generic/pending-4.14/691-vxlan-copy_needed_tailroom_from_lowerdev.patch
-+new file mode 100644
-+index 0000000000000000000000000000000000000000..a02aa2e1d84993b3fc994823978d8aee8dcc482e
-+--- /dev/null
-++++ b/target/linux/generic/pending-4.14/691-vxlan-copy_needed_tailroom_from_lowerdev.patch
-+@@ -0,0 +1,21 @@
-++From: Sven Eckelmann
-++Subject: [PATCH 2/2] vxlan: Copy needed_tailroom from lowerdev
-++Date: Thu, 26 Nov 2020 13:52:47 +0100
-++
-++While vxlan doesn't need any extra tailroom, the lowerdev might need it. In
-++that case, copy it over to reduce the chance for additional (re)allocations
-++in the transmit path.
-++
-++Signed-off-by: Sven Eckelmann
-++Signed-off-by: Vincent Wiemann
-++--- a/drivers/net/vxlan.c
-+++++ b/drivers/net/vxlan.c
-++@@ -3186,6 +3186,8 @@ static void vxlan_config_apply(struct ne
-++ needed_headroom = lowerdev->hard_header_len;
-++ needed_headroom += lowerdev->needed_headroom;
-++
-+++ dev->needed_tailroom = lowerdev->needed_tailroom;
-+++
-++ max_mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM :
-++ VXLAN_HEADROOM);
-++ if (max_mtu < ETH_MIN_MTU)
---
-2.29.2
-
From 6b8c19cc6bb183e526c0bea461e20072e276845e Mon Sep 17 00:00:00 2001
From: FFAC
Date: Tue, 11 Apr 2023 19:44:03 +0000
Subject: [PATCH 023/129] remove autoupdater-wifi-fallback
---
site.mk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/site.mk b/site.mk
index f768eff..c2de233 100644
--- a/site.mk
+++ b/site.mk
@@ -27,12 +27,12 @@ GLUON_FEATURES := \
#ffac-status-page
# custom status page without contact information
+# ffho-autoupdater-wifi-fallback \
GLUON_SITE_PACKAGES := \
iwinfo \
eulenfunk-hotfix \
gluon-ssid-changer \
gluon-weeklyreboot \
- ffho-autoupdater-wifi-fallback \
ff-wg-registration \
respondd-module-airtime
From b483c570d609ead2a68d385f37ac6ebe94724fd8 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Tue, 11 Apr 2023 22:17:49 +0200
Subject: [PATCH 024/129] update wan ifname for fb7530
---
patches/020-interfaces.patch | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch
index e504aa1..2994d79 100644
--- a/patches/020-interfaces.patch
+++ b/patches/020-interfaces.patch
@@ -9,7 +9,7 @@ index 063ab1a..51150e4 100644
+elseif platform.match('ipq40xx', 'generic', {
+ 'avm,fritz-box-7530',
+}) then
-+ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
++ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan'
elseif platform.match('lantiq', 'xrx200', {
'arcadyan,vgv7510kw22-nor',
}) then
From c07aabf9b623d69431954bdf7b432b0d26194920 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Wed, 12 Apr 2023 00:24:07 +0000
Subject: [PATCH 025/129] fix ath79-generic
---
patches/targets-ath79-generic.patch | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index eb094ef..0638d68 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index a5d0e48..2ea8ea9 100644
+index a5d0e484..55ccf959 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
@@ -222,6 +222,15 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', {
@@ -23,6 +23,6 @@ index a5d0e48..2ea8ea9 100644
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
+
-+device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite'), {
++device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', {
+ packages = ATH10K_PACKAGES_QCA9888,
+})
From 26b89c2bed953fb2a50e243ecbb695bb3390d312 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Wed, 12 Apr 2023 20:38:28 +0200
Subject: [PATCH 026/129] Revert "update wan ifname for fb7530"
This reverts commit b483c570d609ead2a68d385f37ac6ebe94724fd8.
---
patches/020-interfaces.patch | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch
index 2994d79..e504aa1 100644
--- a/patches/020-interfaces.patch
+++ b/patches/020-interfaces.patch
@@ -9,7 +9,7 @@ index 063ab1a..51150e4 100644
+elseif platform.match('ipq40xx', 'generic', {
+ 'avm,fritz-box-7530',
+}) then
-+ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan'
++ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
elseif platform.match('lantiq', 'xrx200', {
'arcadyan,vgv7510kw22-nor',
}) then
From dc5fcd48c4619d75d7dfcda232c9bf3b2edf52ee Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Wed, 12 Apr 2023 20:40:07 +0200
Subject: [PATCH 027/129] add config-roles-ui patch
---
patches/config-roles-ui.patch | 810 ++++++++++++++++++++++++++++++++++
1 file changed, 810 insertions(+)
create mode 100644 patches/config-roles-ui.patch
diff --git a/patches/config-roles-ui.patch b/patches/config-roles-ui.patch
new file mode 100644
index 0000000..497f618
--- /dev/null
+++ b/patches/config-roles-ui.patch
@@ -0,0 +1,810 @@
+From f26d0c28df8189192ca1e4108c33362afc5fd81b Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Fri, 15 Apr 2022 00:44:39 +0200
+Subject: [PATCH 01/15] gluon-web-model: add MultiListValue class
+
+---
+ .luacheckrc | 1 +
+ .../gluon/config-mode/www/static/gluon.css | 2 +-
+ .../gluon-config-mode-theme/sass/gluon.scss | 7 +++
+ .../lib/gluon/web/view/model/mlvalue.html | 23 +++++++
+ .../usr/lib/lua/gluon/web/model/classes.lua | 60 +++++++++++++++++++
+ 5 files changed, 92 insertions(+), 1 deletion(-)
+ create mode 100644 package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
+
+diff --git a/.luacheckrc b/.luacheckrc
+index 2f491ca253..0f17ecc565 100644
+--- a/.luacheckrc
++++ b/.luacheckrc
+@@ -50,6 +50,7 @@ files["package/**/check_site.lua"] = {
+
+ files["package/**/luasrc/lib/gluon/config-mode/*"] = {
+ globals = {
++ "MultiListValue",
+ "DynamicList",
+ "Flag",
+ "Form",
+diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
+index c84ac01bed..296dc49a39 100644
+--- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
++++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
+@@ -1 +1 @@
+-html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8, ') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em}
++html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8, ') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em}
+diff --git a/package/gluon-config-mode-theme/sass/gluon.scss b/package/gluon-config-mode-theme/sass/gluon.scss
+index 575af4f926..3af8d5e000 100644
+--- a/package/gluon-config-mode-theme/sass/gluon.scss
++++ b/package/gluon-config-mode-theme/sass/gluon.scss
+@@ -366,6 +366,13 @@ input[type=password] {
+ min-width: 20em;
+ }
+
++.gluon-multi-list-option-descr {
++ display: inline-block;
++ vertical-align: top;
++ margin-top: 0.35em;
++ margin-left: 0.4em;
++}
++
+ .gluon-button {
+ @include button;
+
+diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
+new file mode 100644
+index 0000000000..a65eda7449
+--- /dev/null
++++ b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
+@@ -0,0 +1,23 @@
++<%
++ local br = self.orientation == "horizontal" and ' ' or ' '
++ local entries = self:entries()
++ local util = require 'gluon.util'
++%>
++
++ <% for i, entry in pairs(entries) do %>
++ >
++ >
++ >
++ <%|entry.value%>
++
++ <% if i ~= #entries then write(br) end %>
++ <% end %>
++
+diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
+index 93279c3b61..64906d6bb5 100644
+--- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
++++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
+@@ -361,6 +361,66 @@ function ListValue:validate()
+ end
+
+
++local MultiListValue = class(AbstractValue)
++M.MultiListValue = MultiListValue
++
++function MultiListValue:__init__(...)
++ AbstractValue.__init__(self, ...)
++ self.subtemplate = "model/mlvalue"
++
++ self.size = 1
++
++ self.keys = {}
++ self.entry_list = {}
++end
++
++function MultiListValue:value(key, val, ...)
++ key = tostring(key)
++
++ if self.keys[key] then
++ return
++ end
++ self.keys[key] = true
++
++ val = val or key
++ table.insert(self.entry_list, {
++ key = key,
++ value = tostring(val),
++ deps = {...},
++ })
++end
++
++function MultiListValue:entries()
++ local ret = {unpack(self.entry_list)}
++
++ return ret
++end
++
++function MultiListValue:validate()
++ for _, val in ipairs(self.data) do
++ if not self.keys[val] then
++ return false
++ end
++ end
++
++ return true
++end
++
++function MultiListValue:defaultvalue()
++ local value = self.default
++
++ if type(value) == "table" then
++ return value
++ else
++ return { value }
++ end
++end
++
++function MultiListValue:formvalue(http)
++ return http:formvaluetable(self:id())
++end
++
++
+ local DynamicList = class(AbstractValue)
+ M.DynamicList = DynamicList
+
+
+From be8462048915941f20f58e16f4391b54c49cc5d6 Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Fri, 15 Apr 2022 02:02:44 +0200
+Subject: [PATCH 02/15] gluon-web-network: initial draft of role configuration
+
+---
+ .../gluon/config-mode/model/admin/network.lua | 45 +++++++------------
+ 1 file changed, 16 insertions(+), 29 deletions(-)
+
+diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+index df92c96590..33bf44ae20 100644
+--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
++++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+@@ -9,13 +9,12 @@ http://www.apache.org/licenses/LICENSE-2.0
+ ]]--
+
+ local uci = require("simple-uci").cursor()
+-local sysconfig = require 'gluon.sysconfig'
+-local util = require 'gluon.util'
+
+ local wan = uci:get_all("network", "wan")
+ local wan6 = uci:get_all("network", "wan6")
+ local dns_static = uci:get_first("gluon-wan-dnsmasq", "static")
+
++
+ local f = Form(translate("WAN connection"))
+
+ local s = f:section(Section)
+@@ -76,36 +75,23 @@ end
+
+ s = f:section(Section)
+
+-local wired_mesh_help = {
+- single = translate('Enable meshing on the Ethernet interface'),
+- wan = translate('Enable meshing on the WAN interface'),
+- lan = translate('Enable meshing on the LAN interface'),
+-}
+-
+-local function wired_mesh(iface)
+- if not sysconfig[iface .. '_ifname'] then return end
+- local iface_roles = uci:get_list('gluon', 'iface_' .. iface, 'role')
+-
+- local option = s:option(Flag, 'mesh_' .. iface, wired_mesh_help[iface])
+- option.default = util.contains(iface_roles, 'mesh') ~= false
+-
+- function option:write(data)
+- local roles = uci:get_list('gluon', 'iface_' .. iface, 'role')
+- if data then
+- util.add_to_set(roles, 'mesh')
+- else
+- util.remove_from_set(roles, 'mesh')
+- end
+- uci:set_list('gluon', 'iface_' .. iface, 'role', roles)
++uci:foreach('gluon', 'interface', function(config)
++ local section_name = config['.name']
++ local ifaces = s:option(MultiListValue, section_name, config.name)
++
++ ifaces.widget = 'radio'
++ ifaces.orientation = 'horizontal'
++ ifaces:value('uplink', 'Uplink') -- TODO: Uplink and Client should be mutually exclusive.
++ ifaces:value('mesh', 'Mesh')
++ ifaces:value('client', 'Client')
++
++ ifaces.default = config.role
+
+- -- Reconfigure on next reboot
+- uci:set('gluon', 'core', 'reconfigure', true)
++ function ifaces:write(data)
++ uci:set_list("gluon", section_name, "role", data)
+ end
+-end
++end)
+
+-wired_mesh('single')
+-wired_mesh('wan')
+-wired_mesh('lan')
+
+ local section
+ uci:foreach("system", "gpio_switch", function(si)
+@@ -166,4 +152,5 @@ function f:write()
+ uci:commit('system')
+ end
+
++
+ return f
+
+From 76e239665152d9584ebb8c1b109815a52e98669f Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Sun, 30 Oct 2022 14:15:34 +0100
+Subject: [PATCH 03/15] gluon-web-network: show pretty interface names
+
+---
+ .../lib/gluon/config-mode/model/admin/network.lua | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+index 33bf44ae20..cf1d323757 100644
+--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
++++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+@@ -75,13 +75,19 @@ end
+
+ s = f:section(Section)
+
++local pretty_ifnames = {
++ ["/wan"] = translate("WAN-Interfaces"),
++ ["/single"] = translate("Interface"),
++ ["/lan"] = translate("LAN-Interfaces")
++}
++
+ uci:foreach('gluon', 'interface', function(config)
+ local section_name = config['.name']
+- local ifaces = s:option(MultiListValue, section_name, config.name)
++ local ifaces = s:option(MultiListValue, section_name, pretty_ifnames[config.name] or config.name)
+
+ ifaces.widget = 'radio'
+ ifaces.orientation = 'horizontal'
+- ifaces:value('uplink', 'Uplink') -- TODO: Uplink and Client should be mutually exclusive.
++ ifaces:value('uplink', 'Uplink')
+ ifaces:value('mesh', 'Mesh')
+ ifaces:value('client', 'Client')
+
+
+From 98db33babc5edc50fb273bc8d232f42ce34ce0ca Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Wed, 4 Jan 2023 22:12:56 +0100
+Subject: [PATCH 04/15] gluon-web-model: uglify flag --support-ie8 is now --ie
+
+From uglify 3.14.0 on, this command is called --ie:
+
+https://github.com/mishoo/UglifyJS/commit/ef5f7fc25e93833396540cf7479685b241bd1b8f
+---
+ package/gluon-web-model/javascript/gluon-web-model.js | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js
+index ec9cdc4af3..9e8a11b9d2 100644
+--- a/package/gluon-web-model/javascript/gluon-web-model.js
++++ b/package/gluon-web-model/javascript/gluon-web-model.js
+@@ -13,7 +13,7 @@
+ /*
+ Build using:
+
+- uglifyjs javascript/gluon-web-model.js -o javascript/gluon-web-model.min.js -c -m --support-ie8
++ uglifyjs javascript/gluon-web-model.js -o javascript/gluon-web-model.min.js -c -m --ie
+ */
+
+
+
+From f489885f0cbf2b94c260f1193eb4d36eec6d4198 Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Fri, 6 May 2022 04:15:41 +0200
+Subject: [PATCH 05/15] gluon-web-model: add exclusive options for
+ MultiListValue
+
+---
+ .../gluon/config-mode/www/static/gluon.css | 2 +-
+ .../gluon-config-mode-theme/sass/gluon.scss | 4 ++++
+ .../lib/gluon/web/view/model/mlvalue.html | 4 +++-
+ .../javascript/gluon-web-model.js | 15 ++++++++++++
+ .../javascript/gluon-web-model.min.js | 2 +-
+ .../usr/lib/lua/gluon/web/model/classes.lua | 24 +++++++++++++++++++
+ 6 files changed, 48 insertions(+), 3 deletions(-)
+
+diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
+index 296dc49a39..d239fd8f1e 100644
+--- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
++++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
+@@ -1 +1 @@
+-html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8, ') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em}
++html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=checkbox][disabled]+label{background-color:#dcdcdc !important}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8, ') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em}
+diff --git a/package/gluon-config-mode-theme/sass/gluon.scss b/package/gluon-config-mode-theme/sass/gluon.scss
+index 3af8d5e000..a63156e430 100644
+--- a/package/gluon-config-mode-theme/sass/gluon.scss
++++ b/package/gluon-config-mode-theme/sass/gluon.scss
+@@ -273,6 +273,10 @@ input[type=checkbox] {
+ text-align: center;
+ font-size: 1.7em;
+ }
++
++ &[disabled] + label {
++ background-color: #dcdcdc !important;
++ }
+ }
+
+ input[type=radio] {
+diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
+index a65eda7449..0a4fb5c9db 100644
+--- a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
++++ b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
+@@ -13,7 +13,9 @@
+ attr("id", id.."."..entry.key) ..
+ attr("name", id) ..
+ attr("value", entry.key) ..
+- attr("checked", (util.contains(self:cfgvalue(), entry.key)) and "checked")
++ attr("checked", (util.contains(self:cfgvalue(), entry.key)) and "checked") ..
++ attr("data-exclusive-with", self.exclusions[entry.key]) ..
++ attr("data-update", "change")
+ %>>
+ >
+ <%|entry.value%>
+diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js
+index 9e8a11b9d2..ce8ad6478a 100644
+--- a/package/gluon-web-model/javascript/gluon-web-model.js
++++ b/package/gluon-web-model/javascript/gluon-web-model.js
+@@ -219,6 +219,20 @@
+ parent.parentNode.style.display = (parent.options.length <= 1) ? 'none' : '';
+ }
+
++ var nodes = document.querySelectorAll('[data-exclusive-with]');
++ for (var i = 0, node; (node = nodes[i]) !== undefined; i++) {
++ var excusive_with = JSON.parse(node.getAttribute('data-exclusive-with'));
++
++ node.disabled = false;
++ for (let list_item of excusive_with) {
++ var el = document.getElementById(node.name + '.' + list_item);
++ node.disabled |= el.checked;
++ }
++
++ if (node.disabled)
++ node.checked = false;
++ }
++
+ if (state) {
+ update();
+ }
+@@ -533,6 +547,7 @@
+ init_dynlist(node, attr);
+ }
+
++
+ update();
+ })();
+ })();
+diff --git a/package/gluon-web-model/javascript/gluon-web-model.min.js b/package/gluon-web-model/javascript/gluon-web-model.min.js
+index 07478cbb02..2adf363f08 100644
+--- a/package/gluon-web-model/javascript/gluon-web-model.min.js
++++ b/package/gluon-web-model/javascript/gluon-web-model.min.js
+@@ -1 +1 @@
+-!function(){var v={};function a(e){return/^-?\d+$/.test(e)?+e:NaN}function r(e){return/^-?\d*\.?\d+?$/.test(e)?+e:NaN}var u={integer:function(){return!isNaN(a(this))},uinteger:function(){return 0<=a(this)},float:function(){return!isNaN(r(this))},ufloat:function(){return 0<=r(this)},ipaddr:function(){return u.ip4addr.apply(this)||u.ip6addr.apply(this)},ip4addr:function(){var e;return!!(e=this.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/))&&(0<=e[1]&&e[1]<=255&&0<=e[2]&&e[2]<=255&&0<=e[3]&&e[3]<=255&&0<=e[4]&&e[4]<=255)},ip6addr:function(){return this.indexOf("::")<0?null!=this.match(/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i):!(0<=this.indexOf(":::")||this.match(/::.+::/)||this.match(/^:[^:]/)||this.match(/[^:]:$/))&&(!!this.match(/^(?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}$/i)||(!!this.match(/^(?:[a-f0-9]{1,4}:){7}:$/i)||!!this.match(/^:(?::[a-f0-9]{1,4}){7}$/i)))},wpakey:function(){var e=this;return 64==e.length?null!=e.match(/^[a-f0-9]{64}$/i):8<=e.length&&e.length<=63},range:function(e,t){var n=r(this);return+e<=n&&n<=+t},min:function(e){return r(this)>=+e},max:function(e){return r(this)<=+e},irange:function(e,t){var n=a(this);return+e<=n&&n<=+t},imin:function(e){return a(this)>=+e},imax:function(e){return a(this)<=+e},minlength:function(e){return+e<=(""+this).length},maxlength:function(e){return(""+this).length<=+e}};function o(e){for(var t=0;tn.index);i=i.nextSibling);i?r.insertBefore(n.node,i):r.appendChild(n.node),n.node.dispatchEvent(new Event("gluon-show")),e=!0}r&&r.parentNode&&r.getAttribute("data-optionals")&&(r.parentNode.style.display=r.options.length<=1?"none":"")}e&&h()}function g(e,t,n,a){return e.addEventListener?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,function(){var e=window.event;return!e.target&&e.srcElement&&(e.target=e.srcElement),!!n(e)}),e}function m(l,s){var c=s.prefix;function o(e,t,n){for(var a=[];l.firstChild;){var r=l.firstChild;(i=+r.index)!=n&&("input"==r.nodeName.toLowerCase()?a.push(r.value||""):"select"==r.nodeName.toLowerCase()&&(a[a.length-1]=r.options[r.selectedIndex].value)),l.removeChild(r)}0<=t?(e=t+1,a.splice(t,0,"")):s.optional||0!=a.length||a.push("");for(var i=1;i<=a.length;i++){var o=document.createElement("input");if(o.id=c+"."+i,o.name=c,o.value=a[i-1],o.type="text",o.index=i,s.size&&(o.size=s.size),s.placeholder&&(o.placeholder=s.placeholder),l.appendChild(o),s.type&&y(o,!1,s.type),g(o,"keydown",f),g(o,"keypress",p),i==e)o.focus();else if(-i==e){o.focus();var d=o.value;o.value=" ",o.value=d}if(s.optional||1=+e},max:function(e){return i(this)<=+e},irange:function(e,t){var n=a(this);return+e<=n&&n<=+t},imin:function(e){return a(this)>=+e},imax:function(e){return a(this)<=+e},minlength:function(e){return+e<=(""+this).length},maxlength:function(e){return(""+this).length<=+e}};function p(e){for(var t,n,a,i=0;in.index);r=r.nextSibling);r?i.insertBefore(n.node,r):i.appendChild(n.node),n.node.dispatchEvent(new Event("gluon-show")),t=!0}i&&i.parentNode&&i.getAttribute("data-optionals")&&(i.parentNode.style.display=i.options.length<=1?"none":"")}for(var d=document.querySelectorAll("[data-exclusive-with]"),o=0;(a=d[o])!==undefined;o++){var u,l=JSON.parse(a.getAttribute("data-exclusive-with"));a.disabled=!1;for(u of l){var c=document.getElementById(a.name+"."+u);a.disabled|=c.checked}a.disabled&&(a.checked=!1)}t&&f()}function v(e,t,n,a){e.addEventListener?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,function(){var e=window.event;return!e.target&&e.srcElement&&(e.target=e.srcElement),!!n(e)})}function m(t,n,e){var a,i,r=(i=(e=e).match(/^([^\(]+)\(([^,]+),([^\)]+)\)$/))&&(a=d[i[1]])!==undefined?function(){return a.apply(this,[i[2],i[3]])}:(i=e.match(/^([^\(]+)\(([^,\)]+)\)$/))&&(a=d[i[1]])!==undefined?function(){return a.apply(this,[i[2]])}:d[e];r&&(v(t,"blur",e=function(){var e;t.form&&(t.className=t.className.replace(/ gluon-input-invalid/g,""),0==(e=(t.options&&-1
+Date: Fri, 6 May 2022 04:16:05 +0200
+Subject: [PATCH 06/15] gluon-web-network: make roles "uplink" / "mesh" and
+ "client" exclusive
+
+---
+ .../luasrc/lib/gluon/config-mode/model/admin/network.lua | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+index cf1d323757..73bf555fea 100644
+--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
++++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+@@ -90,6 +90,8 @@ uci:foreach('gluon', 'interface', function(config)
+ ifaces:value('uplink', 'Uplink')
+ ifaces:value('mesh', 'Mesh')
+ ifaces:value('client', 'Client')
++ ifaces:exclusive('uplink', 'client')
++ ifaces:exclusive('mesh', 'client')
+
+ ifaces.default = config.role
+
+
+From 4c2027943b08e08e45eb92303a836d0dbf2cdebb Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Fri, 16 Dec 2022 00:29:29 +0100
+Subject: [PATCH 07/15] gluon-core: fix invalid role configurations during
+ reconfigure
+
+---
+ .../luasrc/lib/gluon/upgrade/021-interface-roles | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles b/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles
+index 5d27fb708b..6e39219a69 100755
+--- a/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles
++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles
+@@ -63,4 +63,19 @@ for iface in pairs(interfaces) do
+ end
+ end
+
++-- Fix invalid role configurations
++
++uci:foreach('gluon', 'interface', function(interface)
++
++ local function has_role(role)
++ return util.contains(interface.role, role)
++ end
++
++ if has_role('client') and (has_role('mesh') or has_role('uplink')) then
++ -- remove 'client' role
++ util.remove_from_set(interface.role, 'client')
++ uci:set('gluon', interface['.name'], 'role', interface.role)
++ end
++end)
++
+ uci:save('gluon')
+
+From c00bf47077384b9cd08eef5693b12668bedaf1cd Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Fri, 16 Dec 2022 00:44:48 +0100
+Subject: [PATCH 08/15] docs: explain that invalid interface roles are removed
+
+---
+ docs/user/site.rst | 9 ++-------
+ 1 file changed, 2 insertions(+), 7 deletions(-)
+
+diff --git a/docs/user/site.rst b/docs/user/site.rst
+index fc82f314d2..96bb5eacff 100644
+--- a/docs/user/site.rst
++++ b/docs/user/site.rst
+@@ -448,13 +448,8 @@ interfaces \: optional
+ The ``client`` role requires exclusive control over an interface. When
+ the ``client`` role is assigned to an interface at the same time as other
+ roles (like ``'client', 'mesh'`` in the above example), the other roles take
+- precedence (enabling ``mesh``, but not ``client`` in the example).
+-
+- Such a default configuration still fulfills a purpose (and is in fact the
+- recommended way to enable "Mesh-on-LAN" by default): The "LAN interface
+- meshing" checkbox in the advanced network settings will only add or remove
+- the ``mesh`` role, so the ``client`` role must already be in the configuration
+- to make the LAN port a regular client interface when the checkbox is disabled.
++ precedence (enabling ``mesh``, but not ``client`` in the example). In that
++ case, the ``client`` role is removed from the config of the interface.
+
+ All interface settings are optional. If unset, the following defaults are
+ used:
+
+From e44e0bca94fafd508d4f65ca632950fb3e1d303c Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Sun, 26 Feb 2023 22:49:08 +0100
+Subject: [PATCH 09/15] fixup! gluon-web-network: initial draft of role
+ configuration
+
+---
+ .../luasrc/lib/gluon/config-mode/model/admin/network.lua | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+index 73bf555fea..1a50147b86 100644
+--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
++++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+@@ -85,7 +85,6 @@ uci:foreach('gluon', 'interface', function(config)
+ local section_name = config['.name']
+ local ifaces = s:option(MultiListValue, section_name, pretty_ifnames[config.name] or config.name)
+
+- ifaces.widget = 'radio'
+ ifaces.orientation = 'horizontal'
+ ifaces:value('uplink', 'Uplink')
+ ifaces:value('mesh', 'Mesh')
+
+From a9ab6815f7a679bfa637b821c1f8b46a3de8fe05 Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Sun, 26 Feb 2023 22:53:28 +0100
+Subject: [PATCH 10/15] fixup! gluon-web-model: add exclusive options for
+ MultiListValue
+
+---
+ package/gluon-web-model/javascript/gluon-web-model.js | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js
+index ce8ad6478a..4c9dd72e19 100644
+--- a/package/gluon-web-model/javascript/gluon-web-model.js
++++ b/package/gluon-web-model/javascript/gluon-web-model.js
+@@ -547,7 +547,6 @@
+ init_dynlist(node, attr);
+ }
+
+-
+ update();
+ })();
+ })();
+
+From 63d99fad284da8807af2730e0859e4332d276ee5 Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Sun, 26 Feb 2023 22:53:36 +0100
+Subject: [PATCH 11/15] fixup! gluon-web-model: add exclusive options for
+ MultiListValue
+
+---
+ package/gluon-web-model/javascript/gluon-web-model.js | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js
+index 4c9dd72e19..7b98dc1ef3 100644
+--- a/package/gluon-web-model/javascript/gluon-web-model.js
++++ b/package/gluon-web-model/javascript/gluon-web-model.js
+@@ -224,7 +224,7 @@
+ var excusive_with = JSON.parse(node.getAttribute('data-exclusive-with'));
+
+ node.disabled = false;
+- for (let list_item of excusive_with) {
++ for (var list_item of excusive_with) {
+ var el = document.getElementById(node.name + '.' + list_item);
+ node.disabled |= el.checked;
+ }
+
+From af3b1ce4736c9df58c33da84137cafdf8daf2e3d Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Sun, 26 Feb 2023 22:24:10 +0100
+Subject: [PATCH 12/15] gluon-core: make interface roles exclusive in site
+ config
+
+---
+ .luacheckrc | 1 +
+ package/gluon-core/check_site.lua | 6 +++++-
+ .../luasrc/lib/gluon/check-site.lua | 21 +++++++++++++++++++
+ 3 files changed, 27 insertions(+), 1 deletion(-)
+
+diff --git a/.luacheckrc b/.luacheckrc
+index 0f17ecc565..9639097284 100644
+--- a/.luacheckrc
++++ b/.luacheckrc
+@@ -29,6 +29,7 @@ files["package/**/check_site.lua"] = {
+ "need",
+ "need_alphanumeric_key",
+ "need_array",
++ "need_array_elements_exclusive",
+ "need_array_of",
+ "need_boolean",
+ "need_chanlist",
+diff --git a/package/gluon-core/check_site.lua b/package/gluon-core/check_site.lua
+index 06b9ac59d0..9918984ecc 100644
+--- a/package/gluon-core/check_site.lua
++++ b/package/gluon-core/check_site.lua
+@@ -77,7 +77,11 @@ need_boolean(in_domain({'mesh', 'vxlan'}), false)
+
+ local interfaces_roles = {'client', 'uplink', 'mesh'}
+ for _, config in ipairs({'wan', 'lan', 'single'}) do
+- need_array_of(in_site({'interfaces', config, 'default_roles'}), interfaces_roles, false)
++ local default_roles = in_site({'interfaces', config, 'default_roles'})
++
++ need_array_of(default_roles, interfaces_roles, false)
++ need_array_elements_exclusive(default_roles, "client", "mesh", false)
++ need_array_elements_exclusive(default_roles, "client", "uplink", false)
+ end
+
+ obsolete({'mesh_on_wan'}, 'Use interfaces.wan.default_roles.')
+diff --git a/package/gluon-core/luasrc/lib/gluon/check-site.lua b/package/gluon-core/luasrc/lib/gluon/check-site.lua
+index 148f4968f7..2172a984c7 100644
+--- a/package/gluon-core/luasrc/lib/gluon/check-site.lua
++++ b/package/gluon-core/luasrc/lib/gluon/check-site.lua
+@@ -55,6 +55,14 @@ local function merge(a, b)
+ return m
+ end
+
++local function contains(table, val)
++ for i=1,#table do
++ if table[i] == val then
++ return true
++ end
++ end
++ return false
++end
+
+ local function path_to_string(path)
+ if path.is_value then
+@@ -370,6 +378,19 @@ function M.need_array_of(path, array, required)
+ return M.need_array(path, function(e) M.need_one_of(e, array) end, required)
+ end
+
++function M.need_array_elements_exclusive(path, a, b, required)
++ local val = need_type(path, 'table', required, 'be an array')
++ if not val then
++ return nil
++ end
++
++ if contains(val, a) and contains(val, b) then
++ config_error(conf_src(path), 'expected %s to contain either "%s" or "%s", but not both.', path_to_string(path), a, b)
++ end
++
++ return val
++end
++
+ function M.need_chanlist(path, channels, required)
+ local valid_chanlist = check_chanlist(channels)
+ return M.need(path, valid_chanlist, required,
+
+From 77075b29fc8107938759e78485fb27cfc2aa689c Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Sun, 26 Feb 2023 22:55:21 +0100
+Subject: [PATCH 13/15] fixup! gluon-web-model: add MultiListValue class
+
+---
+ .../luasrc/usr/lib/lua/gluon/web/model/classes.lua | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
+index 31b46476f1..74a4181b87 100644
+--- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
++++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
+@@ -431,13 +431,7 @@ function MultiListValue:exclusive(a, b)
+ end
+
+ function MultiListValue:defaultvalue()
+- local value = self.default
+-
+- if type(value) == "table" then
+- return value
+- else
+- return { value }
+- end
++ return self.default or {}
+ end
+
+ function MultiListValue:formvalue(http)
+
+From 544266af9a22bfe7af2cea9bb9cbdd4220964f22 Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Sun, 26 Feb 2023 22:43:17 +0100
+Subject: [PATCH 14/15] gluon-web-model: migrate to SPDX headers for licensing
+
+---
+ .../gluon-web-model/javascript/gluon-web-model.js | 14 +++++---------
+ .../luasrc/usr/lib/lua/gluon/web/model/classes.lua | 7 ++++---
+ .../usr/lib/lua/gluon/web/model/datatypes.lua | 6 +++---
+ 3 files changed, 12 insertions(+), 15 deletions(-)
+
+diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js
+index 7b98dc1ef3..55c68e2e87 100644
+--- a/package/gluon-web-model/javascript/gluon-web-model.js
++++ b/package/gluon-web-model/javascript/gluon-web-model.js
+@@ -1,13 +1,9 @@
+ /*
+- Copyright 2008 Steven Barth
+- Copyright 2008-2012 Jo-Philipp Wich
+- Copyright 2017 Matthias Schiffer
+-
+- Licensed under the Apache License, Version 2.0 (the "License");
+- you may not use this file except in compliance with the License.
+- You may obtain a copy of the License at
+-
+- http://www.apache.org/licenses/LICENSE-2.0
++ SPDX-License-Identifier: Apache-2.0
++ SPDX-FileCopyrightText: 2008, Steven Barth
++ SPDX-FileCopyrightText: 2008-2012, Jo-Philipp Wich
++ SPDX-FileCopyrightText: 2017, Matthias Schiffer
++ SPDX-FileCopyrightText: 2023, Leonardo Mörlein
+ */
+
+ /*
+diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
+index 74a4181b87..1b2e5f5c2b 100644
+--- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
++++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
+@@ -1,6 +1,7 @@
+--- Copyright 2008 Steven Barth
+--- Copyright 2017-2018 Matthias Schiffer
+--- Licensed to the public under the Apache License 2.0.
++-- SPDX-License-Identifier: Apache-2.0
++-- SPDX-FileCopyrightText: 2008, Steven Barth
++-- SPDX-FileCopyrightText: 2017-2018, Matthias Schiffer
++-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein
+
+ local util = require "gluon.web.util"
+ local gluon_util = require "gluon.util"
+diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua
+index fdee7d7dbe..31c1aa82fc 100644
+--- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua
++++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua
+@@ -1,6 +1,6 @@
+--- Copyright 2010 Jo-Philipp Wich
+--- Copyright 2017 Matthias Schiffer
+--- Licensed to the public under the Apache License 2.0.
++-- SPDX-License-Identifier: Apache-2.0
++-- SPDX-FileCopyrightText: 2010, Jo-Philipp Wich
++-- SPDX-FileCopyrightText: 2017, Matthias Schiffer
+
+ local M = {}
+
+
+From 88c976a7f3afa576fce5388ea98a10bc853e51b4 Mon Sep 17 00:00:00 2001
+From: lemoer
+Date: Sun, 26 Feb 2023 22:46:23 +0100
+Subject: [PATCH 15/15] gluon-web-network: migrate to SPDX headers for
+ licensing
+
+---
+ .../lib/gluon/config-mode/model/admin/network.lua | 12 +++---------
+ 1 file changed, 3 insertions(+), 9 deletions(-)
+
+diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+index 1a50147b86..1c0b34721b 100644
+--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
++++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+@@ -1,12 +1,6 @@
+---[[
+-Copyright 2014 Nils Schneider
+-
+-Licensed under the Apache License, Version 2.0 (the "License");
+-you may not use this file except in compliance with the License.
+-You may obtain a copy of the License at
+-
+-http://www.apache.org/licenses/LICENSE-2.0
+-]]--
++-- SPDX-License-Identifier: Apache-2.0
++-- SPDX-FileCopyrightText: 2014, Nils Schneider
++-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein
+
+ local uci = require("simple-uci").cursor()
+
From a39699b666f26b70dc5a12ad97b6b439218cc9c8 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 15 Apr 2023 00:17:00 +0200
Subject: [PATCH 028/129] update translation
---
i18n/de.po | 26 +++++++++++++++++++++-----
i18n/en.po | 25 ++++++++++++++++++++-----
i18n/fr.po | 31 ++++++++++++-------------------
3 files changed, 53 insertions(+), 29 deletions(-)
diff --git a/i18n/de.po b/i18n/de.po
index cf1cc21..f382596 100644
--- a/i18n/de.po
+++ b/i18n/de.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2022-12-13\n"
+"PO-Revision-Date: 2023-04-14\n"
"Last-Translator: Felix Baumann \n"
"Language-Team: German\n"
"Language: de\n"
@@ -21,10 +21,15 @@ msgid "gluon-config-mode:pubkey"
msgstr ""
"Bitte stecke nun das Netzwerkkabel vom LAN-Port in den WAN-Port deines Routers, sofern er mehrere Netzwerkanschlüsse hat. "
"Das andere Kabelende muss an einen LAN-Port deines Heimnetzes angeschlossen werden.
"
-"Dies ist der öffentliche Schlüssel deines Freifunk-Knotens: <%= pubkey %> "
-"Wenn du nicht weißt, worum es sich dabei handelt, kannst du ihn ignorieren. "
-"Wer sich auskennt kann damit dafür sorgen, dass sich der neue Freifunk-Knoten von Anfang an zum richtigen Segment unseres Netzes verbindet.
"
-"Dabei helfen dir auch der Knotenname: (<%=pcdata(hostname)%> ) und die MAC-Adresse: (<%= sysconfig.primary_mac %> )
"
+"Details zu deinem Knoten: "
+"Knotenname: <%=pcdata(hostname)%> "
+"MAC-Adresse: <%= sysconfig.primary_mac %> "
+"Öffentlicher Schlüssel: <%= pubkey %>
"
+
+msgid "gluon-config-mode:novpn"
+msgstr ""
+"Du hast dich entschieden, das VPN-Netzwerk nicht zu nutzen. "
+"Dein Knoten kann sich nur dann mit dem Freifunk-Netzwerk verbinden, wenn andere Knoten in Reichweite bereits eine Verbindung haben.
msgid "gluon-config-mode:reboot"
msgstr ""
@@ -34,3 +39,14 @@ msgstr ""
"Um zu dieser Konfigurationsseite zurückzugelangen, drücke im normalen Betrieb für drei Sekunden den Reset-Button. "
"Das Gerät wird dann im Config Mode neustarten.
"
"Viel Spaß bei der Erkundung von Freifunk!
"
+
+# Leave empty to use the default text, which can be found in:
+# package/gluon-config-mode-contact-info/i18n/
+msgid "gluon-config-mode:contact-help"
+msgstr ""
+"Bitte hinterlege hier einen Hinweis, um uns zu ermöglichen, Kontakt mit "
+"dir aufzunehmen. Diese Information ist nur den Betreibern des lokalen Freifunknetzes "
+"zugänglich, um für wichtige Mitteilungen Kontakt aufnehmen zu können. "
+"Für den Betrieb des Freifunk-Knotens sind diese Informationen nicht erforderlich. "
+"Die Kontaktdaten können durch dich in diesem Menü eigenständig gelöscht oder "
+"angepasst werden.
"
diff --git a/i18n/en.po b/i18n/en.po
index c517803..6f6a822 100644
--- a/i18n/en.po
+++ b/i18n/en.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2022-12-13\n"
+"PO-Revision-Date: 2023-04-14\n"
"Last-Translator: Felix Baumann \n"
"Language-Team: English\n"
"Language: en\n"
@@ -20,11 +20,16 @@ msgid "gluon-config-mode:pubkey"
msgstr ""
"Please plug the network cable from the lan into the wan port of your router, in-case it has multible network ports. "
"The other end of the cable must be plugged into a LAN port of your home network.
"
-"This is your Freifunk node's public key: <%= pubkey %> "
-"If you don't know what this is for, you can safely ignore it. "
-"If you are familiar with the matter, you can use it to ensure that your new freifunk node connects to the right network segment from the start.
"
-"The node's name: (<%=pcdata(hostname)%> ) and MAC address: (<%= sysconfig.primary_mac %> ) might be of use as well.
"
+"Details about your node: "
+"Node name: <%=pcdata(hostname)%> "
+"MAC address: <%= sysconfig.primary_mac %> "
+"Public key: <%= pubkey %>
"
+msgid "gluon-config-mode:novpn"
+msgstr ""
+"You have chosen to not use "
+" the VPN network. Your node will only be able to connect to the Freifunk network if "
+"other nodes in range already have a connection.
"
msgid "gluon-config-mode:reboot"
msgstr ""
@@ -37,3 +42,13 @@ msgstr ""
"three seconds during normal operation. The device will then reboot into config "
"mode.
"
"Have fun with your node and exploring the Freifunk network!
"
+
+# Leave empty to use the default text, which can be found in:
+# package/gluon-config-mode-contact-info/i18n/
+msgid "gluon-config-mode:contact-help"
+msgstr ""
+"Please provide your contact information here to allow us to contact you. "
+"This information is only accessible to the operators of the local Freifunk "
+"network and allows them to be able to contact you when there's anything important. "
+"This field is not required to operate a node. "
+"You can delete or modify the contact information yourself in this menu.
"
diff --git a/i18n/fr.po b/i18n/fr.po
index 7d91e99..2e54c40 100644
--- a/i18n/fr.po
+++ b/i18n/fr.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2015-08-06 20:28+0100\n"
-"Last-Translator: Tobias Bernot \n"
+"PO-Revision-Date: 2023-04-14\n"
+"Last-Translator: Felix Baumann \n"
"Language-Team: French\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
@@ -26,7 +26,12 @@ msgstr "Ici, vous avez la possibilité de sélectionner le domaine dans lequel "
msgid "gluon-config-mode:pubkey"
msgstr ""
-" "
+"Branchez le câble réseau du LAN dans le port WAN de votre routeur, au cas où celui-ci disposerait de plusieurs ports réseau. "
+"L'autre extrémité du câble doit être branchée sur un port LAN de votre réseau domestique.
"
+"Détails sur votre nœud: "
+"Nom du nœud: <%=pcdata(hostname)%> "
+"Adresse MAC: <%= sysconfig.primary_mac %> "
+"Clé publique: <%= pubkey %>
"
msgid "gluon-config-mode:novpn"
msgstr ""
@@ -46,23 +51,11 @@ msgstr ""
"ensuite redémarer en mode configuration."
"Profitez votre de nœud et amusez vous à découvrir le réseau Freifunk!
"
-# Leave empty to use the default text, which can be found in:
-# package/gluon-config-mode-hostname/i18n/
-msgid "gluon-config-mode:hostname-help"
-msgstr ""
-
-# Leave empty to use the default text, which can be found in:
-# package/gluon-config-mode-geo-location/i18n/
-msgid "gluon-config-mode:geo-location-help"
-msgstr ""
-
-msgid "gluon-config-mode:altitude-label"
-msgstr ""
-
# Leave empty to use the default text, which can be found in:
# package/gluon-config-mode-contact-info/i18n/
msgid "gluon-config-mode:contact-help"
msgstr ""
-
-msgid "gluon-config-mode:contact-note"
-msgstr ""
+"Veuillez indiquer ici vos coordonnées pour nous permettre de vous contacter. "
+Ces informations ne sont accessibles qu'aux opérateurs du réseau Freifunk local et leur permettent de vous contacter en cas de problème important. "
+Ce champ n'est pas nécessaire pour exploiter un nœud. "
+Vous pouvez supprimer ou modifier vous-même les informations de contact dans ce menu.
"
\ No newline at end of file
From 375de980d340eddc519278efa0ba9029f4dccd0f Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 15 Apr 2023 00:33:01 +0200
Subject: [PATCH 029/129] update v2023 Makefile and devices
---
Makefile | 7 ++++---
patches/020-interfaces.patch | 2 +-
patches/targets-ipq40xx-devices.patch | 10 +++++++--
patches/targets-ramips-mt7621.patch | 29 +++++++++++++++++----------
4 files changed, 31 insertions(+), 17 deletions(-)
diff --git a/Makefile b/Makefile
index c95e99a..f4fe39a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/ffac/gluon.git
-GLUON_GIT_REF := 7c71eb5571c516b43d12a896127fee0dff760e40 #next v2023.1.x
+GLUON_GIT_REF := 53dce4944abf1405373eacb53d3dc305d28364f2 #next v2023.1.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
@@ -20,7 +20,8 @@ endif
JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l)
-GLUON_MAKE := ${MAKE} --no-print-directory -C ${GLUON_BUILD_DIR} \
+GLUON_MAKE := ${MAKE} -j ${JOBS} --no-print-directory -C ${GLUON_BUILD_DIR} \
+ BROKEN=1 \
GLUON_RELEASE=${GLUON_RELEASE} \
GLUON_AUTOUPDATER_BRANCH=${GLUON_AUTOUPDATER_BRANCH} \
GLUON_AUTOUPDATER_ENABLED=${GLUON_AUTOUPDATER_ENABLED}
@@ -38,7 +39,7 @@ info:
build: gluon-prepare
for target in ${GLUON_TARGETS}; do \
echo ""Building target $$target""; \
- ${GLUON_MAKE} -j ${JOBS} download all BROKEN=1 GLUON_TARGET="$$target"; \
+ ${GLUON_MAKE} download all BROKEN=1 GLUON_TARGET="$$target"; \
done
manifest: build
diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch
index e504aa1..8cef785 100644
--- a/patches/020-interfaces.patch
+++ b/patches/020-interfaces.patch
@@ -7,7 +7,7 @@ index 063ab1a..51150e4 100644
}) then
lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
+elseif platform.match('ipq40xx', 'generic', {
-+ 'avm,fritz-box-7530',
++ 'avm,fritzbox-7530',
+}) then
+ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
elseif platform.match('lantiq', 'xrx200', {
diff --git a/patches/targets-ipq40xx-devices.patch b/patches/targets-ipq40xx-devices.patch
index c46416d..3903694 100644
--- a/patches/targets-ipq40xx-devices.patch
+++ b/patches/targets-ipq40xx-devices.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index 8420a56..cf0023d 100644
+index 246fe066..1247cac4 100644
--- a/targets/ipq40xx-generic
+++ b/targets/ipq40xx-generic
-@@ -87,6 +87,15 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
+@@ -87,6 +87,21 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
device('linksys-ea6350v3', 'linksys_ea6350v3')
@@ -14,6 +14,12 @@ index 8420a56..cf0023d 100644
+ factory = false,
+ broken = true, -- 3rd WiFi radio not supported (5GHz DFS channels 100+)
+})
++
++-- Meraki
++
++device('meraki-mr33', 'meraki_mr33', {
++ factory = false,
++})
+
-- NETGEAR
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index bc95f40..9dce406 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,28 +1,35 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 4e6e1cff..ba01e29e 100644
+index 7c7fa151..5116551f 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
-@@ -7,6 +7,25 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', {
-
+@@ -4,9 +4,32 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', {
+ factory = false,
+ })
+
++device('asus-rt-ax53u', 'asus_rt-ax53u', {
++ factory = false,
++})
++
+
-- Cudy
-
+
+device('cudy-x6', 'cudy_x6', {
-+ factory = false,
++ factory = false,
+})
+
+device('cudy-m1800', 'cudy_m1800', {
-+ factory = false,
++ factory = false,
+})
+
+device('cudy-wr1300-v1', 'cudy_wr1300-v1', {
-+ factory = false,
++ factory = false,
+})
+
+device('cudy-wr1300-v2', 'cudy_wr1300-v2', {
-+ factory = false,
-+ manifest_aliases = {
-+ 'cudy-wr1300-v3',
-+ },
++ factory = false,
++ manifest_aliases = {
++ 'cudy-wr1300-v3',
++ },
+})
+
device('cudy-wr2100', 'cudy_wr2100', {
From d97e591da59f5af796dd17c830b65346f4e2eeae Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 15 Apr 2023 00:33:32 +0200
Subject: [PATCH 030/129] make update should run -j1
---
Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index f4fe39a..33510c4 100644
--- a/Makefile
+++ b/Makefile
@@ -62,8 +62,8 @@ gluon-prepare: output-clean ${GLUON_BUILD_DIR}
&& git checkout -q --force ${GLUON_GIT_REF} \
&& git clean -fd;
ln -sfT .. ${GLUON_BUILD_DIR}/site
- make gluon-patch
- ${GLUON_MAKE} update
+ ${MAKE} gluon-patch
+ ${GLUON_MAKE} -j1 update
gluon-patch:
echo "Applying Patches ..."
From 11249338d7821a15f27d17097bc16bbe59f0dbbe Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 15 Apr 2023 01:16:11 +0200
Subject: [PATCH 031/129] fix missing quotation mark
---
i18n/de.po | 2 +-
i18n/fr.po | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/i18n/de.po b/i18n/de.po
index f382596..95c59f7 100644
--- a/i18n/de.po
+++ b/i18n/de.po
@@ -29,7 +29,7 @@ msgstr ""
msgid "gluon-config-mode:novpn"
msgstr ""
"Du hast dich entschieden, das VPN-Netzwerk nicht zu nutzen. "
-"Dein Knoten kann sich nur dann mit dem Freifunk-Netzwerk verbinden, wenn andere Knoten in Reichweite bereits eine Verbindung haben.
+"Dein Knoten kann sich nur dann mit dem Freifunk-Netzwerk verbinden, wenn andere Knoten in Reichweite bereits eine Verbindung haben."
msgid "gluon-config-mode:reboot"
msgstr ""
diff --git a/i18n/fr.po b/i18n/fr.po
index 2e54c40..87a47aa 100644
--- a/i18n/fr.po
+++ b/i18n/fr.po
@@ -58,4 +58,4 @@ msgstr ""
"Veuillez indiquer ici vos coordonnées pour nous permettre de vous contacter. "
Ces informations ne sont accessibles qu'aux opérateurs du réseau Freifunk local et leur permettent de vous contacter en cas de problème important. "
Ce champ n'est pas nécessaire pour exploiter un nœud. "
-Vous pouvez supprimer ou modifier vous-même les informations de contact dans ce menu.
"
\ No newline at end of file
+Vous pouvez supprimer ou modifier vous-même les informations de contact dans ce menu."
From 68345e6ff9d21d242990228daafea9acb9a6c65f Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 15 Apr 2023 01:21:30 +0200
Subject: [PATCH 032/129] fix missing quotation mark (fr)
---
i18n/fr.po | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/i18n/fr.po b/i18n/fr.po
index 87a47aa..abd20bd 100644
--- a/i18n/fr.po
+++ b/i18n/fr.po
@@ -56,6 +56,6 @@ msgstr ""
msgid "gluon-config-mode:contact-help"
msgstr ""
"Veuillez indiquer ici vos coordonnées pour nous permettre de vous contacter. "
-Ces informations ne sont accessibles qu'aux opérateurs du réseau Freifunk local et leur permettent de vous contacter en cas de problème important. "
-Ce champ n'est pas nécessaire pour exploiter un nœud. "
-Vous pouvez supprimer ou modifier vous-même les informations de contact dans ce menu.
"
+"Ces informations ne sont accessibles qu'aux opérateurs du réseau Freifunk local et leur permettent de vous contacter en cas de problème important. "
+"Ce champ n'est pas nécessaire pour exploiter un nœud. "
+"Vous pouvez supprimer ou modifier vous-même les informations de contact dans ce menu."
From 342479be90f16ca98cd3bdb3adb6766e3edf1ab0 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 15 Apr 2023 01:26:29 +0200
Subject: [PATCH 033/129] fix rocket 5-ac wifi driver firmware
---
patches/targets-ath79-generic.patch | 29 ++++++++++-------------------
1 file changed, 10 insertions(+), 19 deletions(-)
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 0638d68..5450582 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,28 +1,19 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index a5d0e484..55ccf959 100644
+index bcbf4acd..b59ca78b 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -222,6 +222,15 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', {
- factory_ext = '.img',
- })
-
-+device('netgear-wndr3800', 'netgear_wndr3800', {
-+ factory_ext = '.img',
-+})
-+
-+device('netgear-wndr3800ch', 'netgear_wndr3800ch', {
-+ factory_ext = '.img',
-+ aliases = {'netgear-wndr3800chmychart'},
-+})
-+
-
- -- OCEDO
-
-@@ -606,3 +615,7 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -606,3 +606,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
+
+device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', {
-+ packages = ATH10K_PACKAGES_QCA9888,
++ packages = ATH10K_PACKAGES_QCA9880,
+})
++
++
++-- Zyxel
++
++device('zyxel-nbg6616', 'zyxel_nbg6616', {
++ packages = ATH10K_PACKAGES_QCA9880,
++})
\ No newline at end of file
From 0a837fb6b518c1a932d7c27af1b1d037699a7bc5 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 15 Apr 2023 01:55:10 +0200
Subject: [PATCH 034/129] fix patch
---
patches/targets-ath79-generic.patch | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 5450582..ab1290c 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index bcbf4acd..b59ca78b 100644
+index e9083bea..e1300b89 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
@@ -606,3 +606,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
@@ -16,4 +16,4 @@ index bcbf4acd..b59ca78b 100644
+
+device('zyxel-nbg6616', 'zyxel_nbg6616', {
+ packages = ATH10K_PACKAGES_QCA9880,
-+})
\ No newline at end of file
++})
From 12b3f36a3dd48fb81eddc4a8cea12e36070bce55 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 29 Apr 2023 15:44:50 +0200
Subject: [PATCH 035/129] update openwrt
---
Makefile | 2 +-
patches/config-roles-ui.patch | 810 ----------------------------------
2 files changed, 1 insertion(+), 811 deletions(-)
delete mode 100644 patches/config-roles-ui.patch
diff --git a/Makefile b/Makefile
index 33510c4..80025dd 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/ffac/gluon.git
-GLUON_GIT_REF := 53dce4944abf1405373eacb53d3dc305d28364f2 #next v2023.1.x
+GLUON_GIT_REF := 699bbd2f4473a9deaf8f13f7052dab340d440930 #next v2023.1.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
diff --git a/patches/config-roles-ui.patch b/patches/config-roles-ui.patch
deleted file mode 100644
index 497f618..0000000
--- a/patches/config-roles-ui.patch
+++ /dev/null
@@ -1,810 +0,0 @@
-From f26d0c28df8189192ca1e4108c33362afc5fd81b Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Fri, 15 Apr 2022 00:44:39 +0200
-Subject: [PATCH 01/15] gluon-web-model: add MultiListValue class
-
----
- .luacheckrc | 1 +
- .../gluon/config-mode/www/static/gluon.css | 2 +-
- .../gluon-config-mode-theme/sass/gluon.scss | 7 +++
- .../lib/gluon/web/view/model/mlvalue.html | 23 +++++++
- .../usr/lib/lua/gluon/web/model/classes.lua | 60 +++++++++++++++++++
- 5 files changed, 92 insertions(+), 1 deletion(-)
- create mode 100644 package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
-
-diff --git a/.luacheckrc b/.luacheckrc
-index 2f491ca253..0f17ecc565 100644
---- a/.luacheckrc
-+++ b/.luacheckrc
-@@ -50,6 +50,7 @@ files["package/**/check_site.lua"] = {
-
- files["package/**/luasrc/lib/gluon/config-mode/*"] = {
- globals = {
-+ "MultiListValue",
- "DynamicList",
- "Flag",
- "Form",
-diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
-index c84ac01bed..296dc49a39 100644
---- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
-+++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
-@@ -1 +1 @@
--html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8, ') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em}
-+html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8, ') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em}
-diff --git a/package/gluon-config-mode-theme/sass/gluon.scss b/package/gluon-config-mode-theme/sass/gluon.scss
-index 575af4f926..3af8d5e000 100644
---- a/package/gluon-config-mode-theme/sass/gluon.scss
-+++ b/package/gluon-config-mode-theme/sass/gluon.scss
-@@ -366,6 +366,13 @@ input[type=password] {
- min-width: 20em;
- }
-
-+.gluon-multi-list-option-descr {
-+ display: inline-block;
-+ vertical-align: top;
-+ margin-top: 0.35em;
-+ margin-left: 0.4em;
-+}
-+
- .gluon-button {
- @include button;
-
-diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
-new file mode 100644
-index 0000000000..a65eda7449
---- /dev/null
-+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
-@@ -0,0 +1,23 @@
-+<%
-+ local br = self.orientation == "horizontal" and ' ' or ' '
-+ local entries = self:entries()
-+ local util = require 'gluon.util'
-+%>
-+
-+ <% for i, entry in pairs(entries) do %>
-+ >
-+ >
-+ >
-+ <%|entry.value%>
-+
-+ <% if i ~= #entries then write(br) end %>
-+ <% end %>
-+
-diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
-index 93279c3b61..64906d6bb5 100644
---- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
-+++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
-@@ -361,6 +361,66 @@ function ListValue:validate()
- end
-
-
-+local MultiListValue = class(AbstractValue)
-+M.MultiListValue = MultiListValue
-+
-+function MultiListValue:__init__(...)
-+ AbstractValue.__init__(self, ...)
-+ self.subtemplate = "model/mlvalue"
-+
-+ self.size = 1
-+
-+ self.keys = {}
-+ self.entry_list = {}
-+end
-+
-+function MultiListValue:value(key, val, ...)
-+ key = tostring(key)
-+
-+ if self.keys[key] then
-+ return
-+ end
-+ self.keys[key] = true
-+
-+ val = val or key
-+ table.insert(self.entry_list, {
-+ key = key,
-+ value = tostring(val),
-+ deps = {...},
-+ })
-+end
-+
-+function MultiListValue:entries()
-+ local ret = {unpack(self.entry_list)}
-+
-+ return ret
-+end
-+
-+function MultiListValue:validate()
-+ for _, val in ipairs(self.data) do
-+ if not self.keys[val] then
-+ return false
-+ end
-+ end
-+
-+ return true
-+end
-+
-+function MultiListValue:defaultvalue()
-+ local value = self.default
-+
-+ if type(value) == "table" then
-+ return value
-+ else
-+ return { value }
-+ end
-+end
-+
-+function MultiListValue:formvalue(http)
-+ return http:formvaluetable(self:id())
-+end
-+
-+
- local DynamicList = class(AbstractValue)
- M.DynamicList = DynamicList
-
-
-From be8462048915941f20f58e16f4391b54c49cc5d6 Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Fri, 15 Apr 2022 02:02:44 +0200
-Subject: [PATCH 02/15] gluon-web-network: initial draft of role configuration
-
----
- .../gluon/config-mode/model/admin/network.lua | 45 +++++++------------
- 1 file changed, 16 insertions(+), 29 deletions(-)
-
-diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-index df92c96590..33bf44ae20 100644
---- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-@@ -9,13 +9,12 @@ http://www.apache.org/licenses/LICENSE-2.0
- ]]--
-
- local uci = require("simple-uci").cursor()
--local sysconfig = require 'gluon.sysconfig'
--local util = require 'gluon.util'
-
- local wan = uci:get_all("network", "wan")
- local wan6 = uci:get_all("network", "wan6")
- local dns_static = uci:get_first("gluon-wan-dnsmasq", "static")
-
-+
- local f = Form(translate("WAN connection"))
-
- local s = f:section(Section)
-@@ -76,36 +75,23 @@ end
-
- s = f:section(Section)
-
--local wired_mesh_help = {
-- single = translate('Enable meshing on the Ethernet interface'),
-- wan = translate('Enable meshing on the WAN interface'),
-- lan = translate('Enable meshing on the LAN interface'),
--}
--
--local function wired_mesh(iface)
-- if not sysconfig[iface .. '_ifname'] then return end
-- local iface_roles = uci:get_list('gluon', 'iface_' .. iface, 'role')
--
-- local option = s:option(Flag, 'mesh_' .. iface, wired_mesh_help[iface])
-- option.default = util.contains(iface_roles, 'mesh') ~= false
--
-- function option:write(data)
-- local roles = uci:get_list('gluon', 'iface_' .. iface, 'role')
-- if data then
-- util.add_to_set(roles, 'mesh')
-- else
-- util.remove_from_set(roles, 'mesh')
-- end
-- uci:set_list('gluon', 'iface_' .. iface, 'role', roles)
-+uci:foreach('gluon', 'interface', function(config)
-+ local section_name = config['.name']
-+ local ifaces = s:option(MultiListValue, section_name, config.name)
-+
-+ ifaces.widget = 'radio'
-+ ifaces.orientation = 'horizontal'
-+ ifaces:value('uplink', 'Uplink') -- TODO: Uplink and Client should be mutually exclusive.
-+ ifaces:value('mesh', 'Mesh')
-+ ifaces:value('client', 'Client')
-+
-+ ifaces.default = config.role
-
-- -- Reconfigure on next reboot
-- uci:set('gluon', 'core', 'reconfigure', true)
-+ function ifaces:write(data)
-+ uci:set_list("gluon", section_name, "role", data)
- end
--end
-+end)
-
--wired_mesh('single')
--wired_mesh('wan')
--wired_mesh('lan')
-
- local section
- uci:foreach("system", "gpio_switch", function(si)
-@@ -166,4 +152,5 @@ function f:write()
- uci:commit('system')
- end
-
-+
- return f
-
-From 76e239665152d9584ebb8c1b109815a52e98669f Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Sun, 30 Oct 2022 14:15:34 +0100
-Subject: [PATCH 03/15] gluon-web-network: show pretty interface names
-
----
- .../lib/gluon/config-mode/model/admin/network.lua | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-index 33bf44ae20..cf1d323757 100644
---- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-@@ -75,13 +75,19 @@ end
-
- s = f:section(Section)
-
-+local pretty_ifnames = {
-+ ["/wan"] = translate("WAN-Interfaces"),
-+ ["/single"] = translate("Interface"),
-+ ["/lan"] = translate("LAN-Interfaces")
-+}
-+
- uci:foreach('gluon', 'interface', function(config)
- local section_name = config['.name']
-- local ifaces = s:option(MultiListValue, section_name, config.name)
-+ local ifaces = s:option(MultiListValue, section_name, pretty_ifnames[config.name] or config.name)
-
- ifaces.widget = 'radio'
- ifaces.orientation = 'horizontal'
-- ifaces:value('uplink', 'Uplink') -- TODO: Uplink and Client should be mutually exclusive.
-+ ifaces:value('uplink', 'Uplink')
- ifaces:value('mesh', 'Mesh')
- ifaces:value('client', 'Client')
-
-
-From 98db33babc5edc50fb273bc8d232f42ce34ce0ca Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Wed, 4 Jan 2023 22:12:56 +0100
-Subject: [PATCH 04/15] gluon-web-model: uglify flag --support-ie8 is now --ie
-
-From uglify 3.14.0 on, this command is called --ie:
-
-https://github.com/mishoo/UglifyJS/commit/ef5f7fc25e93833396540cf7479685b241bd1b8f
----
- package/gluon-web-model/javascript/gluon-web-model.js | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js
-index ec9cdc4af3..9e8a11b9d2 100644
---- a/package/gluon-web-model/javascript/gluon-web-model.js
-+++ b/package/gluon-web-model/javascript/gluon-web-model.js
-@@ -13,7 +13,7 @@
- /*
- Build using:
-
-- uglifyjs javascript/gluon-web-model.js -o javascript/gluon-web-model.min.js -c -m --support-ie8
-+ uglifyjs javascript/gluon-web-model.js -o javascript/gluon-web-model.min.js -c -m --ie
- */
-
-
-
-From f489885f0cbf2b94c260f1193eb4d36eec6d4198 Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Fri, 6 May 2022 04:15:41 +0200
-Subject: [PATCH 05/15] gluon-web-model: add exclusive options for
- MultiListValue
-
----
- .../gluon/config-mode/www/static/gluon.css | 2 +-
- .../gluon-config-mode-theme/sass/gluon.scss | 4 ++++
- .../lib/gluon/web/view/model/mlvalue.html | 4 +++-
- .../javascript/gluon-web-model.js | 15 ++++++++++++
- .../javascript/gluon-web-model.min.js | 2 +-
- .../usr/lib/lua/gluon/web/model/classes.lua | 24 +++++++++++++++++++
- 6 files changed, 48 insertions(+), 3 deletions(-)
-
-diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
-index 296dc49a39..d239fd8f1e 100644
---- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
-+++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css
-@@ -1 +1 @@
--html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8, ') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em}
-+html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=checkbox][disabled]+label{background-color:#dcdcdc !important}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8, ') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em}
-diff --git a/package/gluon-config-mode-theme/sass/gluon.scss b/package/gluon-config-mode-theme/sass/gluon.scss
-index 3af8d5e000..a63156e430 100644
---- a/package/gluon-config-mode-theme/sass/gluon.scss
-+++ b/package/gluon-config-mode-theme/sass/gluon.scss
-@@ -273,6 +273,10 @@ input[type=checkbox] {
- text-align: center;
- font-size: 1.7em;
- }
-+
-+ &[disabled] + label {
-+ background-color: #dcdcdc !important;
-+ }
- }
-
- input[type=radio] {
-diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
-index a65eda7449..0a4fb5c9db 100644
---- a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
-+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html
-@@ -13,7 +13,9 @@
- attr("id", id.."."..entry.key) ..
- attr("name", id) ..
- attr("value", entry.key) ..
-- attr("checked", (util.contains(self:cfgvalue(), entry.key)) and "checked")
-+ attr("checked", (util.contains(self:cfgvalue(), entry.key)) and "checked") ..
-+ attr("data-exclusive-with", self.exclusions[entry.key]) ..
-+ attr("data-update", "change")
- %>>
- >
- <%|entry.value%>
-diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js
-index 9e8a11b9d2..ce8ad6478a 100644
---- a/package/gluon-web-model/javascript/gluon-web-model.js
-+++ b/package/gluon-web-model/javascript/gluon-web-model.js
-@@ -219,6 +219,20 @@
- parent.parentNode.style.display = (parent.options.length <= 1) ? 'none' : '';
- }
-
-+ var nodes = document.querySelectorAll('[data-exclusive-with]');
-+ for (var i = 0, node; (node = nodes[i]) !== undefined; i++) {
-+ var excusive_with = JSON.parse(node.getAttribute('data-exclusive-with'));
-+
-+ node.disabled = false;
-+ for (let list_item of excusive_with) {
-+ var el = document.getElementById(node.name + '.' + list_item);
-+ node.disabled |= el.checked;
-+ }
-+
-+ if (node.disabled)
-+ node.checked = false;
-+ }
-+
- if (state) {
- update();
- }
-@@ -533,6 +547,7 @@
- init_dynlist(node, attr);
- }
-
-+
- update();
- })();
- })();
-diff --git a/package/gluon-web-model/javascript/gluon-web-model.min.js b/package/gluon-web-model/javascript/gluon-web-model.min.js
-index 07478cbb02..2adf363f08 100644
---- a/package/gluon-web-model/javascript/gluon-web-model.min.js
-+++ b/package/gluon-web-model/javascript/gluon-web-model.min.js
-@@ -1 +1 @@
--!function(){var v={};function a(e){return/^-?\d+$/.test(e)?+e:NaN}function r(e){return/^-?\d*\.?\d+?$/.test(e)?+e:NaN}var u={integer:function(){return!isNaN(a(this))},uinteger:function(){return 0<=a(this)},float:function(){return!isNaN(r(this))},ufloat:function(){return 0<=r(this)},ipaddr:function(){return u.ip4addr.apply(this)||u.ip6addr.apply(this)},ip4addr:function(){var e;return!!(e=this.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/))&&(0<=e[1]&&e[1]<=255&&0<=e[2]&&e[2]<=255&&0<=e[3]&&e[3]<=255&&0<=e[4]&&e[4]<=255)},ip6addr:function(){return this.indexOf("::")<0?null!=this.match(/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i):!(0<=this.indexOf(":::")||this.match(/::.+::/)||this.match(/^:[^:]/)||this.match(/[^:]:$/))&&(!!this.match(/^(?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}$/i)||(!!this.match(/^(?:[a-f0-9]{1,4}:){7}:$/i)||!!this.match(/^:(?::[a-f0-9]{1,4}){7}$/i)))},wpakey:function(){var e=this;return 64==e.length?null!=e.match(/^[a-f0-9]{64}$/i):8<=e.length&&e.length<=63},range:function(e,t){var n=r(this);return+e<=n&&n<=+t},min:function(e){return r(this)>=+e},max:function(e){return r(this)<=+e},irange:function(e,t){var n=a(this);return+e<=n&&n<=+t},imin:function(e){return a(this)>=+e},imax:function(e){return a(this)<=+e},minlength:function(e){return+e<=(""+this).length},maxlength:function(e){return(""+this).length<=+e}};function o(e){for(var t=0;tn.index);i=i.nextSibling);i?r.insertBefore(n.node,i):r.appendChild(n.node),n.node.dispatchEvent(new Event("gluon-show")),e=!0}r&&r.parentNode&&r.getAttribute("data-optionals")&&(r.parentNode.style.display=r.options.length<=1?"none":"")}e&&h()}function g(e,t,n,a){return e.addEventListener?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,function(){var e=window.event;return!e.target&&e.srcElement&&(e.target=e.srcElement),!!n(e)}),e}function m(l,s){var c=s.prefix;function o(e,t,n){for(var a=[];l.firstChild;){var r=l.firstChild;(i=+r.index)!=n&&("input"==r.nodeName.toLowerCase()?a.push(r.value||""):"select"==r.nodeName.toLowerCase()&&(a[a.length-1]=r.options[r.selectedIndex].value)),l.removeChild(r)}0<=t?(e=t+1,a.splice(t,0,"")):s.optional||0!=a.length||a.push("");for(var i=1;i<=a.length;i++){var o=document.createElement("input");if(o.id=c+"."+i,o.name=c,o.value=a[i-1],o.type="text",o.index=i,s.size&&(o.size=s.size),s.placeholder&&(o.placeholder=s.placeholder),l.appendChild(o),s.type&&y(o,!1,s.type),g(o,"keydown",f),g(o,"keypress",p),i==e)o.focus();else if(-i==e){o.focus();var d=o.value;o.value=" ",o.value=d}if(s.optional||1=+e},max:function(e){return i(this)<=+e},irange:function(e,t){var n=a(this);return+e<=n&&n<=+t},imin:function(e){return a(this)>=+e},imax:function(e){return a(this)<=+e},minlength:function(e){return+e<=(""+this).length},maxlength:function(e){return(""+this).length<=+e}};function p(e){for(var t,n,a,i=0;in.index);r=r.nextSibling);r?i.insertBefore(n.node,r):i.appendChild(n.node),n.node.dispatchEvent(new Event("gluon-show")),t=!0}i&&i.parentNode&&i.getAttribute("data-optionals")&&(i.parentNode.style.display=i.options.length<=1?"none":"")}for(var d=document.querySelectorAll("[data-exclusive-with]"),o=0;(a=d[o])!==undefined;o++){var u,l=JSON.parse(a.getAttribute("data-exclusive-with"));a.disabled=!1;for(u of l){var c=document.getElementById(a.name+"."+u);a.disabled|=c.checked}a.disabled&&(a.checked=!1)}t&&f()}function v(e,t,n,a){e.addEventListener?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,function(){var e=window.event;return!e.target&&e.srcElement&&(e.target=e.srcElement),!!n(e)})}function m(t,n,e){var a,i,r=(i=(e=e).match(/^([^\(]+)\(([^,]+),([^\)]+)\)$/))&&(a=d[i[1]])!==undefined?function(){return a.apply(this,[i[2],i[3]])}:(i=e.match(/^([^\(]+)\(([^,\)]+)\)$/))&&(a=d[i[1]])!==undefined?function(){return a.apply(this,[i[2]])}:d[e];r&&(v(t,"blur",e=function(){var e;t.form&&(t.className=t.className.replace(/ gluon-input-invalid/g,""),0==(e=(t.options&&-1
-Date: Fri, 6 May 2022 04:16:05 +0200
-Subject: [PATCH 06/15] gluon-web-network: make roles "uplink" / "mesh" and
- "client" exclusive
-
----
- .../luasrc/lib/gluon/config-mode/model/admin/network.lua | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-index cf1d323757..73bf555fea 100644
---- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-@@ -90,6 +90,8 @@ uci:foreach('gluon', 'interface', function(config)
- ifaces:value('uplink', 'Uplink')
- ifaces:value('mesh', 'Mesh')
- ifaces:value('client', 'Client')
-+ ifaces:exclusive('uplink', 'client')
-+ ifaces:exclusive('mesh', 'client')
-
- ifaces.default = config.role
-
-
-From 4c2027943b08e08e45eb92303a836d0dbf2cdebb Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Fri, 16 Dec 2022 00:29:29 +0100
-Subject: [PATCH 07/15] gluon-core: fix invalid role configurations during
- reconfigure
-
----
- .../luasrc/lib/gluon/upgrade/021-interface-roles | 15 +++++++++++++++
- 1 file changed, 15 insertions(+)
-
-diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles b/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles
-index 5d27fb708b..6e39219a69 100755
---- a/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles
-+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles
-@@ -63,4 +63,19 @@ for iface in pairs(interfaces) do
- end
- end
-
-+-- Fix invalid role configurations
-+
-+uci:foreach('gluon', 'interface', function(interface)
-+
-+ local function has_role(role)
-+ return util.contains(interface.role, role)
-+ end
-+
-+ if has_role('client') and (has_role('mesh') or has_role('uplink')) then
-+ -- remove 'client' role
-+ util.remove_from_set(interface.role, 'client')
-+ uci:set('gluon', interface['.name'], 'role', interface.role)
-+ end
-+end)
-+
- uci:save('gluon')
-
-From c00bf47077384b9cd08eef5693b12668bedaf1cd Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Fri, 16 Dec 2022 00:44:48 +0100
-Subject: [PATCH 08/15] docs: explain that invalid interface roles are removed
-
----
- docs/user/site.rst | 9 ++-------
- 1 file changed, 2 insertions(+), 7 deletions(-)
-
-diff --git a/docs/user/site.rst b/docs/user/site.rst
-index fc82f314d2..96bb5eacff 100644
---- a/docs/user/site.rst
-+++ b/docs/user/site.rst
-@@ -448,13 +448,8 @@ interfaces \: optional
- The ``client`` role requires exclusive control over an interface. When
- the ``client`` role is assigned to an interface at the same time as other
- roles (like ``'client', 'mesh'`` in the above example), the other roles take
-- precedence (enabling ``mesh``, but not ``client`` in the example).
--
-- Such a default configuration still fulfills a purpose (and is in fact the
-- recommended way to enable "Mesh-on-LAN" by default): The "LAN interface
-- meshing" checkbox in the advanced network settings will only add or remove
-- the ``mesh`` role, so the ``client`` role must already be in the configuration
-- to make the LAN port a regular client interface when the checkbox is disabled.
-+ precedence (enabling ``mesh``, but not ``client`` in the example). In that
-+ case, the ``client`` role is removed from the config of the interface.
-
- All interface settings are optional. If unset, the following defaults are
- used:
-
-From e44e0bca94fafd508d4f65ca632950fb3e1d303c Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Sun, 26 Feb 2023 22:49:08 +0100
-Subject: [PATCH 09/15] fixup! gluon-web-network: initial draft of role
- configuration
-
----
- .../luasrc/lib/gluon/config-mode/model/admin/network.lua | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-index 73bf555fea..1a50147b86 100644
---- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-@@ -85,7 +85,6 @@ uci:foreach('gluon', 'interface', function(config)
- local section_name = config['.name']
- local ifaces = s:option(MultiListValue, section_name, pretty_ifnames[config.name] or config.name)
-
-- ifaces.widget = 'radio'
- ifaces.orientation = 'horizontal'
- ifaces:value('uplink', 'Uplink')
- ifaces:value('mesh', 'Mesh')
-
-From a9ab6815f7a679bfa637b821c1f8b46a3de8fe05 Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Sun, 26 Feb 2023 22:53:28 +0100
-Subject: [PATCH 10/15] fixup! gluon-web-model: add exclusive options for
- MultiListValue
-
----
- package/gluon-web-model/javascript/gluon-web-model.js | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js
-index ce8ad6478a..4c9dd72e19 100644
---- a/package/gluon-web-model/javascript/gluon-web-model.js
-+++ b/package/gluon-web-model/javascript/gluon-web-model.js
-@@ -547,7 +547,6 @@
- init_dynlist(node, attr);
- }
-
--
- update();
- })();
- })();
-
-From 63d99fad284da8807af2730e0859e4332d276ee5 Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Sun, 26 Feb 2023 22:53:36 +0100
-Subject: [PATCH 11/15] fixup! gluon-web-model: add exclusive options for
- MultiListValue
-
----
- package/gluon-web-model/javascript/gluon-web-model.js | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js
-index 4c9dd72e19..7b98dc1ef3 100644
---- a/package/gluon-web-model/javascript/gluon-web-model.js
-+++ b/package/gluon-web-model/javascript/gluon-web-model.js
-@@ -224,7 +224,7 @@
- var excusive_with = JSON.parse(node.getAttribute('data-exclusive-with'));
-
- node.disabled = false;
-- for (let list_item of excusive_with) {
-+ for (var list_item of excusive_with) {
- var el = document.getElementById(node.name + '.' + list_item);
- node.disabled |= el.checked;
- }
-
-From af3b1ce4736c9df58c33da84137cafdf8daf2e3d Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Sun, 26 Feb 2023 22:24:10 +0100
-Subject: [PATCH 12/15] gluon-core: make interface roles exclusive in site
- config
-
----
- .luacheckrc | 1 +
- package/gluon-core/check_site.lua | 6 +++++-
- .../luasrc/lib/gluon/check-site.lua | 21 +++++++++++++++++++
- 3 files changed, 27 insertions(+), 1 deletion(-)
-
-diff --git a/.luacheckrc b/.luacheckrc
-index 0f17ecc565..9639097284 100644
---- a/.luacheckrc
-+++ b/.luacheckrc
-@@ -29,6 +29,7 @@ files["package/**/check_site.lua"] = {
- "need",
- "need_alphanumeric_key",
- "need_array",
-+ "need_array_elements_exclusive",
- "need_array_of",
- "need_boolean",
- "need_chanlist",
-diff --git a/package/gluon-core/check_site.lua b/package/gluon-core/check_site.lua
-index 06b9ac59d0..9918984ecc 100644
---- a/package/gluon-core/check_site.lua
-+++ b/package/gluon-core/check_site.lua
-@@ -77,7 +77,11 @@ need_boolean(in_domain({'mesh', 'vxlan'}), false)
-
- local interfaces_roles = {'client', 'uplink', 'mesh'}
- for _, config in ipairs({'wan', 'lan', 'single'}) do
-- need_array_of(in_site({'interfaces', config, 'default_roles'}), interfaces_roles, false)
-+ local default_roles = in_site({'interfaces', config, 'default_roles'})
-+
-+ need_array_of(default_roles, interfaces_roles, false)
-+ need_array_elements_exclusive(default_roles, "client", "mesh", false)
-+ need_array_elements_exclusive(default_roles, "client", "uplink", false)
- end
-
- obsolete({'mesh_on_wan'}, 'Use interfaces.wan.default_roles.')
-diff --git a/package/gluon-core/luasrc/lib/gluon/check-site.lua b/package/gluon-core/luasrc/lib/gluon/check-site.lua
-index 148f4968f7..2172a984c7 100644
---- a/package/gluon-core/luasrc/lib/gluon/check-site.lua
-+++ b/package/gluon-core/luasrc/lib/gluon/check-site.lua
-@@ -55,6 +55,14 @@ local function merge(a, b)
- return m
- end
-
-+local function contains(table, val)
-+ for i=1,#table do
-+ if table[i] == val then
-+ return true
-+ end
-+ end
-+ return false
-+end
-
- local function path_to_string(path)
- if path.is_value then
-@@ -370,6 +378,19 @@ function M.need_array_of(path, array, required)
- return M.need_array(path, function(e) M.need_one_of(e, array) end, required)
- end
-
-+function M.need_array_elements_exclusive(path, a, b, required)
-+ local val = need_type(path, 'table', required, 'be an array')
-+ if not val then
-+ return nil
-+ end
-+
-+ if contains(val, a) and contains(val, b) then
-+ config_error(conf_src(path), 'expected %s to contain either "%s" or "%s", but not both.', path_to_string(path), a, b)
-+ end
-+
-+ return val
-+end
-+
- function M.need_chanlist(path, channels, required)
- local valid_chanlist = check_chanlist(channels)
- return M.need(path, valid_chanlist, required,
-
-From 77075b29fc8107938759e78485fb27cfc2aa689c Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Sun, 26 Feb 2023 22:55:21 +0100
-Subject: [PATCH 13/15] fixup! gluon-web-model: add MultiListValue class
-
----
- .../luasrc/usr/lib/lua/gluon/web/model/classes.lua | 8 +-------
- 1 file changed, 1 insertion(+), 7 deletions(-)
-
-diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
-index 31b46476f1..74a4181b87 100644
---- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
-+++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
-@@ -431,13 +431,7 @@ function MultiListValue:exclusive(a, b)
- end
-
- function MultiListValue:defaultvalue()
-- local value = self.default
--
-- if type(value) == "table" then
-- return value
-- else
-- return { value }
-- end
-+ return self.default or {}
- end
-
- function MultiListValue:formvalue(http)
-
-From 544266af9a22bfe7af2cea9bb9cbdd4220964f22 Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Sun, 26 Feb 2023 22:43:17 +0100
-Subject: [PATCH 14/15] gluon-web-model: migrate to SPDX headers for licensing
-
----
- .../gluon-web-model/javascript/gluon-web-model.js | 14 +++++---------
- .../luasrc/usr/lib/lua/gluon/web/model/classes.lua | 7 ++++---
- .../usr/lib/lua/gluon/web/model/datatypes.lua | 6 +++---
- 3 files changed, 12 insertions(+), 15 deletions(-)
-
-diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js
-index 7b98dc1ef3..55c68e2e87 100644
---- a/package/gluon-web-model/javascript/gluon-web-model.js
-+++ b/package/gluon-web-model/javascript/gluon-web-model.js
-@@ -1,13 +1,9 @@
- /*
-- Copyright 2008 Steven Barth
-- Copyright 2008-2012 Jo-Philipp Wich
-- Copyright 2017 Matthias Schiffer
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
-+ SPDX-License-Identifier: Apache-2.0
-+ SPDX-FileCopyrightText: 2008, Steven Barth
-+ SPDX-FileCopyrightText: 2008-2012, Jo-Philipp Wich
-+ SPDX-FileCopyrightText: 2017, Matthias Schiffer
-+ SPDX-FileCopyrightText: 2023, Leonardo Mörlein
- */
-
- /*
-diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
-index 74a4181b87..1b2e5f5c2b 100644
---- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
-+++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
-@@ -1,6 +1,7 @@
---- Copyright 2008 Steven Barth
---- Copyright 2017-2018 Matthias Schiffer
---- Licensed to the public under the Apache License 2.0.
-+-- SPDX-License-Identifier: Apache-2.0
-+-- SPDX-FileCopyrightText: 2008, Steven Barth
-+-- SPDX-FileCopyrightText: 2017-2018, Matthias Schiffer
-+-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein
-
- local util = require "gluon.web.util"
- local gluon_util = require "gluon.util"
-diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua
-index fdee7d7dbe..31c1aa82fc 100644
---- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua
-+++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua
-@@ -1,6 +1,6 @@
---- Copyright 2010 Jo-Philipp Wich
---- Copyright 2017 Matthias Schiffer
---- Licensed to the public under the Apache License 2.0.
-+-- SPDX-License-Identifier: Apache-2.0
-+-- SPDX-FileCopyrightText: 2010, Jo-Philipp Wich
-+-- SPDX-FileCopyrightText: 2017, Matthias Schiffer
-
- local M = {}
-
-
-From 88c976a7f3afa576fce5388ea98a10bc853e51b4 Mon Sep 17 00:00:00 2001
-From: lemoer
-Date: Sun, 26 Feb 2023 22:46:23 +0100
-Subject: [PATCH 15/15] gluon-web-network: migrate to SPDX headers for
- licensing
-
----
- .../lib/gluon/config-mode/model/admin/network.lua | 12 +++---------
- 1 file changed, 3 insertions(+), 9 deletions(-)
-
-diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-index 1a50147b86..1c0b34721b 100644
---- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
-@@ -1,12 +1,6 @@
----[[
--Copyright 2014 Nils Schneider
--
--Licensed under the Apache License, Version 2.0 (the "License");
--you may not use this file except in compliance with the License.
--You may obtain a copy of the License at
--
--http://www.apache.org/licenses/LICENSE-2.0
--]]--
-+-- SPDX-License-Identifier: Apache-2.0
-+-- SPDX-FileCopyrightText: 2014, Nils Schneider
-+-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein
-
- local uci = require("simple-uci").cursor()
-
From e1697b48151ecfba0f1d290e7ce06b152b701316 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 6 May 2023 16:18:15 +0200
Subject: [PATCH 036/129] update v2023
---
Makefile | 4 +-
contrib/genpkglist.py | 1 +
modules | 2 +-
patches/020-interfaces.patch | 19 +-
patches/batman-v-radv-filterd.patch | 255 ------------------
patches/batman-v-respondd-ptq1.patch | 130 ---------
patches/batman-v-respondd-statistics.patch | 38 ---
patches/batman-v-show-tp-on-status-page.patch | 123 ---------
patches/batman-v-wired-tpo.patch | 12 -
site.conf | 77 +++++-
site.mk | 10 +-
11 files changed, 82 insertions(+), 589 deletions(-)
delete mode 100644 patches/batman-v-radv-filterd.patch
delete mode 100644 patches/batman-v-respondd-ptq1.patch
delete mode 100644 patches/batman-v-respondd-statistics.patch
delete mode 100644 patches/batman-v-show-tp-on-status-page.patch
delete mode 100644 patches/batman-v-wired-tpo.patch
diff --git a/Makefile b/Makefile
index 80025dd..54e9157 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/ffac/gluon.git
-GLUON_GIT_REF := 699bbd2f4473a9deaf8f13f7052dab340d440930 #next v2023.1.x
+GLUON_GIT_REF := next v2023.1.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
@@ -39,7 +39,7 @@ info:
build: gluon-prepare
for target in ${GLUON_TARGETS}; do \
echo ""Building target $$target""; \
- ${GLUON_MAKE} download all BROKEN=1 GLUON_TARGET="$$target"; \
+ ${GLUON_MAKE} download all GLUON_TARGET="$$target"; \
done
manifest: build
diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py
index d33f52b..07dc00f 100755
--- a/contrib/genpkglist.py
+++ b/contrib/genpkglist.py
@@ -295,6 +295,7 @@ def render(self):
add_pkglist(PKGS_USB_STORAGE). \
add_pkglist(PKGS_PCI). \
add_pkglist(PKGS_PCI_NET). \
+ add_pkglist(PKGS_VIRT). \
add_pkglist(PKGS_TLS)
targets.get('x86-64').add_pkglist(PKGS_VIRT)
diff --git a/modules b/modules
index 70e07e3..af525fe 100644
--- a/modules
+++ b/modules
@@ -1,7 +1,7 @@
GLUON_SITE_FEEDS="ffac eulenfunk ffho"
PACKAGES_FFAC_REPO=https://github.com/ffac/gluon-mesh-vpn-wireguard.git
-PACKAGES_FFAC_COMMIT=fb9dd6ae7eb80c8ad8d88b3088dd592569cf8860
+PACKAGES_FFAC_COMMIT=660d294e89ca92f5d7302d60de0bc37957b85932
PACKAGES_FFAC_BRANCH=main
PACKAGES_EULENFUNK_REPO=https://github.com/ffac/eulenfunk-packages.git
diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch
index 8cef785..f0c92b9 100644
--- a/patches/020-interfaces.patch
+++ b/patches/020-interfaces.patch
@@ -1,15 +1,16 @@
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-index 063ab1a..51150e4 100644
+index 063ab1a1..9f847082 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-@@ -67,6 +67,10 @@ elseif platform.match('ramips', 'mt7621', {
- 'netgear,wac104',
+@@ -71,6 +71,11 @@ elseif platform.match('lantiq', 'xrx200', {
+ 'arcadyan,vgv7510kw22-nor',
}) then
- lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
-+elseif platform.match('ipq40xx', 'generic', {
-+ 'avm,fritzbox-7530',
+ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan'
++elseif platform.match('lantiq', 'xrx200', {
++ 'tplink,tdw8970',
++ 'tplink,tdw8980',
+}) then
-+ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
- elseif platform.match('lantiq', 'xrx200', {
- 'arcadyan,vgv7510kw22-nor',
++ lan_ifname, wan_ifname = 'lan1 lan2 lan3', 'lan4'
+ elseif platform.match('realtek', 'rtl838x', {
+ 'd-link,dgs-1210-10p',
}) then
diff --git a/patches/batman-v-radv-filterd.patch b/patches/batman-v-radv-filterd.patch
deleted file mode 100644
index 01d9cb9..0000000
--- a/patches/batman-v-radv-filterd.patch
+++ /dev/null
@@ -1,255 +0,0 @@
-diff --git a/package/gluon-radv-filterd/src/gluon-radv-filterd.c b/package/gluon-radv-filterd/src/gluon-radv-filterd.c
-index b1620cae..ab79de26 100644
---- a/package/gluon-radv-filterd/src/gluon-radv-filterd.c
-+++ b/package/gluon-radv-filterd/src/gluon-radv-filterd.c
-@@ -59,11 +59,11 @@
-
- #include "mac.h"
-
--// Recheck TQs after this time even if no RA was received
-+// Recheck THROUGHPUTs after this time even if no RA was received
- #define MAX_INTERVAL 60
-
--// Recheck TQs at most this often, even if new RAs were received (they won't
--// become the preferred routers until the TQs have been rechecked)
-+// Recheck THROUGHPUTs at most this often, even if new RAs were received (they won't
-+// become the preferred routers until the THROUGHPUTs have been rechecked)
- // Also, the first update will take at least this long
- #define MIN_INTERVAL 15
-
-@@ -74,8 +74,8 @@
- // max execution time of a single ebtables call in nanoseconds
- #define EBTABLES_TIMEOUT 500000000 // 500ms
-
--// TQ value assigned to local routers
--#define LOCAL_TQ 512
-+// THROUGHPUT value assigned to local routers
-+#define LOCAL_THROUGHPUT 10000000
-
- #define BUFSIZE 1500
-
-@@ -108,7 +108,7 @@ struct router {
- struct ether_addr src;
- struct timespec eol;
- struct ether_addr originator;
-- uint16_t tq;
-+ uint32_t throughput;
- };
-
- static struct global {
-@@ -116,8 +116,8 @@ static struct global {
- struct router *routers;
- const char *mesh_iface;
- const char *chain;
-- uint16_t max_tq;
-- uint16_t hysteresis_thresh;
-+ uint32_t max_throughput;
-+ uint32_t hysteresis_thresh;
- struct router *best_router;
- volatile sig_atomic_t stop_daemon;
- } G = {
-@@ -188,8 +188,8 @@ static void usage(const char *msg) {
- fprintf(stderr,
- "Usage: %s [-m ] [-t ] -c -i \n\n"
- " -m B.A.T.M.A.N. advanced mesh interface used to get metric\n"
-- " information (\"TQ\") for the available gateways. Default: bat0\n"
-- " -t Minimum TQ difference required to switch the gateway.\n"
-+ " information (\"THROUGHPUT\") for the available gateways. Default: bat0\n"
-+ " -t Minimum THROUGHPUT difference required to switch the gateway.\n"
- " Default: 0\n"
- " -c ebtables chain that should be managed by the daemon. The\n"
- " chain already has to exist on program invocation and should\n"
-@@ -289,9 +289,9 @@ static void parse_cmdline(int argc, char *argv[]) {
- threshold = strtoul(optarg, &endptr, 10);
- if (*endptr != '\0')
- exit_errmsg("Threshold must be a number: %s", optarg);
-- if (threshold >= LOCAL_TQ)
-- exit_errmsg("Threshold too large: %ld (max is %d)", threshold, LOCAL_TQ);
-- G.hysteresis_thresh = (uint16_t) threshold;
-+ if (threshold >= LOCAL_THROUGHPUT)
-+ exit_errmsg("Threshold too large: %ld (max is %d)", threshold, LOCAL_THROUGHPUT);
-+ G.hysteresis_thresh = (uint32_t) threshold;
- break;
- case 'h':
- usage(NULL);
-@@ -462,7 +462,7 @@ static int parse_originator(struct nl_msg *msg,
-
- static const enum batadv_nl_attrs mandatory[] = {
- BATADV_ATTR_ORIG_ADDRESS,
-- BATADV_ATTR_TQ,
-+ BATADV_ATTR_THROUGHPUT,
- };
- struct nlattr *attrs[BATADV_ATTR_MAX + 1];
- struct nlmsghdr *nlh = nlmsg_hdr(msg);
-@@ -470,7 +470,7 @@ static int parse_originator(struct nl_msg *msg,
- struct genlmsghdr *ghdr;
- struct router *router;
- uint8_t *orig;
-- uint8_t tq;
-+ uint32_t throughput;
-
- // parse netlink entry
- if (!genlmsg_valid_hdr(nlh, 0))
-@@ -490,7 +490,7 @@ static int parse_originator(struct nl_msg *msg,
- return NL_OK;
-
- orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]);
-- tq = nla_get_u8(attrs[BATADV_ATTR_TQ]);
-+ throughput = nla_get_u32(attrs[BATADV_ATTR_THROUGHPUT]);
-
- if (!attrs[BATADV_ATTR_FLAG_BEST])
- return NL_OK;
-@@ -502,11 +502,11 @@ static int parse_originator(struct nl_msg *msg,
- if (!router)
- return NL_OK;
-
-- DEBUG_MSG("Found TQ for router " F_MAC " (originator " F_MAC "), it's %d",
-- F_MAC_VAR(router->src), F_MAC_VAR(router->originator), tq);
-- router->tq = tq;
-- if (router->tq > G.max_tq)
-- G.max_tq = router->tq;
-+ DEBUG_MSG("Found THROUGHPUT for router " F_MAC " (originator " F_MAC "), it's %d",
-+ F_MAC_VAR(router->src), F_MAC_VAR(router->originator), throughput);
-+ router->throughput = throughput;
-+ if (router->throughput > G.max_throughput)
-+ G.max_throughput = router->throughput;
-
- return NL_OK;
- }
-@@ -549,25 +549,25 @@ static int parse_tt_local(struct nl_msg *msg,
- if (!router)
- return NL_OK;
-
-- DEBUG_MSG("Found router " F_MAC " in transtable_local, assigning TQ %d",
-- F_MAC_VAR(router->src), LOCAL_TQ);
-- router->tq = LOCAL_TQ;
-- if (router->tq > G.max_tq)
-- G.max_tq = router->tq;
-+ DEBUG_MSG("Found router " F_MAC " in transtable_local, assigning THROUGHPUT %d",
-+ F_MAC_VAR(router->src), LOCAL_THROUGHPUT);
-+ router->throughput = LOCAL_THROUGHPUT;
-+ if (router->throughput > G.max_throughput)
-+ G.max_throughput = router->throughput;
-
- return NL_OK;
- }
-
--static void update_tqs(void) {
-+static void update_throughputs(void) {
- static const struct ether_addr unspec = {};
- struct router *router;
- bool update_originators = false;
- struct batadv_nlquery_opts opts;
- int ret;
-
-- // reset TQs
-+ // reset THROUGHPUTs
- foreach(router, G.routers) {
-- router->tq = 0;
-+ router->throughput = 0;
- if (ether_addr_equal(router->originator, unspec))
- update_originators = true;
- }
-@@ -582,8 +582,8 @@ static void update_tqs(void) {
- fprintf(stderr, "Parsing of global translation table failed\n");
- }
-
-- // look up TQs of originators
-- G.max_tq = 0;
-+ // look up THROUGHPUTs of originators
-+ G.max_throughput = 0;
- opts.err = 0;
- ret = batadv_genl_query(G.mesh_iface,
- BATADV_CMD_GET_ORIGINATORS,
-@@ -591,9 +591,9 @@ static void update_tqs(void) {
- if (ret < 0)
- fprintf(stderr, "Parsing of originators failed\n");
-
-- // if all routers have a TQ value, we don't need to check translocal
-+ // if all routers have a THROUGHPUT value, we don't need to check translocal
- foreach(router, G.routers) {
-- if (router->tq == 0)
-+ if (router->throughput == 0)
- break;
- }
- if (router != NULL) {
-@@ -606,14 +606,14 @@ static void update_tqs(void) {
- }
-
- foreach(router, G.routers) {
-- if (router->tq == 0) {
-+ if (router->throughput == 0) {
- if (ether_addr_equal(router->originator, unspec))
- DEBUG_MSG(
- "Unable to find router " F_MAC " in transtable_{global,local}",
- F_MAC_VAR(router->src));
- else
- DEBUG_MSG(
-- "Unable to find TQ for originator " F_MAC " (router " F_MAC ")",
-+ "Unable to find THROUGHPUT for originator " F_MAC " (router " F_MAC ")",
- F_MAC_VAR(router->originator),
- F_MAC_VAR(router->src));
- }
-@@ -679,11 +679,11 @@ static bool election_required(void)
- if (!G.best_router)
- return true;
-
-- /* should never happen. G.max_tq also contains G.best_router->tq */
-- if (G.max_tq < G.best_router->tq)
-+ /* should never happen. G.max_throughput also contains G.best_router->throughput */
-+ if (G.max_throughput < G.best_router->throughput)
- return false;
-
-- if ((G.max_tq - G.best_router->tq) <= G.hysteresis_thresh)
-+ if ((G.max_throughput - G.best_router->throughput) <= G.hysteresis_thresh)
- return false;
-
- return true;
-@@ -697,29 +697,29 @@ static void update_ebtables(void) {
- struct router *router;
-
- if (!election_required()) {
-- DEBUG_MSG(F_MAC " is still good enough with TQ=%d (max_tq=%d), not executing ebtables",
-+ DEBUG_MSG(F_MAC " is still good enough with THROUGHPUT=%d (max_throughput=%d), not executing ebtables",
- F_MAC_VAR(G.best_router->src),
-- G.best_router->tq,
-- G.max_tq);
-+ G.best_router->throughput,
-+ G.max_throughput);
- return;
- }
-
- foreach(router, G.routers) {
-- if (router->tq == G.max_tq) {
-+ if (router->throughput == G.max_throughput) {
- snprintf(mac, sizeof(mac), F_MAC, F_MAC_VAR(router->src));
- break;
- }
- }
- if (G.best_router)
-- fprintf(stderr, "Switching from " F_MAC " (TQ=%d) to %s (TQ=%d)\n",
-+ fprintf(stderr, "Switching from " F_MAC " (THROUGHPUT=%d) to %s (THROUGHPUT=%d)\n",
- F_MAC_VAR(G.best_router->src),
-- G.best_router->tq,
-+ G.best_router->throughput,
- mac,
-- G.max_tq);
-+ G.max_throughput);
- else
-- fprintf(stderr, "Switching to %s (TQ=%d)\n",
-+ fprintf(stderr, "Switching to %s (THROUGHPUT=%d)\n",
- mac,
-- G.max_tq);
-+ G.max_throughput);
- G.best_router = router;
-
- if (fork_execvp_timeout(&timeout, "ebtables-tiny", (const char *[])
-@@ -804,7 +804,7 @@ int main(int argc, char *argv[]) {
- next_invalidation.tv_sec += ORIGINATOR_CACHE_TTL;
- }
-
-- update_tqs();
-+ update_throughputs();
- update_ebtables();
-
- next_update = now;
diff --git a/patches/batman-v-respondd-ptq1.patch b/patches/batman-v-respondd-ptq1.patch
deleted file mode 100644
index 9f6a6ef..0000000
--- a/patches/batman-v-respondd-ptq1.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-diff --git a/package/gluon-mesh-batman-adv/src/respondd-neighbours.c b/package/gluon-mesh-batman-adv/src/respondd-neighbours.c
-index bf5b0315..a7630df9 100644
---- a/package/gluon-mesh-batman-adv/src/respondd-neighbours.c
-+++ b/package/gluon-mesh-batman-adv/src/respondd-neighbours.c
-@@ -66,22 +66,21 @@ static struct json_object * ifnames2addrs(struct json_object *interfaces) {
- return ret;
- }
-
--static const enum batadv_nl_attrs parse_orig_list_mandatory[] = {
-- BATADV_ATTR_ORIG_ADDRESS,
-+static const enum batadv_nl_attrs parse_neigh_list_mandatory[] = {
- BATADV_ATTR_NEIGH_ADDRESS,
-- BATADV_ATTR_TQ,
-+ BATADV_ATTR_THROUGHPUT,
- BATADV_ATTR_HARD_IFINDEX,
- BATADV_ATTR_LAST_SEEN_MSECS,
- };
-
--static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg)
-+static int parse_neigh_list_netlink_cb(struct nl_msg *msg, void *arg)
- {
- struct nlattr *attrs[BATADV_ATTR_MAX+1];
- struct nlmsghdr *nlh = nlmsg_hdr(msg);
- struct batadv_nlquery_opts *query_opts = arg;
- struct genlmsghdr *ghdr;
-- uint8_t *orig;
-- uint8_t *dest;
-+ uint8_t *neigh;
-+ uint32_t throughput;
- uint8_t tq;
- uint32_t hardif;
- uint32_t lastseen;
-@@ -97,32 +96,28 @@ static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg)
-
- ghdr = nlmsg_data(nlh);
-
-- if (ghdr->cmd != BATADV_CMD_GET_ORIGINATORS)
-+ if (ghdr->cmd != BATADV_CMD_GET_NEIGHBORS)
- return NL_OK;
-
- if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
- genlmsg_len(ghdr), batadv_genl_policy))
- return NL_OK;
--
-- if (batadv_genl_missing_attrs(attrs, parse_orig_list_mandatory,
-- BATADV_ARRAY_SIZE(parse_orig_list_mandatory)))
-+
-+ if (batadv_genl_missing_attrs(attrs, parse_neigh_list_mandatory,
-+ BATADV_ARRAY_SIZE(parse_neigh_list_mandatory)))
- return NL_OK;
-
-- orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]);
-- dest = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]);
-- tq = nla_get_u8(attrs[BATADV_ATTR_TQ]);
-+ neigh = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]);
-+ throughput = nla_get_u32(attrs[BATADV_ATTR_THROUGHPUT]);
- hardif = nla_get_u32(attrs[BATADV_ATTR_HARD_IFINDEX]);
- lastseen = nla_get_u32(attrs[BATADV_ATTR_LAST_SEEN_MSECS]);
-
-- if (memcmp(orig, dest, 6) != 0)
-- return NL_OK;
--
- ifname = if_indextoname(hardif, ifname_buf);
- if (!ifname)
- return NL_OK;
-
- sprintf(mac1, "%02x:%02x:%02x:%02x:%02x:%02x",
-- orig[0], orig[1], orig[2], orig[3], orig[4], orig[5]);
-+ neigh[0], neigh[1], neigh[2], neigh[3], neigh[4], neigh[5]);
-
- struct json_object *obj = json_object_new_object();
- if (!obj)
-@@ -134,6 +129,8 @@ static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg)
- json_object_object_add(opts->interfaces, ifname, interface);
- }
-
-+ tq = gluonutil_get_pseudo_tq(throughput);
-+
- json_object_object_add(obj, "tq", json_object_new_int(tq));
- json_object_object_add(obj, "lastseen", json_object_new_double(lastseen / 1000.));
- json_object_object_add(obj, "best", json_object_new_boolean(!!attrs[BATADV_ATTR_FLAG_BEST]));
-@@ -154,8 +151,8 @@ static struct json_object * get_batadv(void) {
- if (!opts.interfaces)
- return NULL;
-
-- ret = batadv_genl_query("bat0", BATADV_CMD_GET_ORIGINATORS,
-- parse_orig_list_netlink_cb, NLM_F_DUMP,
-+ ret = batadv_genl_query("bat0", BATADV_CMD_GET_NEIGHBORS,
-+ parse_neigh_list_netlink_cb, NLM_F_DUMP,
- &opts.query_opts);
- if (ret < 0) {
- json_object_put(opts.interfaces);
-diff --git a/package/libgluonutil/src/libgluonutil.c b/package/libgluonutil/src/libgluonutil.c
-index 0950f0d8..08cf8fbb 100644
---- a/package/libgluonutil/src/libgluonutil.c
-+++ b/package/libgluonutil/src/libgluonutil.c
-@@ -38,6 +38,7 @@
- #include
- #include
- #include
-+#include
-
- /**
- * Merges two JSON objects
-@@ -324,6 +325,14 @@ char * gluonutil_get_primary_domain(void) {
- return strdup(primary_domain_code);
- }
-
-+uint8_t gluonutil_get_pseudo_tq(uint32_t throughput) {
-+ return throughput >= 54000 ? 255 :
-+ throughput < 417 ? 0 :
-+ (uint8_t)((1.42459274279287898080 *
-+ log2(throughput) -
-+ 12.39555493934044793479) *
-+ 25.5);
-+}
-
- struct json_object * gluonutil_load_site_config(void) {
- char *domain_code = NULL;
-diff --git a/package/libgluonutil/src/libgluonutil.h b/package/libgluonutil/src/libgluonutil.h
-index 34765f6f..82eb64a9 100644
---- a/package/libgluonutil/src/libgluonutil.h
-+++ b/package/libgluonutil/src/libgluonutil.h
-@@ -57,4 +57,6 @@ char * gluonutil_get_domain(void);
- char * gluonutil_get_primary_domain(void);
- struct json_object * gluonutil_load_site_config(void);
-
-+uint8_t gluonutil_get_pseudo_tq(uint32_t throughput);
-+
- #endif /* _LIBGLUON_LIBGLUON_H_ */
diff --git a/patches/batman-v-respondd-statistics.patch b/patches/batman-v-respondd-statistics.patch
deleted file mode 100644
index 41c4fac..0000000
--- a/patches/batman-v-respondd-statistics.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-diff --git a/package/gluon-mesh-batman-adv/src/respondd-statistics.c b/package/gluon-mesh-batman-adv/src/respondd-statistics.c
-index 86709464..a07dfdbf 100644
---- a/package/gluon-mesh-batman-adv/src/respondd-statistics.c
-+++ b/package/gluon-mesh-batman-adv/src/respondd-statistics.c
-@@ -63,7 +63,7 @@ struct gw_netlink_opts {
- static const enum batadv_nl_attrs gateways_mandatory[] = {
- BATADV_ATTR_ORIG_ADDRESS,
- BATADV_ATTR_ROUTER,
-- BATADV_ATTR_TQ,
-+ BATADV_ATTR_THROUGHPUT,
- };
-
- static int parse_gw_list_netlink_cb(struct nl_msg *msg, void *arg)
-@@ -74,7 +74,7 @@ static int parse_gw_list_netlink_cb(struct nl_msg *msg, void *arg)
- struct genlmsghdr *ghdr;
- uint8_t *orig;
- uint8_t *router;
-- uint8_t tq;
-+ uint32_t throughput;
- struct gw_netlink_opts *opts;
- char addr[18];
-
-@@ -102,13 +102,13 @@ static int parse_gw_list_netlink_cb(struct nl_msg *msg, void *arg)
-
- orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]);
- router = nla_data(attrs[BATADV_ATTR_ROUTER]);
-- tq = nla_get_u8(attrs[BATADV_ATTR_TQ]);
-+ throughput = nla_get_u32(attrs[BATADV_ATTR_THROUGHPUT]);
-
- sprintf(addr, "%02x:%02x:%02x:%02x:%02x:%02x",
- orig[0], orig[1], orig[2], orig[3], orig[4], orig[5]);
-
- json_object_object_add(opts->obj, "gateway", json_object_new_string(addr));
-- json_object_object_add(opts->obj, "gateway_tq", json_object_new_int(tq));
-+ json_object_object_add(opts->obj, "gateway_throughput", json_object_new_int(throughput));
-
- sprintf(addr, "%02x:%02x:%02x:%02x:%02x:%02x",
- router[0], router[1], router[2], router[3], router[4], router[5]);
diff --git a/patches/batman-v-show-tp-on-status-page.patch b/patches/batman-v-show-tp-on-status-page.patch
deleted file mode 100644
index 07151e6..0000000
--- a/patches/batman-v-show-tp-on-status-page.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-diff --git a/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua b/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua
-index 733e6d7c..e512bbe9 100644
---- a/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua
-+++ b/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua
-@@ -5,6 +5,6 @@ return {
- -- 2) human-readable key (not translatable yet)
- -- 3) value suffix (optional)
- attrs = {
-- {'tq', 'TQ', ' %'},
-+ {'tp', 'bit/s', ''},
- },
- }
-diff --git a/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c b/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c
-index b923d7f1..8fa94d72 100644
---- a/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c
-+++ b/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c
-@@ -14,27 +14,28 @@ struct neigh_netlink_opts {
- struct batadv_nlquery_opts query_opts;
- };
-
--static const enum batadv_nl_attrs parse_orig_list_mandatory[] = {
-- BATADV_ATTR_ORIG_ADDRESS,
-+static const enum batadv_nl_attrs parse_neigh_list_mandatory[] = {
- BATADV_ATTR_NEIGH_ADDRESS,
-- BATADV_ATTR_TQ,
-+ BATADV_ATTR_THROUGHPUT,
- BATADV_ATTR_HARD_IFINDEX,
- BATADV_ATTR_LAST_SEEN_MSECS,
- };
-
--static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg)
-+static int parse_neigh_list_netlink_cb(struct nl_msg *msg, void *arg)
- {
- struct nlattr *attrs[BATADV_ATTR_MAX+1];
- struct nlmsghdr *nlh = nlmsg_hdr(msg);
- struct batadv_nlquery_opts *query_opts = arg;
- struct genlmsghdr *ghdr;
-- uint8_t *orig;
-- uint8_t *dest;
-- uint8_t tq;
-+ uint8_t *neigh;
-+ uint32_t throughput;
- uint32_t hardif;
- char ifname_buf[IF_NAMESIZE], *ifname;
- struct neigh_netlink_opts *opts;
- char mac1[18];
-+ char tp_str[5];
-+ const char tp_units[] = { 'k', 'M', 'G', 'T', '?' };
-+ int tp_unit;
-
- opts = batadv_container_of(query_opts, struct neigh_netlink_opts, query_opts);
-
-@@ -43,41 +44,43 @@ static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg)
-
- ghdr = nlmsg_data(nlh);
-
-- if (ghdr->cmd != BATADV_CMD_GET_ORIGINATORS)
-+ if (ghdr->cmd != BATADV_CMD_GET_NEIGHBORS)
- return NL_OK;
-
- if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
- genlmsg_len(ghdr), batadv_genl_policy))
- return NL_OK;
-
-- if (batadv_genl_missing_attrs(attrs, parse_orig_list_mandatory,
-- BATADV_ARRAY_SIZE(parse_orig_list_mandatory)))
-+ if (batadv_genl_missing_attrs(attrs, parse_neigh_list_mandatory,
-+ BATADV_ARRAY_SIZE(parse_neigh_list_mandatory)))
- return NL_OK;
-
-- orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]);
-- dest = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]);
-- tq = nla_get_u8(attrs[BATADV_ATTR_TQ]);
-+ neigh = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]);
-+ throughput = nla_get_u32(attrs[BATADV_ATTR_THROUGHPUT]);
- hardif = nla_get_u32(attrs[BATADV_ATTR_HARD_IFINDEX]);
-
-- if (memcmp(orig, dest, 6) != 0)
-- return NL_OK;
--
- ifname = if_indextoname(hardif, ifname_buf);
- if (!ifname)
- return NL_OK;
-
- sprintf(mac1, "%02x:%02x:%02x:%02x:%02x:%02x",
-- orig[0], orig[1], orig[2], orig[3], orig[4], orig[5]);
-+ neigh[0], neigh[1], neigh[2], neigh[3], neigh[4], neigh[5]);
-
-- struct json_object *neigh = json_object_new_object();
-- if (!neigh)
-+ struct json_object *obj = json_object_new_object();
-+ if (!obj)
- return NL_OK;
-
-- json_object_object_add(neigh, "tq", json_object_new_int(tq * 100 / 255));
-- json_object_object_add(neigh, "ifname", json_object_new_string(ifname));
-- json_object_object_add(neigh, "best", json_object_new_boolean(attrs[BATADV_ATTR_FLAG_BEST]));
-+ for (tp_unit = 0; tp_unit < 4; tp_unit++) {
-+ if (throughput < 1000) break;
-+ throughput /= 1000;
-+ }
-+ sprintf(tp_str, "%3u%c", throughput, tp_units[tp_unit]);
-+
-+ json_object_object_add(obj, "tp", json_object_new_string(tp_str));
-+ json_object_object_add(obj, "ifname", json_object_new_string(ifname));
-+ json_object_object_add(obj, "best", json_object_new_boolean(attrs[BATADV_ATTR_FLAG_BEST]));
-
-- json_object_object_add(opts->obj, mac1, neigh);
-+ json_object_object_add(opts->obj, mac1, obj);
-
- return NL_OK;
- }
-@@ -94,8 +97,8 @@ static json_object *neighbours(void) {
- if (!opts.obj)
- return NULL;
-
-- ret = batadv_genl_query("bat0", BATADV_CMD_GET_ORIGINATORS,
-- parse_orig_list_netlink_cb, NLM_F_DUMP,
-+ ret = batadv_genl_query("bat0", BATADV_CMD_GET_NEIGHBORS,
-+ parse_neigh_list_netlink_cb, NLM_F_DUMP,
- &opts.query_opts);
- if (ret < 0) {
- json_object_put(opts.obj);
diff --git a/patches/batman-v-wired-tpo.patch b/patches/batman-v-wired-tpo.patch
deleted file mode 100644
index 08d3be1..0000000
--- a/patches/batman-v-wired-tpo.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/package/gluon-mesh-batman-adv/files/lib/gluon/core/mesh/post-setup.d/40-gluon-mesh-batman-adv-wired-tpo b/package/gluon-mesh-batman-adv/files/lib/gluon/core/mesh/post-setup.d/40-gluon-mesh-batman-adv-wired-tpo
-new file mode 100755
-index 00000000..75888537
---- /dev/null
-+++ b/package/gluon-mesh-batman-adv/files/lib/gluon/core/mesh/post-setup.d/40-gluon-mesh-batman-adv-wired-tpo
-@@ -0,0 +1,6 @@
-+#!/bin/sh
-+
-+if [ "$IFNAME" = "vx_mesh_uplink" ] || [ "$IFNAME" = "vx_mesh_other" ] || [ "$IFNAME" = "mesh-vpn" ]; then
-+ sleep 3;
-+ batctl hardif $IFNAME throughput_override 1000mbit;
-+fi
diff --git a/site.conf b/site.conf
index 6699ec6..32135d6 100644
--- a/site.conf
+++ b/site.conf
@@ -75,8 +75,8 @@
vxlan = false,
filter_membership_reports = false,
batman_adv = {
- routing_algo = 'BATMAN_V',
- gw_sel_class = 1500,
+ routing_algo = 'BATMAN_IV',
+ gw_sel_class = 1,
},
},
@@ -104,48 +104,90 @@
pubkey_privacy = false,
wireguard = {
- broker = '01.wg-node.freifunk-aachen.de:8000/api/add_key',
+ broker = 'wg-broker.freifunk-aachen.de/api/add_key',
peers = {
- sn20 = {
+ --[[ remove sn1 for now
+ sn120 = {
public_key = 'jp47kK4OEkXf+VSsgKSYGji6mn6vrbXVeBMKwhx1on4=',
endpoint = '01.wg-node.freifunk-aachen.de:51820'
},
- sn11 = {
+ sn111 = {
public_key = 'EuHYG/4MZZYf+ViX8gy2HY0A2RGR0Im45mZXmD6ThxI=',
endpoint = '01.wg-node.freifunk-aachen.de:51811'
},
- sn12 = {
- public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsNjugaSIJ7VBHM=',
+ sn112 = {
+ public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsn1jugaSIJ7VBHM=',
endpoint = '01.wg-node.freifunk-aachen.de:51812'
},
- sn13 = {
+ sn113 = {
public_key = 'ibMJXBMiC3jFA4rSMjcTqsueszOSder7N8Dpw1W+liQ=',
endpoint = '01.wg-node.freifunk-aachen.de:51813'
},
- sn14 = {
+ sn114 = {
public_key = 'e4jSvixMGi89JAKnTpHA86GoHmBc6owOckTUslhNVxA=',
endpoint = '01.wg-node.freifunk-aachen.de:51814'
},
- sn15 = {
+ sn115 = {
public_key = 'yY8Z5YbrAc518Z4Z/Bvlum8pB1VARZ316miql/uu1C0=',
endpoint = '01.wg-node.freifunk-aachen.de:51815'
},
- sn16 = {
+ sn116 = {
public_key = 'RtPF/2EYZNJEKI/DJh+6R2M1FNsQUbCE0nvNSzXZW10=',
endpoint = '01.wg-node.freifunk-aachen.de:51816'
},
- sn17 = {
+ sn117 = {
public_key = 'fA+lVmeVGIBcshSO1ZH8uHRqPainM7xS3wEhGTX+2DA=',
endpoint = '01.wg-node.freifunk-aachen.de:51817'
},
- sn18 = {
+ sn118 = {
public_key = 'u8rkarH+ZNGZoMWD6aGLgnRHzSj95S5fbiBuQXvyFV0=',
endpoint = '01.wg-node.freifunk-aachen.de:51818'
},
- sn19 = {
+ sn119 = {
public_key = 'Zk4LZXhYW+gj9dN/afKH634yYLDNBUDXEFxejHy7wgs=',
endpoint = '01.wg-node.freifunk-aachen.de:51819'
},
+ ]]
+ sn220 = {
+ public_key = 'MK8M88m2Wfc5EFLQPbCRZwhqfPYMNAh51Jf0d7A78nY=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51820'
+ },
+ sn211 = {
+ public_key = 'VDqpMh1ljN/rqng88wIOet/XfMHk3XE6+nCBkOS82g0=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51811'
+ },
+ sn212 = {
+ public_key = 'UGK2rNyQX30dqMsdk+vU+0424DP1M/3UahjJR7rN3nw=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51812'
+ },
+ sn213 = {
+ public_key = 'iopPxw0qD6e2DAqEzR5WMHls9EQsxlYQk/pOAaKM9TM=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51813'
+ },
+ sn214 = {
+ public_key = 'yYZlSxiyKXLGk8jyDTnzXkxrPYvmOWpny9AWX3KPdFE=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51814'
+ },
+ sn215 = {
+ public_key = 'X0jmE3MOqzAjgWWNl6JAGcdE66rvsuhKp+WxC59geEE=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51815'
+ },
+ sn216 = {
+ public_key = 'Aq0yNPf2431SndyQtOBaIo5IDs73Tsv/Pw1FH2aNmxk=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51816'
+ },
+ sn217 = {
+ public_key = 'BunPn7Zvoub3QOYnygCxa/oCmPqM6XMjYHXNm3mOxRE=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51817'
+ },
+ sn218 = {
+ public_key = 'rsji/zzTtLTkG+ITrOKCyLWv61XWryT2s3TdozVjwV4=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51818'
+ },
+ sn219 = {
+ public_key = 'Ah9IDIcdW3zfoXuhD7MkKiDSL7xrgKfEKfMFfXRjphQ=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51819'
+ },
},
mtu = 1406,
},
@@ -292,6 +334,13 @@
tq_limit_max = 55, -- upper limit, above that the online SSID will be used
tq_limit_min = 45, -- lower limit, below that the offline SSID will be used
},
+
+ update_channel = {
+ --from_name = false, -- remove or false to catch all
+ -- if to_name is defined, autoupdater branch is set to it
+ to_name = 'stable',
+
+ }
}
-- /* vi: set ft=lua: */
diff --git a/site.mk b/site.mk
index c2de233..11fd857 100644
--- a/site.mk
+++ b/site.mk
@@ -1,4 +1,4 @@
-## gluon site.mk Freifunk Regio Aachen
+## gluon site.mk Freifunk Regio Aachen
GLUON_DEPRECATED=upgrade
GLUON_FEATURES := \
@@ -30,9 +30,9 @@ GLUON_FEATURES := \
# ffho-autoupdater-wifi-fallback \
GLUON_SITE_PACKAGES := \
iwinfo \
- eulenfunk-hotfix \
gluon-ssid-changer \
- gluon-weeklyreboot \
+ ff-change-autoupdater \
+ ffho-autoupdater-wifi-fallback \
ff-wg-registration \
respondd-module-airtime
@@ -53,7 +53,7 @@ GLUON_PRIORITY ?= 0
GLUON_REGION ?= eu
# Languages to include
-GLUON_LANGS ?= en de
+GLUON_LANGS ?= en de fr
# Additional package list generated by contrib/genpkglist.py
INCLUDE_USB := \
@@ -331,4 +331,4 @@ endif
ifeq ($(GLUON_TARGET),x86-legacy)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS)
-endif
+endif
\ No newline at end of file
From 40fecbff52dfe54ae11a8db3c2ae52889d144645 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 6 May 2023 16:48:52 +0200
Subject: [PATCH 037/129] update gluon_git_ref
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 54e9157..3d458df 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/ffac/gluon.git
-GLUON_GIT_REF := next v2023.1.x
+GLUON_GIT_REF := next #v2023.1.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
From b65da176c876a24c5901981656f439c27ffb170a Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Thu, 18 May 2023 12:20:23 +0200
Subject: [PATCH 038/129] update version to v2023.2.0-1 * use
community-packages * use ffac-bat4-mesh mesh id
---
CHANGELOG.md | 73 ++---------------------------
Makefile | 4 +-
README.md | 2 +-
modules | 16 ++-----
patches/targets-ramips-mt7621.patch | 37 ---------------
site.conf | 30 +++++-------
site.mk | 11 ++---
7 files changed, 28 insertions(+), 145 deletions(-)
delete mode 100644 patches/targets-ramips-mt7621.patch
diff --git a/CHANGELOG.md b/CHANGELOG.md
index deef13b..1fd4da3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,73 +1,10 @@
# Freifunk Aachen Firmware Changelog
-## v2023.1.x
+## v2023.2.0-x
-## v2023.1.1
+## v2023.2.0-1
- switch to openwrt master
+ - build from gluon master
+ - this will be released as v2023.2.1 gluon someday hopefully
- remove mbedtls and stay with openssl for now
-
-## v2022.1.13
- - update segments
- - update gluon to v2022.1.3
- - add qemu-ga to x86-64
- - add openssh-sftp-server to make using scp in the future as easy as it is now
- - add djfe signing key
- - switch to ffac repo mirrors
- - add eulenfunk hotfix patches
- - easier targets in makefile
- - switch default autoupdater branch to stable
-
- ## v2022.1.12
- - revert to v2022.1.1 as v2022.1.2 did break on some devices
-
-## v2022.1.11
- - add anonymization on status page
- - add weekly-reboot
- - add asus rt-ax53u
- - remove USB for EX3700 as one device was softbricked
- - fix bash script in wg-registration
-
-## v2022.1.10
- - use own tile layer in config mode
- - fix translations
- - remove fastd config
- - set gw_sel_class=1500 and mut=1406
- - fix switch config for o2 box 6431
- - remove TLS from d-link dir825b1
-
-## v2022.1.9
- - working experimental autoupdater
- - fix community-build key for autoupdater
-
-## v2022.1.8
- - add TLS packages (needed for opkg update)
- - add asus rt-ax53u
- - update wg-registration
-
-## v2022.1.7
- - add TLS packages
- - add LICENSE
- - add patches from FFMUC
-
-## v2022.1.6
- - remove TLS packages
-
-## v2022.1.5
- - update gluon build to v2022.1.x
-
-## v2022.1.4
- - use ffac-bat5-mesh as mesh-ssid for new firmware (5GHz)
-
-## v2022.1.3
- - working Broker Registration for Wireguard keys
- - update wg-registration
- - add broker url to site config
-
-## v2022.1.2
- - use ffac-bat5-mesh as mesh-ssid for new firmware (2.4GHz)
-
-## v2022.1.1
- - add FB7330 (SL) and FB7430
-
- ## v2022.1.0
- - initial working v2022 wireguard configuration
\ No newline at end of file
+ - switch to ffac-bat4-mesh mesh id
diff --git a/Makefile b/Makefile
index 3d458df..6b35740 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/ffac/gluon.git
-GLUON_GIT_REF := next #v2023.1.x
+GLUON_GIT_REF := next #v2023.2.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
@@ -43,7 +43,7 @@ build: gluon-prepare
done
manifest: build
- for branch in experimental testing stable; do \
+ for branch in experimental beta stable; do \
${GLUON_MAKE} manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\
done
mv -f ${GLUON_BUILD_DIR}/output/* ./output/
diff --git a/README.md b/README.md
index 7b05429..bb6f35c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
This repository contains the site configuration for the Freifunk Aachen Gluon
firmware.
-This is the `v2023.1.x` branch which is compatible with currents Openwrt Master and will be merged into v2023.1.x once released.
+This is the `v2023.2.x` branch which is compatible with currents Openwrt Master and will be merged into v2023.2.x once released.
Nothing is guaranteed here, it might get force-pushed from time to time to be rebased onto v2022.1.x.
It provides an option to test devices which are available in Gluon's master branch but are not released yet.
diff --git a/modules b/modules
index af525fe..a5bfd9a 100644
--- a/modules
+++ b/modules
@@ -1,13 +1,5 @@
-GLUON_SITE_FEEDS="ffac eulenfunk ffho"
+GLUON_SITE_FEEDS="ffac"
-PACKAGES_FFAC_REPO=https://github.com/ffac/gluon-mesh-vpn-wireguard.git
-PACKAGES_FFAC_COMMIT=660d294e89ca92f5d7302d60de0bc37957b85932
-PACKAGES_FFAC_BRANCH=main
-
-PACKAGES_EULENFUNK_REPO=https://github.com/ffac/eulenfunk-packages.git
-PACKAGES_EULENFUNK_COMMIT=1fb39648239dda47f2f7bbb24b5c683e5078dff7
-PACKAGES_EULENFUNK_BRANCH=v2020.1.x
-
-PACKAGES_FFHO_REPO=https://github.com/ffac/ffho-packages.git
-PACKAGES_FFHO_COMMIT=31b7d547abf57e27f15311b4d92146f2389b9e50
-PACKAGES_FFHO_BRANCH=master
+PACKAGES_FFAC_REPO=https://github.com/ffac/community-packages.git
+PACKAGES_FFAC_COMMIT=b74de3db2965a02603ec7b2a32b719c6418105a2
+PACKAGES_FFAC_BRANCH=master
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
deleted file mode 100644
index 9dce406..0000000
--- a/patches/targets-ramips-mt7621.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 7c7fa151..5116551f 100644
---- a/targets/ramips-mt7621
-+++ b/targets/ramips-mt7621
-@@ -4,9 +4,32 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', {
- factory = false,
- })
-
-+device('asus-rt-ax53u', 'asus_rt-ax53u', {
-+ factory = false,
-+})
-+
-
- -- Cudy
-
-+device('cudy-x6', 'cudy_x6', {
-+ factory = false,
-+})
-+
-+device('cudy-m1800', 'cudy_m1800', {
-+ factory = false,
-+})
-+
-+device('cudy-wr1300-v1', 'cudy_wr1300-v1', {
-+ factory = false,
-+})
-+
-+device('cudy-wr1300-v2', 'cudy_wr1300-v2', {
-+ factory = false,
-+ manifest_aliases = {
-+ 'cudy-wr1300-v3',
-+ },
-+})
-+
- device('cudy-wr2100', 'cudy_wr2100', {
- factory = false,
- })
diff --git a/site.conf b/site.conf
index 32135d6..4bbc80a 100644
--- a/site.conf
+++ b/site.conf
@@ -48,7 +48,7 @@
ssid = 'Freifunk',
},
mesh = {
- id = 'ffac-bat5-mesh',
+ id = 'ffac-bat4-mesh',
mcast_rate = 12000,
},
},
@@ -60,7 +60,7 @@
ssid = 'Freifunk',
},
mesh = {
- id = 'ffac-bat5-mesh',
+ id = 'ffac-bat4-mesh',
mcast_rate = 12000,
},
},
@@ -218,9 +218,9 @@
stable = {
name = 'stable',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2023.1.x/stable/sysupgrade',
- 'http://updates.ffac.rocks/from-2023.1.x/stable/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2023.1.x/stable/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2023.2.x/stable/sysupgrade',
+ 'http://updates.ffac.rocks/from-2023.2.x/stable/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2023.2.x/stable/sysupgrade',
},
good_signatures = 4,
pubkeys = {
@@ -239,9 +239,9 @@
beta = {
name = 'beta',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2023.1.x/beta/sysupgrade',
- 'http://updates.ffac.rocks/from-2023.1.x/beta/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2023.1.x/beta/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2023.2.x/beta/sysupgrade',
+ 'http://updates.ffac.rocks/from-2023.2.x/beta/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2023.2.x/beta/sysupgrade',
},
good_signatures = 3,
pubkeys = {
@@ -260,10 +260,9 @@
experimental = {
name = 'experimental',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2023.1.x/experimental/sysupgrade',
- 'http://updates.ffac.rocks/from-2023.1.x/experimental/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2023.1.x/experimental/sysupgrade',
- 'http://community-build.freifunk-aachen.de/firmware/from-2023.1.x/experimental/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2023.2.x/experimental/sysupgrade',
+ 'http://updates.ffac.rocks/from-2023.2.x/experimental/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2023.2.x/experimental/sysupgrade',
},
good_signatures = 2,
pubkeys = {
@@ -334,13 +333,6 @@
tq_limit_max = 55, -- upper limit, above that the online SSID will be used
tq_limit_min = 45, -- lower limit, below that the offline SSID will be used
},
-
- update_channel = {
- --from_name = false, -- remove or false to catch all
- -- if to_name is defined, autoupdater branch is set to it
- to_name = 'stable',
-
- }
}
-- /* vi: set ft=lua: */
diff --git a/site.mk b/site.mk
index 11fd857..3e78aa2 100644
--- a/site.mk
+++ b/site.mk
@@ -1,4 +1,4 @@
-## gluon site.mk Freifunk Regio Aachen
+## gluon site.mk Freifunk Regio Aachen
GLUON_DEPRECATED=upgrade
GLUON_FEATURES := \
@@ -30,10 +30,9 @@ GLUON_FEATURES := \
# ffho-autoupdater-wifi-fallback \
GLUON_SITE_PACKAGES := \
iwinfo \
- gluon-ssid-changer \
- ff-change-autoupdater \
- ffho-autoupdater-wifi-fallback \
- ff-wg-registration \
+ ffac-ssid-changer \
+ ffac-autoupdater-wifi-fallback \
+ ffac-wg-registration \
respondd-module-airtime
# gluon-mesh-wireless-sae
@@ -44,7 +43,7 @@ DEFAULT_GLUON_RELEASE := 2023.1-1~exp$(shell date '+%Y%m%d%H')
# Allow overriding the release number from the command line
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
-DEFAULT_GLUON_CHECKOUT := v2023.1.x
+DEFAULT_GLUON_CHECKOUT := v2023.2.x
GLUON_CHECKOUT ?= $(DEFAULT_GLUON_CHECKOUT)
From 02f7f936046097575c4569e86c3982767672b628 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 20 May 2023 20:43:40 +0200
Subject: [PATCH 039/129] disable autoupdater-wifi-fallback on tiny
---
site.mk | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/site.mk b/site.mk
index 3e78aa2..a63ad77 100644
--- a/site.mk
+++ b/site.mk
@@ -31,12 +31,14 @@ GLUON_FEATURES := \
GLUON_SITE_PACKAGES := \
iwinfo \
ffac-ssid-changer \
- ffac-autoupdater-wifi-fallback \
ffac-wg-registration \
respondd-module-airtime
# gluon-mesh-wireless-sae
-# GLUON_FEATURES_standard := wireless-encryption-wpa3
+# wireless-encryption-wpa3
+GLUON_FEATURES_standard := \
+ ffac-autoupdater-wifi-fallback \
+ web-cellular \
DEFAULT_GLUON_RELEASE := 2023.1-1~exp$(shell date '+%Y%m%d%H')
From 91c15f69667a4f04049548110b8b7057373b3140 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 20 May 2023 21:07:28 +0200
Subject: [PATCH 040/129] fix GLUON_SITE_PACKAGES_tiny
---
site.mk | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/site.mk b/site.mk
index a63ad77..a071a6b 100644
--- a/site.mk
+++ b/site.mk
@@ -37,10 +37,13 @@ GLUON_SITE_PACKAGES := \
# gluon-mesh-wireless-sae
# wireless-encryption-wpa3
GLUON_FEATURES_standard := \
- ffac-autoupdater-wifi-fallback \
- web-cellular \
+ web-cellular
-DEFAULT_GLUON_RELEASE := 2023.1-1~exp$(shell date '+%Y%m%d%H')
+GLUON_SITE_PACKAGES_tiny := \
+ ffac-autoupdater-wifi-fallback
+
+
+DEFAULT_GLUON_RELEASE := 2023.2.0-1~exp$(shell date '+%Y%m%d%H')
# Allow overriding the release number from the command line
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
From efc61653e3bcb80dff1bb2a50e3f28eadb81af40 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 21 May 2023 01:00:59 +0200
Subject: [PATCH 041/129] fix tiny devices again
---
site.mk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/site.mk b/site.mk
index a071a6b..36dd152 100644
--- a/site.mk
+++ b/site.mk
@@ -39,7 +39,7 @@ GLUON_SITE_PACKAGES := \
GLUON_FEATURES_standard := \
web-cellular
-GLUON_SITE_PACKAGES_tiny := \
+GLUON_SITE_PACKAGES_standard := \
ffac-autoupdater-wifi-fallback
From 4cb4421f9f024a1a800b270d3a0a327ac0a1a7f9 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Mon, 22 May 2023 14:57:48 +0000
Subject: [PATCH 042/129] update ath79 patches
---
patches/targets-ath79-generic.patch | 38 +++++++++++++++++++++++++++--
site.mk | 2 +-
2 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index ab1290c..507e6d4 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,8 +1,42 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index e9083bea..e1300b89 100644
+index 38041833..2bf0dbfb 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -606,3 +606,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -412,11 +412,11 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', {
+ -- },
+ --})
+
+-device('tp-link-archer-c60-v1', 'tplink_archer-c60-v1', {
+- packages = ATH10K_PACKAGES_QCA9888,
+- broken = true, -- OOM with 5GHz enabled in most environments
+- class = 'tiny', -- 64M ath9k + ath10k
+-})
++--device('tp-link-archer-c60-v1', 'tplink_archer-c60-v1', {
++-- packages = ATH10K_PACKAGES_QCA9888,
++-- broken = true, -- OOM with 5GHz enabled in most environments
++-- class = 'tiny', -- 64M ath9k + ath10k
++--})
+
+ device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', {
+ packages = ATH10K_PACKAGES_QCA9880,
+@@ -503,11 +503,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', {
+ },
+ })
+
+-device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
+- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
+- broken = true, -- OOM with 5GHz enabled in most environments
+- class = 'tiny', -- 64M ath9k + ath10k
+-})
++--device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
++-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
++-- broken = true, -- OOM with 5GHz enabled in most environments
++-- class = 'tiny', -- 64M ath9k + ath10k
++--})
+
+ device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', {
+ manifest_aliases = {
+@@ -600,3 +600,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
diff --git a/site.mk b/site.mk
index 36dd152..115215f 100644
--- a/site.mk
+++ b/site.mk
@@ -335,4 +335,4 @@ endif
ifeq ($(GLUON_TARGET),x86-legacy)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS)
-endif
\ No newline at end of file
+endif
From 5cb37c0aaa48ea8c73c06b18bf2d3e9798bfe756 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Tue, 23 May 2023 16:07:48 +0200
Subject: [PATCH 043/129] Update site.mk
add GLUON_SITE_PACKAGES correctly
---
site.mk | 7 -------
1 file changed, 7 deletions(-)
diff --git a/site.mk b/site.mk
index 115215f..a798e27 100644
--- a/site.mk
+++ b/site.mk
@@ -22,12 +22,6 @@ GLUON_FEATURES := \
# selection that would be enabled by default or due to the
# chosen feature flags
-
-# -gluon-status-page
-#ffac-status-page
-# custom status page without contact information
-
-# ffho-autoupdater-wifi-fallback \
GLUON_SITE_PACKAGES := \
iwinfo \
ffac-ssid-changer \
@@ -42,7 +36,6 @@ GLUON_FEATURES_standard := \
GLUON_SITE_PACKAGES_standard := \
ffac-autoupdater-wifi-fallback
-
DEFAULT_GLUON_RELEASE := 2023.2.0-1~exp$(shell date '+%Y%m%d%H')
# Allow overriding the release number from the command line
From 2d62924e80871afbda28e9bff7078b280ddc2692 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Tue, 30 May 2023 11:59:43 +0000
Subject: [PATCH 044/129] remove fr and broken devices
---
patches/targets-ramips-mt7620.patch | 53 +++++++++++++++++++++++++++++
patches/targets-ramips-mt76x8.patch | 15 +++++++-
patches/targets-xrx200.patch | 25 ++++++++++++++
site.mk | 10 +-----
4 files changed, 93 insertions(+), 10 deletions(-)
create mode 100644 patches/targets-ramips-mt7620.patch
create mode 100644 patches/targets-xrx200.patch
diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch
new file mode 100644
index 0000000..347e32f
--- /dev/null
+++ b/patches/targets-ramips-mt7620.patch
@@ -0,0 +1,53 @@
+diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620
+index fbf57ba8..ed06eee2 100644
+--- a/targets/ramips-mt7620
++++ b/targets/ramips-mt7620
+@@ -29,16 +29,6 @@ device('netgear-ex3700', 'netgear_ex3700', {
+ factory_ext = '.chk',
+ })
+
+--- Nexx
+-
+-device('nexx-wt3020-8m', 'nexx_wt3020-8m', {
+- aliases = {
+- 'nexx-wt3020ad',
+- 'nexx-wt3020f',
+- 'nexx-wt3020h',
+- },
+-})
+-
+ -- TP-Link
+
+ local tplink_region_suffix = ''
+@@ -46,20 +36,20 @@ if (env.GLUON_REGION or '') ~= '' then
+ tplink_region_suffix = '-' .. env.GLUON_REGION
+ end
+
+-device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', {
+- factory = false,
+-})
++--device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', {
++-- factory = false,
++--})
+
+-device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', {
+- factory = false,
+-})
++--device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', {
++-- factory = false,
++--})
+
+-device('tp-link-archer-c20i', 'tplink_archer-c20i')
++--device('tp-link-archer-c20i', 'tplink_archer-c20i')
+
+-device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', {
+- factory = '-squashfs-factory' .. tplink_region_suffix,
+- manifest_aliases = {'tp-link-archer-c50'},
+-})
++--device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', {
++-- factory = '-squashfs-factory' .. tplink_region_suffix,
++-- manifest_aliases = {'tp-link-archer-c50'},
++--})
+
+
+ -- Xiaomi
diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch
index 5e86c40..cee089f 100644
--- a/patches/targets-ramips-mt76x8.patch
+++ b/patches/targets-ramips-mt76x8.patch
@@ -1,7 +1,20 @@
diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8
-index b11b7672..95a4c343 100644
+index 1ebce768..7584d372 100644
--- a/targets/ramips-mt76x8
+++ b/targets/ramips-mt76x8
+@@ -20,9 +20,9 @@ device('gl.inet-vixmini', 'glinet_vixmini', {
+
+ -- Netgear
+
+-device('netgear-r6020', 'netgear_r6020', {
+- factory_ext = '.img',
+-})
++--device('netgear-r6020', 'netgear_r6020', {
++-- factory_ext = '.img',
++--})
+
+ device('netgear-r6120', 'netgear_r6120', {
+ factory_ext = '.img',
@@ -80,6 +80,14 @@ device('tp-link-tl-mr3420-v5', 'tplink_tl-mr3420-v5', {
},
})
diff --git a/patches/targets-xrx200.patch b/patches/targets-xrx200.patch
new file mode 100644
index 0000000..f6cd157
--- /dev/null
+++ b/patches/targets-xrx200.patch
@@ -0,0 +1,25 @@
+diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200
+index f54cd87f..c7df2bb9 100644
+--- a/targets/lantiq-xrx200
++++ b/targets/lantiq-xrx200
+@@ -51,20 +51,3 @@ device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', {
+ factory = false,
+ aliases = {'o2-box-6431'},
+ })
+-
+--- TP-Link
+-
+--- CAVEAT: These devices don't have a dedicated WAN port.
+--- All ethernet ports on the device are bridged and
+--- used as WAN ports. Clients connected to these
+--- ports will be connected to your private network.
+-
+-device('tp-link-td-w8970', 'tplink_tdw8970', {
+- factory = false,
+-})
+-
+-device('tp-link-td-w8980', 'tplink_tdw8980', {
+- factory = false,
+- aliases = {'tp-link-td-w9980'},
+- broken = true, -- 5GHz unsupported
+-})
diff --git a/site.mk b/site.mk
index a798e27..ed962e3 100644
--- a/site.mk
+++ b/site.mk
@@ -28,14 +28,6 @@ GLUON_SITE_PACKAGES := \
ffac-wg-registration \
respondd-module-airtime
-# gluon-mesh-wireless-sae
-# wireless-encryption-wpa3
-GLUON_FEATURES_standard := \
- web-cellular
-
-GLUON_SITE_PACKAGES_standard := \
- ffac-autoupdater-wifi-fallback
-
DEFAULT_GLUON_RELEASE := 2023.2.0-1~exp$(shell date '+%Y%m%d%H')
# Allow overriding the release number from the command line
@@ -50,7 +42,7 @@ GLUON_PRIORITY ?= 0
GLUON_REGION ?= eu
# Languages to include
-GLUON_LANGS ?= en de fr
+GLUON_LANGS ?= en de
# Additional package list generated by contrib/genpkglist.py
INCLUDE_USB := \
From 3d192b6a2c94988d52687d8e8263dca7234bc576 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Mon, 5 Jun 2023 23:58:44 +0200
Subject: [PATCH 045/129] remove patches - use v23.05 branch
---
Makefile | 2 +-
patches/010-primary-mac.patch | 12 -----
patches/020-interfaces.patch | 16 ------
patches/cellular.patch | 30 -----------
patches/targets-ath79-generic.patch | 53 --------------------
patches/targets-bcm2711-raspberry-pi-4.patch | 26 ----------
patches/targets-ipq40xx-devices.patch | 26 ----------
patches/targets-mediatek-mt7622.patch | 13 -----
patches/targets-ramips-mt7620.patch | 53 --------------------
patches/targets-ramips-mt76x8.patch | 32 ------------
patches/targets-xrx200.patch | 25 ---------
11 files changed, 1 insertion(+), 287 deletions(-)
delete mode 100644 patches/010-primary-mac.patch
delete mode 100644 patches/020-interfaces.patch
delete mode 100644 patches/cellular.patch
delete mode 100644 patches/targets-ath79-generic.patch
delete mode 100644 patches/targets-bcm2711-raspberry-pi-4.patch
delete mode 100644 patches/targets-ipq40xx-devices.patch
delete mode 100644 patches/targets-mediatek-mt7622.patch
delete mode 100644 patches/targets-ramips-mt7620.patch
delete mode 100644 patches/targets-ramips-mt76x8.patch
delete mode 100644 patches/targets-xrx200.patch
diff --git a/Makefile b/Makefile
index 6b35740..6c42cd4 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/ffac/gluon.git
-GLUON_GIT_REF := next #v2023.2.x
+GLUON_GIT_REF := v23.05 #v2023.2.x
PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
diff --git a/patches/010-primary-mac.patch b/patches/010-primary-mac.patch
deleted file mode 100644
index 87ddb25..0000000
--- a/patches/010-primary-mac.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-index b1a1bab..5ce9635 100644
---- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-@@ -81,6 +81,7 @@ local primary_addrs = {
- {'brcm2708'},
- {'ipq40xx', 'generic', {
- 'avm,fritzbox-4040',
-+ 'linksys,mr8300',
- 'plasmacloud,pa1200',
- 'plasmacloud,pa2200',
- }},
diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch
deleted file mode 100644
index f0c92b9..0000000
--- a/patches/020-interfaces.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-index 063ab1a1..9f847082 100755
---- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-@@ -71,6 +71,11 @@ elseif platform.match('lantiq', 'xrx200', {
- 'arcadyan,vgv7510kw22-nor',
- }) then
- lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan'
-+elseif platform.match('lantiq', 'xrx200', {
-+ 'tplink,tdw8970',
-+ 'tplink,tdw8980',
-+}) then
-+ lan_ifname, wan_ifname = 'lan1 lan2 lan3', 'lan4'
- elseif platform.match('realtek', 'rtl838x', {
- 'd-link,dgs-1210-10p',
- }) then
diff --git a/patches/cellular.patch b/patches/cellular.patch
deleted file mode 100644
index defcb0f..0000000
--- a/patches/cellular.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-index 6debe8c..5e9e161 100644
---- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-@@ -85,6 +85,10 @@ function M.is_cellular_device()
- 'wavlink,ws-wn572hp3-4g',
- }) then
- return true
-+ elseif M.match('ramips', 'mt76x8', {
-+ 'tplink,tl-mr6400-v5',
-+ }) then
-+ return true
- end
-
- return false
-diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
-index b60d8e6..4631d4f 100644
---- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
-+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
-@@ -58,6 +58,10 @@ elseif platform.match('ramips', 'mt7621', {
- 'wavlink,ws-wn572hp3-4g',
- }) then
- setup_ncm_qmi('/dev/ttyUSB2', 'ncm', 15)
-+elseif platform.match('ramips', 'mt76x8', {
-+ 'tplink,tl-mr6400-v5',
-+}) then
-+ setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
- end
-
- uci:save('network')
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
deleted file mode 100644
index 507e6d4..0000000
--- a/patches/targets-ath79-generic.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-diff --git a/targets/ath79-generic b/targets/ath79-generic
-index 38041833..2bf0dbfb 100644
---- a/targets/ath79-generic
-+++ b/targets/ath79-generic
-@@ -412,11 +412,11 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', {
- -- },
- --})
-
--device('tp-link-archer-c60-v1', 'tplink_archer-c60-v1', {
-- packages = ATH10K_PACKAGES_QCA9888,
-- broken = true, -- OOM with 5GHz enabled in most environments
-- class = 'tiny', -- 64M ath9k + ath10k
--})
-+--device('tp-link-archer-c60-v1', 'tplink_archer-c60-v1', {
-+-- packages = ATH10K_PACKAGES_QCA9888,
-+-- broken = true, -- OOM with 5GHz enabled in most environments
-+-- class = 'tiny', -- 64M ath9k + ath10k
-+--})
-
- device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', {
- packages = ATH10K_PACKAGES_QCA9880,
-@@ -503,11 +503,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', {
- },
- })
-
--device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
-- broken = true, -- OOM with 5GHz enabled in most environments
-- class = 'tiny', -- 64M ath9k + ath10k
--})
-+--device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
-+-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
-+-- broken = true, -- OOM with 5GHz enabled in most environments
-+-- class = 'tiny', -- 64M ath9k + ath10k
-+--})
-
- device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', {
- manifest_aliases = {
-@@ -600,3 +600,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
- })
-
- device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
-+
-+device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', {
-+ packages = ATH10K_PACKAGES_QCA9880,
-+})
-+
-+
-+-- Zyxel
-+
-+device('zyxel-nbg6616', 'zyxel_nbg6616', {
-+ packages = ATH10K_PACKAGES_QCA9880,
-+})
diff --git a/patches/targets-bcm2711-raspberry-pi-4.patch b/patches/targets-bcm2711-raspberry-pi-4.patch
deleted file mode 100644
index 0c71d24..0000000
--- a/patches/targets-bcm2711-raspberry-pi-4.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git a/targets/bcm27xx-bcm2711 b/targets/bcm27xx-bcm2711
-new file mode 100644
-index 00000000..ba631911
---- /dev/null
-+++ b/targets/bcm27xx-bcm2711
-@@ -0,0 +1,9 @@
-+include 'bcm27xx.inc'
-+
-+device('raspberry-pi-4-model-b', 'rpi-4', {
-+ manifest_aliases = {
-+ 'raspberry-pi-4-model-b-rev-1.1',
-+ 'raspberry-pi-4-model-b-rev-1.2',
-+ 'raspberry-pi-4-model-b-rev-1.4',
-+ },
-+})
-diff --git a/targets/targets.mk b/targets/targets.mk
-index 92b58ab8..05a74935 100644
---- a/targets/targets.mk
-+++ b/targets/targets.mk
-@@ -22,5 +22,6 @@ $(eval $(call GluonTarget,x86,64))
-
- ifneq ($(BROKEN),)
- $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested
-+$(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested
- $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support
- endif
diff --git a/patches/targets-ipq40xx-devices.patch b/patches/targets-ipq40xx-devices.patch
deleted file mode 100644
index 3903694..0000000
--- a/patches/targets-ipq40xx-devices.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index 246fe066..1247cac4 100644
---- a/targets/ipq40xx-generic
-+++ b/targets/ipq40xx-generic
-@@ -87,6 +87,21 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
-
- device('linksys-ea6350v3', 'linksys_ea6350v3')
-
-+device('linksys-mr8300-dallas', 'linksys_mr8300', {
-+ packages = { -- exclude until Gluon supports third radio
-+ '-ath10k-firmware-qca9888-ct',
-+ '-ath10k-board-qca9888',
-+ },
-+ factory = false,
-+ broken = true, -- 3rd WiFi radio not supported (5GHz DFS channels 100+)
-+})
-+
-+-- Meraki
-+
-+device('meraki-mr33', 'meraki_mr33', {
-+ factory = false,
-+})
-+
-
- -- NETGEAR
-
diff --git a/patches/targets-mediatek-mt7622.patch b/patches/targets-mediatek-mt7622.patch
deleted file mode 100644
index 1b25eff..0000000
--- a/patches/targets-mediatek-mt7622.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/targets/mediatek-mt7622 b/targets/mediatek-mt7622
-index 8376c397..7ab6330a 100644
---- a/targets/mediatek-mt7622
-+++ b/targets/mediatek-mt7622
-@@ -17,3 +17,8 @@ device('xiaomi-redmi-router-ax6s', 'xiaomi_redmi-router-ax6s', {
- factory = false,
- })
-
-+-- Netgear
-+
-+device('netgear-wax206', 'netgear_wax206', {
-+ factory_ext = '.img',
-+})
diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch
deleted file mode 100644
index 347e32f..0000000
--- a/patches/targets-ramips-mt7620.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620
-index fbf57ba8..ed06eee2 100644
---- a/targets/ramips-mt7620
-+++ b/targets/ramips-mt7620
-@@ -29,16 +29,6 @@ device('netgear-ex3700', 'netgear_ex3700', {
- factory_ext = '.chk',
- })
-
---- Nexx
--
--device('nexx-wt3020-8m', 'nexx_wt3020-8m', {
-- aliases = {
-- 'nexx-wt3020ad',
-- 'nexx-wt3020f',
-- 'nexx-wt3020h',
-- },
--})
--
- -- TP-Link
-
- local tplink_region_suffix = ''
-@@ -46,20 +36,20 @@ if (env.GLUON_REGION or '') ~= '' then
- tplink_region_suffix = '-' .. env.GLUON_REGION
- end
-
--device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', {
-- factory = false,
--})
-+--device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', {
-+-- factory = false,
-+--})
-
--device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', {
-- factory = false,
--})
-+--device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', {
-+-- factory = false,
-+--})
-
--device('tp-link-archer-c20i', 'tplink_archer-c20i')
-+--device('tp-link-archer-c20i', 'tplink_archer-c20i')
-
--device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', {
-- factory = '-squashfs-factory' .. tplink_region_suffix,
-- manifest_aliases = {'tp-link-archer-c50'},
--})
-+--device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', {
-+-- factory = '-squashfs-factory' .. tplink_region_suffix,
-+-- manifest_aliases = {'tp-link-archer-c50'},
-+--})
-
-
- -- Xiaomi
diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch
deleted file mode 100644
index cee089f..0000000
--- a/patches/targets-ramips-mt76x8.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8
-index 1ebce768..7584d372 100644
---- a/targets/ramips-mt76x8
-+++ b/targets/ramips-mt76x8
-@@ -20,9 +20,9 @@ device('gl.inet-vixmini', 'glinet_vixmini', {
-
- -- Netgear
-
--device('netgear-r6020', 'netgear_r6020', {
-- factory_ext = '.img',
--})
-+--device('netgear-r6020', 'netgear_r6020', {
-+-- factory_ext = '.img',
-+--})
-
- device('netgear-r6120', 'netgear_r6120', {
- factory_ext = '.img',
-@@ -80,6 +80,14 @@ device('tp-link-tl-mr3420-v5', 'tplink_tl-mr3420-v5', {
- },
- })
-
-+device('tp-link-tl-mr6400-v5', 'tplink_tl-mr6400-v5', {
-+ factory = false,
-+ extra_images = {
-+ {'-squashfs-tftp-recovery', '-bootloader', '.bin'},
-+ },
-+})
-+
-+
- device('tp-link-tl-wa801nd-v5', 'tplink_tl-wa801nd-v5', {
- factory = false,
- extra_images = {
diff --git a/patches/targets-xrx200.patch b/patches/targets-xrx200.patch
deleted file mode 100644
index f6cd157..0000000
--- a/patches/targets-xrx200.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200
-index f54cd87f..c7df2bb9 100644
---- a/targets/lantiq-xrx200
-+++ b/targets/lantiq-xrx200
-@@ -51,20 +51,3 @@ device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', {
- factory = false,
- aliases = {'o2-box-6431'},
- })
--
---- TP-Link
--
---- CAVEAT: These devices don't have a dedicated WAN port.
---- All ethernet ports on the device are bridged and
---- used as WAN ports. Clients connected to these
---- ports will be connected to your private network.
--
--device('tp-link-td-w8970', 'tplink_tdw8970', {
-- factory = false,
--})
--
--device('tp-link-td-w8980', 'tplink_tdw8980', {
-- factory = false,
-- aliases = {'tp-link-td-w9980'},
-- broken = true, -- 5GHz unsupported
--})
From d32dc325c1b2889b6d179577d3a184421e6f0bf8 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Wed, 19 Jul 2023 14:06:36 +0000
Subject: [PATCH 046/129] add filogic and covr-x1860
---
patches/add-covr-x1860.patch | 1223 ++++++++++++++++++++++++++++++++++
targets | 1 +
2 files changed, 1224 insertions(+)
create mode 100644 patches/add-covr-x1860.patch
diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch
new file mode 100644
index 0000000..985e7a7
--- /dev/null
+++ b/patches/add-covr-x1860.patch
@@ -0,0 +1,1223 @@
+diff --git a/patches/openwrt/0004-Add-Dlink-sge-image.patch b/patches/openwrt/0004-Add-Dlink-sge-image.patch
+new file mode 100644
+index 00000000..0706ca09
+--- /dev/null
++++ b/patches/openwrt/0004-Add-Dlink-sge-image.patch
+@@ -0,0 +1,893 @@
++From: Roland <75312877+RolandoMagico@users.noreply.github.com>
++Date: Mon, 26 Jun 2023 18:03:51 +0200
++Subject: procd: add Dlink sge image
++
++diff --git a/tools/firmware-utils/patches/002-add-dlink-sge-image.patch b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch
++new file mode 100644
++index 0000000000..71bab9b418
++--- /dev/null
+++++ b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch
++@@ -0,0 +1,883 @@
+++diff --git a/CMakeLists.txt b/CMakeLists.txt
+++index c1750d4..d7d4ed2 100644
+++--- a/CMakeLists.txt
++++++ b/CMakeLists.txt
+++@@ -40,6 +40,7 @@ FW_UTIL(buffalo-tftp src/buffalo-lib.c "" "")
+++ FW_UTIL(cros-vbutil "" "" "${OPENSSL_CRYPTO_LIBRARIES}")
+++ FW_UTIL(dgfirmware "" "" "")
+++ FW_UTIL(dgn3500sum "" "" "")
++++FW_UTIL(dlink-sge-image "" "" "${OPENSSL_CRYPTO_LIBRARIES}")
+++ FW_UTIL(dns313-header "" "" "")
+++ FW_UTIL(edimax_fw_header "" "" "")
+++ FW_UTIL(encode_crc "" "" "")
+++diff --git a/src/dlink-sge-image.c b/src/dlink-sge-image.c
+++new file mode 100644
+++index 0000000..9b567f4
+++--- /dev/null
++++++ b/src/dlink-sge-image.c
+++@@ -0,0 +1,510 @@
++++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++++/*
++++ * Copyright (C) 2023 Sebastian Schaper
++++ *
++++ * This tool encrypts factory images for certain D-Link Devices
++++ * manufactured by SGE / T&W, e.g. COVR-C1200, COVR-P2500, DIR-882, ...
++++ *
++++ * Usage:
++++ * ./dlink-sge-image DEVICE_MODEL infile outfile [-d: decrypt]
++++ *
++++ */
++++
++++#include "dlink-sge-image.h"
++++
++++#include
++++#include
++++
++++#include
++++#include
++++#include
++++#include
++++
++++#define BUFSIZE 4096
++++
++++#define HEAD_MAGIC "SHRS"
++++#define HEAD_MAGIC_LEN 4
++++#define SHA512_DIGEST_LENGTH 64
++++#define RSA_KEY_LENGTH_BYTES 512
++++#define AES_BLOCK_SIZE 16
++++#define HEADER_LEN 1756
++++
++++unsigned char aes_iv[AES_BLOCK_SIZE];
++++
++++unsigned char readbuf[BUFSIZE];
++++unsigned char encbuf[BUFSIZE];
++++
++++unsigned int read_bytes;
++++unsigned long read_total;
++++unsigned int i;
++++
++++unsigned char vendor_key[AES_BLOCK_SIZE];
++++BIO *rsa_private_bio;
++++const EVP_CIPHER *aes128;
++++EVP_CIPHER_CTX *aes_ctx;
++++
++++FILE *input_file;
++++FILE *output_file;
++++
++++int pass_cb(char *buf, int size, int rwflag, void *u)
++++{
++++ char *tmp = "12345678";
++++ size_t len = strlen(tmp);
++++
++++ if (len > size)
++++ len = size;
++++ memcpy(buf, tmp, len);
++++ return len;
++++}
++++
++++void image_encrypt(void)
++++{
++++ char buf[HEADER_LEN];
++++ const EVP_MD *sha512;
++++ EVP_MD_CTX *digest_before;
++++ EVP_MD_CTX *digest_post;
++++ EVP_MD_CTX *digest_vendor;
++++ EVP_PKEY *signing_key;
++++ EVP_PKEY_CTX *rsa_ctx;
++++ uint32_t payload_length_before, pad_len, sizebuf;
++++ unsigned char md_before[SHA512_DIGEST_LENGTH];
++++ unsigned char md_post[SHA512_DIGEST_LENGTH];
++++ unsigned char md_vendor[SHA512_DIGEST_LENGTH];
++++ unsigned char sigret[RSA_KEY_LENGTH_BYTES];
++++ size_t siglen;
++++ char footer[] = {0x00, 0x00, 0x00, 0x00, 0x30};
++++
++++ // seek to position 1756 (begin of AES-encrypted data),
++++ // write image headers later
++++ memset(buf, 0, HEADER_LEN);
++++ fwrite(&buf, 1, HEADER_LEN, output_file);
++++ digest_before = EVP_MD_CTX_new();
++++ digest_post = EVP_MD_CTX_new();
++++ digest_vendor = EVP_MD_CTX_new();
++++ sha512 = EVP_sha512();
++++ EVP_DigestInit_ex(digest_before, sha512, NULL);
++++ EVP_DigestInit_ex(digest_post, sha512, NULL);
++++ EVP_DigestInit_ex(digest_vendor, sha512, NULL);
++++
++++ signing_key = PEM_read_bio_PrivateKey(rsa_private_bio, NULL, pass_cb, NULL);
++++ rsa_ctx = EVP_PKEY_CTX_new(signing_key, NULL);
++++
++++ EVP_PKEY_sign_init(rsa_ctx);
++++ EVP_PKEY_CTX_set_signature_md(rsa_ctx, sha512);
++++
++++ memcpy(&aes_iv, &salt, AES_BLOCK_SIZE);
++++ aes_ctx = EVP_CIPHER_CTX_new();
++++ EVP_EncryptInit_ex(aes_ctx, aes128, NULL, &vendor_key[0], aes_iv);
++++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0);
++++ int outlen;
++++
++++ while ((read_bytes = fread(&readbuf, 1, BUFSIZE, input_file)) == BUFSIZE) {
++++ EVP_DigestUpdate(digest_before, &readbuf[0], read_bytes);
++++ read_total += read_bytes;
++++
++++ EVP_EncryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], BUFSIZE);
++++ fwrite(&encbuf, 1, BUFSIZE, output_file);
++++
++++ EVP_DigestUpdate(digest_post, &encbuf[0], BUFSIZE);
++++ }
++++
++++ // handle last block of data (read_bytes < BUFSIZE)
++++ EVP_DigestUpdate(digest_before, &readbuf[0], read_bytes);
++++ read_total += read_bytes;
++++
++++ pad_len = AES_BLOCK_SIZE - (read_total % AES_BLOCK_SIZE);
++++ if (pad_len == 0)
++++ pad_len = AES_BLOCK_SIZE;
++++ memset(&readbuf[read_bytes], 0, pad_len);
++++
++++ EVP_EncryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], read_bytes + pad_len);
++++ EVP_CIPHER_CTX_free(aes_ctx);
++++ fwrite(&encbuf, 1, read_bytes + pad_len, output_file);
++++
++++ EVP_DigestUpdate(digest_post, &encbuf[0], read_bytes + pad_len);
++++
++++ fclose(input_file);
++++ payload_length_before = read_total;
++++ printf("\npayload_length_before: %li\n", read_total);
++++
++++ // copy digest state, since we need another one with vendor key appended
++++ EVP_MD_CTX_copy_ex(digest_vendor, digest_before);
++++
++++ EVP_DigestFinal_ex(digest_before, &md_before[0], NULL);
++++ EVP_MD_CTX_free(digest_before);
++++
++++ printf("\ndigest_before: ");
++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
++++ printf("%02x", md_before[i]);
++++
++++ EVP_DigestUpdate(digest_vendor, &vendor_key[0], AES_BLOCK_SIZE);
++++ EVP_DigestFinal_ex(digest_vendor, &md_vendor[0], NULL);
++++ EVP_MD_CTX_free(digest_vendor);
++++
++++ printf("\ndigest_vendor: ");
++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
++++ printf("%02x", md_vendor[i]);
++++
++++ EVP_DigestFinal_ex(digest_post, &md_post[0], NULL);
++++ EVP_MD_CTX_free(digest_post);
++++
++++ printf("\ndigest_post: ");
++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
++++ printf("%02x", md_post[i]);
++++
++++ fwrite(&footer, 1, 5, output_file);
++++
++++ // go back to file header and write all the digests and signatures
++++ fseek(output_file, 0, SEEK_SET);
++++
++++ fwrite(HEAD_MAGIC, 1, HEAD_MAGIC_LEN, output_file);
++++
++++ // write payload length before
++++ sizebuf = htonl(payload_length_before);
++++ fwrite((char *) &sizebuf, 1, 4, output_file);
++++
++++ // write payload length post
++++ payload_length_before += pad_len;
++++ sizebuf = htonl(payload_length_before);
++++ fwrite((char *) &sizebuf, 1, 4, output_file);
++++
++++ // write salt and digests
++++ fwrite(salt, 1, AES_BLOCK_SIZE, output_file);
++++ fwrite(&md_vendor[0], 1, SHA512_DIGEST_LENGTH, output_file);
++++ fwrite(&md_before[0], 1, SHA512_DIGEST_LENGTH, output_file);
++++ fwrite(&md_post[0], 1, SHA512_DIGEST_LENGTH, output_file);
++++
++++ // zero-fill rsa_pub field, unused in header
++++ memset(sigret, 0, RSA_KEY_LENGTH_BYTES);
++++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file);
++++
++++ // sign md_before
++++ EVP_PKEY_sign(rsa_ctx, &sigret[0], &siglen, &md_before[0], SHA512_DIGEST_LENGTH);
++++ printf("\nsigned before:\n");
++++ for (i = 0; i < RSA_KEY_LENGTH_BYTES; i++)
++++ printf("%02x", sigret[i]);
++++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file);
++++
++++ // sign md_post
++++ EVP_PKEY_sign(rsa_ctx, &sigret[0], &siglen, &md_post[0], SHA512_DIGEST_LENGTH);
++++ printf("\nsigned post:\n");
++++ for (i = 0; i < RSA_KEY_LENGTH_BYTES; i++)
++++ printf("%02x", sigret[i]);
++++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file);
++++
++++ printf("\n");
++++
++++ fclose(output_file);
++++}
++++
++++void image_decrypt(void)
++++{
++++ char magic[4];
++++ uint32_t payload_length_before, payload_length_post, pad_len;
++++ char salt[AES_BLOCK_SIZE];
++++ char md_vendor[SHA512_DIGEST_LENGTH];
++++ char md_before[SHA512_DIGEST_LENGTH];
++++ char md_post[SHA512_DIGEST_LENGTH];
++++ EVP_PKEY *signing_key;
++++ EVP_PKEY_CTX *rsa_ctx;
++++ unsigned char rsa_sign_before[RSA_KEY_LENGTH_BYTES];
++++ unsigned char rsa_sign_post[RSA_KEY_LENGTH_BYTES];
++++ unsigned char md_post_actual[SHA512_DIGEST_LENGTH];
++++ unsigned char md_before_actual[SHA512_DIGEST_LENGTH];
++++ unsigned char md_vendor_actual[SHA512_DIGEST_LENGTH];
++++ const EVP_MD *sha512;
++++ EVP_MD_CTX *digest_before;
++++ EVP_MD_CTX *digest_post;
++++ EVP_MD_CTX *digest_vendor;
++++
++++ printf("\ndecrypt mode\n");
++++
++++ if (fread(&magic, 1, HEAD_MAGIC_LEN, input_file) == 0)
++++ goto error_read;
++++ if (strncmp(magic, HEAD_MAGIC, HEAD_MAGIC_LEN) != 0) {
++++ fprintf(stderr, "Input File header magic does not match '%s'.\n"
++++ "Maybe this file is not encrypted?\n", HEAD_MAGIC);
++++ goto error;
++++ }
++++
++++ if (fread((char *) &payload_length_before, 1, 4, input_file) == 0)
++++ goto error_read;
++++ if (fread((char *) &payload_length_post, 1, 4, input_file) == 0)
++++ goto error_read;
++++ payload_length_before = ntohl(payload_length_before);
++++ payload_length_post = ntohl(payload_length_post);
++++
++++ if (fread(salt, 1, AES_BLOCK_SIZE, input_file) == 0)
++++ goto error_read;
++++ if (fread(md_vendor, 1, SHA512_DIGEST_LENGTH, input_file) == 0)
++++ goto error_read;
++++ if (fread(md_before, 1, SHA512_DIGEST_LENGTH, input_file) == 0)
++++ goto error_read;
++++ if (fread(md_post, 1, SHA512_DIGEST_LENGTH, input_file) == 0)
++++ goto error_read;
++++
++++ // skip rsa_pub
++++ if (fread(readbuf, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0)
++++ goto error_read;
++++
++++ if (fread(rsa_sign_before, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0)
++++ goto error_read;
++++ if (fread(rsa_sign_post, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0)
++++ goto error_read;
++++
++++ // file should be at position HEADER_LEN now, start AES decryption
++++ digest_before = EVP_MD_CTX_new();
++++ digest_post = EVP_MD_CTX_new();
++++ digest_vendor = EVP_MD_CTX_new();
++++ sha512 = EVP_sha512();
++++ EVP_DigestInit_ex(digest_before, sha512, NULL);
++++ EVP_DigestInit_ex(digest_post, sha512, NULL);
++++ EVP_DigestInit_ex(digest_vendor, sha512, NULL);
++++
++++ memcpy(&aes_iv, &salt, AES_BLOCK_SIZE);
++++ aes_ctx = EVP_CIPHER_CTX_new();
++++ EVP_DecryptInit_ex(aes_ctx, aes128, NULL, &vendor_key[0], aes_iv);
++++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0);
++++ int outlen;
++++ pad_len = payload_length_post - payload_length_before;
++++
++++ while (read_total < payload_length_post) {
++++ if (read_total + BUFSIZE <= payload_length_post)
++++ read_bytes = fread(&readbuf, 1, BUFSIZE, input_file);
++++ else
++++ read_bytes = fread(&readbuf, 1, payload_length_post - read_total, \
++++ input_file);
++++
++++ read_total += read_bytes;
++++
++++ EVP_DigestUpdate(digest_post, &readbuf[0], read_bytes);
++++
++++ EVP_DecryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], read_bytes);
++++
++++ // only update digest_before until payload_length_before,
++++ // do not hash decrypted padding
++++ if (read_total > payload_length_before) {
++++ // only calc hash for data before padding
++++ EVP_DigestUpdate(digest_before, &encbuf[0], read_bytes - pad_len);
++++ fwrite(&encbuf[0], 1, read_bytes - pad_len, output_file);
++++
++++ // copy digest state, since we need another one with vendor key appended
++++ EVP_MD_CTX_copy_ex(digest_vendor, digest_before);
++++
++++ // append vendor_key
++++ EVP_DigestUpdate(digest_vendor, &vendor_key[0], AES_BLOCK_SIZE);
++++ } else {
++++ // calc hash for all of read_bytes
++++ EVP_DigestUpdate(digest_before, &encbuf[0], read_bytes);
++++ fwrite(&encbuf[0], 1, read_bytes, output_file);
++++ }
++++ }
++++
++++ fclose(input_file);
++++ fclose(output_file);
++++ EVP_CIPHER_CTX_free(aes_ctx);
++++
++++ EVP_DigestFinal_ex(digest_post, &md_post_actual[0], NULL);
++++ EVP_MD_CTX_free(digest_post);
++++
++++ printf("\ndigest_post: ");
++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
++++ printf("%02x", md_post_actual[i]);
++++
++++ if (strncmp(md_post, (char *) md_post_actual, SHA512_DIGEST_LENGTH) != 0) {
++++ fprintf(stderr, "SHA512 post does not match file contents.\n");
++++ goto error;
++++ }
++++
++++ EVP_DigestFinal_ex(digest_before, &md_before_actual[0], NULL);
++++ EVP_MD_CTX_free(digest_before);
++++
++++ printf("\ndigest_before: ");
++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
++++ printf("%02x", md_before_actual[i]);
++++
++++ if (strncmp(md_before, (char *) md_before_actual, SHA512_DIGEST_LENGTH) != 0) {
++++ fprintf(stderr, "SHA512 before does not match decrypted payload.\n");
++++ goto error;
++++ }
++++
++++ EVP_DigestFinal_ex(digest_vendor, &md_vendor_actual[0], NULL);
++++ EVP_MD_CTX_free(digest_vendor);
++++
++++ printf("\ndigest_vendor: ");
++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
++++ printf("%02x", md_vendor_actual[i]);
++++
++++ if (strncmp(md_vendor, (char *) md_vendor_actual, SHA512_DIGEST_LENGTH) != 0) {
++++ fprintf(stderr, "SHA512 vendor does not match decrypted payload padded" \
++++ " with vendor key.\n");
++++ goto error;
++++ }
++++
++++ signing_key = PEM_read_bio_PrivateKey(rsa_private_bio, NULL, pass_cb, NULL);
++++ rsa_ctx = EVP_PKEY_CTX_new(signing_key, NULL);
++++ EVP_PKEY_verify_init(rsa_ctx);
++++ EVP_PKEY_CTX_set_signature_md(rsa_ctx, sha512);
++++
++++ if (EVP_PKEY_verify(rsa_ctx, &rsa_sign_before[0], RSA_KEY_LENGTH_BYTES, \
++++ &md_before_actual[0], SHA512_DIGEST_LENGTH)) {
++++ printf("\nsignature before verification success");
++++ } else {
++++ fprintf(stderr, "Signature before verification failed.\nThe decrypted" \
++++ " image file may however be flashable via bootloader recovery.\n");
++++ }
++++
++++ if (EVP_PKEY_verify(rsa_ctx, &rsa_sign_post[0], RSA_KEY_LENGTH_BYTES, \
++++ &md_post_actual[0], SHA512_DIGEST_LENGTH)) {
++++ printf("\nsignature post verification success");
++++ } else {
++++ fprintf(stderr, "Signature post verification failed.\nThe decrypted" \
++++ " image file may however be flashable via bootloader recovery.\n");
++++ }
++++
++++ printf("\n");
++++
++++ return;
++++
++++error_read:
++++ fprintf(stderr, "Error reading header fields from input file.\n");
++++error:
++++ fclose(input_file);
++++ fclose(output_file);
++++ exit(1);
++++}
++++
++++/*
++++ generate legacy vendor key for COVR-C1200, COVR-P2500, DIR-882, DIR-2660, ...
++++ decrypt ciphertext key2 using aes128 with key1 and iv, write result to *vkey
++++*/
++++void generate_vendorkey_legacy(unsigned char *vkey)
++++{
++++ int outlen;
++++ memcpy(&aes_iv, &iv, AES_BLOCK_SIZE);
++++ aes_ctx = EVP_CIPHER_CTX_new();
++++ EVP_DecryptInit_ex(aes_ctx, aes128, NULL, &key1[0], &aes_iv[0]);
++++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0);
++++ EVP_DecryptUpdate(aes_ctx, vkey, &outlen, &key2[0], AES_BLOCK_SIZE);
++++ EVP_CIPHER_CTX_free(aes_ctx);
++++}
++++
++++/*
++++ helper function for generate_vendorkey_dimgkey()
++++ deinterleave input in chunks of 8 bytes according to pattern,
++++ last block shorter than 8 bytes is appended in reverse order
++++*/
++++void deinterleave(unsigned char *enk, size_t len, unsigned char *vkey)
++++{
++++ unsigned char i, pattern = 0;
++++
++++ while (len >= INTERLEAVE_BLOCK_SIZE)
++++ {
++++ for (i = 0; i < INTERLEAVE_BLOCK_SIZE; i++)
++++ *(vkey + i) = *(enk + interleaving_pattern[pattern][i]);
++++
++++ vkey += INTERLEAVE_BLOCK_SIZE;
++++ enk += INTERLEAVE_BLOCK_SIZE;
++++ len -= INTERLEAVE_BLOCK_SIZE;
++++
++++ if (pattern++ >= INTERLEAVE_BLOCK_SIZE)
++++ pattern = 0;
++++ }
++++
++++ for (i = 0; i < len; i++)
++++ *(vkey + i) = *(enk + (len - i - 1));
++++}
++++
++++/*
++++ generate vendor key for COVR-X1860, DIR-X3260, ...
++++ base64 decode enk, pass to deinterleave, result will be in *vkey
++++*/
++++void generate_vendorkey_dimgkey(const unsigned char *enk, size_t len, unsigned char *vkey)
++++{
++++ unsigned char *decode_buf = malloc(3 * (len / 4));
++++ int outlen;
++++ EVP_ENCODE_CTX *base64_ctx = EVP_ENCODE_CTX_new();
++++ EVP_DecodeInit(base64_ctx);
++++ EVP_DecodeUpdate(base64_ctx, decode_buf, &outlen, enk, len);
++++ EVP_DecodeFinal(base64_ctx, decode_buf + outlen, &outlen);
++++ EVP_ENCODE_CTX_free(base64_ctx);
++++
++++ // limit deinterleaving output to first 16 bytes
++++ deinterleave(decode_buf, AES_BLOCK_SIZE, vkey);
++++}
++++
++++int main(int argc, char **argv)
++++{
++++ if (argc < 3 || argc > 5) {
++++ fprintf(stderr, "Usage:\n"
++++ "\tdlink-sge-image DEVICE_MODEL infile outfile [-d: decrypt]\n\n"
++++ "DEVICE_MODEL can be any of:\n"
++++ "\tCOVR-C1200\n"
++++ "\tCOVR-P2500\n"
++++ "\tCOVR-X1860\n"
++++ "\tDIR-853\n"
++++ "\tDIR-867\n"
++++ "\tDIR-878\n"
++++ "\tDIR-882\n"
++++ "\tDIR-1935\n"
++++ "\tDIR-2150\n"
++++ "\tDIR-X3260\n\n"
++++ "Any other value will default to COVR-C1200/P2500/DIR-8xx keys\n"
++++ "which may work to decrypt images for several further devices,\n"
++++ "however there are currently no private keys known that would\n"
++++ "allow for signing images to be used for flashing those devices.\n\n"
++++ );
++++ exit(1);
++++ }
++++
++++ input_file = fopen(argv[2], "rb");
++++ if (input_file == NULL) {
++++ fprintf(stderr, "Input File %s could not be opened.\n", argv[2]);
++++ exit(1);
++++ }
++++
++++ output_file = fopen(argv[3], "wb");
++++ if (input_file == NULL) {
++++ fprintf(stderr, "Output File %s could not be opened.\n", argv[3]);
++++ fclose(input_file);
++++ exit(1);
++++ }
++++
++++ aes128 = EVP_aes_128_cbc();
++++
++++ if (strncmp(argv[1], "COVR-X1860", 10) == 0)
++++ {
++++ generate_vendorkey_dimgkey(enk_covrx1860, sizeof(enk_covrx1860), &vendor_key[0]);
++++ rsa_private_bio = BIO_new_mem_buf(key_covrx1860_pem, -1);
++++ }
++++ else if (strncmp(argv[1], "DIR-X3260", 9) == 0)
++++ {
++++ generate_vendorkey_dimgkey(enk_dirx3260, sizeof(enk_dirx3260), &vendor_key[0]);
++++ rsa_private_bio = BIO_new_mem_buf(key_dirx3260_pem, -1);
++++ }
++++ else if (strncmp(argv[1], "DIR-1260", 8) == 0)
++++ {
++++ generate_vendorkey_legacy(&vendor_key[0]);
++++ rsa_private_bio = BIO_new_mem_buf(key_dir1260_pem, -1);
++++ }
++++ else if (strncmp(argv[1], "DIR-2150", 8) == 0)
++++ {
++++ generate_vendorkey_legacy(&vendor_key[0]);
++++ rsa_private_bio = BIO_new_mem_buf(key_dir2150_pem, -1);
++++ }
++++ else
++++ {
++++ /* COVR-C1200, COVR-P2500, DIR-853, DIR-867, DIR-878, DIR-882, DIR-1935 */
++++ generate_vendorkey_legacy(&vendor_key[0]);
++++ rsa_private_bio = BIO_new_mem_buf(key_legacy_pem, -1);
++++ }
++++
++++ printf("\nvendor_key: ");
++++ for (i = 0; i < AES_BLOCK_SIZE; i++)
++++ printf("%02x", vendor_key[i]);
++++
++++ if (argc == 5 && strncmp(argv[4], "-d", 2) == 0)
++++ image_decrypt();
++++ else
++++ image_encrypt();
++++}
+++diff --git a/src/dlink-sge-image.h b/src/dlink-sge-image.h
+++new file mode 100644
+++index 0000000..8966cc9
+++--- /dev/null
++++++ b/src/dlink-sge-image.h
+++@@ -0,0 +1,349 @@
++++/* SPDX-License-Identifier: GPL-2.0-only */
++++
++++const unsigned char key1[] =
++++ "\x35\x87\x90\x03\x45\x19\xf8\xc8\x23\x5d\xb6\x49\x28\x39\xa7\x3f";
++++
++++const unsigned char key2[] =
++++ "\xc8\xd3\x2f\x40\x9c\xac\xb3\x47\xc8\xd2\x6f\xdc\xb9\x09\x0b\x3c";
++++
++++const unsigned char iv[] =
++++ "\x98\xc9\xd8\xf0\x13\x3d\x06\x95\xe2\xa7\x09\xc8\xb6\x96\x82\xd4";
++++
++++const unsigned char salt[] =
++++ "\x67\xc6\x69\x73\x51\xff\x4a\xec\x29\xcd\xba\xab\xf2\xfb\xe3\x46";
++++
++++/*
++++ enk.txt as found in GPL tarball:
++++ COVR-X1860_GPL_Release/MTK7621_AX1800_BASE/vendors/COVR-X1860/imgkey/enk.txt
++++*/
++++const unsigned char enk_covrx1860[] =
++++ "NE1oIS1lKzkkIzZkbX49KTMsMWFkJXEybjheJiN6KjIwNjgx";
++++
++++/*
++++ enk.txt as found in GPL tarball:
++++ DIR-X3260_GPL_Release/MTK7621_AX1800_BASE/vendors/DIR-X3260/imgkey/enk.txt
++++*/
++++const unsigned char enk_dirx3260[] =
++++ "NF5yKy10JTl+bSkhNj1kTTIkI3FhIyUsJDU0czMyZmR6Jl4jMzI4KjA2Mg==";
++++
++++#define INTERLEAVE_BLOCK_SIZE 8
++++const unsigned char interleaving_pattern[INTERLEAVE_BLOCK_SIZE][INTERLEAVE_BLOCK_SIZE] = {
++++ {2, 5, 7, 4, 0, 6, 1, 3},
++++ {7, 3, 2, 6, 4, 5, 1, 0},
++++ {5, 1, 6, 7, 3, 0, 4, 2},
++++ {0, 3, 7, 6, 5, 4, 2, 1},
++++ {1, 5, 7, 0, 3, 2, 6, 4},
++++ {3, 6, 2, 5, 4, 7, 1, 0},
++++ {6, 0, 5, 1, 3, 4, 2, 7},
++++ {4, 6, 7, 3, 2, 0, 1, 5}
++++};
++++
++++/*
++++ key.pem as found in GPL tarball, e.g.:
++++ COVRP2500A1_FW101/COVRP2500_GPL_Release/package/tw-prog.priv/imgcrypt/key.pem
++++ encrypted with passphrase: "12345678"
++++*/
++++const unsigned char key_legacy_pem[] = R"(
++++-----BEGIN RSA PRIVATE KEY-----
++++Proc-Type: 4,ENCRYPTED
++++DEK-Info: AES-256-CBC,EAA1FD02CDBC7AA7E62AC821D47823F2
++++
++++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
++++-----END RSA PRIVATE KEY-----
++++)";
++++
++++/*
++++ key.pem as found in GPL tarball:
++++ DIR1260_GPL_Release/vendors/DIR-1260/imgkey/key.pem
++++ encrypted with passphrase: "12345678"
++++*/
++++const unsigned char key_dir1260_pem[] = R"(
++++-----BEGIN RSA PRIVATE KEY-----
++++Proc-Type: 4,ENCRYPTED
++++DEK-Info: AES-256-CBC,FFC890207BA9F13F6CE13F8EF7E69802
++++
++++3Vxyl4EsdEt6PeY4ThlWieYksjTMMHJnXdK3HKlDRuH5g2sup8t+gCDvMRmC4nYv
++++BfbsWPYwUTIvMTot/EBsp73QMKA6SLBdO6ckmuj1L+dwx7w7m1yM/Kvi2W+Wq2YY
++++zXHalrv65ZWZE4s1MHrWVs+gYx03FBbfOLBB9MLL+YLauLr+ul+2QErfTzEDBTlg
++++6lQlhzmgYg/Lw7jT1K+llhVlTaQzM898+s78GZPLelGrtu1BkU0Lynwb1mhbWVIn
++++xe8Pyo0w+FqmJLMpPtW1krMy8p0lt5ASgsDgV0OEQCuWONpbzwaPtBRFFJV4x46d
++++IHLVf8TQ8bRgjxphKLqvEonEgXOWORybeIxJHptpLbhD+l5vcNKm4KxfZ4w04btl
++++0Rm5vENnu+0L3P9FkUMvccfl04x1ufvFqXbFibpfBJjMxgxLpS3Tpc4aGaV9llD+
++++wpW/Jt1Kndjsajw8oKi+vQq8Ag33KCauCmEHyMneNPYhOML3U3eNj+4rtKV/GDHb
++++NF/xVWrXCIfZxU7WZrxK3PvKwWbkKd9AVhFC44Cq+4JsCIWjXVncJt/OCct6ZxkM
++++RC6sN8zc/Eob40B8h68aePeqkYzXC/2DQEopSrJZe2huIRT1ZZEO6UI+lRxzQBxa
++++OwHjsw4orI5cTkkmJiClSLnTNkKXKFcvGcOQlU7mJzAoDjvQE4mqI5zlwKI/pp6G
++++Iehns0l4tew8McCGE4Rc4v7SE6XWXuHfGZi5MVuRriBjZWRyCBFhbo6GLsjc7ODo
++++pM5rJSQtPeVzogfyvo1Of5azATekzvNfqBWdh+f1AYhV7+o5XNzaNQaPO4pt4iC3
++++v2T7muWoM8HxDLZ8MMMqWdQ3l/cD+ecEwI/1d32DwCCFOkDPyqkjB72pGSGNm6aH
++++/beHMW1YrUn+TscoZBJ/JdWKPRK2SZfP/Eiy7Ka2iNw9lUQtEbpGbsLtCO0pDJTt
++++qjplWFr0t3perFxl2fG3ctX0fm4fA35NPznD9CVLmzm1lgEZK5y45YVLKL27yn3t
++++owbfHGHDub0CFKNRdAutyf7M/+IJKA/v4jm6wfm92Bs0bkVIE6/NwKTBFYbI1hAs
++++tQBX1rD5zALsT9MZL7Im59t1kv8J4sBPB1i0qUByobN5PRy7rXZR/1ZptgJBIBSs
++++wXjdEhPwiwdyrVkcqMRmD0NlXNtYR8LYRP292VzmCeBhtPTpFIWyZEYj3othafL0
++++H29NMb2evN66ru6DQnDv+UCx+OqDGUR2rHgJPxWuIhfiUEqKwrvbn9oEUzxuxhef
++++TDaKQ0H38NzM4nrvGVun62peU3wztM+R24T0dVqJFT8hZb6AXG/Pn2uOk7wJrXhi
++++wD18Uj86troYMcPzs8JbsXyHHtqy6xz1+f76vs+UwhcHbmu8FMRd1G7inVkXbMjq
++++ROIxudJ5SvBR6qjpULiFifrbuJRI7faeb0smxhFKQDLY5WID1sT5TdaA5rYwYdkd
++++aJVK/MuE7ybMsp4DhUXviV/52MyehPwwzkWT/5S8Qo5ME/nY+kFKpPr6geJ7kL2A
++++YyBXT9aVId8AygH54vvLGAAXF7roYzBNm3nL5dM/3g85rMzNblSfz6h0hG7Gs2hT
++++LF6qWlGtbXEUr8F4f+Dzrs7Na5oyGqCoWkwdRNuIIRbxrT+74UdY8KHp1LmPm1Yc
++++8VdSEjhVBCTLuhcKqRB1sVLazVn9po921hJlzNlmuWeyyT7Ac9Q2BdOBlPTuhYbE
++++C1vZ/E/MVAVrBo+Wwn9rWIH09rMa3Q8v5KNvTg3sqkaG72nLAqm+pgNzPQnjUbam
++++bzrznitdEN6opASEHswW0sMTrE5pqXA3qzYpMllQ2aJyZS3+1I6naj6xoo9hPpVn
++++nBdiASkWjfxkQ5p7fZMNe4qutI+UI4Tsc9jdLpXx/K38h7EO5EwtitOYolyRvNYE
++++MCtU7nOYwBLFOvI5KYNuful8X/iAFtqJKPV+QyJVO3fgxsbBP+Zh0CLXcJZCrOwd
+++++VYWcD86piWfCSgf3oj9JKunhtCp+TI+OuOaWVIFiV/FPCYtHxsqJJ0UfSXv8efl
++++eKlSy7tvppCvOuUNvz1b1uGUbOzxJGKQsAvCNCVgQ0NzgEkV6loQJNj9v/6q1MpO
++++SF7QCjPq6MQcMY6xKWZ+p/+AuoJ+qb8rtxllHveG4JsfL45xd846Q7Jg8eq7xJMt
++++nuRREs2BrdCTmUFgdxZhLMnwPpDQTcM/eua01TIiF4gIqwXiYeu0NxI1v3xMJM/4
++++zsblU+SDbRhZV6i3+EK9Y6+OomIiBdxsB5wAhwawxNwN9jOETzENrjqDUtqri3Bq
++++GV2VJ28JtlTlv++f8kg1/wB+Rwl7WYzOqhJtW94ATPjylC7pPETdRgZkGI/U90Zp
++++694kynQ/iHfxD+gN3AHVFUVUJ6hW3OUpE1bRwaGBNza+stVejbi/5ksWlK4PYJDH
++++Yd6JhIdwa8wgnS4oOGVOXgZ811YiQCURNmy9NAXGko1ZESFKGOQFPNdCCw1MZN1+
++++PtM2hu/J0cTXnB4zWvaUZt60ztFCWYShCO7yj4Fp6o13jhAsM3D5RekxL6t3ne3Z
++++veNaHuZY8my0XCYab6d+b98xKm/QTYzcYS0T7uFapR+SJ0taHMbPo1/8+jhua9re
++++aHl/JRd1pUUjVB/kfAvjZiJ+9bonEB5TrBlnrsKOlCfdMRrgrnKzSe+lFuaTh8S1
++++W24QLwAWxfzw9O6Xts56mSS4ASXN5aenuIAZbUbgOkTUcWUHVlUAKJlj01juEKhB
++++CnED9aSowsrUnoTOv4eZot0/R88xSqtlctOic864fF1G6mZlNgxD4IF+YSmjaoFD
++++2jrUKLmlMv2axvyUcOE8fGCm3vQGJHO6VhWLO/xq2+IkmpnHAOQrcf/drFtmOH/b
++++Mb6txrJoCRlibG6uRkCuW0Ejfwab8MYmbYrNhCheDpgxxXw1sAIY8A/Z4FfHA89v
++++eW9ZFvxIBt+VjZqLQ868jaO+RKrK9RFH0923T93WFV+ux+j6D8wmWmK+SiuUXXjB
++++rLk5qQ8CTo02Ioud0qilIpXM4eNb4r0ADKUppFBxcmilM90mhglhRKdkXx/6/FoK
++++MYmUNsedz/6n5GDfx3g1XuyD2lVslhEQMPs7WZmia6fh8M0dyuC5OAbys7UVo03V
++++-----END RSA PRIVATE KEY-----
++++)";
++++
++++/*
++++ key.pem as found in GPL tarball:
++++ DIR2150_GPL_Release/vendors/DIR-2150/imgkey/key.pem
++++ encrypted with passphrase: "12345678"
++++*/
++++const unsigned char key_dir2150_pem[] = R"(
++++-----BEGIN RSA PRIVATE KEY-----
++++Proc-Type: 4,ENCRYPTED
++++DEK-Info: AES-256-CBC,314D3C7FB69E7DDEAF084A0A7CA39069
++++
++++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
++++-----END RSA PRIVATE KEY-----
++++)";
++++
++++/*
++++ key.pem as found in GPL tarball:
++++ COVR-X1860_GPL_Release/MTK7621_AX1800_BASE/vendors/COVR-X1860/imgkey/key.pem
++++ encrypted with passphrase: "12345678"
++++*/
++++const unsigned char key_covrx1860_pem[] = R"(
++++-----BEGIN RSA PRIVATE KEY-----
++++Proc-Type: 4,ENCRYPTED
++++DEK-Info: AES-256-CBC,34CCF1AEF0C34EAC5FFAE6BCF81ABB8D
++++
++++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
++++-----END RSA PRIVATE KEY-----
++++)";
++++
++++/*
++++ key.pem as found in GPL tarball, e.g.:
++++ DIR-X3260_GPL_Release/MTK7621_AX1800_BASE/vendors/DIR-X3260/imgkey/key.pem
++++ encrypted with passphrase: "12345678"
++++*/
++++const unsigned char key_dirx3260_pem[] = R"(
++++-----BEGIN RSA PRIVATE KEY-----
++++Proc-Type: 4,ENCRYPTED
++++DEK-Info: AES-256-CBC,DDAC1FE060CB240242046BDFEEE17E44
++++
++++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
++++-----END RSA PRIVATE KEY-----
++++)";
+diff --git a/patches/openwrt/0005-Add-DLink-COVR-X1860.patch b/patches/openwrt/0005-Add-DLink-COVR-X1860.patch
+new file mode 100644
+index 00000000..aa9f2245
+--- /dev/null
++++ b/patches/openwrt/0005-Add-DLink-COVR-X1860.patch
+@@ -0,0 +1,318 @@
++From: Roland <75312877+RolandoMagico@users.noreply.github.com>
++Date: Mon, 26 Jun 2023 18:03:51 +0200
++Subject: add Dlink COVR-X1860
++diff --git a/include/image-commands.mk b/include/image-commands.mk
++index 9220b8dec0..84032d338c 100644
++--- a/include/image-commands.mk
+++++ b/include/image-commands.mk
++@@ -226,6 +226,11 @@ define Build/copy-file
++ cat "$(1)" > "$@"
++ endef
++
+++define Build/dlink-sge-image
+++ $(STAGING_DIR_HOST)/bin/dlink-sge-image $(1) $@ $@.enc
+++ mv $@.enc $@
+++endef
+++
++ define Build/edimax-header
++ $(STAGING_DIR_HOST)/bin/mkedimaximg -i $@ -o $@.new $(1)
++ @mv $@.new $@
++diff --git a/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts
++new file mode 100644
++index 0000000000..c06c5e36ba
++--- /dev/null
+++++ b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts
++@@ -0,0 +1,186 @@
+++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+++
+++#include "mt7621.dtsi"
+++
+++#include
+++#include
+++
+++/ {
+++ compatible = "dlink,covr-x1860-a1", "mediatek,mt7621-soc";
+++ model = "D-Link COVR-X1860 A1";
+++
+++ aliases {
+++ led-boot = &status_orange;
+++ led-failsafe = &status_red;
+++ led-running = &status_white;
+++ led-upgrade = &status_red;
+++ };
+++
+++ chosen {
+++ bootargs = "console=ttyS0,115200";
+++ };
+++
+++ keys {
+++ compatible = "gpio-keys";
+++
+++ reset {
+++ label = "reset";
+++ linux,code = ;
+++ gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
+++ };
+++
+++ wps {
+++ label = "wps";
+++ linux,code = ;
+++ gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
+++ };
+++ };
+++
+++ leds {
+++ compatible = "gpio-leds";
+++
+++ status_white: power {
+++ label = "white:status";
+++ gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
+++ };
+++
+++ status_orange: status_orange {
+++ label = "orange:status";
+++ gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+++ default-state = "on";
+++ };
+++
+++ status_red: status_red {
+++ label = "red:status";
+++ gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+++ };
+++ };
+++
+++ virtual_flash {
+++ compatible = "mtd-concat";
+++
+++ devices = <&fwconcat0 &fwconcat1>;
+++
+++ partitions {
+++ compatible = "fixed-partitions";
+++ #address-cells = <1>;
+++ #size-cells = <1>;
+++
+++ partition@0 {
+++ label = "ubi";
+++ reg = <0x0 0x0>;
+++ };
+++ };
+++ };
+++};
+++
+++&nand {
+++ status = "okay";
+++
+++ partitions {
+++ compatible = "fixed-partitions";
+++ #address-cells = <1>;
+++ #size-cells = <1>;
+++
+++ partition@0 {
+++ label = "bootloader";
+++ reg = <0x0 0x80000>;
+++ read-only;
+++ };
+++
+++ partition@80000 {
+++ label = "config";
+++ reg = <0x80000 0x80000>;
+++ read-only;
+++ };
+++
+++ factory: partition@100000 {
+++ label = "factory";
+++ reg = <0x100000 0x80000>;
+++ read-only;
+++ };
+++
+++ partition@180000 {
+++ label = "config2";
+++ reg = <0x180000 0x40000>;
+++ read-only;
+++ };
+++
+++ partition@1c0000 {
+++ label = "kernel";
+++ reg = <0x1c0000 0x800000>;
+++ };
+++
+++ fwconcat0: partition@9c0000 {
+++ label = "fwconcat0";
+++ reg = <0x9c0000 0x2000000>;
+++ };
+++
+++ partition@29c0000 {
+++ label = "kernel2";
+++ reg = <0x29c0000 0x800000>;
+++ read-only;
+++ };
+++
+++ fwconcat1: partition@31c0000 {
+++ label = "fwconcat1";
+++ reg = <0x31c0000 0x2a00000>;
+++ };
+++
+++ partition@5bc0000 {
+++ label = "private";
+++ reg = <0x5bc0000 0x1400000>;
+++ read-only;
+++ };
+++
+++ partition@6fc0000 {
+++ label = "mydlink";
+++ reg = <0x6fc0000 0x600000>;
+++ read-only;
+++ };
+++
+++ partition@75c0000 {
+++ label = "myconfig";
+++ reg = <0x75c0000 0xa00000>;
+++ read-only;
+++ };
+++ };
+++};
+++
+++&pcie {
+++ status = "okay";
+++};
+++
+++&pcie1 {
+++ wifi@0,0 {
+++ compatible = "mediatek,mt76";
+++ reg = <0x0000 0 0 0 0>;
+++ mediatek,mtd-eeprom = <&factory 0x0>;
+++ mediatek,disable-radar-background;
+++ };
+++};
+++
+++&gmac1 {
+++ status = "okay";
+++ phy-handle = <ðphy4>;
+++};
+++
+++&mdio {
+++ ethphy4: ethernet-phy@4 {
+++ reg = <4>;
+++ };
+++};
+++
+++&switch0 {
+++ ports {
+++ port@0 {
+++ status = "okay";
+++ label = "internet";
+++ };
+++
+++ port@2 {
+++ status = "okay";
+++ label = "ethernet";
+++ };
+++ };
+++};
++diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
++index a5b69839a7..7b43410a5a 100644
++--- a/target/linux/ramips/image/mt7621.mk
+++++ b/target/linux/ramips/image/mt7621.mk
++@@ -9,6 +9,14 @@ DEFAULT_SOC := mt7621
++
++ DEVICE_VARS += ELECOM_HWNAME LINKSYS_HWNAME DLINK_HWID
++
+++define Build/append-dlink-covr-metadata
+++ echo -ne '{"supported_devices": "$(1)", "firmware": "' > $@metadata.tmp
+++ $(MKHASH) md5 "$@" | head -c32 >> $@metadata.tmp
+++ echo '"}' >> $@metadata.tmp
+++ fwtool -I $@metadata.tmp $@
+++ rm $@metadata.tmp
+++endef
+++
++ define Build/arcadyan-trx
++ echo -ne "hsqs" > $@.hsqs
++ $(eval trx_magic=$(word 1,$(1)))
++@@ -552,6 +560,31 @@ define Device/cudy_x6-v2
++ endef
++ TARGET_DEVICES += cudy_x6-v2
++
+++define Device/dlink_covr-x1860-a1
+++ $(Device/dsa-migration)
+++ BLOCKSIZE := 128k
+++ PAGESIZE := 2048
+++ KERNEL_SIZE := 8192k
+++ IMAGE_SIZE := 40960k
+++ DEVICE_VENDOR := D-Link
+++ DEVICE_MODEL := COVR-X1860
+++ DEVICE_VARIANT := A1
+++ DEVICE_PACKAGES := kmod-mt7915-firmware
+++ UBINIZE_OPTS := -E 5
+++ KERNEL_LOADADDR := 0x82000000
+++ KERNEL := kernel-bin | relocate-kernel 0x80001000 | lzma | \
+++ fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb | \
+++ append-squashfs4-fakeroot
+++ IMAGES += factory.bin recovery.bin
+++ IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+++ IMAGE/recovery.bin := append-kernel | pad-to $$(KERNEL_SIZE) | \
+++ append-ubi | check-size
+++ IMAGE/factory.bin := $$(IMAGE/recovery.bin) | \
+++ append-dlink-covr-metadata $$(DEVICE_MODEL) | \
+++ dlink-sge-image $$(DEVICE_MODEL)
+++endef
+++TARGET_DEVICES += dlink_covr-x1860-a1
+++
++ define Device/dlink_dap-1620-b1
++ DEVICE_VENDOR := D-Link
++ DEVICE_MODEL := DAP-1620
++diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
++index cd746e84ee..a772bca6d1 100644
++--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
+++++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
++@@ -91,6 +91,9 @@ ramips_setup_interfaces()
++ zyxel,nt7101)
++ ucidef_set_interfaces_lan_wan "lan" "wan"
++ ;;
+++ dlink,covr-x1860-a1)
+++ ucidef_set_interfaces_lan_wan "ethernet" "internet"
+++ ;;
++ gnubee,gb-pc1)
++ ucidef_set_interface_lan "ethblack ethblue"
++ ;;
++@@ -185,6 +188,11 @@ ramips_setup_macs()
++ lan_mac=$wan_mac
++ label_mac=$wan_mac
++ ;;
+++ dlink,covr-x1860-a1)
+++ label_mac=$(mtd_get_mac_ascii config2 factory_mac)
+++ wan_mac=$label_mac
+++ lan_mac=$label_mac
+++ ;;
++ dlink,dir-860l-b1)
++ lan_mac=$(mtd_get_mac_ascii factory lanmac)
++ wan_mac=$(mtd_get_mac_ascii factory wanmac)
++diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
++index 80c7273543..10e055d776 100644
++--- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
+++++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
++@@ -41,6 +41,13 @@ case "$board" in
++ [ "$PHYNBR" = "1" ] && \
++ macaddr_add $lan_mac_addr 2 > /sys${DEVPATH}/macaddress
++ ;;
+++ dlink,covr-x1860-a1)
+++ label_mac=$(mtd_get_mac_ascii config2 factory_mac)
+++ [ "$PHYNBR" = "0" ] && \
+++ macaddr_add $label_mac 1 > /sys${DEVPATH}/macaddress
+++ [ "$PHYNBR" = "1" ] && \
+++ macaddr_add $label_mac 2 > /sys${DEVPATH}/macaddress
+++ ;;
++ dlink,dap-x1860-a1)
++ hw_mac_addr="$(mtd_get_mac_binary factory 0x4)"
++ [ "$PHYNBR" = "0" ] && \
++diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
++index ce5fdd61ed..0dbd7874e8 100755
++--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
+++++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
++@@ -61,6 +61,7 @@ platform_do_upgrade() {
++ beeline,smartbox-giga|\
++ beeline,smartbox-turbo|\
++ belkin,rt1800|\
+++ dlink,covr-x1860-a1|\
++ dlink,dap-x1860-a1|\
++ dlink,dir-1960-a1|\
++ dlink,dir-2640-a1|\
diff --git a/targets b/targets
index 29a74e7..190c036 100644
--- a/targets
+++ b/targets
@@ -9,6 +9,7 @@ ipq806x-generic
lantiq-xrx200
lantiq-xway
mediatek-mt7622
+mediatek-filogic
mpc85xx-p1010
mpc85xx-p1020
ramips-mt7620
From 4491d4229f216618831d9db438c1b5393bfeda2e Mon Sep 17 00:00:00 2001
From: FFAC
Date: Fri, 21 Jul 2023 17:03:08 +0000
Subject: [PATCH 047/129] add recovery and factory for covr-x1860
---
patches/add-covr-x1860.patch | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch
index 985e7a7..1dba5a8 100644
--- a/patches/add-covr-x1860.patch
+++ b/patches/add-covr-x1860.patch
@@ -1221,3 +1221,20 @@ index 00000000..aa9f2245
+ dlink,dap-x1860-a1|\
+ dlink,dir-1960-a1|\
+ dlink,dir-2640-a1|\
+diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
+index b0dabd4c..013a06a4 100644
+--- a/targets/ramips-mt7621
++++ b/targets/ramips-mt7621
+@@ -40,6 +40,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', {
+
+ -- D-Link
+
++device('d-link-covr-x1860-a1', 'dlink_covr-x1860-a1', {
++ extra_images = {
++ {'-squashfs-recovery', '-recovery', '.bin'}
++ },
++})
++
+ device('d-link-dap-x1860-a1', 'dlink_dap-x1860-a1')
+
+ device('d-link-dir-860l-b1', 'dlink_dir-860l-b1')
From 853593a925d02e466c5e3386f0c1e70235b22492 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 04:40:54 +0200
Subject: [PATCH 048/129] site.conf: move comments around, fix indentation
remove show_altitude, it's default false anyways
remove community-build mirror (experimental channel)
---
site.conf | 56 +++++++++++++++++++++++++------------------------------
1 file changed, 25 insertions(+), 31 deletions(-)
diff --git a/site.conf b/site.conf
index b93d7af..0812fdd 100644
--- a/site.conf
+++ b/site.conf
@@ -22,7 +22,7 @@
--[[ NTP settings
- Synchronize the time of the nodes
+ Synchronize the time of the nodes
timezone: Timezone of your community
http://wiki.openwrt.org/doc/uci/system#time.zones
ntp_servers: List of NTP-Servers to query. You can use any public and/or your private NTP-Servers of your community.
@@ -259,7 +259,6 @@
'http://updates.freifunk-aachen.de/from-2022.1.x/experimental/sysupgrade',
'http://updates.ffac.rocks/from-2022.1.x/experimental/sysupgrade',
'http://updates.aachen.freifunk.net/from-2022.1.x/experimental/sysupgrade',
- 'http://community-build.freifunk-aachen.de/firmware/from-2022.1.x/experimental/sysupgrade',
},
good_signatures = 2,
pubkeys = {
@@ -277,7 +276,19 @@
},
},
- -- Show/hide the altitude field
+ -- uncomment for update from 2019.1.x to v2021.1.x
+ --[[ update_channel = {
+ from_name = experimental, -- remove or false to catch all
+ -- if to_name is defined, autoupdater branch is set to it
+ to_name = 'beta',
+ }
+ ]]
+
+ --[[ setup_mode = {
+ skip = false, -- Skip config_mode on first boot
+ },
+ ]]
+
config_mode = {
hostname = {
optional = false,
@@ -286,14 +297,10 @@
show_password_form = true,
min_password_length = 10,
},
- geo_location = {
- show_altitude = false,
- },
owner = {
obligatory = true,
},
geo_location = {
- show_altitude = false,
osm = {
center = {
lat = 50.77,
@@ -309,33 +316,20 @@
},
},
- --[[ setup_mode = {
- skip = false,
- },
- authorized_keys = { '', },
- ]]
-
ssid_changer = {
enabled = true,
- switch_timeframe = 1, -- only once every timeframe (in minutes) the SSID will change to OFFLINE
- -- set to 1440 to change once a day
- -- set to 1 minute to change every time the router gets offline
- first = 2, -- the first few minutes directly after reboot within which an Offline-SSID always may be activated
- prefix = 'FF_Offline_', -- use something short to leave space for the nodename (no '~' allowed!)
- suffix = 'nodename', -- generate the SSID with either 'nodename', 'mac' or to use only the prefix: 'none'
- tq_limit_enabled = false, -- if false, the offline SSID will only be set if there is no gateway reacheable
- -- upper and lower limit to turn the offline_ssid on and off
- -- in-between these two values the SSID will never be changed to prevent it from toggeling every minute.
- tq_limit_max = 55, -- upper limit, above that the online SSID will be used
- tq_limit_min = 45, -- lower limit, below that the offline SSID will be used
+ switch_timeframe = 1, -- only once every timeframe (in minutes) the SSID will change to OFFLINE
+ -- set to 1440 to change once a day
+ -- set to 1 minute to change every time the router gets offline
+ first = 2, -- the first few minutes directly after reboot within which an Offline-SSID always may be activated
+ prefix = 'FF_Offline_', -- use something short to leave space for the nodename (no '~' allowed!)
+ suffix = 'nodename', -- generate the SSID with either 'nodename', 'mac' or to use only the prefix: 'none'
+ tq_limit_enabled = false, -- if false, the offline SSID will only be set if there is no gateway reacheable
+ -- upper and lower limit to turn the offline_ssid on and off
+ -- in-between these two values the SSID will never be changed to prevent it from toggeling every minute.
+ tq_limit_max = 55, -- upper limit, above that the online SSID will be used
+ tq_limit_min = 45, -- lower limit, below that the offline SSID will be used
},
-
- update_channel = {
- --from_name = false, -- remove or false to catch all
- -- if to_name is defined, autoupdater branch is set to it
- to_name = 'stable',
-
- }
}
-- /* vi: set ft=lua: */
From e1ed391d7a8b4a33154b2906a55399c817ff5ee0 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 04:43:53 +0200
Subject: [PATCH 049/129] site.conf: add new signing key: build server
---
site.conf | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/site.conf b/site.conf
index 0812fdd..6732fa4 100644
--- a/site.conf
+++ b/site.conf
@@ -222,7 +222,7 @@
},
good_signatures = 4,
pubkeys = {
- 'e1505aadd3c5674a93ff2c8596b2cb2d857b068b18f9a398a182b003a5e5040b', -- Bob (Build Server @skydisk)
+ 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de
'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM
'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva
'5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty
@@ -242,7 +242,7 @@
},
good_signatures = 3,
pubkeys = {
- 'e1505aadd3c5674a93ff2c8596b2cb2d857b068b18f9a398a182b003a5e5040b', -- Bob (Build Server @skydisk)
+ 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de
'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM
'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva
'5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty
@@ -262,7 +262,7 @@
},
good_signatures = 2,
pubkeys = {
- 'e1505aadd3c5674a93ff2c8596b2cb2d857b068b18f9a398a182b003a5e5040b', -- Bob (Build Server @skydisk)
+ 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de
'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM
'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva
'5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty
From 40a05329c676c424447608acdda16fc32bdca12f Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 04:44:56 +0200
Subject: [PATCH 050/129] site.conf: remove weather radar channels from
outdoor_chanlist
---
site.conf | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/site.conf b/site.conf
index 6732fa4..4873028 100644
--- a/site.conf
+++ b/site.conf
@@ -55,7 +55,8 @@
wifi5 = {
channel = 44,
- outdoor_chanlist = "100-140",
+ outdoor_chanlist = '100-116 132-140', -- exclude/avoid weather radar frequencies
+ -- https://homepage.univie.ac.at/albert.rafetseder/RADARs/radars.html
ap = {
ssid = 'Freifunk',
},
From 9c352cfff3d29ed9d9f747007a8356ecf63388fc Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 05:02:19 +0200
Subject: [PATCH 051/129] site.mk: rework packagelist variables
sort packages alphabetically
add code comment
---
site.mk | 75 +++++++++++++++++++++++++++++++--------------------------
1 file changed, 41 insertions(+), 34 deletions(-)
diff --git a/site.mk b/site.mk
index 6f6c063..860b14d 100644
--- a/site.mk
+++ b/site.mk
@@ -1,41 +1,48 @@
## gluon site.mk Freifunk Regio Aachen
GLUON_DEPRECATED=upgrade
-GLUON_FEATURES := \
- autoupdater \
- config-mode-geo-location-osm \
- ebtables-filter-multicast \
- ebtables-filter-ra-dhcp \
- ebtables-limit-arp \
- mesh-batman-adv-15 \
- mesh-vpn-wireguard \
- radv-filterd \
- radvd \
- respondd \
- status-page \
- web-advanced \
- web-private-wifi \
- web-wizard
-## GLUON_SITE_PACKAGES
-# Specify additional Gluon/LEDE packages to include here;
-# A minus sign may be prepended to remove a packages from the
-# selection that would be enabled by default or due to the
-# chosen feature flags
-
-
-# -gluon-status-page
-#ffac-status-page
-# custom status page without contact information
-
-GLUON_SITE_PACKAGES := \
- iwinfo \
- ffac-ssid-changer \
- ffac-autoupdater-wifi-fallback \
- ffac-wg-registration \
- respondd-module-airtime
-
+## GLUON_FEATURES
+# Specify Gluon features/packages to enable;
+# Gluon will automatically enable a set of packages
+# depending on the combination of features listed
+define GLUON_FEATURES :=
+autoupdater
+config-mode-geo-location-osm
+ebtables-filter-multicast
+ebtables-filter-ra-dhcp
+ebtables-limit-arp
+mesh-batman-adv-15
+mesh-vpn-wireguard
+radv-filterd
+radvd
+respondd
+status-page
+web-advanced
+web-private-wifi
+web-wizard
+endef
+GLUON_FEATURES := $(GLUON_FEATURES:\n= )
+
+## GLUON_SITE_PACKAGES
+# Specify additional Gluon/OpenWrt packages to include here;
+# A minus sign may be prepended to remove a packages from the
+# selection that would be enabled by default or due to the
+# chosen feature flags
+define GLUON_SITE_PACKAGES :=
+ffac-autoupdater-wifi-fallback
+ffac-ssid-changer
+ffac-wg-registration
+iwinfo
+respondd-module-airtime
+endef
+GLUON_SITE_PACKAGES := $(GLUON_SITE_PACKAGES:\n= )
+
+define GLUON_FEATURES_standard :=
+
+endef
+# wireless-encryption-wpa3
# gluon-mesh-wireless-sae
-# GLUON_FEATURES_standard := wireless-encryption-wpa3
+GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= )
DEFAULT_GLUON_RELEASE := 2022.1.4-1~exp$(shell date '+%Y%m%d%H')
From 0144c42c4887ee05bb91c4eae74b52b28f63b5ba Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 05:18:42 +0200
Subject: [PATCH 052/129] site.mk: add code comments from example
---
site.mk | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/site.mk b/site.mk
index 860b14d..cca787b 100644
--- a/site.mk
+++ b/site.mk
@@ -23,6 +23,13 @@ web-wizard
endef
GLUON_FEATURES := $(GLUON_FEATURES:\n= )
+define GLUON_FEATURES_standard :=
+
+endef
+# wireless-encryption-wpa3
+# gluon-mesh-wireless-sae
+GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= )
+
## GLUON_SITE_PACKAGES
# Specify additional Gluon/OpenWrt packages to include here;
# A minus sign may be prepended to remove a packages from the
@@ -37,13 +44,6 @@ respondd-module-airtime
endef
GLUON_SITE_PACKAGES := $(GLUON_SITE_PACKAGES:\n= )
-define GLUON_FEATURES_standard :=
-
-endef
-# wireless-encryption-wpa3
-# gluon-mesh-wireless-sae
-GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= )
-
DEFAULT_GLUON_RELEASE := 2022.1.4-1~exp$(shell date '+%Y%m%d%H')
# Allow overriding the release number from the command line
@@ -53,8 +53,10 @@ DEFAULT_GLUON_CHECKOUT := v2022.1.4
GLUON_CHECKOUT ?= $(DEFAULT_GLUON_CHECKOUT)
+# Default priority for updates.
GLUON_PRIORITY ?= 0
+# Region code required for some images; supported values: us eu
GLUON_REGION ?= eu
# Languages to include
From 2abb1097c45042a57d744f1e9773f3fd12104c91 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 05:23:54 +0200
Subject: [PATCH 053/129] site.mk: add web-cellular
but commented out
---
site.mk | 1 +
1 file changed, 1 insertion(+)
diff --git a/site.mk b/site.mk
index cca787b..e175c49 100644
--- a/site.mk
+++ b/site.mk
@@ -26,6 +26,7 @@ GLUON_FEATURES := $(GLUON_FEATURES:\n= )
define GLUON_FEATURES_standard :=
endef
+# web-cellular
# wireless-encryption-wpa3
# gluon-mesh-wireless-sae
GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= )
From f1f9bf987fa0beb2a6027f29a1536316ab417443 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 05:27:05 +0200
Subject: [PATCH 054/129] site.mk: move some stuff from Makefile to site.mk
remove Release and Checkout stuff from site.mk
set BROKEN in site.mk
set GLUON_AUTOUPDATER_ENABLED in site.mk
set GLUON_OUTPUTDIR in site.mk
set GLUON_PACKAGEDIR in site.mk
move GLUON_DEPRECATED further down in the file
---
.gitignore | 1 +
site.mk | 19 ++++++++++++-------
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/.gitignore b/.gitignore
index fa8ed78..66f2fc8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
gluon-build
+output
*.orig
*.swp
diff --git a/site.mk b/site.mk
index e175c49..aec6860 100644
--- a/site.mk
+++ b/site.mk
@@ -45,18 +45,23 @@ respondd-module-airtime
endef
GLUON_SITE_PACKAGES := $(GLUON_SITE_PACKAGES:\n= )
-DEFAULT_GLUON_RELEASE := 2022.1.4-1~exp$(shell date '+%Y%m%d%H')
-
-# Allow overriding the release number from the command line
-GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
-
-DEFAULT_GLUON_CHECKOUT := v2022.1.4
+# Build everything by default
+ifeq ($(BROKEN),0)
+ override BROKEN :=
+else
+ BROKEN := 1
+endif
+GLUON_DEPRECATED := upgrade
-GLUON_CHECKOUT ?= $(DEFAULT_GLUON_CHECKOUT)
+GLUON_OUTPUTDIR := ${GLUON_SITEDIR}/output
+GLUON_PACKAGEDIR := $(GLUON_OUTPUTDIR)/packages/modules
# Default priority for updates.
GLUON_PRIORITY ?= 0
+# Autoupdate by default
+GLUON_AUTOUPDATER_ENABLED ?= 1
+
# Region code required for some images; supported values: us eu
GLUON_REGION ?= eu
From 716240197454b4fcfd12e6573474e0f90a4ccbc9 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 05:59:08 +0200
Subject: [PATCH 055/129] Makefile: Update to new FFMUC changes
create ${GLUON_BUILD_DIR} and fill it without git clone
split first half of gluon-prepare and create gluon-update
we will keep our own gluon-patch for now instead of running their shell script
scripts/apply_patches.sh
---
Makefile | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/Makefile b/Makefile
index 19b3969..bbae060 100644
--- a/Makefile
+++ b/Makefile
@@ -37,7 +37,7 @@ info:
@echo '# Building release ${GLUON_RELEASE} for branch ${GLUON_AUTOUPDATER_BRANCH}'
@echo
-build: gluon-prepare
+build: gluon-prepare output-clean
cp OPKG_KEY_BUILD_DIR/* ${GLUON_BUILD_DIR}/openwrt || true
for target in ${GLUON_TARGETS}; do \
echo ""Building target $$target""; \
@@ -56,17 +56,22 @@ sign: manifest
${GLUON_BUILD_DIR}/contrib/sign.sh ${SECRET_KEY_FILE} output/images/sysupgrade/${GLUON_AUTOUPDATER_BRANCH}.manifest
${GLUON_BUILD_DIR}:
- git clone ${GLUON_GIT_URL} ${GLUON_BUILD_DIR}
-
-gluon-prepare: output-clean ${GLUON_BUILD_DIR}
- cd ${GLUON_BUILD_DIR} \
- && git remote set-url origin ${GLUON_GIT_URL} \
- && git fetch --tags origin ${GLUON_GIT_REF} \
- && rm -rf packages \
- && git checkout -q --force ${GLUON_GIT_REF} \
- && git clean -fd;
- ln -sfT .. ${GLUON_BUILD_DIR}/site
+ mkdir -p ${GLUON_BUILD_DIR}
+
+# Note: "|" means "order only", e.g. "do not care about folder timestamps"
+# https://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Prerequisite-Types.html
+${GLUON_BUILD_DIR}/.git: | ${GLUON_BUILD_DIR}
+ git init ${GLUON_BUILD_DIR}
+ cd ${GLUON_BUILD_DIR} && git remote add origin ${GLUON_GIT_URL}
+
+gluon-update: | ${GLUON_BUILD_DIR}/.git
+ cd ${GLUON_BUILD_DIR} && git fetch --tags origin ${GLUON_GIT_REF}
+ cd ${GLUON_BUILD_DIR} && git reset --hard FETCH_HEAD
+ cd ${GLUON_BUILD_DIR} && git clean -fd
+
+gluon-prepare: gluon-update
make gluon-patch
+ ln -sfT .. ${GLUON_BUILD_DIR}/site
${GLUON_MAKE} update
gluon-patch:
From ab601bcce70abb632f92aa31977102d9d123f80c Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 05:30:52 +0200
Subject: [PATCH 056/129] Makefile: replace {} by ()
---
Makefile | 68 ++++++++++++++++++++++++++++----------------------------
1 file changed, 34 insertions(+), 34 deletions(-)
diff --git a/Makefile b/Makefile
index bbae060..88b14e2 100644
--- a/Makefile
+++ b/Makefile
@@ -2,9 +2,9 @@ GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
GLUON_GIT_REF := v2022.1.4
-PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
-SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
-OPKG_KEY_BUILD_DIR ?= ${HOME}/.key-build
+PATCH_DIR := $(GLUON_BUILD_DIR)/site/patches
+SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key
+OPKG_KEY_BUILD_DIR ?= $(HOME)/.key-build
GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ')
GLUON_AUTOUPDATER_BRANCH := stable
@@ -21,79 +21,79 @@ endif
JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l)
-GLUON_MAKE := ${MAKE} -j ${JOBS} --no-print-directory -C ${GLUON_BUILD_DIR} \
+GLUON_MAKE := $(MAKE) -j $(JOBS) --no-print-directory -C $(GLUON_BUILD_DIR) \
BROKEN=1 \
- GLUON_RELEASE=${GLUON_RELEASE} \
- GLUON_AUTOUPDATER_BRANCH=${GLUON_AUTOUPDATER_BRANCH} \
- GLUON_AUTOUPDATER_ENABLED=${GLUON_AUTOUPDATER_ENABLED}
+ GLUON_RELEASE=$(GLUON_RELEASE) \
+ GLUON_AUTOUPDATER_BRANCH=$(GLUON_AUTOUPDATER_BRANCH) \
+ GLUON_AUTOUPDATER_ENABLED=$(GLUON_AUTOUPDATER_ENABLED)
all: info
- ${MAKE} manifest
+ $(MAKE) manifest
info:
@echo
@echo '#########################'
@echo '# FFAC Firmware build'
- @echo '# Building release ${GLUON_RELEASE} for branch ${GLUON_AUTOUPDATER_BRANCH}'
+ @echo '# Building release $(GLUON_RELEASE) for branch $(GLUON_AUTOUPDATER_BRANCH)'
@echo
build: gluon-prepare output-clean
- cp OPKG_KEY_BUILD_DIR/* ${GLUON_BUILD_DIR}/openwrt || true
- for target in ${GLUON_TARGETS}; do \
+ cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true
+ for target in $(GLUON_TARGETS); do \
echo ""Building target $$target""; \
- ${GLUON_MAKE} download all GLUON_TARGET="$$target" CONFIG_JSON_ADD_IMAGE_INFO=1; \
+ $(GLUON_MAKE) download all GLUON_TARGET="$$target" CONFIG_JSON_ADD_IMAGE_INFO=1; \
done
- mkdir -p ${GLUON_BUILD_DIR}/output/opkg-packages
- cp -r ${GLUON_BUILD_DIR}/openwrt/bin/packages ${GLUON_BUILD_DIR}/output/opkg-packages/gluon-ffac-${GLUON_RELEASE}/
+ mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages
+ cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/
manifest: build
for branch in experimental beta stable; do \
- ${GLUON_MAKE} manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\
+ $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\
done
- mv -f ${GLUON_BUILD_DIR}/output/* ./output/
+ mv -f $(GLUON_BUILD_DIR)/output/* ./output/
sign: manifest
- ${GLUON_BUILD_DIR}/contrib/sign.sh ${SECRET_KEY_FILE} output/images/sysupgrade/${GLUON_AUTOUPDATER_BRANCH}.manifest
+ $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest
-${GLUON_BUILD_DIR}:
- mkdir -p ${GLUON_BUILD_DIR}
+$(GLUON_BUILD_DIR):
+ mkdir -p $(GLUON_BUILD_DIR)
# Note: "|" means "order only", e.g. "do not care about folder timestamps"
# https://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Prerequisite-Types.html
-${GLUON_BUILD_DIR}/.git: | ${GLUON_BUILD_DIR}
- git init ${GLUON_BUILD_DIR}
- cd ${GLUON_BUILD_DIR} && git remote add origin ${GLUON_GIT_URL}
+$(GLUON_BUILD_DIR)/.git: | $(GLUON_BUILD_DIR)
+ git init $(GLUON_BUILD_DIR)
+ cd $(GLUON_BUILD_DIR) && git remote add origin $(GLUON_GIT_URL)
-gluon-update: | ${GLUON_BUILD_DIR}/.git
- cd ${GLUON_BUILD_DIR} && git fetch --tags origin ${GLUON_GIT_REF}
- cd ${GLUON_BUILD_DIR} && git reset --hard FETCH_HEAD
- cd ${GLUON_BUILD_DIR} && git clean -fd
+gluon-update: | $(GLUON_BUILD_DIR)/.git
+ cd $(GLUON_BUILD_DIR) && git fetch --tags origin $(GLUON_GIT_REF)
+ cd $(GLUON_BUILD_DIR) && git reset --hard FETCH_HEAD
+ cd $(GLUON_BUILD_DIR) && git clean -fd
gluon-prepare: gluon-update
make gluon-patch
- ln -sfT .. ${GLUON_BUILD_DIR}/site
- ${GLUON_MAKE} update
+ ln -sfT .. $(GLUON_BUILD_DIR)/site
+ $(GLUON_MAKE) update
gluon-patch:
echo "Applying Patches ..."
- (cd ${GLUON_BUILD_DIR})
+ (cd $(GLUON_BUILD_DIR))
if [ `git branch --list patched` ]; then \
(git branch -D patched) \
fi
- (cd ${GLUON_BUILD_DIR}; git checkout -B patching)
+ (cd $(GLUON_BUILD_DIR); git checkout -B patching)
if [ -d "gluon-build/site/patches" -a "gluon-build/site/patches/*.patch" ]; then \
- (cd ${GLUON_BUILD_DIR}; git apply --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose site/patches/*.patch) || ( \
- cd ${GLUON_BUILD_DIR}; \
+ (cd $(GLUON_BUILD_DIR); git apply --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose site/patches/*.patch) || ( \
+ cd $(GLUON_BUILD_DIR); \
git clean -fd; \
git checkout -B patched; \
git branch -D patching; \
exit 1 \
) \
fi
- (cd ${GLUON_BUILD_DIR}; git branch -M patched)
+ (cd $(GLUON_BUILD_DIR); git branch -M patched)
gluon-clean:
- rm -rf ${GLUON_BUILD_DIR}
+ rm -rf $(GLUON_BUILD_DIR)
output-clean:
mkdir -p output/
From c8e177de4172be0701a30e5fc4f461f74871d69c Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 05:36:09 +0200
Subject: [PATCH 057/129] Makefile: resort sections
sort targets more chronologically
presort variables for later commits
---
Makefile | 46 +++++++++++++++++++++++-----------------------
1 file changed, 23 insertions(+), 23 deletions(-)
diff --git a/Makefile b/Makefile
index 88b14e2..3e62499 100644
--- a/Makefile
+++ b/Makefile
@@ -1,12 +1,12 @@
-GLUON_BUILD_DIR := gluon-build
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
GLUON_GIT_REF := v2022.1.4
+GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ')
+GLUON_BUILD_DIR := gluon-build
PATCH_DIR := $(GLUON_BUILD_DIR)/site/patches
SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key
OPKG_KEY_BUILD_DIR ?= $(HOME)/.key-build
-GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ')
GLUON_AUTOUPDATER_BRANCH := stable
ifneq (,$(shell git describe --exact-match --tags 2>/dev/null))
@@ -27,9 +27,6 @@ GLUON_MAKE := $(MAKE) -j $(JOBS) --no-print-directory -C $(GLUON_BUILD_DIR) \
GLUON_AUTOUPDATER_BRANCH=$(GLUON_AUTOUPDATER_BRANCH) \
GLUON_AUTOUPDATER_ENABLED=$(GLUON_AUTOUPDATER_ENABLED)
-all: info
- $(MAKE) manifest
-
info:
@echo
@echo '#########################'
@@ -37,24 +34,6 @@ info:
@echo '# Building release $(GLUON_RELEASE) for branch $(GLUON_AUTOUPDATER_BRANCH)'
@echo
-build: gluon-prepare output-clean
- cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true
- for target in $(GLUON_TARGETS); do \
- echo ""Building target $$target""; \
- $(GLUON_MAKE) download all GLUON_TARGET="$$target" CONFIG_JSON_ADD_IMAGE_INFO=1; \
- done
- mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages
- cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/
-
-manifest: build
- for branch in experimental beta stable; do \
- $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\
- done
- mv -f $(GLUON_BUILD_DIR)/output/* ./output/
-
-sign: manifest
- $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest
-
$(GLUON_BUILD_DIR):
mkdir -p $(GLUON_BUILD_DIR)
@@ -69,6 +48,27 @@ gluon-update: | $(GLUON_BUILD_DIR)/.git
cd $(GLUON_BUILD_DIR) && git reset --hard FETCH_HEAD
cd $(GLUON_BUILD_DIR) && git clean -fd
+all: info
+ $(MAKE) manifest
+
+sign: manifest
+ $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest
+
+manifest: build
+ for branch in experimental beta stable; do \
+ $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\
+ done
+ mv -f $(GLUON_BUILD_DIR)/output/* ./output/
+
+build: gluon-prepare output-clean
+ cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true
+ for target in $(GLUON_TARGETS); do \
+ echo ""Building target $$target""; \
+ $(GLUON_MAKE) download all GLUON_TARGET="$$target" CONFIG_JSON_ADD_IMAGE_INFO=1; \
+ done
+ mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages
+ cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/
+
gluon-prepare: gluon-update
make gluon-patch
ln -sfT .. $(GLUON_BUILD_DIR)/site
From 1e43d340eceeab421f8ae52760980091b5826f1e Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 06:06:31 +0200
Subject: [PATCH 058/129] Makefile: replace " by '
---
Makefile | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
index 3e62499..d87a004 100644
--- a/Makefile
+++ b/Makefile
@@ -63,8 +63,8 @@ manifest: build
build: gluon-prepare output-clean
cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true
for target in $(GLUON_TARGETS); do \
- echo ""Building target $$target""; \
- $(GLUON_MAKE) download all GLUON_TARGET="$$target" CONFIG_JSON_ADD_IMAGE_INFO=1; \
+ echo ''Building target $$target''; \
+ $(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \
done
mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages
cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/
@@ -75,13 +75,13 @@ gluon-prepare: gluon-update
$(GLUON_MAKE) update
gluon-patch:
- echo "Applying Patches ..."
+ echo 'Applying Patches ...'
(cd $(GLUON_BUILD_DIR))
if [ `git branch --list patched` ]; then \
(git branch -D patched) \
fi
(cd $(GLUON_BUILD_DIR); git checkout -B patching)
- if [ -d "gluon-build/site/patches" -a "gluon-build/site/patches/*.patch" ]; then \
+ if [ -d 'gluon-build/site/patches' -a 'gluon-build/site/patches/*.patch' ]; then \
(cd $(GLUON_BUILD_DIR); git apply --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose site/patches/*.patch) || ( \
cd $(GLUON_BUILD_DIR); \
git clean -fd; \
From 47c429680a2345885b4cb0e63c59ac058c08ec1c Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 06:10:53 +0200
Subject: [PATCH 059/129] Makefile: rework how GLUON_MAKE is called
call GLUON_MAKE as a sub make process
set MAKEFLAGS instead of adding parameters to the command line
stop printing directory changes
synchronize output, useful for parallel execution (jobs) and logging
fix bug with calculation of jobs (available threads to use by make):
- count with grep instead of wc
- only count lines that start with "processor": ^processor
alternatively we could've switched to "nproc" instead
remove GLUON_AUTOUPDATER_BRANCH, default is stable anyways
two variables were move to site.mk by cb208a620c0521703645692d8690d9d5a50b3207
- GLUON_AUTOUPDATER_ENABLED
- BROKEN
remove them
export GLUON_RELEASE
export and set GLUON_SITEDIR for GLUON_MAKE
instead of creating a symbolic link to site dir during gluon_prepare
adjust PATCH_DIR
site.mk sets GLUON_OUTPUTDIR > stop moving files after target manifest
GLUON_MAKE builds right into the output folder in the GLUON_SITEDIR
---
Makefile | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/Makefile b/Makefile
index d87a004..93211d3 100644
--- a/Makefile
+++ b/Makefile
@@ -3,29 +3,27 @@ GLUON_GIT_REF := v2022.1.4
GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ')
GLUON_BUILD_DIR := gluon-build
-PATCH_DIR := $(GLUON_BUILD_DIR)/site/patches
+export GLUON_SITEDIR := ..
+PATCH_DIR := patches
SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key
OPKG_KEY_BUILD_DIR ?= $(HOME)/.key-build
-GLUON_AUTOUPDATER_BRANCH := stable
-
ifneq (,$(shell git describe --exact-match --tags 2>/dev/null))
- GLUON_AUTOUPDATER_ENABLED := 1
GLUON_RELEASE := $(shell git describe --tags 2>/dev/null)
else
- GLUON_AUTOUPDATER_ENABLED := 1
EXP_FALLBACK = $(shell date '+%Y%m%d')
BUILD_NUMBER ?= $(EXP_FALLBACK)
GLUON_RELEASE := $(shell git describe --tags)~exp$(BUILD_NUMBER)
endif
+export GLUON_RELEASE
-JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l)
+## Setup MAKE
+JOBS ?= $(shell cat /proc/cpuinfo | grep -c ^processor)
+MAKEFLAGS += -j$(JOBS)
+MAKEFLAGS += --no-print-directory
+MAKEFLAGS += --output-sync
-GLUON_MAKE := $(MAKE) -j $(JOBS) --no-print-directory -C $(GLUON_BUILD_DIR) \
- BROKEN=1 \
- GLUON_RELEASE=$(GLUON_RELEASE) \
- GLUON_AUTOUPDATER_BRANCH=$(GLUON_AUTOUPDATER_BRANCH) \
- GLUON_AUTOUPDATER_ENABLED=$(GLUON_AUTOUPDATER_ENABLED)
+GLUON_MAKE = $(MAKE) -C $(GLUON_BUILD_DIR)
info:
@echo
@@ -54,15 +52,18 @@ all: info
sign: manifest
$(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest
+# Note: $(GLUON_MAKE) is a recursive variable so it doesn't count as a $(MAKE).
+# "+" tells MAKE that there is another $(MAKE) in the following shell script.
+# This allows communication of MAKEFLAGS like -j to submake.
+# https://stackoverflow.com/a/60706372/2721478
manifest: build
- for branch in experimental beta stable; do \
+ +for branch in experimental beta stable; do \
$(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\
done
- mv -f $(GLUON_BUILD_DIR)/output/* ./output/
build: gluon-prepare output-clean
cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true
- for target in $(GLUON_TARGETS); do \
+ +for target in $(GLUON_TARGETS); do \
echo ''Building target $$target''; \
$(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \
done
@@ -71,8 +72,7 @@ build: gluon-prepare output-clean
gluon-prepare: gluon-update
make gluon-patch
- ln -sfT .. $(GLUON_BUILD_DIR)/site
- $(GLUON_MAKE) update
+ +$(GLUON_MAKE) update
gluon-patch:
echo 'Applying Patches ...'
From 451e854a218c3cc7d299a613fd18ef5862c64d49 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 06:22:27 +0200
Subject: [PATCH 060/129] Makefile: redo GLUON_RELEASE, error for missing git
tag
---
Makefile | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
index 93211d3..45bdf0c 100644
--- a/Makefile
+++ b/Makefile
@@ -8,15 +8,24 @@ PATCH_DIR := patches
SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key
OPKG_KEY_BUILD_DIR ?= $(HOME)/.key-build
+
+## Create version scheme
+EXP_FALLBACK = $(shell date '+%Y%m%d')
+BUILD_NUMBER ?= $(EXP_FALLBACK)
+GIT_TAG := $(shell git describe --tags 2>/dev/null)
+ifeq (,$(GIT_TAG))
+ifndef GLUON_RELEASE
+$(error Set GLUON_RELEASE or create a git tag)
+endif
+endif
ifneq (,$(shell git describe --exact-match --tags 2>/dev/null))
- GLUON_RELEASE := $(shell git describe --tags 2>/dev/null)
+ GLUON_RELEASE ?= $(GIT_TAG)
else
- EXP_FALLBACK = $(shell date '+%Y%m%d')
- BUILD_NUMBER ?= $(EXP_FALLBACK)
- GLUON_RELEASE := $(shell git describe --tags)~exp$(BUILD_NUMBER)
+ GLUON_RELEASE ?= $(GIT_TAG)~exp$(BUILD_NUMBER)
endif
export GLUON_RELEASE
+
## Setup MAKE
JOBS ?= $(shell cat /proc/cpuinfo | grep -c ^processor)
MAKEFLAGS += -j$(JOBS)
From a077f0cda2214b0cba36f2a7212e1ed9b23f9e98 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 06:25:36 +0200
Subject: [PATCH 061/129] Makefile: redo info section
list useful information for debugging:
- GLUON_RELEASE, remove autoupdater branch
- TARGETS and DEVICES, if we limit them via command line
- MAKEFLAGS
- git url and ref
- number of patch files
Show info on every execution except of cleaning
---
Makefile | 47 +++++++++++++++++++++++++++++++++++++++--------
1 file changed, 39 insertions(+), 8 deletions(-)
diff --git a/Makefile b/Makefile
index 45bdf0c..982f385 100644
--- a/Makefile
+++ b/Makefile
@@ -34,12 +34,42 @@ MAKEFLAGS += --output-sync
GLUON_MAKE = $(MAKE) -C $(GLUON_BUILD_DIR)
-info:
- @echo
- @echo '#########################'
- @echo '# FFAC Firmware build'
- @echo '# Building release $(GLUON_RELEASE) for branch $(GLUON_AUTOUPDATER_BRANCH)'
- @echo
+
+## Build strings for INFO
+define newline
+
+
+endef
+ifneq (,$(filter GLUON_TARGETS%,$(MAKEOVERRIDES)))
+ TARGETS_INFO := $(newline)\# for target(s) '$(GLUON_TARGETS)'
+endif
+ifneq (,$(filter GLUON_DEVICES%,$(MAKEOVERRIDES)))
+ DEVICE_INFO := $(newline)\# for device(s) '$(GLUON_DEVICES)'
+endif
+
+
+## Info section
+define INFO :=
+
+#########################
+# FFAC Firmware build
+# building release '$(GLUON_RELEASE)'$(TARGETS_INFO)$(DEVICE_INFO)
+#########################
+# MAKEFLAGS:
+# $(MAKEFLAGS)
+#########################
+# git url: $(GLUON_GIT_URL)
+# git ref: $(GLUON_GIT_REF)
+#########################
+# Found $(shell ls -1 $(PATCH_DIR) 2>/dev/null | wc -l) patches
+#########################
+
+endef
+# show info section for all make calls except the filtered ones
+ifneq (,$(filter-out gluon-clean output-clean clean,$(MAKECMDGOALS)))
+$(info $(INFO))
+endif
+
$(GLUON_BUILD_DIR):
mkdir -p $(GLUON_BUILD_DIR)
@@ -55,8 +85,9 @@ gluon-update: | $(GLUON_BUILD_DIR)/.git
cd $(GLUON_BUILD_DIR) && git reset --hard FETCH_HEAD
cd $(GLUON_BUILD_DIR) && git clean -fd
-all: info
- $(MAKE) manifest
+
+## Build rules
+all: manifest
sign: manifest
$(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest
From 8eef01619b9f5030ff65d6c5d24da33dbe815c3a Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 06:34:26 +0200
Subject: [PATCH 062/129] Makefile: move git refs into release.mk
advantage: makefile stays the same across branches/releases
---
Makefile | 4 ++--
release.mk | 2 ++
2 files changed, 4 insertions(+), 2 deletions(-)
create mode 100644 release.mk
diff --git a/Makefile b/Makefile
index 982f385..6de18c7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
-GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := v2022.1.4
+## Setup Build environment variables
+include release.mk
GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ')
GLUON_BUILD_DIR := gluon-build
diff --git a/release.mk b/release.mk
new file mode 100644
index 0000000..6692735
--- /dev/null
+++ b/release.mk
@@ -0,0 +1,2 @@
+GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
+GLUON_GIT_REF := v2022.1.4
From 997360de5a44f94fcd04535324e5594ccce73ccf Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 06:35:43 +0200
Subject: [PATCH 063/129] Makefile: rename targets to targets.mk
substitute newlines with spaces in targets.mk
---
Makefile | 2 +-
targets => targets.mk | 9 +++++++++
2 files changed, 10 insertions(+), 1 deletion(-)
rename targets => targets.mk (73%)
diff --git a/Makefile b/Makefile
index 6de18c7..593cbcd 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
## Setup Build environment variables
include release.mk
-GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ')
+include targets.mk
GLUON_BUILD_DIR := gluon-build
export GLUON_SITEDIR := ..
diff --git a/targets b/targets.mk
similarity index 73%
rename from targets
rename to targets.mk
index 29a74e7..f2c217a 100644
--- a/targets
+++ b/targets.mk
@@ -1,3 +1,4 @@
+define GLUON_TARGETS :=
ath79-generic
ath79-nand
ath79-mikrotik
@@ -20,6 +21,14 @@ x86-generic
x86-geode
x86-legacy
x86-64
+endef
+
+ifneq ($(BROKEN),0)
+define GLUON_TARGETS +=
bcm27xx-bcm2710
bcm27xx-bcm2711
mvebu-cortexa9
+endef
+endif
+
+GLUON_TARGETS := $(GLUON_TARGETS:\n= )
From 2fbeb9e86fe99042b98528e381f50e55ef3c015b Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 06:37:01 +0200
Subject: [PATCH 064/129] Makefile: rename: OPKG_KEY_BUILD_DIR >
OPKG_KEY_FOLDER
---
Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 593cbcd..a2cf4d4 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@ GLUON_BUILD_DIR := gluon-build
export GLUON_SITEDIR := ..
PATCH_DIR := patches
SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key
-OPKG_KEY_BUILD_DIR ?= $(HOME)/.key-build
+OPKG_KEY_FOLDER ?= $(HOME)/.key-build
## Create version scheme
@@ -102,7 +102,7 @@ manifest: build
done
build: gluon-prepare output-clean
- cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true
+ cp OPKG_KEY_FOLDER/* $(GLUON_BUILD_DIR)/openwrt || true
+for target in $(GLUON_TARGETS); do \
echo ''Building target $$target''; \
$(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \
From 4cfc83ae8f0e5888623b58c16ad647e07a5cdbc1 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 06:38:09 +0200
Subject: [PATCH 065/129] Makefile: explain available Custom Options at the top
of the Makefile
---
Makefile | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/Makefile b/Makefile
index a2cf4d4..cbf567b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,26 @@
+#########################
+#### Custom Options: ####
+#########################
+# GLUON_RELEASE - customize full release name
+# BUILD_NUMBER - customize only the build number of the release name
+#########################
+# GLUON_TARGETS - choose which targets to build (delimited by spaces) e.g. "ath79-generic ramips-mt7621"
+# GLUON_DEVICES - choose which devices to build (delimited by spaces) e.g. "avm-fritz-box-4020 tp-link-tl-wdr4300-v1", moves images to devices/ instead of output/, no packages are copied to the devices/ folder
+# BROKEN - set to 0 to disable building devices marked as broken
+#########################
+# GLUON_PRIORITY - set update priority (integer)
+# GLUON_AUTOUPDATER_ENABLED - set to 0 to disable the autoupdater
+# GLUON_LANGS - set to subset of (en de fr) to include less languages
+#########################
+# JOBS - set number of threads manually
+# GLUON_DEBUG set to 1 to include debug symbols (requires at least 16MB of flash, advice: also set GLUON_DEVICES, run 'make clean' before executing if you care for all packages to be rebuilt with debug symbols)
+# GLUON_MINIFY set to 0 to disable minification of scripts (lua etc.)
+#########################
+# SECRET_KEY_FILE - Path to your ECDSA signing key
+# OPKG_KEY_FOLDER - Path to your OpenWrt package signing key
+#########################
+
+
## Setup Build environment variables
include release.mk
include targets.mk
From 1f34149327b5a02506a808e51c46a4113d85638b Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 06:49:52 +0200
Subject: [PATCH 066/129] Makefile: rework gluon-update and gluon-patch
simplify calling git in a subfolder with GLUON_GIT
gluon-update: checkout master, hide&prevent errors when branch empty
list PATCH_FILES with variable for git apply
rename gluon-patch to ffac-patch
hide patch commands from being printed
rework git apply so it runs from sitedir but in a subdirectory
---
Makefile | 46 ++++++++++++++++++++++++++--------------------
1 file changed, 26 insertions(+), 20 deletions(-)
diff --git a/Makefile b/Makefile
index cbf567b..ae24dac 100644
--- a/Makefile
+++ b/Makefile
@@ -56,6 +56,7 @@ MAKEFLAGS += --no-print-directory
MAKEFLAGS += --output-sync
GLUON_MAKE = $(MAKE) -C $(GLUON_BUILD_DIR)
+GLUON_GIT = git -C $(GLUON_BUILD_DIR)
## Build strings for INFO
@@ -94,19 +95,25 @@ $(info $(INFO))
endif
+## Prepare folders
$(GLUON_BUILD_DIR):
mkdir -p $(GLUON_BUILD_DIR)
+ @echo
# Note: "|" means "order only", e.g. "do not care about folder timestamps"
+# In other words: call requirement when file/folder doesn't exist instead of when it is outdated.
+# e.g. after running gluon-clean but not on every run.
# https://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Prerequisite-Types.html
$(GLUON_BUILD_DIR)/.git: | $(GLUON_BUILD_DIR)
- git init $(GLUON_BUILD_DIR)
- cd $(GLUON_BUILD_DIR) && git remote add origin $(GLUON_GIT_URL)
+ @git init $(GLUON_BUILD_DIR) -b master
+ @$(GLUON_GIT) remote add origin $(GLUON_GIT_URL)
gluon-update: | $(GLUON_BUILD_DIR)/.git
- cd $(GLUON_BUILD_DIR) && git fetch --tags origin $(GLUON_GIT_REF)
- cd $(GLUON_BUILD_DIR) && git reset --hard FETCH_HEAD
- cd $(GLUON_BUILD_DIR) && git clean -fd
+ @$(GLUON_GIT) fetch --tags origin $(GLUON_GIT_REF)
+ @$(GLUON_GIT) checkout master >/dev/null 2>&1 || exit 0
+ @$(GLUON_GIT) reset --hard FETCH_HEAD
+ @$(GLUON_GIT) clean -fd
+ @echo
## Build rules
@@ -134,26 +141,25 @@ build: gluon-prepare output-clean
cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/
gluon-prepare: gluon-update
- make gluon-patch
+ make ffac-patch
+$(GLUON_MAKE) update
-gluon-patch:
- echo 'Applying Patches ...'
- (cd $(GLUON_BUILD_DIR))
- if [ `git branch --list patched` ]; then \
- (git branch -D patched) \
- fi
- (cd $(GLUON_BUILD_DIR); git checkout -B patching)
- if [ -d 'gluon-build/site/patches' -a 'gluon-build/site/patches/*.patch' ]; then \
- (cd $(GLUON_BUILD_DIR); git apply --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose site/patches/*.patch) || ( \
- cd $(GLUON_BUILD_DIR); \
- git clean -fd; \
- git checkout -B patched; \
- git branch -D patching; \
+PATCH_FILES = $(shell find $(PATCH_DIR)/ -type f -name '*.patch')
+ffac-patch:
+ @echo 'Applying patches…'
+ @if [ `$(GLUON_GIT) branch --list patched` ]; then \
+ $(GLUON_GIT) branch -D patched; \
+ fi
+ @$(GLUON_GIT) checkout -B patching
+ @if [ -d "$(PATCH_DIR)" -a "$(PATCH_DIR)/*.patch" ]; then \
+ (git apply --directory=$(GLUON_BUILD_DIR) --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose $(PATCH_FILES)) || ( \
+ $(GLUON_GIT) clean -fd; \
+ $(GLUON_GIT) checkout -B patched; \
+ $(GLUON_GIT) branch -D patching; \
exit 1 \
) \
fi
- (cd $(GLUON_BUILD_DIR); git branch -M patched)
+ @$(GLUON_GIT) branch -M patched
gluon-clean:
rm -rf $(GLUON_BUILD_DIR)
From 9e1be0ee686def6e3c84302c9dbef5ef74c52972 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 07:34:39 +0200
Subject: [PATCH 067/129] Makefile: redo sign, for loop over all manifests
requires SECRET_KEY_FILE to exist to run
control, what is being echoed, hide commands
---
Makefile | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index ae24dac..415d8ef 100644
--- a/Makefile
+++ b/Makefile
@@ -119,8 +119,12 @@ gluon-update: | $(GLUON_BUILD_DIR)/.git
## Build rules
all: manifest
-sign: manifest
- $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest
+sign: manifest | $(SECRET_KEY_FILE)
+ @for branch in experimental beta stable; do \
+ echo ''; \
+ echo ''Signing $$branch.manifest''; \
+ $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$$branch.manifest; \
+ done
# Note: $(GLUON_MAKE) is a recursive variable so it doesn't count as a $(MAKE).
# "+" tells MAKE that there is another $(MAKE) in the following shell script.
From f97b3a26e21e1209d78025d2795ca447ab5ea5de Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 07:40:36 +0200
Subject: [PATCH 068/129] Makefile: manifest explain what's being done (echo)
hide the command that is being executed
---
Makefile | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 415d8ef..4ba35e6 100644
--- a/Makefile
+++ b/Makefile
@@ -131,8 +131,10 @@ sign: manifest | $(SECRET_KEY_FILE)
# This allows communication of MAKEFLAGS like -j to submake.
# https://stackoverflow.com/a/60706372/2721478
manifest: build
- +for branch in experimental beta stable; do \
- $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\
+ +@for branch in experimental beta stable; do \
+ echo ''; \
+ echo ''Creating $$branch manifest''; \
+ $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch; \
done
build: gluon-prepare output-clean
From b8af7a0c1a1e1063bbc36a6478b15f09bc47a631 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 07:52:38 +0200
Subject: [PATCH 069/129] Makefile: rework gluon-prepare
split gluon-prepare
only update gluon modules when files where changed that require doing so
- patch files
- release.mk
- modules
- the checked out git hash of GLUON_BUILD_DIR changed due to gluon-update
add FORCE target to force comparison of checked out git hash with file on every run
only copy opkg keys to GLUON_BUILD_DIR/openwrt/ when updating gluon modules
> move the line from target build to .modules
only copy opkg keys when they exist in OPKG_KEY_FOLDER
only copy opkg keys when none exist in GLUON_BUILD_DIR/openwrt/
make sure .modules gets rerun, when it's canceled during execution
---
.gitignore | 2 ++
Makefile | 25 ++++++++++++++++++++-----
2 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/.gitignore b/.gitignore
index 66f2fc8..267274d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@ gluon-build
output
*.orig
*.swp
+.cmp-git-head
+.modules
diff --git a/Makefile b/Makefile
index 4ba35e6..0b62160 100644
--- a/Makefile
+++ b/Makefile
@@ -138,7 +138,6 @@ manifest: build
done
build: gluon-prepare output-clean
- cp OPKG_KEY_FOLDER/* $(GLUON_BUILD_DIR)/openwrt || true
+for target in $(GLUON_TARGETS); do \
echo ''Building target $$target''; \
$(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \
@@ -146,12 +145,10 @@ build: gluon-prepare output-clean
mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages
cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/
-gluon-prepare: gluon-update
- make ffac-patch
- +$(GLUON_MAKE) update
+gluon-prepare: gluon-update ffac-patch | .modules
PATCH_FILES = $(shell find $(PATCH_DIR)/ -type f -name '*.patch')
-ffac-patch:
+ffac-patch: gluon-update
@echo 'Applying patches…'
@if [ `$(GLUON_GIT) branch --list patched` ]; then \
$(GLUON_GIT) branch -D patched; \
@@ -167,11 +164,29 @@ ffac-patch:
fi
@$(GLUON_GIT) branch -M patched
+.cmp-git-head: FORCE | ffac-patch
+ @$(GLUON_GIT) rev-parse @{0} | cmp -s '$@' || $(GLUON_GIT) rev-parse @{0} > '$@'
+
+.modules: release.mk modules .cmp-git-head $(PATCH_DIR) $(PATCH_FILES) | ffac-patch
+ @echo
+ @echo Updating Gluon modules…
+ @rm -f .modules
+ +$(GLUON_MAKE) update
+ @if [ -f "$(OPKG_KEY_FOLDER)/key-build" ] && [ ! -f "$(GLUON_BUILD_DIR)/openwrt/key-build" ]; then \
+ echo 'Installing your opkg keys'; \
+ cp $(OPKG_KEY_FOLDER)/key-build* $(GLUON_BUILD_DIR)/openwrt/; \
+ fi
+ @touch .modules
+
gluon-clean:
+ rm -f .modules
rm -rf $(GLUON_BUILD_DIR)
+ @echo
output-clean:
mkdir -p output/
rm -rf output/*
clean: gluon-clean output-clean
+
+FORCE: ;
From c6816c6bb2a40da3986396fe9713a941c874a44c Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 08:02:41 +0200
Subject: [PATCH 070/129] Makefile: site.conf: rework build, handling of opkg
packages
hide ugly for loop and if commands
when no keys exist in OPKG_KEY_FOLDER, copy over freshly generated
opkg keys from GLUON_BUILD_DIR/openwrt/ to OPKG_KEY_FOLDER
move opkg packages into folder with OPENWRT_BRANCH in its name
use rsync for copying packages
exclude packages available in openwrt feeds
declare additional gluon opkg feeds in site.conf
---
Makefile | 12 +++++++++---
site.conf | 3 +++
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index 0b62160..3ad5dca 100644
--- a/Makefile
+++ b/Makefile
@@ -138,12 +138,18 @@ manifest: build
done
build: gluon-prepare output-clean
- +for target in $(GLUON_TARGETS); do \
+ +@for target in $(GLUON_TARGETS); do \
+ echo ''; \
echo ''Building target $$target''; \
$(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \
done
- mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages
- cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/
+ @if [ ! -f "$(OPKG_KEY_FOLDER)/key-build" ]; then \
+ echo 'Copying new opkg keys to $(OPKG_KEY_FOLDER)'; \
+ cp $(GLUON_BUILD_DIR)/openwrt/key-build* $(OPKG_KEY_FOLDER)/; \
+ fi
+ $(eval PACKAGES_BRANCH := $(subst OPENWRT_BRANCH=openwrt,packages,$(shell cat $(GLUON_BUILD_DIR)/modules | grep OPENWRT_BRANCH)))
+ mkdir -p output/packages/$(PACKAGES_BRANCH)
+ rsync -a --exclude '*/base' --exclude '*/luci' --exclude '*/packages' --exclude '*/routing' --exclude '*/telephony' $(GLUON_BUILD_DIR)/openwrt/bin/packages/ output/packages/$(PACKAGES_BRANCH)/
gluon-prepare: gluon-update ffac-patch | .modules
diff --git a/site.conf b/site.conf
index 4873028..27dafd3 100644
--- a/site.conf
+++ b/site.conf
@@ -8,6 +8,9 @@
opkg = {
extra = {
modules = 'http://opkg.ffac.rocks/modules/gluon-%GS-%GR/%S',
+ ffac = 'http://opkg.ffac.rocks/packages-%v/%A/ffac',
+ gluon = 'http://opkg.ffac.rocks/packages-%v/%A/gluon',
+ gluon_base = 'http://opkg.ffac.rocks/packages-%v/%A/gluon_base',
},
},
From b665d322be90b6b358cb4ee4f49e4d2279a5fb55 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 08:08:32 +0200
Subject: [PATCH 071/129] Makefile: support GLUON_DEVICES better
when it's set:
- disable make sign
- don't move packages to devices folder in build target
- create devices folder during output-clean (build requirement)
- set GLUON_OUTPUTDIR to devices folder
---
.gitignore | 1 +
Makefile | 19 ++++++++++++++++++-
site.mk | 3 +++
3 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore
index 267274d..d5750ac 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
gluon-build
output
+devices
*.orig
*.swp
.cmp-git-head
diff --git a/Makefile b/Makefile
index 3ad5dca..ed08553 100644
--- a/Makefile
+++ b/Makefile
@@ -120,6 +120,10 @@ gluon-update: | $(GLUON_BUILD_DIR)/.git
all: manifest
sign: manifest | $(SECRET_KEY_FILE)
+ifndef GLUON_DEVICES
+ echo "make sign hasn't been designed to work while GLUON_DEVICES is set."
+ exit 1
+endif
@for branch in experimental beta stable; do \
echo ''; \
echo ''Signing $$branch.manifest''; \
@@ -147,9 +151,11 @@ build: gluon-prepare output-clean
echo 'Copying new opkg keys to $(OPKG_KEY_FOLDER)'; \
cp $(GLUON_BUILD_DIR)/openwrt/key-build* $(OPKG_KEY_FOLDER)/; \
fi
+ifndef GLUON_DEVICES
$(eval PACKAGES_BRANCH := $(subst OPENWRT_BRANCH=openwrt,packages,$(shell cat $(GLUON_BUILD_DIR)/modules | grep OPENWRT_BRANCH)))
mkdir -p output/packages/$(PACKAGES_BRANCH)
rsync -a --exclude '*/base' --exclude '*/luci' --exclude '*/packages' --exclude '*/routing' --exclude '*/telephony' $(GLUON_BUILD_DIR)/openwrt/bin/packages/ output/packages/$(PACKAGES_BRANCH)/
+endif
gluon-prepare: gluon-update ffac-patch | .modules
@@ -184,15 +190,26 @@ ffac-patch: gluon-update
fi
@touch .modules
+
+## Cleanup rules
+devices-clean:
+ mkdir -p devices/
+ rm -rf devices/*
+
gluon-clean:
rm -f .modules
rm -rf $(GLUON_BUILD_DIR)
@echo
output-clean:
+ifdef GLUON_DEVICES
+ mkdir -p devices/
+else
mkdir -p output/
rm -rf output/*
+endif
+ @echo
-clean: gluon-clean output-clean
+clean: gluon-clean output-clean devices-clean
FORCE: ;
diff --git a/site.mk b/site.mk
index aec6860..010e1db 100644
--- a/site.mk
+++ b/site.mk
@@ -54,6 +54,9 @@ endif
GLUON_DEPRECATED := upgrade
GLUON_OUTPUTDIR := ${GLUON_SITEDIR}/output
+ifdef GLUON_DEVICES
+ GLUON_OUTPUTDIR := $(GLUON_SITEDIR)/devices
+endif
GLUON_PACKAGEDIR := $(GLUON_OUTPUTDIR)/packages/modules
# Default priority for updates.
From 656f9e0c5889d2617e7be62d02a7c389d30a527c Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 08:22:37 +0200
Subject: [PATCH 072/129] Makefile: add a way to update our patches
also delegates GLUON_MAKE to subsequently update Gluon patches
just in case our patch patches OpenWrt or another Gluon module
---
Makefile | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/Makefile b/Makefile
index ed08553..f039a41 100644
--- a/Makefile
+++ b/Makefile
@@ -190,6 +190,37 @@ ffac-patch: gluon-update
fi
@touch .modules
+update-patches: gluon-update | .modules
+ @echo
+ @echo 'Updating our patches…'
+ @if [ `$(GLUON_GIT) branch --list refresh` ]; then \
+ $(GLUON_GIT) branch -D refresh; \
+ fi
+ @$(GLUON_GIT) restore .
+ @$(GLUON_GIT) clean -fd -q
+ @$(GLUON_GIT) checkout -B refreshing
+ @$(GLUON_GIT) commit --allow-empty -m "Patches" -q
+ +@for file in $(PATCH_FILES); do \
+ echo ''; \
+ echo ''Refreshing $$file''; \
+ (git apply --directory=$(GLUON_BUILD_DIR) --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose $$file) && true;\
+ EXIT_CODE=$$?; \
+ if [ $$EXIT_CODE -ne 0 ]; then \
+ echo ''Error applying patch $$file''; \
+ $(GLUON_GIT) clean -fd -q; \
+ $(GLUON_GIT) checkout -B refresh; \
+ $(GLUON_GIT) branch -D refreshing; \
+ break; \
+ else \
+ echo 'Updating Gluon patches'; \
+ $(GLUON_MAKE) update-patches >/dev/null 2>&1; \
+ $(GLUON_GIT) add --all; \
+ $(GLUON_GIT) diff --staged > $$file; \
+ $(GLUON_GIT) commit -a --amend --no-edit -q; \
+ fi; \
+ done; exit $$EXIT_CODE
+ @$(GLUON_GIT) branch -M refresh
+
## Cleanup rules
devices-clean:
From ef9bb00169f2a80e8952177627159bf3fa043f0f Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 08:27:34 +0200
Subject: [PATCH 073/129] Makefile: disable all implicit rules
also don't check for rebuilding "Makefile" before execution
---
Makefile | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Makefile b/Makefile
index f039a41..4508a78 100644
--- a/Makefile
+++ b/Makefile
@@ -243,4 +243,8 @@ endif
clean: gluon-clean output-clean devices-clean
+Makefile: ;
+
FORCE: ;
+
+.SUFFIXES: ;
From 88cf379f01f80378d57d9df446683cdd94cd7665 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 08:28:48 +0200
Subject: [PATCH 074/129] Makefile: add .PHONY target - declare most targets as
phony
phony targets are not files and need to be run on every execution
similar to FORCE but newer style
FORCE needs to stay for the git hash target else it won't work (quirk)
---
.gitignore | 2 +-
Makefile | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore
index d5750ac..bc752a1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,7 @@
gluon-build
output
-devices
*.orig
*.swp
+*.log
.cmp-git-head
.modules
diff --git a/Makefile b/Makefile
index 4508a78..19b3787 100644
--- a/Makefile
+++ b/Makefile
@@ -248,3 +248,5 @@ Makefile: ;
FORCE: ;
.SUFFIXES: ;
+
+.PHONY: all gluon-update sign manifest build gluon-prepare ffac-patch update-patches gluon-clean output-clean
From 2f689b273ad1418c42887a84b55f77ce1152f333 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 08:36:04 +0200
Subject: [PATCH 075/129] .gitignore: hide build.log files
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index bc752a1..2a2ee65 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
gluon-build
output
+devices
*.orig
*.swp
*.log
From 8cdc2404f34cfbc55d03cf396c993da5e0a9908b Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 08:37:23 +0200
Subject: [PATCH 076/129] patches: fix Gluon's Makefile, GLUON_TARGETS
specifically
---
patches/gluon-makefile.patch | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
create mode 100644 patches/gluon-makefile.patch
diff --git a/patches/gluon-makefile.patch b/patches/gluon-makefile.patch
new file mode 100644
index 0000000..3ee2df0
--- /dev/null
+++ b/patches/gluon-makefile.patch
@@ -0,0 +1,18 @@
+diff --git a/Makefile b/Makefile
+index 565a32a0..a39958fc 100644
+--- a/Makefile
++++ b/Makefile
+@@ -111,11 +111,11 @@ update-modules: FORCE
+ update-ci: FORCE
+ @$(GLUON_ENV) scripts/update-ci.sh
+
+-GLUON_TARGETS :=
++override GLUON_TARGETS :=
+
+ define GluonTarget
+ gluon_target := $(1)$$(if $(2),-$(2))
+-GLUON_TARGETS += $$(gluon_target)
++override GLUON_TARGETS += $$(gluon_target)
+ GLUON_TARGET_$$(gluon_target)_BOARD := $(1)
+ GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(2)
+ endef
From 560131b8df4b383e51bf954be74487643a0e246b Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Fri, 11 Aug 2023 07:18:33 +0000
Subject: [PATCH 077/129] run make update-patches
---
patches/gluon-packages.patch | 2 +-
patches/status-page-anonymization.patch | 10 ----------
patches/targets-bcm2711-raspberry-pi-4.patch | 6 +++---
3 files changed, 4 insertions(+), 14 deletions(-)
diff --git a/patches/gluon-packages.patch b/patches/gluon-packages.patch
index 3067221..42e5bbf 100644
--- a/patches/gluon-packages.patch
+++ b/patches/gluon-packages.patch
@@ -1,5 +1,5 @@
diff --git a/modules b/modules
-index 333b29b2..a9d9cd11 100644
+index 333b29b2..2188e92e 100644
--- a/modules
+++ b/modules
@@ -12,5 +12,6 @@ PACKAGES_ROUTING_REPO=https://github.com/openwrt/routing.git
diff --git a/patches/status-page-anonymization.patch b/patches/status-page-anonymization.patch
index 83152a2..2c59f03 100644
--- a/patches/status-page-anonymization.patch
+++ b/patches/status-page-anonymization.patch
@@ -1,13 +1,3 @@
-From 62c19102406a12ad613cb813acbbce0f4641404f Mon Sep 17 00:00:00 2001
-From: Jan Niehusmann
-Date: Sun, 3 Mar 2019 23:36:57 +0100
-Subject: [PATCH] remove owner information from status page
-
----
- .../lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo | 2 +-
- .../luasrc/lib/gluon/status-page/controller/status-page.lua | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
diff --git a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo b/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
index 3f149100..3f3ce8c0 100755
--- a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
diff --git a/patches/targets-bcm2711-raspberry-pi-4.patch b/patches/targets-bcm2711-raspberry-pi-4.patch
index 0c71d24..205f61c 100644
--- a/patches/targets-bcm2711-raspberry-pi-4.patch
+++ b/patches/targets-bcm2711-raspberry-pi-4.patch
@@ -1,6 +1,6 @@
diff --git a/targets/bcm27xx-bcm2711 b/targets/bcm27xx-bcm2711
new file mode 100644
-index 00000000..ba631911
+index 00000000..90420dd0
--- /dev/null
+++ b/targets/bcm27xx-bcm2711
@@ -0,0 +1,9 @@
@@ -14,10 +14,10 @@ index 00000000..ba631911
+ },
+})
diff --git a/targets/targets.mk b/targets/targets.mk
-index 92b58ab8..05a74935 100644
+index 346377ea..e9674f85 100644
--- a/targets/targets.mk
+++ b/targets/targets.mk
-@@ -22,5 +22,6 @@ $(eval $(call GluonTarget,x86,64))
+@@ -25,5 +25,6 @@ $(eval $(call GluonTarget,x86,64))
ifneq ($(BROKEN),)
$(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested
From d1af7c2ac76525f7441516d973b3078f8adedf7d Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Mon, 14 Aug 2023 02:47:40 +0200
Subject: [PATCH 078/129] redo gluon-packages.patch so it can be merged into
other branches
it's now a patch files that gluon applies
this removes the requirement to modify all branches individually
just for adding a script that is run on update
---
patches/gluon-packages.patch | 40 ++++++++++++++++++++++++------------
1 file changed, 27 insertions(+), 13 deletions(-)
diff --git a/patches/gluon-packages.patch b/patches/gluon-packages.patch
index 42e5bbf..c019b23 100644
--- a/patches/gluon-packages.patch
+++ b/patches/gluon-packages.patch
@@ -1,13 +1,27 @@
-diff --git a/modules b/modules
-index 333b29b2..2188e92e 100644
---- a/modules
-+++ b/modules
-@@ -12,5 +12,6 @@ PACKAGES_ROUTING_REPO=https://github.com/openwrt/routing.git
- PACKAGES_ROUTING_BRANCH=openwrt-22.03
- PACKAGES_ROUTING_COMMIT=1cc7676b9f32acc30ec47f15fcb70380d5d6ef01
-
--PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
--PACKAGES_GLUON_COMMIT=29912ec6308fd10b47763b4cf28a638d07f59973
-+PACKAGES_GLUON_REPO=https://github.com/ffac/packages
-+PACKAGES_GLUON_BRANCH="feature/cleanup_opkg_keys"
-+PACKAGES_GLUON_COMMIT=9fe0feadbfd6186e48319c8f68187943fcf69205
+diff --git a/patches/packages/gluon/0001-delete-etc-opkg-keys-on-autoupdater-upgrade-does-trigger-on-autoupdate-after-checking-that-the-image-is-correct.patch b/patches/packages/gluon/0001-delete-etc-opkg-keys-on-autoupdater-upgrade-does-trigger-on-autoupdate-after-checking-that-the-image-is-correct.patch
+new file mode 100644
+index 00000000..ac347e07
+--- /dev/null
++++ b/patches/packages/gluon/0001-delete-etc-opkg-keys-on-autoupdater-upgrade-does-trigger-on-autoupdate-after-checking-that-the-image-is-correct.patch
+@@ -0,0 +1,21 @@
++From: Florian Maurer
++Date: Wed, 14 Jun 2023 09:33:48 +0200
++Subject: delete /etc/opkg/keys on autoupdater upgrade - does trigger on autoupdate after checking that the image is correct
++
++fixes https://github.com/freifunk-gluon/gluon/issues/2665
++
++diff --git a/admin/autoupdater/files/usr/lib/autoupdater/upgrade.d/90delete_keys b/admin/autoupdater/files/usr/lib/autoupdater/upgrade.d/90delete_keys
++new file mode 100755
++index 0000000000000000000000000000000000000000..11fb5143f82e4b6080b88a14237c64f273b12850
++--- /dev/null
+++++ b/admin/autoupdater/files/usr/lib/autoupdater/upgrade.d/90delete_keys
++@@ -0,0 +1,9 @@
+++#!/usr/bin/lua
+++local handle = io.popen("ls /etc/opkg/keys -1")
+++local files = handle:read("*a")
+++handle:close()
+++
+++for file in files:gmatch("[^\r\n]+") do
+++ local filePath = "/etc/opkg/keys/" .. file
+++ os.remove(filePath)
+++end
From 4facd655e9fbb4b1e3543e0f29adffb6609a72c8 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Mon, 14 Aug 2023 08:01:34 +0000
Subject: [PATCH 079/129] Makefile: fix update-patches for module patches
$(GLUON_MAKE) update-patches runs reliably now.
Beforehand it created artifacts if there were
module patches
---
Makefile | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/Makefile b/Makefile
index 19b3787..9d2a221 100644
--- a/Makefile
+++ b/Makefile
@@ -190,33 +190,40 @@ ffac-patch: gluon-update
fi
@touch .modules
-update-patches: gluon-update | .modules
+
+## Patch system
+patch-prepare: gluon-update
+ @echo
+ @echo 'Updating Gluon modules…'
+ +@$(GLUON_MAKE) update >/dev/null 2>&1
+
+update-patches: patch-prepare
@echo
@echo 'Updating our patches…'
@if [ `$(GLUON_GIT) branch --list refresh` ]; then \
$(GLUON_GIT) branch -D refresh; \
fi
- @$(GLUON_GIT) restore .
- @$(GLUON_GIT) clean -fd -q
@$(GLUON_GIT) checkout -B refreshing
@$(GLUON_GIT) commit --allow-empty -m "Patches" -q
+@for file in $(PATCH_FILES); do \
echo ''; \
- echo ''Refreshing $$file''; \
(git apply --directory=$(GLUON_BUILD_DIR) --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose $$file) && true;\
EXIT_CODE=$$?; \
if [ $$EXIT_CODE -ne 0 ]; then \
echo ''Error applying patch $$file''; \
- $(GLUON_GIT) clean -fd -q; \
+ $(GLUON_GIT) clean -fdq; \
$(GLUON_GIT) checkout -B refresh; \
$(GLUON_GIT) branch -D refreshing; \
break; \
else \
- echo 'Updating Gluon patches'; \
- $(GLUON_MAKE) update-patches >/dev/null 2>&1; \
+ if [ `$(GLUON_GIT) status -s patches | head -c1 | grep -E '.'` ]; then \
+ echo 'Refreshing Gluon patches…'; \
+ $(GLUON_MAKE) refresh-patches >/dev/null 2>&1; \
+ fi; \
+ echo ''Refreshing $$file''; \
$(GLUON_GIT) add --all; \
$(GLUON_GIT) diff --staged > $$file; \
- $(GLUON_GIT) commit -a --amend --no-edit -q; \
+ $(GLUON_GIT) commit --amend --no-edit -q; \
fi; \
done; exit $$EXIT_CODE
@$(GLUON_GIT) branch -M refresh
@@ -249,4 +256,4 @@ FORCE: ;
.SUFFIXES: ;
-.PHONY: all gluon-update sign manifest build gluon-prepare ffac-patch update-patches gluon-clean output-clean
+.PHONY: all gluon-update sign manifest build gluon-prepare ffac-patch patch-prepare update-patches gluon-clean output-clean
From c397074898c0d6f05913d0698c6fd3e591b55fd5 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Thu, 17 Aug 2023 03:43:34 +0000
Subject: [PATCH 080/129] Makefile: create & edit patches
---
Makefile | 39 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 9d2a221..6e6ffbe 100644
--- a/Makefile
+++ b/Makefile
@@ -195,8 +195,45 @@ ffac-patch: gluon-update
patch-prepare: gluon-update
@echo
@echo 'Updating Gluon modules…'
+ @rm -f .modules
+@$(GLUON_MAKE) update >/dev/null 2>&1
+patch:
+ @echo
+ @echo 'Creating a new patch from all changes found in $(GLUON_BUILD_DIR)'
+ @echo "Note: This will only create a correct patch, if you ran 'make patch-prepare' or 'make edit-patch' before you applied those changes."
+ @echo
+ @echo 'What should your new .patch file be called?'
+ +@$(GLUON_MAKE) update-patches >/dev/null 2>&1
+ @if [ `$(GLUON_GIT) status -s patches | head -c1 | grep -E '.'` ]; then \
+ echo 'Found changes in Gluon modules and created new .patch files for them.'; \
+ fi
+ @$(GLUON_GIT) add --all
+ @read file; \
+ echo ''Creating $$file.patch containing these changes:''; \
+ $(GLUON_GIT) status -s; \
+ $(GLUON_GIT) diff --staged > $(PATCH_DIR)/$$file.patch; \
+ $(GLUON_GIT) commit --no-edit -m "$$file.patch" -q
+
+edit-patch: patch-prepare
+ @echo
+ @echo 'Available patches:'
+ @ls -1 $(PATCH_DIR) | grep -E '\.patch$'' | sed -e 's/\.patch$///'
+ @echo
+ @echo Which one do you want to edit?
+ +@read file; \
+ if [ ! -f "patches/$$file.patch" ]; then \
+ echo ''Couldn\'t find file: $$file''; \
+ exit 1; \
+ else \
+ git apply --directory=$(GLUON_BUILD_DIR) --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose $(PATCH_DIR)/$$file.patch; \
+ if [ `$(GLUON_GIT) status -s patches | head -c1 | grep -E '.'` ]; then \
+ echo 'Patch contained patches for Gluon modules. Applying said patches…'; \
+ $(GLUON_MAKE) refresh-patches >/dev/null 2>&1; \
+ fi; \
+ echo "You may edit $(GLUON_BUILD_DIR) now. Run 'make patch' once you are finished."; \
+ fi
+
update-patches: patch-prepare
@echo
@echo 'Updating our patches…'
@@ -256,4 +293,4 @@ FORCE: ;
.SUFFIXES: ;
-.PHONY: all gluon-update sign manifest build gluon-prepare ffac-patch patch-prepare update-patches gluon-clean output-clean
+.PHONY: all gluon-update sign manifest build gluon-prepare ffac-patch patch-prepare patch edit-patches update-patches gluon-clean output-clean
From 29c049bbbc0dffee1f1fad4ebbd8e95cc6b885db Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Thu, 17 Aug 2023 13:13:55 +0200
Subject: [PATCH 081/129] site.mk remove duplicate line
---
site.mk | 1 -
1 file changed, 1 deletion(-)
diff --git a/site.mk b/site.mk
index 010e1db..013339c 100644
--- a/site.mk
+++ b/site.mk
@@ -1,5 +1,4 @@
## gluon site.mk Freifunk Regio Aachen
-GLUON_DEPRECATED=upgrade
## GLUON_FEATURES
# Specify Gluon features/packages to enable;
From d58a9e372cdef7279c699d601bf5831d609612d0 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Sun, 20 Aug 2023 07:53:59 +0200
Subject: [PATCH 082/129] Makefile: show error during patch stuff, add ".patch"
to echo
---
Makefile | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
index 6e6ffbe..146a4ad 100644
--- a/Makefile
+++ b/Makefile
@@ -193,7 +193,6 @@ ffac-patch: gluon-update
## Patch system
patch-prepare: gluon-update
- @echo
@echo 'Updating Gluon modules…'
@rm -f .modules
+@$(GLUON_MAKE) update >/dev/null 2>&1
@@ -223,13 +222,13 @@ edit-patch: patch-prepare
@echo Which one do you want to edit?
+@read file; \
if [ ! -f "patches/$$file.patch" ]; then \
- echo ''Couldn\'t find file: $$file''; \
+ echo ''Couldn\'t find file: $$file.patch''; \
exit 1; \
else \
git apply --directory=$(GLUON_BUILD_DIR) --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose $(PATCH_DIR)/$$file.patch; \
if [ `$(GLUON_GIT) status -s patches | head -c1 | grep -E '.'` ]; then \
echo 'Patch contained patches for Gluon modules. Applying said patches…'; \
- $(GLUON_MAKE) refresh-patches >/dev/null 2>&1; \
+ $(GLUON_MAKE) refresh-patches >/dev/null; \
fi; \
echo "You may edit $(GLUON_BUILD_DIR) now. Run 'make patch' once you are finished."; \
fi
@@ -255,7 +254,7 @@ update-patches: patch-prepare
else \
if [ `$(GLUON_GIT) status -s patches | head -c1 | grep -E '.'` ]; then \
echo 'Refreshing Gluon patches…'; \
- $(GLUON_MAKE) refresh-patches >/dev/null 2>&1; \
+ $(GLUON_MAKE) refresh-patches >/dev/null; \
fi; \
echo ''Refreshing $$file''; \
$(GLUON_GIT) add --all; \
From a49cf202ef7ecad9e602a0a7272ee286fdeb8e75 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Mon, 14 Aug 2023 03:33:58 +0200
Subject: [PATCH 083/129] release.mk: Update to release of Gluon v2023.1
---
CHANGELOG.md | 12 ++++++++++++
README.md | 5 +++--
release.mk | 2 +-
site.conf | 18 +++++++++---------
4 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a305856..73a1738 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,17 @@
# Freifunk Aachen Firmware Changelog
+## v2023.1.0-2
+ - release from gluon v2023.1 tags
+ - Makefile changes
+ - rebase onto v2022.1.x
+
+## v2023.1.0-1
+ - release from current gluon master
+ - based on openwrt 22.03
+ - soon to become v2023.1.1 when released in gluon
+ - adds support for new devices
+ - use ffac-bat4-mesh mesh id
+
## v2022.1.14-1
- use ffac/community-packages for all packages
- switch to ffac-bat4-mesh as new mesh id
diff --git a/README.md b/README.md
index 37d3b7a..8a43daa 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,9 @@
This repository contains the site configuration for the Freifunk Aachen Gluon
firmware.
-This branch is compatible to Gluon v2022.1.x which is based on OpenWRT 22.03
+This is the `v2023.1.x` branch which is compatible to current Gluon v2023.1 release using OpenWRT 22.03.
+
+It allows updates from v2021.x onwards - so v2020 or before need to migrate to v2021 or v2022 first.
This config uses the upstream `gluon-mesh-vpn-wireguard` [^gluon-meshvpn] implementation.
Registration of the wireguard keys is done using a custom `wg-registration` package which sends the key through POST to our broker.
@@ -27,7 +29,6 @@ The output must then be appended to the end of the `site.mk`
Currently outdated further information can be found in the Freifunk Wiki[^wiki]
-
[^wiki]: https://wiki.freifunk.net/Freifunk_Aachen/Firmware#Dokumentation
[^gluon-meshvpn]: https://gluon.readthedocs.io/en/latest/features/vpn.html#wireguard
diff --git a/release.mk b/release.mk
index 6692735..e7742ce 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := v2022.1.4
+GLUON_GIT_REF := v2023.1 #v2023.1.x
diff --git a/site.conf b/site.conf
index 27dafd3..435a96d 100644
--- a/site.conf
+++ b/site.conf
@@ -220,9 +220,9 @@
stable = {
name = 'stable',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2022.1.x/stable/sysupgrade',
- 'http://updates.ffac.rocks/from-2022.1.x/stable/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2022.1.x/stable/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2023.1.x/stable/sysupgrade',
+ 'http://updates.ffac.rocks/from-2023.1.x/stable/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2023.1.x/stable/sysupgrade',
},
good_signatures = 4,
pubkeys = {
@@ -240,9 +240,9 @@
beta = {
name = 'beta',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2022.1.x/beta/sysupgrade',
- 'http://updates.ffac.rocks/from-2022.1.x/beta/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2022.1.x/beta/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2023.1.x/beta/sysupgrade',
+ 'http://updates.ffac.rocks/from-2023.1.x/beta/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2023.1.x/beta/sysupgrade',
},
good_signatures = 3,
pubkeys = {
@@ -260,9 +260,9 @@
experimental = {
name = 'experimental',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2022.1.x/experimental/sysupgrade',
- 'http://updates.ffac.rocks/from-2022.1.x/experimental/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2022.1.x/experimental/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2023.1.x/experimental/sysupgrade',
+ 'http://updates.ffac.rocks/from-2023.1.x/experimental/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2023.1.x/experimental/sysupgrade',
},
good_signatures = 2,
pubkeys = {
From 40466b5961ff0dd8a631a1cf36dd16e7cc1acff4 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Thu, 17 Aug 2023 03:36:07 +0000
Subject: [PATCH 084/129] run make update-patches
---
patches/gluon-makefile.patch | 2 +-
patches/status-page-anonymization.patch | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/patches/gluon-makefile.patch b/patches/gluon-makefile.patch
index 3ee2df0..fa1f78d 100644
--- a/patches/gluon-makefile.patch
+++ b/patches/gluon-makefile.patch
@@ -1,5 +1,5 @@
diff --git a/Makefile b/Makefile
-index 565a32a0..a39958fc 100644
+index 695b1bc7..00dd9ceb 100644
--- a/Makefile
+++ b/Makefile
@@ -111,11 +111,11 @@ update-modules: FORCE
diff --git a/patches/status-page-anonymization.patch b/patches/status-page-anonymization.patch
index 2c59f03..bd6afe3 100644
--- a/patches/status-page-anonymization.patch
+++ b/patches/status-page-anonymization.patch
@@ -1,5 +1,5 @@
diff --git a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo b/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
-index 3f149100..3f3ce8c0 100755
+index ffe3651f..ef203e53 100755
--- a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
+++ b/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
@@ -8,4 +8,4 @@ badrequest() {
From 7fb698e8e6428d896303fa922446227f09af7c19 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Mon, 14 Aug 2023 16:29:00 +0000
Subject: [PATCH 085/129] Add new devices - delete 6M Flash devices
---
patches/010-primary-mac.patch | 13 ++++
patches/020-interfaces.patch | 14 +++-
patches/cellular.patch | 24 ++++++
patches/targets-ath79-generic.patch | 77 +++++++++++++++++++
patches/targets-ath79-mikrotik.patch | 18 +++++
patches/targets-ath79-nand.patch | 16 ++++
patches/targets-ipq40xx-generic.patch | 31 ++++++++
patches/targets-lantiq-xrx200-devices.patch | 85 +++++++++++++++++++++
patches/targets-ramips-mt7620.patch | 18 +++++
patches/targets-ramips-mt7621.patch | 20 +++++
patches/targets-ramips-mt76x8.patch | 17 +++++
11 files changed, 331 insertions(+), 2 deletions(-)
create mode 100644 patches/010-primary-mac.patch
create mode 100644 patches/cellular.patch
create mode 100644 patches/targets-ath79-generic.patch
create mode 100644 patches/targets-ath79-mikrotik.patch
create mode 100644 patches/targets-ath79-nand.patch
create mode 100644 patches/targets-ipq40xx-generic.patch
create mode 100644 patches/targets-lantiq-xrx200-devices.patch
create mode 100644 patches/targets-ramips-mt7620.patch
create mode 100644 patches/targets-ramips-mt7621.patch
create mode 100644 patches/targets-ramips-mt76x8.patch
diff --git a/patches/010-primary-mac.patch b/patches/010-primary-mac.patch
new file mode 100644
index 0000000..c008a9c
--- /dev/null
+++ b/patches/010-primary-mac.patch
@@ -0,0 +1,13 @@
+diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
+index e0b919f3..e56675e3 100755
+--- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
+@@ -81,6 +81,8 @@ local primary_addrs = {
+ {'brcm2708'},
+ {'ipq40xx', 'generic', {
+ 'avm,fritzbox-4040',
++ 'linksys,ea8300',
++ 'linksys,mr8300',
+ 'meraki,mr33',
+ 'plasmacloud,pa1200',
+ 'plasmacloud,pa2200',
diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch
index f0c92b9..94bd559 100644
--- a/patches/020-interfaces.patch
+++ b/patches/020-interfaces.patch
@@ -1,12 +1,22 @@
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-index 063ab1a1..9f847082 100755
+index 1ce81b65..cdd4ba6c 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-@@ -71,6 +71,11 @@ elseif platform.match('lantiq', 'xrx200', {
+@@ -75,6 +75,21 @@ elseif platform.match('lantiq', 'xrx200', {
'arcadyan,vgv7510kw22-nor',
}) then
lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan'
+elseif platform.match('lantiq', 'xrx200', {
++ 'avm,fritz3370-rev2-hynix',
++ 'avm,fritz3370-rev2-micron',
++ 'avm,fritz3390',
++ 'avm,fritz7360sl',
++ 'avm,fritz7360-v2',
++ 'avm,fritz7362sl',
++ 'avm,fritz7430',
++}) then
++ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
++elseif platform.match('lantiq', 'xrx200', {
+ 'tplink,tdw8970',
+ 'tplink,tdw8980',
+}) then
diff --git a/patches/cellular.patch b/patches/cellular.patch
new file mode 100644
index 0000000..dfe95b7
--- /dev/null
+++ b/patches/cellular.patch
@@ -0,0 +1,24 @@
+diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
+index 0099d1d8..98a21365 100755
+--- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
+@@ -49,6 +49,7 @@ if platform.match('ath79', 'nand', {
+ setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
+ elseif platform.match('ath79', 'nand', {
+ 'zte,mf281',
++ 'zte,mf286r',
+ }) then
+ setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15)
+ elseif platform.match('ipq40xx', 'generic', {
+diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+index ba4b5b48..40728360 100644
+--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
++++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+@@ -75,6 +75,7 @@ end
+ function M.is_cellular_device()
+ if M.match('ath79', 'nand', {
+ 'zte,mf281',
++ 'zte,mf286r',
+ 'glinet,gl-xe300',
+ }) then
+ return true
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
new file mode 100644
index 0000000..ce6c93a
--- /dev/null
+++ b/patches/targets-ath79-generic.patch
@@ -0,0 +1,77 @@
+diff --git a/targets/ath79-generic b/targets/ath79-generic
+index 7a5140c9..f92318b3 100644
+--- a/targets/ath79-generic
++++ b/targets/ath79-generic
+@@ -474,22 +474,26 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
+ packages = ATH10K_PACKAGES_QCA9888,
+ })
+
+-device('tp-link-re355-v1', 'tplink_re355-v1', {
+- manifest_aliases = {
+- 'tp-link-re355', -- upgrade from OpenWrt 19.07
+- },
+- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880,
+- broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant
+- class = 'tiny', -- Only 6M of usable Firmware space
++device('tp-link-eap225-wall-v2', 'tplink_eap225-wall-v2', {
++ packages = ATH10K_PACKAGES_QCA9888,
+ })
+
+-device('tp-link-re450-v1', 'tplink_re450-v1', {
+- packages = ATH10K_PACKAGES_QCA9880,
+- manifest_aliases = {
+- 'tp-link-re450', -- upgrade from OpenWrt 19.07
+- },
+- class = 'tiny', -- Only 6M of usable Firmware space
+-})
++--device('tp-link-re355-v1', 'tplink_re355-v1', {
++-- manifest_aliases = {
++-- 'tp-link-re355', -- upgrade from OpenWrt 19.07
++-- },
++-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880,
++-- broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant
++-- class = 'tiny', -- Only 6M of usable Firmware space
++--})
++
++--device('tp-link-re450-v1', 'tplink_re450-v1', {
++-- packages = ATH10K_PACKAGES_QCA9880,
++-- manifest_aliases = {
++-- 'tp-link-re450', -- upgrade from OpenWrt 19.07
++-- },
++-- class = 'tiny', -- Only 6M of usable Firmware space
++--})
+
+ device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
+ device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
+@@ -503,11 +507,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', {
+ },
+ })
+
+-device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
+- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
+- broken = true, -- OOM with 5GHz enabled in most environments
+- class = 'tiny', -- 64M ath9k + ath10k
+-})
++--device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
++-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
++-- broken = true, -- OOM with 5GHz enabled in most environments
++-- class = 'tiny', -- 64M ath9k + ath10k
++--})
+
+ device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', {
+ manifest_aliases = {
+@@ -604,3 +608,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+ })
+
+ device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
++
++device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', {
++ packages = ATH10K_PACKAGES_QCA9880,
++})
++
++
++-- Zyxel
++
++device('zyxel-nbg6616', 'zyxel_nbg6616', {
++ packages = ATH10K_PACKAGES_QCA9880,
++})
diff --git a/patches/targets-ath79-mikrotik.patch b/patches/targets-ath79-mikrotik.patch
new file mode 100644
index 0000000..8ba9f0f
--- /dev/null
+++ b/patches/targets-ath79-mikrotik.patch
@@ -0,0 +1,18 @@
+diff --git a/targets/ath79-mikrotik b/targets/ath79-mikrotik
+index c2002987..974ce347 100644
+--- a/targets/ath79-mikrotik
++++ b/targets/ath79-mikrotik
+@@ -1,3 +1,13 @@
+ include 'mikrotik.inc'
+
+ device('mikrotik-routerboard-951ui-2nd-hap', 'mikrotik_routerboard-951ui-2nd')
++
++device('mikrotik-routerboard-mapl-2nd', 'mikrotik_routerboard-mapl-2nd', {
++ aliases = {'mikrotik-routerboard-map-lite'},
++ factory = false,
++})
++
++device('mikrotik-routerboard-wap-g-5hact2hnd', 'mikrotik_routerboard-wap-g-5hact2hnd', {
++ aliases = {'mikrotik-routerboard-wap-ac-t2'},
++ factory = false,
++})
diff --git a/patches/targets-ath79-nand.patch b/patches/targets-ath79-nand.patch
new file mode 100644
index 0000000..d656aee
--- /dev/null
+++ b/patches/targets-ath79-nand.patch
@@ -0,0 +1,16 @@
+diff --git a/targets/ath79-nand b/targets/ath79-nand
+index 68bffa4e..ecf712b2 100644
+--- a/targets/ath79-nand
++++ b/targets/ath79-nand
+@@ -62,6 +62,11 @@ device('zte-mf281', 'zte_mf281', {
+ packages = ATH10K_PACKAGES_QCA9888,
+ })
+
++device('zte-mf286r', 'zte_mf286r', {
++ broken = true, -- case must be opened to install
++ packages = ATH10K_PACKAGES_QCA9888,
++})
++
+
+ -- Zyxel
+
diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch
new file mode 100644
index 0000000..7f9a8bf
--- /dev/null
+++ b/patches/targets-ipq40xx-generic.patch
@@ -0,0 +1,31 @@
+diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
+index df81a1b0..a56476c8 100644
+--- a/targets/ipq40xx-generic
++++ b/targets/ipq40xx-generic
+@@ -95,6 +95,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
+
+ device('linksys-ea6350v3', 'linksys_ea6350v3')
+
++device('linksys-ea8300-dallas', 'linksys_ea8300', {
++ packages = { -- exclude until Gluon supports third radio
++ '-ath10k-firmware-qca9888-ct',
++ '-ath10k-board-qca9888',
++ },
++ broken = true,
++ -- 3rd WiFi radio not supported (5GHz DFS channels 100+)
++ -- outdoor mode is broken due to 5GHz being limited to channels 36-64
++})
++
++device('linksys-mr8300-dallas', 'linksys_mr8300', {
++ packages = { -- exclude until Gluon supports third radio
++ '-ath10k-firmware-qca9888-ct',
++ '-ath10k-board-qca9888',
++ },
++ broken = true,
++ -- 3rd WiFi radio not supported (5GHz DFS channels 100+)
++ -- outdoor mode is broken due to 5GHz being limited to channels 36-64
++})
++
+
+ -- Meraki
+
diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch
new file mode 100644
index 0000000..7774713
--- /dev/null
+++ b/patches/targets-lantiq-xrx200-devices.patch
@@ -0,0 +1,85 @@
+diff --git a/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
+new file mode 100644
+index 00000000..e3f16905
+--- /dev/null
++++ b/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
+@@ -0,0 +1,53 @@
++From: Felix Baumann
++Date: Tue, 28 Feb 2023 04:21:07 +0100
++Subject: lantiq: fix ath9k-eeprom for AVM Fritz!Box 7430
++
++@grische noticed that the extracted wifi calibration data (ath9k-eeprom)
++is incorrect.
++Symptoms included:
++- wrong mac address
++- radio was detected like dbdc (2.4GHz and 5GHz support at the same time)
++
++This patch fixes this by also reversing the order of bytes and throwing
++away the last 4 Bytes.
++Unlike caldata.sh the fritz_cal_extract.c doesn't support reversing.
++So this patch combines both methods.
++
++Signed-off-by: Felix Baumann
++
++diff --git a/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom b/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom
++index c6bacb8d3c1629c6ebd290ac9d0ccccd18a0f86c..fa06437295830839b4b6ca42e072355019c559f8 100644
++--- a/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom
+++++ b/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom
++@@ -23,11 +23,29 @@ case "$FIRMWARE" in
++ avm,fritz7360-v2)
++ caldata_extract "urlader" 0x985 0x1000
++ ;;
++- avm,fritz7412|\
++- avm,fritz7430)
+++ avm,fritz7412)
++ /usr/bin/fritz_cal_extract -i 1 -s 0x1e000 -e 0x207 -l 5120 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader") || \
++ /usr/bin/fritz_cal_extract -i 1 -s 0x1e800 -e 0x207 -l 5120 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader")
++ ;;
+++ avm,fritz7430)
+++ reversed=$( \
+++ /usr/bin/fritz_cal_extract -i 1 -s 0x1e000 -e 0x207 -l 5120 $(find_mtd_chardev "urlader") || \
+++ /usr/bin/fritz_cal_extract -i 1 -s 0x1e800 -e 0x207 -l 5120 $(find_mtd_chardev "urlader") | \
+++ hexdump -v -e '/1 "%02x "')
+++
+++ caldata=""
+++ i=0
+++ count=$((${#reversed} / 3 - 4))
+++ for byte in $reversed; do
+++ i=$(($i+1))
+++ if [ "$i" -gt "$count" ]; then
+++ break
+++ fi
+++ caldata="\x${byte}${caldata}"
+++ done
+++
+++ printf "%b" "$caldata" > /lib/firmware/$FIRMWARE
+++ ;;
++ bt,homehub-v5a)
++ caldata_extract_ubi "caldata" 0x1000 0x1000
++ ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) 2) 0x10c
+diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200
+index f54cd87f..80f0659d 100644
+--- a/targets/lantiq-xrx200
++++ b/targets/lantiq-xrx200
+@@ -30,6 +30,10 @@ device('avm-fritz-box-3370-rev-2-micron-nand', 'avm_fritz3370-rev2-micron', {
+ broken = true, -- no button for setup mode; hw revision not visible on device
+ })
+
++device('avm-fritz-box-3390', 'avm_fritz3390', {
++ factory = false,
++})
++
+ device('avm-fritz-box-7360-sl', 'avm_fritz7360sl', {
+ factory = false,
+ aliases = {'avm-fritz-box-7360-v1'},
+@@ -47,6 +51,10 @@ device('avm-fritz-box-7412', 'avm_fritz7412', {
+ factory = false,
+ })
+
++device('avm-fritz-box-7430', 'avm_fritz7430', {
++ factory = false,
++})
++
+ device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', {
+ factory = false,
+ aliases = {'o2-box-6431'},
diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch
new file mode 100644
index 0000000..3c550b5
--- /dev/null
+++ b/patches/targets-ramips-mt7620.patch
@@ -0,0 +1,18 @@
+diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620
+index fbf57ba8..4c9a6367 100644
+--- a/targets/ramips-mt7620
++++ b/targets/ramips-mt7620
+@@ -5,6 +5,13 @@ device('asus-rt-ac51u', 'asus_rt-ac51u', {
+ })
+
+
++-- EDIMAX
++
++device('edimax-br-6478ac-v2', 'edimax_br-6478ac-v2', {
++ factory = false,
++})
++
++
+ -- GL.iNet
+
+ device('gl-mt300a', 'glinet_gl-mt300a', {
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
new file mode 100644
index 0000000..ebf39b9
--- /dev/null
+++ b/patches/targets-ramips-mt7621.patch
@@ -0,0 +1,20 @@
+diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
+index 6060c49a..705b8832 100644
+--- a/targets/ramips-mt7621
++++ b/targets/ramips-mt7621
+@@ -43,6 +43,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', {
+ device('mercusys-mr70x-v1', 'mercusys_mr70x-v1')
+
+
++-- MikroTik
++
++device('mikrotik-routerboard-750gr3', 'mikrotik_routerboard-750gr3', {
++ aliases = {'mikrotik-routerboard-hex-v3'},
++ factory = false,
++ packages = {'-hostapd-mini'},
++})
++
++
+ -- Netgear
+
+ device('netgear-ex6150', 'netgear_ex6150', {
diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch
new file mode 100644
index 0000000..db64532
--- /dev/null
+++ b/patches/targets-ramips-mt76x8.patch
@@ -0,0 +1,17 @@
+diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8
+index 52fb71be..382c3dfa 100644
+--- a/targets/ramips-mt76x8
++++ b/targets/ramips-mt76x8
+@@ -62,9 +62,9 @@ device('tp-link-re200-v2', 'tplink_re200-v2')
+
+ device('tp-link-re200-v3', 'tplink_re200-v3')
+
+-device('tp-link-re305', 'tplink_re305-v1', {
+- class = 'tiny', -- Only 6M of usable Firmware space
+-})
++--device('tp-link-re305', 'tplink_re305-v1', {
++-- class = 'tiny', -- Only 6M of usable Firmware space
++--})
+
+ device('tp-link-tl-mr3020-v3', 'tplink_tl-mr3020-v3', {
+ factory = false,
From bfaada7fee90fe778083a2818d0474497f594c35 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Sun, 20 Aug 2023 08:22:32 +0200
Subject: [PATCH 086/129] switch over to upcoming v2023.2 branch (maintained by
herbetom)
adjust patches to upstream changes:
- re305, re355 and re450 were dropped upstream
- update fb7430 patch to upstream changes
- update covr-patch:
add nmbm, refresh openwrt firmware-utils patch
run make update-patches
---
patches/add-covr-x1860.patch | 68 +++++++++++----------
patches/targets-ath79-generic.patch | 52 ++++------------
patches/targets-ipq40xx-generic.patch | 4 +-
patches/targets-lantiq-xrx200-devices.patch | 12 ++--
patches/targets-ramips-mt7621.patch | 4 +-
release.mk | 4 +-
6 files changed, 58 insertions(+), 86 deletions(-)
diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch
index 1dba5a8..382bc59 100644
--- a/patches/add-covr-x1860.patch
+++ b/patches/add-covr-x1860.patch
@@ -1,24 +1,22 @@
-diff --git a/patches/openwrt/0004-Add-Dlink-sge-image.patch b/patches/openwrt/0004-Add-Dlink-sge-image.patch
+diff --git a/patches/openwrt/0006-procd-add-Dlink-sge-image.patch b/patches/openwrt/0006-procd-add-Dlink-sge-image.patch
new file mode 100644
-index 00000000..0706ca09
+index 00000000..a84b7335
--- /dev/null
-+++ b/patches/openwrt/0004-Add-Dlink-sge-image.patch
-@@ -0,0 +1,893 @@
++++ b/patches/openwrt/0006-procd-add-Dlink-sge-image.patch
+@@ -0,0 +1,885 @@
+From: Roland <75312877+RolandoMagico@users.noreply.github.com>
+Date: Mon, 26 Jun 2023 18:03:51 +0200
+Subject: procd: add Dlink sge image
+
+diff --git a/tools/firmware-utils/patches/002-add-dlink-sge-image.patch b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch
+new file mode 100644
-+index 0000000000..71bab9b418
++index 0000000000000000000000000000000000000000..c87ad267dc2924c3520eb4fcae0c3ae2ca295017
+--- /dev/null
++++ b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch
-+@@ -0,0 +1,883 @@
-++diff --git a/CMakeLists.txt b/CMakeLists.txt
-++index c1750d4..d7d4ed2 100644
++@@ -0,0 +1,875 @@
++--- a/CMakeLists.txt
+++++ b/CMakeLists.txt
-++@@ -40,6 +40,7 @@ FW_UTIL(buffalo-tftp src/buffalo-lib.c "" "")
+++@@ -40,6 +40,7 @@ FW_UTIL(buffalo-tftp src/buffalo-lib.c "
++ FW_UTIL(cros-vbutil "" "" "${OPENSSL_CRYPTO_LIBRARIES}")
++ FW_UTIL(dgfirmware "" "" "")
++ FW_UTIL(dgn3500sum "" "" "")
@@ -26,9 +24,6 @@ index 00000000..0706ca09
++ FW_UTIL(dns313-header "" "" "")
++ FW_UTIL(edimax_fw_header "" "" "")
++ FW_UTIL(encode_crc "" "" "")
-++diff --git a/src/dlink-sge-image.c b/src/dlink-sge-image.c
-++new file mode 100644
-++index 0000000..9b567f4
++--- /dev/null
+++++ b/src/dlink-sge-image.c
++@@ -0,0 +1,510 @@
@@ -542,9 +537,6 @@ index 00000000..0706ca09
+++ else
+++ image_encrypt();
+++}
-++diff --git a/src/dlink-sge-image.h b/src/dlink-sge-image.h
-++new file mode 100644
-++index 0000000..8966cc9
++--- /dev/null
+++++ b/src/dlink-sge-image.h
++@@ -0,0 +1,349 @@
@@ -897,17 +889,18 @@ index 00000000..0706ca09
+++w1+nGS0KL2+sJGFlDvc7fHJmVFZBqWeSQWPJTHimLI9yaIVS5mEnuBjKZpdUB57T
+++-----END RSA PRIVATE KEY-----
+++)";
-diff --git a/patches/openwrt/0005-Add-DLink-COVR-X1860.patch b/patches/openwrt/0005-Add-DLink-COVR-X1860.patch
+diff --git a/patches/openwrt/0007-add-Dlink-COVR-X1860.patch b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch
new file mode 100644
-index 00000000..aa9f2245
+index 00000000..a1913492
--- /dev/null
-+++ b/patches/openwrt/0005-Add-DLink-COVR-X1860.patch
-@@ -0,0 +1,318 @@
++++ b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch
+@@ -0,0 +1,328 @@
+From: Roland <75312877+RolandoMagico@users.noreply.github.com>
+Date: Mon, 26 Jun 2023 18:03:51 +0200
+Subject: add Dlink COVR-X1860
++
+diff --git a/include/image-commands.mk b/include/image-commands.mk
-+index 9220b8dec0..84032d338c 100644
++index dc6ee6e7c160c0935c3d72fb26b88c4ebcf4b028..6666eddf8f72d3ad49aafe1b08d79c26e0089945 100644
+--- a/include/image-commands.mk
++++ b/include/image-commands.mk
+@@ -226,6 +226,11 @@ define Build/copy-file
@@ -924,10 +917,10 @@ index 00000000..aa9f2245
+ @mv $@.new $@
+diff --git a/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts
+new file mode 100644
-+index 0000000000..c06c5e36ba
++index 0000000000000000000000000000000000000000..10d5db829b5692e6cf29d82ee57120bdde438a12
+--- /dev/null
++++ b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts
-+@@ -0,0 +1,186 @@
++@@ -0,0 +1,195 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "mt7621.dtsi"
@@ -1007,6 +1000,15 @@ index 00000000..aa9f2245
++&nand {
++ status = "okay";
++
+++ mediatek,nmbm;
+++ /* rsvd = Remapping Range / NAND Erase-Size */
+++ /* rsvd = 0x800000 / 0x20000 */
+++ mediatek,bmt-max-reserved-blocks = <64>;
+++ /* Remapping should include raw-nand we operate upon without UBI layer. */
+++ /* This includes (at least) the kernel which has to be loaded by U-Boot.*/
+++ mediatek,bmt-remap-range =
+++ <0x0 0x9c0000>;
+++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
@@ -1115,7 +1117,7 @@ index 00000000..aa9f2245
++ };
++};
+diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
-+index a5b69839a7..7b43410a5a 100644
++index fa4c83dbe18db3c5978c755695caf519327e89f4..787b0fd6c647579459b5ac3af97d3b4d150fd571 100644
+--- a/target/linux/ramips/image/mt7621.mk
++++ b/target/linux/ramips/image/mt7621.mk
+@@ -9,6 +9,14 @@ DEFAULT_SOC := mt7621
@@ -1133,7 +1135,7 @@ index 00000000..aa9f2245
+ define Build/arcadyan-trx
+ echo -ne "hsqs" > $@.hsqs
+ $(eval trx_magic=$(word 1,$(1)))
-+@@ -552,6 +560,31 @@ define Device/cudy_x6-v2
++@@ -569,6 +577,31 @@ define Device/cudy_x6-v2
+ endef
+ TARGET_DEVICES += cudy_x6-v2
+
@@ -1166,10 +1168,10 @@ index 00000000..aa9f2245
+ DEVICE_VENDOR := D-Link
+ DEVICE_MODEL := DAP-1620
+diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
-+index cd746e84ee..a772bca6d1 100644
++index 6057c171922e9861b0928b16352970eaadd54cb1..bc7a05e2fe7541eaa2d78b14f4b66b24e67ca72b 100644
+--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
++++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
-+@@ -91,6 +91,9 @@ ramips_setup_interfaces()
++@@ -92,6 +92,9 @@ ramips_setup_interfaces()
+ zyxel,nt7101)
+ ucidef_set_interfaces_lan_wan "lan" "wan"
+ ;;
@@ -1179,7 +1181,7 @@ index 00000000..aa9f2245
+ gnubee,gb-pc1)
+ ucidef_set_interface_lan "ethblack ethblue"
+ ;;
-+@@ -185,6 +188,11 @@ ramips_setup_macs()
++@@ -186,6 +189,11 @@ ramips_setup_macs()
+ lan_mac=$wan_mac
+ label_mac=$wan_mac
+ ;;
@@ -1192,7 +1194,7 @@ index 00000000..aa9f2245
+ lan_mac=$(mtd_get_mac_ascii factory lanmac)
+ wan_mac=$(mtd_get_mac_ascii factory wanmac)
+diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
-+index 80c7273543..10e055d776 100644
++index 3467e783f0482621ee933f1abcd7be780854bb38..79a521b4126e648aa7afbdc8ef7bb9bc70e34fad 100644
+--- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
++++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
+@@ -41,6 +41,13 @@ case "$board" in
@@ -1210,22 +1212,22 @@ index 00000000..aa9f2245
+ hw_mac_addr="$(mtd_get_mac_binary factory 0x4)"
+ [ "$PHYNBR" = "0" ] && \
+diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
-+index ce5fdd61ed..0dbd7874e8 100755
++index 5d8305b788cce391335f2563d60c999f4d0b27de..6dc0f594afc66bc4f36c19165bc3a8582d40389d 100755
+--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
++++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
-+@@ -61,6 +61,7 @@ platform_do_upgrade() {
-+ beeline,smartbox-giga|\
++@@ -63,6 +63,7 @@ platform_do_upgrade() {
+ beeline,smartbox-turbo|\
++ beeline,smartbox-turbo-plus|\
+ belkin,rt1800|\
++ dlink,covr-x1860-a1|\
+ dlink,dap-x1860-a1|\
+ dlink,dir-1960-a1|\
+ dlink,dir-2640-a1|\
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index b0dabd4c..013a06a4 100644
+index 6f9fadbc..a4d67702 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
-@@ -40,6 +40,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', {
+@@ -32,6 +32,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', {
-- D-Link
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index ce6c93a..b0bb0cc 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,49 +1,19 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index 7a5140c9..f92318b3 100644
+index 56be6369..20a0a33a 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -474,22 +474,26 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
+@@ -468,6 +468,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
packages = ATH10K_PACKAGES_QCA9888,
})
--device('tp-link-re355-v1', 'tplink_re355-v1', {
-- manifest_aliases = {
-- 'tp-link-re355', -- upgrade from OpenWrt 19.07
-- },
-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880,
-- broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant
-- class = 'tiny', -- Only 6M of usable Firmware space
+device('tp-link-eap225-wall-v2', 'tplink_eap225-wall-v2', {
+ packages = ATH10K_PACKAGES_QCA9888,
- })
-
--device('tp-link-re450-v1', 'tplink_re450-v1', {
-- packages = ATH10K_PACKAGES_QCA9880,
-- manifest_aliases = {
-- 'tp-link-re450', -- upgrade from OpenWrt 19.07
-- },
-- class = 'tiny', -- Only 6M of usable Firmware space
--})
-+--device('tp-link-re355-v1', 'tplink_re355-v1', {
-+-- manifest_aliases = {
-+-- 'tp-link-re355', -- upgrade from OpenWrt 19.07
-+-- },
-+-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880,
-+-- broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant
-+-- class = 'tiny', -- Only 6M of usable Firmware space
-+--})
++})
+
-+--device('tp-link-re450-v1', 'tplink_re450-v1', {
-+-- packages = ATH10K_PACKAGES_QCA9880,
-+-- manifest_aliases = {
-+-- 'tp-link-re450', -- upgrade from OpenWrt 19.07
-+-- },
-+-- class = 'tiny', -- Only 6M of usable Firmware space
-+--})
-
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
-@@ -503,11 +507,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', {
+ device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
+@@ -480,11 +484,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', {
},
})
@@ -52,22 +22,22 @@ index 7a5140c9..f92318b3 100644
- broken = true, -- OOM with 5GHz enabled in most environments
- class = 'tiny', -- 64M ath9k + ath10k
-})
-+--device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
++-- device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
+-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
+-- broken = true, -- OOM with 5GHz enabled in most environments
+-- class = 'tiny', -- 64M ath9k + ath10k
-+--})
++-- })
device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', {
manifest_aliases = {
-@@ -604,3 +608,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -581,3 +585,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
+
-+device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', {
-+ packages = ATH10K_PACKAGES_QCA9880,
-+})
++-- device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', {
++-- packages = ATH10K_PACKAGES_QCA9880,
++-- })
+
+
+-- Zyxel
diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch
index 7f9a8bf..78511e2 100644
--- a/patches/targets-ipq40xx-generic.patch
+++ b/patches/targets-ipq40xx-generic.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index df81a1b0..a56476c8 100644
+index a041130a..21bb3311 100644
--- a/targets/ipq40xx-generic
+++ b/targets/ipq40xx-generic
-@@ -95,6 +95,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
+@@ -92,6 +92,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
device('linksys-ea6350v3', 'linksys_ea6350v3')
diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch
index 7774713..da17e13 100644
--- a/patches/targets-lantiq-xrx200-devices.patch
+++ b/patches/targets-lantiq-xrx200-devices.patch
@@ -1,8 +1,8 @@
-diff --git a/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
+diff --git a/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
new file mode 100644
-index 00000000..e3f16905
+index 00000000..9b7a21f9
--- /dev/null
-+++ b/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
++++ b/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
@@ -0,0 +1,53 @@
+From: Felix Baumann
+Date: Tue, 28 Feb 2023 04:21:07 +0100
@@ -22,11 +22,11 @@ index 00000000..e3f16905
+Signed-off-by: Felix Baumann
+
+diff --git a/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom b/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom
-+index c6bacb8d3c1629c6ebd290ac9d0ccccd18a0f86c..fa06437295830839b4b6ca42e072355019c559f8 100644
++index eefc39b30b463e431eecc46fb0bd6f5c4bab4a43..c8d7783f1933769d7cc737502bd233638ee80935 100644
+--- a/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom
++++ b/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom
-+@@ -23,11 +23,29 @@ case "$FIRMWARE" in
-+ avm,fritz7360-v2)
++@@ -22,11 +22,29 @@ case "$FIRMWARE" in
++ avm,fritz7360sl)
+ caldata_extract "urlader" 0x985 0x1000
+ ;;
+- avm,fritz7412|\
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index ebf39b9..9594542 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 6060c49a..705b8832 100644
+index a4d67702..26f84c47 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
-@@ -43,6 +43,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', {
+@@ -55,6 +55,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', {
device('mercusys-mr70x-v1', 'mercusys_mr70x-v1')
diff --git a/release.mk b/release.mk
index e7742ce..b6979c4 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
-GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := v2023.1 #v2023.1.x
+GLUON_GIT_URL := https://github.com/herbetom/gluon.git
+GLUON_GIT_REF := 0f0fc05fbcd7012256eb6e9ffd06aaa0540bdeb7 #next-23.05 #v2023.2.x
From fb4a5fe87d8efdd18e83e4d5f22528e63ad0f030 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Sun, 20 Aug 2023 08:23:22 +0200
Subject: [PATCH 087/129] 020-interfaces: Fritz!Box 7530 - add lan1 as wan
---
patches/020-interfaces.patch | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch
index 94bd559..4c6b0fe 100644
--- a/patches/020-interfaces.patch
+++ b/patches/020-interfaces.patch
@@ -1,8 +1,16 @@
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-index 1ce81b65..cdd4ba6c 100755
+index 1ce81b65..24113719 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-@@ -75,6 +75,21 @@ elseif platform.match('lantiq', 'xrx200', {
+@@ -71,10 +71,29 @@ elseif platform.match('ramips', 'mt7621', {
+ 'tplink,eap615-wall-v1',
+ }) then
+ lan_ifname, wan_ifname = 'lan1 lan2 lan3', 'lan0'
++elseif platform.match('ipq40xx', 'generic', {
++ 'avm,fritzbox-7530',
++}) then
++ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1'
+ elseif platform.match('lantiq', 'xrx200', {
'arcadyan,vgv7510kw22-nor',
}) then
lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan'
From 4404cad51a1b277637358ff9d12e451758363e5d Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 20 Aug 2023 09:38:39 +0200
Subject: [PATCH 088/129] activate web-cellular and fix sn112 key
---
Makefile | 1 -
README.md | 2 +-
site.conf | 2 +-
site.mk | 13 ++++++++-----
4 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/Makefile b/Makefile
index 146a4ad..2de169a 100644
--- a/Makefile
+++ b/Makefile
@@ -31,7 +31,6 @@ PATCH_DIR := patches
SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key
OPKG_KEY_FOLDER ?= $(HOME)/.key-build
-
## Create version scheme
EXP_FALLBACK = $(shell date '+%Y%m%d')
BUILD_NUMBER ?= $(EXP_FALLBACK)
diff --git a/README.md b/README.md
index 1892ce6..7e8b6b7 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@ firmware.
This is the `v2023.2.x` branch which is compatible with currents Openwrt Master and will be merged into v2023.2.x once released.
-Nothing is guaranteed here, it might get force-pushed from time to time to be rebased onto v2022.1.x.
+Nothing is guaranteed here, it might get force-pushed from time to time to be rebased.
It provides an option to test devices which are available in Gluon's master branch but are not released yet.
This config uses the upstream `gluon-mesh-vpn-wireguard` [^gluon-meshvpn] implementation.
diff --git a/site.conf b/site.conf
index 9eb974a..72fb6ed 100644
--- a/site.conf
+++ b/site.conf
@@ -120,7 +120,7 @@
endpoint = '01.wg-node.freifunk-aachen.de:51811'
},
sn112 = {
- public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsn1jugaSIJ7VBHM=',
+ public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsNjugaSIJ7VBHM=',
endpoint = '01.wg-node.freifunk-aachen.de:51812'
},
sn113 = {
diff --git a/site.mk b/site.mk
index 910b7dc..3ceecb7 100644
--- a/site.mk
+++ b/site.mk
@@ -1,4 +1,4 @@
-## gluon site.mk Freifunk Regio Aachen
+## gluon site.mk Freifunk Regio Aachen
## GLUON_FEATURES
# Specify Gluon features/packages to enable;
@@ -23,9 +23,8 @@ endef
GLUON_FEATURES := $(GLUON_FEATURES:\n= )
define GLUON_FEATURES_standard :=
-
+web-cellular
endef
-# web-cellular
# wireless-encryption-wpa3
# gluon-mesh-wireless-sae
GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= )
@@ -36,7 +35,6 @@ GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= )
# selection that would be enabled by default or due to the
# chosen feature flags
define GLUON_SITE_PACKAGES :=
-ffac-autoupdater-wifi-fallback
ffac-ssid-changer
ffac-wg-registration
iwinfo
@@ -44,6 +42,11 @@ respondd-module-airtime
endef
GLUON_SITE_PACKAGES := $(GLUON_SITE_PACKAGES:\n= )
+define GLUON_SITE_PACKAGES_standard :=
+ffac-autoupdater-wifi-fallback
+endef
+GLUON_SITE_PACKAGES_standard := $(GLUON_SITE_PACKAGES_standard:\n= )
+
# Build everything by default
ifeq ($(BROKEN),0)
override BROKEN :=
@@ -346,4 +349,4 @@ endif
ifeq ($(GLUON_TARGET),x86-legacy)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS)
-endif
\ No newline at end of file
+endif
From b24df70a45622565c8adc9fb764f10b8e35f90c7 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Mon, 21 Aug 2023 21:40:32 +0000
Subject: [PATCH 089/129] release v2023.2.0-4 remove broken devices enable sn01
supernode disable french translation add covr-x1860 add asus-rt-ax53u
---
patches/add-covr-x1860.patch | 17 ++-----
patches/targets-ath79-generic.patch | 77 +++++++++++++++++++++++++++--
patches/targets-ramips-mt7620.patch | 25 +++++-----
patches/targets-ramips-mt7621.patch | 15 +++++-
patches/targets-ramips-mt76x8.patch | 20 ++++----
site.conf | 2 -
site.mk | 2 +-
targets.mk | 1 -
8 files changed, 113 insertions(+), 46 deletions(-)
diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch
index 382bc59..b2865cb 100644
--- a/patches/add-covr-x1860.patch
+++ b/patches/add-covr-x1860.patch
@@ -891,10 +891,10 @@ index 00000000..a84b7335
+++)";
diff --git a/patches/openwrt/0007-add-Dlink-COVR-X1860.patch b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch
new file mode 100644
-index 00000000..a1913492
+index 00000000..9f40638e
--- /dev/null
+++ b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch
-@@ -0,0 +1,328 @@
+@@ -0,0 +1,319 @@
+From: Roland <75312877+RolandoMagico@users.noreply.github.com>
+Date: Mon, 26 Jun 2023 18:03:51 +0200
+Subject: add Dlink COVR-X1860
@@ -917,10 +917,10 @@ index 00000000..a1913492
+ @mv $@.new $@
+diff --git a/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts
+new file mode 100644
-+index 0000000000000000000000000000000000000000..10d5db829b5692e6cf29d82ee57120bdde438a12
++index 0000000000000000000000000000000000000000..c06c5e36baaedacaef339bf91a08dabbba732898
+--- /dev/null
++++ b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts
-+@@ -0,0 +1,195 @@
++@@ -0,0 +1,186 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "mt7621.dtsi"
@@ -1000,15 +1000,6 @@ index 00000000..a1913492
++&nand {
++ status = "okay";
++
-++ mediatek,nmbm;
-++ /* rsvd = Remapping Range / NAND Erase-Size */
-++ /* rsvd = 0x800000 / 0x20000 */
-++ mediatek,bmt-max-reserved-blocks = <64>;
-++ /* Remapping should include raw-nand we operate upon without UBI layer. */
-++ /* This includes (at least) the kernel which has to be loaded by U-Boot.*/
-++ mediatek,bmt-remap-range =
-++ <0x0 0x9c0000>;
-++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index b0bb0cc..b226fc0 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,8 +1,56 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index 56be6369..20a0a33a 100644
+index 56be6369..dd003630 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -468,6 +468,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
+@@ -405,13 +405,6 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', {
+ class = 'tiny', -- 64M ath9k + ath10k
+ })
+
+-device('tp-link-archer-c6-v2-eu-ru-jp', 'tplink_archer-c6-v2', {
+- packages = ATH10K_PACKAGES_QCA9888,
+- manifest_aliases = {
+- 'tp-link-archer-c6-v2', -- Upgrade from OpenWrt 19.07
+- },
+-})
+-
+ device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', {
+ packages = ATH10K_PACKAGES_QCA9880,
+ })
+@@ -434,40 +427,17 @@ device('tp-link-archer-d50-v1', 'tplink_archer-d50-v1', {
+ broken = true, -- 64M ath9k + ath10k & power LED not working
+ })
+
+-device('tp-link-cpe210-v1', 'tplink_cpe210-v1', {
+- manifest_aliases = {
+- 'tp-link-cpe210-v1.0', -- Upgrade from OpenWrt 19.07
+- 'tp-link-cpe210-v1.1', -- Upgrade from OpenWrt 19.07
+- },
+-})
+-device('tp-link-cpe210-v2', 'tplink_cpe210-v2', {
+- manifest_aliases = {
+- 'tp-link-cpe210-v2.0', -- Upgrade from OpenWrt 19.07
+- },
+-})
+-device('tp-link-cpe210-v3', 'tplink_cpe210-v3', {
+- manifest_aliases = {
+- 'tp-link-cpe210-v3.0', -- Upgrade from OpenWrt 19.07
+- 'tp-link-cpe210-v3.1', -- Upgrade from OpenWrt 19.07
+- 'tp-link-cpe210-v3.20', -- Upgrade from OpenWrt 19.07
+- },
+-})
+ device('tp-link-cpe220-v3', 'tplink_cpe220-v3')
+-device('tp-link-cpe510-v1', 'tplink_cpe510-v1', {
+- manifest_aliases = {
+- 'tp-link-cpe510-v1.0', -- upgrade from OpenWrt 19.07
+- 'tp-link-cpe510-v1.1', -- upgrade from OpenWrt 19.07
+- },
+-})
+-device('tp-link-cpe510-v2', 'tplink_cpe510-v2')
+-device('tp-link-cpe510-v3', 'tplink_cpe510-v3')
+-
+ device('tp-link-cpe710-v1', 'tplink_cpe710-v1')
+
+ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
packages = ATH10K_PACKAGES_QCA9888,
})
@@ -13,7 +61,7 @@ index 56be6369..20a0a33a 100644
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
-@@ -480,11 +484,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', {
+@@ -480,11 +450,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', {
},
})
@@ -30,7 +78,28 @@ index 56be6369..20a0a33a 100644
device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', {
manifest_aliases = {
-@@ -581,3 +585,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -503,20 +473,6 @@ device('tp-link-tl-wr1043nd-v4', 'tplink_tl-wr1043nd-v4', {
+ })
+ device('tp-link-tl-wr1043n-v5', 'tplink_tl-wr1043n-v5')
+
+-device('tp-link-wbs210-v1', 'tplink_wbs210-v1', {
+- manifest_aliases = {
+- 'tp-link-wbs210-v1.20', -- upgrade from OpenWrt 19.07
+- },
+-})
+-
+-device('tp-link-wbs210-v2', 'tplink_wbs210-v2')
+-
+-device('tp-link-wbs510-v1', 'tplink_wbs510-v1', {
+- manifest_aliases = {
+- 'tp-link-wbs510-v1.20', -- upgrade from OpenWrt 19.07
+- },
+-})
+-
+ -- Ubiquiti
+
+ -- device('ubiquiti-nanostation-loco-m-xw', 'ubnt_nanostation-loco-m-xw', {
+@@ -581,3 +537,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch
index 3c550b5..79747a9 100644
--- a/patches/targets-ramips-mt7620.patch
+++ b/patches/targets-ramips-mt7620.patch
@@ -1,18 +1,19 @@
diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620
-index fbf57ba8..4c9a6367 100644
+index fbf57ba8..c9fd5627 100644
--- a/targets/ramips-mt7620
+++ b/targets/ramips-mt7620
-@@ -5,6 +5,13 @@ device('asus-rt-ac51u', 'asus_rt-ac51u', {
- })
+@@ -31,14 +31,6 @@ device('netgear-ex3700', 'netgear_ex3700', {
+ -- Nexx
-+-- EDIMAX
-+
-+device('edimax-br-6478ac-v2', 'edimax_br-6478ac-v2', {
-+ factory = false,
-+})
-+
-+
- -- GL.iNet
+-device('nexx-wt3020-8m', 'nexx_wt3020-8m', {
+- aliases = {
+- 'nexx-wt3020ad',
+- 'nexx-wt3020f',
+- 'nexx-wt3020h',
+- },
+-})
+-
+ -- TP-Link
- device('gl-mt300a', 'glinet_gl-mt300a', {
+ local tplink_region_suffix = ''
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index 9594542..c7e5098 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,8 +1,19 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index a4d67702..26f84c47 100644
+index 6f9fadbc..cb699c68 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
-@@ -55,6 +55,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', {
+@@ -7,6 +7,10 @@ device('asus-rt-ac57u-v1', 'asus_rt-ac57u-v1', {
+ },
+ })
+
++device('asus-rt-ax53u', 'asus_rt-ax53u', {
++ factory = false,
++})
++
+
+ -- Cudy
+
+@@ -49,6 +59,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', {
device('mercusys-mr70x-v1', 'mercusys_mr70x-v1')
diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch
index db64532..9d4ad12 100644
--- a/patches/targets-ramips-mt76x8.patch
+++ b/patches/targets-ramips-mt76x8.patch
@@ -1,17 +1,15 @@
diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8
-index 52fb71be..382c3dfa 100644
+index 1e27ac35..10ef9d65 100644
--- a/targets/ramips-mt76x8
+++ b/targets/ramips-mt76x8
-@@ -62,9 +62,9 @@ device('tp-link-re200-v2', 'tplink_re200-v2')
+@@ -20,10 +20,6 @@ device('gl.inet-vixmini', 'glinet_vixmini', {
- device('tp-link-re200-v3', 'tplink_re200-v3')
+ -- Netgear
--device('tp-link-re305', 'tplink_re305-v1', {
-- class = 'tiny', -- Only 6M of usable Firmware space
+-device('netgear-r6020', 'netgear_r6020', {
+- factory_ext = '.img',
-})
-+--device('tp-link-re305', 'tplink_re305-v1', {
-+-- class = 'tiny', -- Only 6M of usable Firmware space
-+--})
-
- device('tp-link-tl-mr3020-v3', 'tplink_tl-mr3020-v3', {
- factory = false,
+-
+ device('netgear-r6120', 'netgear_r6120', {
+ factory_ext = '.img',
+ })
diff --git a/site.conf b/site.conf
index 72fb6ed..0df15bf 100644
--- a/site.conf
+++ b/site.conf
@@ -110,7 +110,6 @@
wireguard = {
broker = 'wg-broker.freifunk-aachen.de/api/add_key',
peers = {
- --[[ remove sn1 for now
sn120 = {
public_key = 'jp47kK4OEkXf+VSsgKSYGji6mn6vrbXVeBMKwhx1on4=',
endpoint = '01.wg-node.freifunk-aachen.de:51820'
@@ -151,7 +150,6 @@
public_key = 'Zk4LZXhYW+gj9dN/afKH634yYLDNBUDXEFxejHy7wgs=',
endpoint = '01.wg-node.freifunk-aachen.de:51819'
},
- ]]
sn220 = {
public_key = 'MK8M88m2Wfc5EFLQPbCRZwhqfPYMNAh51Jf0d7A78nY=',
endpoint = '02.wg-node.freifunk-aachen.de:51820'
diff --git a/site.mk b/site.mk
index 3ceecb7..1e1d327 100644
--- a/site.mk
+++ b/site.mk
@@ -71,7 +71,7 @@ GLUON_AUTOUPDATER_ENABLED ?= 1
GLUON_REGION ?= eu
# Languages to include
-GLUON_LANGS ?= en de fr
+GLUON_LANGS ?= en de
# Additional package list generated by contrib/genpkglist.py
INCLUDE_USB := \
diff --git a/targets.mk b/targets.mk
index 9a61787..f2c217a 100644
--- a/targets.mk
+++ b/targets.mk
@@ -10,7 +10,6 @@ ipq806x-generic
lantiq-xrx200
lantiq-xway
mediatek-mt7622
-mediatek-filogic
mpc85xx-p1010
mpc85xx-p1020
ramips-mt7620
From a0d2154575150366e133d2f92def320bedf2e7f6 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Thu, 24 Aug 2023 23:18:06 +0200
Subject: [PATCH 090/129] remove broken devices due to firmware size readd ASUS
RT-AX53U and Netgear WAX206
---
patches/targets-ath79-generic.patch | 17 ++++----
patches/targets-lantiq-xrx200-devices.patch | 13 +++++-
patches/targets-mediatek-mt7622.patch | 19 +++++++++
patches/targets-ramips-mt7620.patch | 46 ++++++++++++++++++---
patches/targets-ramips-mt7621.patch | 4 +-
5 files changed, 81 insertions(+), 18 deletions(-)
create mode 100644 patches/targets-mediatek-mt7622.patch
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index b226fc0..60874df 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index 56be6369..dd003630 100644
+index 56be6369..93970064 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
@@ -405,13 +405,6 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', {
@@ -16,7 +16,7 @@ index 56be6369..dd003630 100644
device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', {
packages = ATH10K_PACKAGES_QCA9880,
})
-@@ -434,40 +427,17 @@ device('tp-link-archer-d50-v1', 'tplink_archer-d50-v1', {
+@@ -434,33 +427,7 @@ device('tp-link-archer-d50-v1', 'tplink_archer-d50-v1', {
broken = true, -- 64M ath9k + ath10k & power LED not working
})
@@ -47,10 +47,10 @@ index 56be6369..dd003630 100644
-})
-device('tp-link-cpe510-v2', 'tplink_cpe510-v2')
-device('tp-link-cpe510-v3', 'tplink_cpe510-v3')
--
+
device('tp-link-cpe710-v1', 'tplink_cpe710-v1')
- device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
+@@ -468,6 +435,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
packages = ATH10K_PACKAGES_QCA9888,
})
@@ -61,7 +61,7 @@ index 56be6369..dd003630 100644
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
-@@ -480,11 +450,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', {
+@@ -480,11 +451,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', {
},
})
@@ -78,7 +78,7 @@ index 56be6369..dd003630 100644
device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', {
manifest_aliases = {
-@@ -503,20 +473,6 @@ device('tp-link-tl-wr1043nd-v4', 'tplink_tl-wr1043nd-v4', {
+@@ -503,19 +474,6 @@ device('tp-link-tl-wr1043nd-v4', 'tplink_tl-wr1043nd-v4', {
})
device('tp-link-tl-wr1043n-v5', 'tplink_tl-wr1043n-v5')
@@ -95,11 +95,10 @@ index 56be6369..dd003630 100644
- 'tp-link-wbs510-v1.20', -- upgrade from OpenWrt 19.07
- },
-})
--
+
-- Ubiquiti
- -- device('ubiquiti-nanostation-loco-m-xw', 'ubnt_nanostation-loco-m-xw', {
-@@ -581,3 +537,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -581,3 +539,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch
index da17e13..2afd2e5 100644
--- a/patches/targets-lantiq-xrx200-devices.patch
+++ b/patches/targets-lantiq-xrx200-devices.patch
@@ -58,7 +58,7 @@ index 00000000..9b7a21f9
+ caldata_extract_ubi "caldata" 0x1000 0x1000
+ ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) 2) 0x10c
diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200
-index f54cd87f..80f0659d 100644
+index f54cd87f..57d974cb 100644
--- a/targets/lantiq-xrx200
+++ b/targets/lantiq-xrx200
@@ -30,6 +30,10 @@ device('avm-fritz-box-3370-rev-2-micron-nand', 'avm_fritz3370-rev2-micron', {
@@ -83,3 +83,14 @@ index f54cd87f..80f0659d 100644
device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', {
factory = false,
aliases = {'o2-box-6431'},
+@@ -59,10 +67,6 @@ device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', {
+ -- used as WAN ports. Clients connected to these
+ -- ports will be connected to your private network.
+
+-device('tp-link-td-w8970', 'tplink_tdw8970', {
+- factory = false,
+-})
+-
+ device('tp-link-td-w8980', 'tplink_tdw8980', {
+ factory = false,
+ aliases = {'tp-link-td-w9980'},
diff --git a/patches/targets-mediatek-mt7622.patch b/patches/targets-mediatek-mt7622.patch
new file mode 100644
index 0000000..f93b10a
--- /dev/null
+++ b/patches/targets-mediatek-mt7622.patch
@@ -0,0 +1,19 @@
+diff --git a/targets/mediatek-mt7622 b/targets/mediatek-mt7622
+index 8376c397..e93f95f4 100644
+--- a/targets/mediatek-mt7622
++++ b/targets/mediatek-mt7622
+@@ -11,6 +11,14 @@ device('ubiquiti-unifi-6-lr-v1', 'ubnt_unifi-6-lr-v1', {
+ manifest_aliases = {'ubiquiti-unifi-6-lr'},
+ })
+
++
++-- Netgear
++
++device('netgear-wax206', 'netgear_wax206', {
++ factory_ext = '.img',
++})
++
++
+ -- Xiaomi
+
+ device('xiaomi-redmi-router-ax6s', 'xiaomi_redmi-router-ax6s', {
diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch
index 79747a9..7351137 100644
--- a/patches/targets-ramips-mt7620.patch
+++ b/patches/targets-ramips-mt7620.patch
@@ -1,11 +1,23 @@
diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620
-index fbf57ba8..c9fd5627 100644
+index fbf57ba8..de1861a0 100644
--- a/targets/ramips-mt7620
+++ b/targets/ramips-mt7620
-@@ -31,14 +31,6 @@ device('netgear-ex3700', 'netgear_ex3700', {
-
- -- Nexx
+@@ -19,48 +19,6 @@ device('gl-mt750', 'glinet_gl-mt750', {
+ factory = false,
+ })
+--- Netgear
+-
+-device('netgear-ex3700', 'netgear_ex3700', {
+- aliases = {
+- 'netgear-ex3800',
+- },
+- manifest_aliases = {'netgear-ex3700-ex3800'},
+- factory_ext = '.chk',
+-})
+-
+--- Nexx
+-
-device('nexx-wt3020-8m', 'nexx_wt3020-8m', {
- aliases = {
- 'nexx-wt3020ad',
@@ -14,6 +26,28 @@ index fbf57ba8..c9fd5627 100644
- },
-})
-
- -- TP-Link
+--- TP-Link
+-
+-local tplink_region_suffix = ''
+-if (env.GLUON_REGION or '') ~= '' then
+- tplink_region_suffix = '-' .. env.GLUON_REGION
+-end
+-
+-device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', {
+- factory = false,
+-})
+-
+-device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', {
+- factory = false,
+-})
+-
+-device('tp-link-archer-c20i', 'tplink_archer-c20i')
+-
+-device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', {
+- factory = '-squashfs-factory' .. tplink_region_suffix,
+- manifest_aliases = {'tp-link-archer-c50'},
+-})
+-
+
+ -- Xiaomi
- local tplink_region_suffix = ''
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index c7e5098..0413644 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 6f9fadbc..cb699c68 100644
+index 6f9fadbc..cf9e3116 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
@@ -7,6 +7,10 @@ device('asus-rt-ac57u-v1', 'asus_rt-ac57u-v1', {
@@ -13,7 +13,7 @@ index 6f9fadbc..cb699c68 100644
-- Cudy
-@@ -49,6 +59,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', {
+@@ -49,6 +53,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', {
device('mercusys-mr70x-v1', 'mercusys_mr70x-v1')
From 35dce81bffd39ed9e36d5f5a509278f685c0d257 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Wed, 23 Aug 2023 05:00:18 +0000
Subject: [PATCH 091/129] Makefile fixes
- gluon-update: set GLUON_GIT_URL on every update
in-case it was modified in release.mk
else changing it would require make gluon-clean
- improve text output of make sign (silence commands)
invert ifdef, sign is supposed to error when GLUON_DEVICES is
set, not when it's unset
---
Makefile | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index 2de169a..2dbd0f7 100644
--- a/Makefile
+++ b/Makefile
@@ -108,6 +108,7 @@ $(GLUON_BUILD_DIR)/.git: | $(GLUON_BUILD_DIR)
@$(GLUON_GIT) remote add origin $(GLUON_GIT_URL)
gluon-update: | $(GLUON_BUILD_DIR)/.git
+ @$(GLUON_GIT) remote set-url origin $(GLUON_GIT_URL)
@$(GLUON_GIT) fetch --tags origin $(GLUON_GIT_REF)
@$(GLUON_GIT) checkout master >/dev/null 2>&1 || exit 0
@$(GLUON_GIT) reset --hard FETCH_HEAD
@@ -119,9 +120,10 @@ gluon-update: | $(GLUON_BUILD_DIR)/.git
all: manifest
sign: manifest | $(SECRET_KEY_FILE)
-ifndef GLUON_DEVICES
- echo "make sign hasn't been designed to work while GLUON_DEVICES is set."
- exit 1
+ifdef DEVICE_INFO
+ @echo
+ @echo "make sign hasn't been designed to work while GLUON_DEVICES is set."
+ @exit 1
endif
@for branch in experimental beta stable; do \
echo ''; \
From bed128a38ce80c7366373d14c551ffccd8681af2 Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Wed, 23 Aug 2023 05:03:46 +0000
Subject: [PATCH 092/129] Update to Gluon master (OpenWrt 23)
make update-patches
---
patches/add-covr-x1860.patch | 8 ++++----
patches/targets-ath79-generic.patch | 2 +-
patches/targets-ipq40xx-generic.patch | 4 ++--
patches/targets-lantiq-xrx200-devices.patch | 4 ++--
patches/targets-ramips-mt7621.patch | 4 ++--
release.mk | 4 ++--
6 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch
index b2865cb..332619c 100644
--- a/patches/add-covr-x1860.patch
+++ b/patches/add-covr-x1860.patch
@@ -1,8 +1,8 @@
-diff --git a/patches/openwrt/0006-procd-add-Dlink-sge-image.patch b/patches/openwrt/0006-procd-add-Dlink-sge-image.patch
+diff --git a/patches/openwrt/0007-procd-add-Dlink-sge-image.patch b/patches/openwrt/0007-procd-add-Dlink-sge-image.patch
new file mode 100644
index 00000000..a84b7335
--- /dev/null
-+++ b/patches/openwrt/0006-procd-add-Dlink-sge-image.patch
++++ b/patches/openwrt/0007-procd-add-Dlink-sge-image.patch
@@ -0,0 +1,885 @@
+From: Roland <75312877+RolandoMagico@users.noreply.github.com>
+Date: Mon, 26 Jun 2023 18:03:51 +0200
@@ -889,11 +889,11 @@ index 00000000..a84b7335
+++w1+nGS0KL2+sJGFlDvc7fHJmVFZBqWeSQWPJTHimLI9yaIVS5mEnuBjKZpdUB57T
+++-----END RSA PRIVATE KEY-----
+++)";
-diff --git a/patches/openwrt/0007-add-Dlink-COVR-X1860.patch b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch
+diff --git a/patches/openwrt/0008-add-Dlink-COVR-X1860.patch b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch
new file mode 100644
index 00000000..9f40638e
--- /dev/null
-+++ b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch
++++ b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch
@@ -0,0 +1,319 @@
+From: Roland <75312877+RolandoMagico@users.noreply.github.com>
+Date: Mon, 26 Jun 2023 18:03:51 +0200
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 60874df..9c1eebd 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index 56be6369..93970064 100644
+index aafcb22f..7db926b3 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
@@ -405,13 +405,6 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', {
diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch
index 78511e2..1cad386 100644
--- a/patches/targets-ipq40xx-generic.patch
+++ b/patches/targets-ipq40xx-generic.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index a041130a..21bb3311 100644
+index b6a49ca7..96765dc1 100644
--- a/targets/ipq40xx-generic
+++ b/targets/ipq40xx-generic
-@@ -92,6 +92,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
+@@ -73,6 +73,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
device('linksys-ea6350v3', 'linksys_ea6350v3')
diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch
index 2afd2e5..2cccbd7 100644
--- a/patches/targets-lantiq-xrx200-devices.patch
+++ b/patches/targets-lantiq-xrx200-devices.patch
@@ -1,8 +1,8 @@
-diff --git a/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
+diff --git a/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
new file mode 100644
index 00000000..9b7a21f9
--- /dev/null
-+++ b/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
++++ b/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
@@ -0,0 +1,53 @@
+From: Felix Baumann
+Date: Tue, 28 Feb 2023 04:21:07 +0100
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index 0413644..07a43a5 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 6f9fadbc..cf9e3116 100644
+index a4d67702..cb699c68 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
@@ -7,6 +7,10 @@ device('asus-rt-ac57u-v1', 'asus_rt-ac57u-v1', {
@@ -13,7 +13,7 @@ index 6f9fadbc..cf9e3116 100644
-- Cudy
-@@ -49,6 +53,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', {
+@@ -55,6 +59,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', {
device('mercusys-mr70x-v1', 'mercusys_mr70x-v1')
diff --git a/release.mk b/release.mk
index b6979c4..e75ebb9 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
-GLUON_GIT_URL := https://github.com/herbetom/gluon.git
-GLUON_GIT_REF := 0f0fc05fbcd7012256eb6e9ffd06aaa0540bdeb7 #next-23.05 #v2023.2.x
+GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
+GLUON_GIT_REF := master # v2023.2
From cfbc027e361474ce8d15e31bcc5d7ccbd2b310ac Mon Sep 17 00:00:00 2001
From: FFAC
Date: Fri, 1 Sep 2023 15:32:17 +0000
Subject: [PATCH 093/129] ax53u is upstream, add filogic target, add zyxel
wsm20
---
patches/targets-ramips-mt7621.patch | 30 +++++++++++++++++------------
targets.mk | 1 +
2 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index 07a43a5..c80930e 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,23 +1,30 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index a4d67702..cb699c68 100644
+index be2e2152..4bc21763 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
-@@ -7,6 +7,10 @@ device('asus-rt-ac57u-v1', 'asus_rt-ac57u-v1', {
- },
+@@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', {
+ factory = false,
})
-+device('asus-rt-ax53u', 'asus_rt-ax53u', {
++device('cudy-m1800', 'cudy_m1800', {
+ factory = false,
+})
+
+ device('cudy-x6-v1', 'cudy_x6-v1', {
+ factory = false,
+ })
+@@ -149,9 +159,21 @@ device('zyxel-nwa55axe', 'zyxel_nwa55axe', {
+ broken = true, -- Missing LED / Reset button
+ })
- -- Cudy
-
-@@ -55,6 +59,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', {
- device('mercusys-mr70x-v1', 'mercusys_mr70x-v1')
++device('zyxel-wsm20', 'zyxel_wsm20', {
++ factory = false,
++})
++
+ -- Devices without WLAN
-+-- MikroTik
++-- Mikrotik
+
+device('mikrotik-routerboard-750gr3', 'mikrotik_routerboard-750gr3', {
+ aliases = {'mikrotik-routerboard-hex-v3'},
@@ -25,7 +32,6 @@ index a4d67702..cb699c68 100644
+ packages = {'-hostapd-mini'},
+})
+
-+
- -- Netgear
+ -- Ubiquiti
- device('netgear-ex6150', 'netgear_ex6150', {
+ device('ubiquiti-edgerouter-x', 'ubnt_edgerouter-x', {
diff --git a/targets.mk b/targets.mk
index f2c217a..9a61787 100644
--- a/targets.mk
+++ b/targets.mk
@@ -10,6 +10,7 @@ ipq806x-generic
lantiq-xrx200
lantiq-xway
mediatek-mt7622
+mediatek-filogic
mpc85xx-p1010
mpc85xx-p1020
ramips-mt7620
From 229db8c0aa9ed17ea5bf2eee197737254a09e9f5 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sat, 30 Sep 2023 15:15:03 +0200
Subject: [PATCH 094/129] update release notes, update to latest gluon
---
CHANGELOG.md | 25 +++++++++++++++++++++++--
modules | 4 ++--
release.mk | 2 +-
3 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1fd4da3..93110c6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,31 @@
# Freifunk Aachen Firmware Changelog
-## v2023.2.0-x
+## v2023.2.0-6
+ - update openwrt to nearly v23.05.0-rc4
+ - update community-packages
+ - zyxel wsm20 is upstream
+
+## v2023.2.0-5
+ - ax53u is upstream,
+ - add filogic target
+ - add zyxel wsm20
+
+## v2023.2.0-4
+ - remove broken devices
+ - enable sn01 supernode
+ - disable french translation
+ - add covr-x1860
+ - add asus-rt-ax53u
+
+## v2023.2.0-3
+ - add recovery and factory for covr-x1860
+
+## v2023.2.0-2
+ - update openwrt to v23.05 branch
## v2023.2.0-1
- switch to openwrt master
- build from gluon master
- - this will be released as v2023.2.1 gluon someday hopefully
+ - this will be released as v2023.2.0 gluon someday hopefully
- remove mbedtls and stay with openssl for now
- switch to ffac-bat4-mesh mesh id
diff --git a/modules b/modules
index a5bfd9a..114fe27 100644
--- a/modules
+++ b/modules
@@ -1,5 +1,5 @@
GLUON_SITE_FEEDS="ffac"
-PACKAGES_FFAC_REPO=https://github.com/ffac/community-packages.git
-PACKAGES_FFAC_COMMIT=b74de3db2965a02603ec7b2a32b719c6418105a2
+PACKAGES_FFAC_REPO=https://github.com/freifunk-gluon/community-packages.git
+PACKAGES_FFAC_COMMIT=ca08c5446221cee0fc3d65b7dff2f12101a3ca59
PACKAGES_FFAC_BRANCH=master
diff --git a/release.mk b/release.mk
index e75ebb9..3d61e08 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := master # v2023.2
+GLUON_GIT_REF := 1b6ddac3c608961399c4877198dd552c12c3f07b # master
From f923ce69a4830cb83ea1dbbc4a414654c84eba81 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Sat, 9 Sep 2023 21:56:01 +0000
Subject: [PATCH 095/129] update patches
---
patches/add-covr-x1860.patch | 4 ++--
patches/targets-bcm2711-raspberry-pi-4.patch | 4 ++--
patches/targets-ramips-mt7621.patch | 12 +++---------
3 files changed, 7 insertions(+), 13 deletions(-)
diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch
index 332619c..46c5440 100644
--- a/patches/add-covr-x1860.patch
+++ b/patches/add-covr-x1860.patch
@@ -1215,10 +1215,10 @@ index 00000000..9f40638e
+ dlink,dir-1960-a1|\
+ dlink,dir-2640-a1|\
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 6f9fadbc..a4d67702 100644
+index c5708838..01b9b94c 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
-@@ -32,6 +32,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', {
+@@ -33,6 +33,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', {
-- D-Link
diff --git a/patches/targets-bcm2711-raspberry-pi-4.patch b/patches/targets-bcm2711-raspberry-pi-4.patch
index 205f61c..13e619e 100644
--- a/patches/targets-bcm2711-raspberry-pi-4.patch
+++ b/patches/targets-bcm2711-raspberry-pi-4.patch
@@ -14,10 +14,10 @@ index 00000000..90420dd0
+ },
+})
diff --git a/targets/targets.mk b/targets/targets.mk
-index 346377ea..e9674f85 100644
+index 3a885f22..77940da5 100644
--- a/targets/targets.mk
+++ b/targets/targets.mk
-@@ -25,5 +25,6 @@ $(eval $(call GluonTarget,x86,64))
+@@ -26,5 +26,6 @@ $(eval $(call GluonTarget,x86,64))
ifneq ($(BROKEN),)
$(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index c80930e..754adb7 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index be2e2152..4bc21763 100644
+index c5708838..d3f83da2 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
@@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', {
@@ -13,14 +13,7 @@ index be2e2152..4bc21763 100644
device('cudy-x6-v1', 'cudy_x6-v1', {
factory = false,
})
-@@ -149,9 +159,21 @@ device('zyxel-nwa55axe', 'zyxel_nwa55axe', {
- broken = true, -- Missing LED / Reset button
- })
-
-+device('zyxel-wsm20', 'zyxel_wsm20', {
-+ factory = false,
-+})
-+
+@@ -156,6 +160,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
-- Devices without WLAN
@@ -31,6 +24,7 @@ index be2e2152..4bc21763 100644
+ factory = false,
+ packages = {'-hostapd-mini'},
+})
++
+
-- Ubiquiti
From 2ac8620f134308a5ef0f08f903e58dd256fb4765 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Sat, 30 Sep 2023 13:26:12 +0000
Subject: [PATCH 096/129] add devices.json output, add unifi-6lr (v2, v3), fix
building BROKEN
---
Makefile | 1 +
patches/targets-mediatek-mt7622.patch | 12 ++++++++++--
site.mk | 6 +++---
3 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/Makefile b/Makefile
index 2dbd0f7..d4bbcb6 100644
--- a/Makefile
+++ b/Makefile
@@ -152,6 +152,7 @@ build: gluon-prepare output-clean
echo 'Copying new opkg keys to $(OPKG_KEY_FOLDER)'; \
cp $(GLUON_BUILD_DIR)/openwrt/key-build* $(OPKG_KEY_FOLDER)/; \
fi
+ cat $(GLUON_BUILD_DIR)/openwrt/bin/targets/*/*/profiles.json | jq -s > output/devices.json
ifndef GLUON_DEVICES
$(eval PACKAGES_BRANCH := $(subst OPENWRT_BRANCH=openwrt,packages,$(shell cat $(GLUON_BUILD_DIR)/modules | grep OPENWRT_BRANCH)))
mkdir -p output/packages/$(PACKAGES_BRANCH)
diff --git a/patches/targets-mediatek-mt7622.patch b/patches/targets-mediatek-mt7622.patch
index f93b10a..41c604a 100644
--- a/patches/targets-mediatek-mt7622.patch
+++ b/patches/targets-mediatek-mt7622.patch
@@ -1,11 +1,19 @@
diff --git a/targets/mediatek-mt7622 b/targets/mediatek-mt7622
-index 8376c397..e93f95f4 100644
+index 8376c397..5c75ac21 100644
--- a/targets/mediatek-mt7622
+++ b/targets/mediatek-mt7622
-@@ -11,6 +11,14 @@ device('ubiquiti-unifi-6-lr-v1', 'ubnt_unifi-6-lr-v1', {
+@@ -11,6 +11,22 @@ device('ubiquiti-unifi-6-lr-v1', 'ubnt_unifi-6-lr-v1', {
manifest_aliases = {'ubiquiti-unifi-6-lr'},
})
++device('ubiquiti-unifi-6-lr-v2', 'ubnt_unifi-6-lr-v2', {
++ factory = false,
++})
++
++device('ubiquiti-unifi-6-lr-v3', 'ubnt_unifi-6-lr-v3', {
++ factory = false,
++})
++
+
+-- Netgear
+
diff --git a/site.mk b/site.mk
index 1e1d327..d9c2f0a 100644
--- a/site.mk
+++ b/site.mk
@@ -49,15 +49,15 @@ GLUON_SITE_PACKAGES_standard := $(GLUON_SITE_PACKAGES_standard:\n= )
# Build everything by default
ifeq ($(BROKEN),0)
- override BROKEN :=
+override BROKEN :=
else
- BROKEN := 1
+export BROKEN := 1
endif
GLUON_DEPRECATED := upgrade
GLUON_OUTPUTDIR := ${GLUON_SITEDIR}/output
ifdef GLUON_DEVICES
- GLUON_OUTPUTDIR := $(GLUON_SITEDIR)/devices
+GLUON_OUTPUTDIR := $(GLUON_SITEDIR)/devices
endif
GLUON_PACKAGEDIR := $(GLUON_OUTPUTDIR)/packages/modules
From 2a9a263dc146bcc861c2fdb6272ad80f912239f6 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Sat, 30 Sep 2023 14:05:42 +0000
Subject: [PATCH 097/129] make update-patches
---
patches/010-primary-mac.patch | 2 +-
patches/add-covr-x1860.patch | 12 ++++++------
patches/targets-ramips-mt7621.patch | 4 ++--
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/patches/010-primary-mac.patch b/patches/010-primary-mac.patch
index c008a9c..74c385d 100644
--- a/patches/010-primary-mac.patch
+++ b/patches/010-primary-mac.patch
@@ -1,5 +1,5 @@
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-index e0b919f3..e56675e3 100755
+index 9f92b5b2..5e8c5c1b 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
@@ -81,6 +81,8 @@ local primary_addrs = {
diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch
index 46c5440..f4cdd67 100644
--- a/patches/add-covr-x1860.patch
+++ b/patches/add-covr-x1860.patch
@@ -891,7 +891,7 @@ index 00000000..a84b7335
+++)";
diff --git a/patches/openwrt/0008-add-Dlink-COVR-X1860.patch b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch
new file mode 100644
-index 00000000..9f40638e
+index 00000000..263f2408
--- /dev/null
+++ b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch
@@ -0,0 +1,319 @@
@@ -1108,7 +1108,7 @@ index 00000000..9f40638e
++ };
++};
+diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
-+index fa4c83dbe18db3c5978c755695caf519327e89f4..787b0fd6c647579459b5ac3af97d3b4d150fd571 100644
++index 962d7ef44017d1ead2a44eb67cac041220709ca4..e3799e9319404297bc1faf945dab83117b6d9499 100644
+--- a/target/linux/ramips/image/mt7621.mk
++++ b/target/linux/ramips/image/mt7621.mk
+@@ -9,6 +9,14 @@ DEFAULT_SOC := mt7621
@@ -1126,7 +1126,7 @@ index 00000000..9f40638e
+ define Build/arcadyan-trx
+ echo -ne "hsqs" > $@.hsqs
+ $(eval trx_magic=$(word 1,$(1)))
-+@@ -569,6 +577,31 @@ define Device/cudy_x6-v2
++@@ -581,6 +589,31 @@ define Device/cudy_x6-v2
+ endef
+ TARGET_DEVICES += cudy_x6-v2
+
@@ -1159,10 +1159,10 @@ index 00000000..9f40638e
+ DEVICE_VENDOR := D-Link
+ DEVICE_MODEL := DAP-1620
+diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
-+index 6057c171922e9861b0928b16352970eaadd54cb1..bc7a05e2fe7541eaa2d78b14f4b66b24e67ca72b 100644
++index 11a7c9465a333ee69b62f59f5e8fd6035c42f51b..feb2a196f582c7a49ae074ce2f387e40a3c8c102 100644
+--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
++++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
-+@@ -92,6 +92,9 @@ ramips_setup_interfaces()
++@@ -93,6 +93,9 @@ ramips_setup_interfaces()
+ zyxel,nt7101)
+ ucidef_set_interfaces_lan_wan "lan" "wan"
+ ;;
@@ -1172,7 +1172,7 @@ index 00000000..9f40638e
+ gnubee,gb-pc1)
+ ucidef_set_interface_lan "ethblack ethblue"
+ ;;
-+@@ -186,6 +189,11 @@ ramips_setup_macs()
++@@ -197,6 +200,11 @@ ramips_setup_macs()
+ lan_mac=$wan_mac
+ label_mac=$wan_mac
+ ;;
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index 754adb7..d2175bd 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index c5708838..d3f83da2 100644
+index 01b9b94c..c9dd2e65 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
@@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', {
@@ -13,7 +13,7 @@ index c5708838..d3f83da2 100644
device('cudy-x6-v1', 'cudy_x6-v1', {
factory = false,
})
-@@ -156,6 +160,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
+@@ -162,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
-- Devices without WLAN
From 0efdaa6501d6514233788046bc3df0a7de1cba5f Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 8 Oct 2023 00:25:17 +0200
Subject: [PATCH 098/129] fixes for building v2023.2.x
---
contrib/genpkglist.py | 39 +++++++++++++++-----------------
patches/targets-ath79-nand.patch | 5 ++--
site.mk | 26 +++++++++++++++------
3 files changed, 40 insertions(+), 30 deletions(-)
diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py
index 07dc00f..f72ebc3 100755
--- a/contrib/genpkglist.py
+++ b/contrib/genpkglist.py
@@ -192,7 +192,7 @@ def render(self):
# package assignment
#
-targets.get('ath79-generic'). \
+targets['ath79-generic']. \
add_pkglist(PKGS_TLS). \
include([ # 7M usable firmware space + USB port
'devolo-wifi-pro-1750e',
@@ -212,19 +212,20 @@ def render(self):
], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \
exclude([
'd-link-dir825b1',
- 'tp-link-re355-v1',
- 'tp-link-re450-v1'
+ 'tp-link-archer-c58-v1',
+ 'tp-link-archer-c25-v1',
+ 'tp-link-archer-c2-v3',
], pkglists=[PKGS_TLS])
-for target in ['ath79-nand', 'ipq40xx-generic', 'ipq806x-generic', 'lantiq-xway', 'mpc85xx-p1010', 'mpc85xx-p1020', 'mvebu-cortexa9', 'rockchip-armv8', 'sunxi-cortexa7']:
- targets.get(target). \
+for target in ['ath79-nand', 'ipq40xx-generic', 'ipq40xx-mikrotik', 'ipq806x-generic', 'lantiq-xway', 'mpc85xx-p1010', 'mpc85xx-p1020', 'mvebu-cortexa9', 'rockchip-armv8', 'sunxi-cortexa7', 'realtek-rtl838x', 'mediatek-filogic']:
+ targets[target]. \
add_pkglist(PKGS_USB). \
add_pkglist(PKGS_USB_NET). \
add_pkglist(PKGS_USB_SERIAL). \
add_pkglist(PKGS_USB_STORAGE). \
add_pkglist(PKGS_TLS)
-targets.get('lantiq-xrx200'). \
+targets['lantiq-xrx200']. \
add_pkglist(PKGS_USB). \
add_pkglist(PKGS_USB_NET). \
add_pkglist(PKGS_USB_SERIAL). \
@@ -234,12 +235,12 @@ def render(self):
'avm-fritz-box-7412',
'tp-link-td-w8970',
'tp-link-td-w8980'
- ], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
+ ], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE, PKGS_TLS])
-targets.get('mpc85xx-p1020').add_pkglist(PKGS_TLS)
+targets['mpc85xx-p1020'].add_pkglist(PKGS_TLS)
for target in ['bcm27xx-bcm2708', 'bcm27xx-bcm2709', 'bcm27xx-bcm2710', 'bcm27xx-bcm2711']:
- targets.get(target). \
+ targets[target]. \
add_pkglist(PKGS_USB). \
add_pkglist(PKGS_USB_NET). \
add_pkglist(PKGS_USB_SERIAL). \
@@ -247,7 +248,7 @@ def render(self):
add_pkglist(PKGS_USB_HID). \
add_pkglist(PKGS_TLS)
-targets.get('mediatek-mt7622'). \
+targets['mediatek-mt7622']. \
add_pkglist(PKGS_USB). \
add_pkglist(PKGS_USB_NET). \
add_pkglist(PKGS_USB_SERIAL). \
@@ -256,7 +257,7 @@ def render(self):
exclude([ # devices without usb ports
'ubiquiti-unifi-6-lr-v1'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
-targets.get('ramips-mt7621'). \
+targets['ramips-mt7621']. \
add_pkglist(PKGS_USB). \
add_pkglist(PKGS_USB_NET). \
add_pkglist(PKGS_USB_SERIAL). \
@@ -267,7 +268,7 @@ def render(self):
'ubiquiti-edgerouter-x',
'ubiquiti-edgerouter-x-sfp'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
-targets.get('ramips-mt7620'). \
+targets['ramips-mt7620']. \
add_pkglist(PKGS_USB). \
add_pkglist(PKGS_USB_NET). \
add_pkglist(PKGS_USB_SERIAL). \
@@ -276,30 +277,26 @@ def render(self):
exclude([ # devices without usb ports
'netgear-ex3700'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
-targets.get('ramips-mt76x8'). \
+targets['ramips-mt76x8']. \
add_pkglist(PKGS_TLS). \
include([ # 7M usable firmware space + USB port
'gl-mt300n-v2',
'gl.inet-microuter-n300',
'netgear-r6120',
- 'ravpower-rp-wd009'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \
- exclude([
- 'tp-link-re305'
- ], pkglists=[PKGS_TLS])
+ 'ravpower-rp-wd009'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
for target in ['x86-64', 'x86-generic', 'x86-geode']:
- targets.get(target). \
+ targets[target]. \
add_pkglist(PKGS_USB). \
add_pkglist(PKGS_USB_NET). \
add_pkglist(PKGS_USB_SERIAL). \
add_pkglist(PKGS_USB_STORAGE). \
add_pkglist(PKGS_PCI). \
add_pkglist(PKGS_PCI_NET). \
- add_pkglist(PKGS_VIRT). \
add_pkglist(PKGS_TLS)
-targets.get('x86-64').add_pkglist(PKGS_VIRT)
-targets.get('x86-legacy').add_pkglist(PKGS_TLS)
+targets['x86-64'].add_pkglist(PKGS_VIRT)
+targets['x86-legacy'].add_pkglist(PKGS_TLS)
if __name__ == '__main__':
for pkglist in pkglists:
diff --git a/patches/targets-ath79-nand.patch b/patches/targets-ath79-nand.patch
index d656aee..96569b5 100644
--- a/patches/targets-ath79-nand.patch
+++ b/patches/targets-ath79-nand.patch
@@ -1,14 +1,15 @@
diff --git a/targets/ath79-nand b/targets/ath79-nand
-index 68bffa4e..ecf712b2 100644
+index 68bffa4e..ed6907d0 100644
--- a/targets/ath79-nand
+++ b/targets/ath79-nand
-@@ -62,6 +62,11 @@ device('zte-mf281', 'zte_mf281', {
+@@ -62,6 +62,12 @@ device('zte-mf281', 'zte_mf281', {
packages = ATH10K_PACKAGES_QCA9888,
})
+device('zte-mf286r', 'zte_mf286r', {
+ broken = true, -- case must be opened to install
+ packages = ATH10K_PACKAGES_QCA9888,
++ factory = false,
+})
+
diff --git a/site.mk b/site.mk
index d9c2f0a..43c6183 100644
--- a/site.mk
+++ b/site.mk
@@ -218,8 +218,9 @@ ifeq ($(GLUON_TARGET),ath79-generic)
GLUON_tp-link-tl-wr1043nd-v4_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
GLUON_tp-link-tl-wr1043n-v5_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
GLUON_d-link-dir825b1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-re355-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-re450-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-archer-c58-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-archer-c25-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-archer-c2-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
endif
# no pkglists for target ath79-mikrotik
@@ -255,8 +256,10 @@ ifeq ($(GLUON_TARGET),ipq40xx-generic)
endif
-# no pkglists for target ipq40xx-mikrotik
+ifeq ($(GLUON_TARGET),ipq40xx-mikrotik)
+ GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+endif
ifeq ($(GLUON_TARGET),ipq806x-generic)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
@@ -266,9 +269,9 @@ endif
ifeq ($(GLUON_TARGET),lantiq-xrx200)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_avm-fritz-box-7412_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
- GLUON_tp-link-td-w8970_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
- GLUON_tp-link-td-w8980_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+ GLUON_avm-fritz-box-7412_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+ GLUON_tp-link-td-w8970_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+ GLUON_tp-link-td-w8980_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
endif
ifeq ($(GLUON_TARGET),lantiq-xway)
@@ -276,6 +279,11 @@ ifeq ($(GLUON_TARGET),lantiq-xway)
endif
+ifeq ($(GLUON_TARGET),mediatek-filogic)
+ GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
ifeq ($(GLUON_TARGET),mediatek-mt7622)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
@@ -318,7 +326,11 @@ ifeq ($(GLUON_TARGET),ramips-mt76x8)
GLUON_gl.inet-microuter-n300_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
GLUON_netgear-r6120_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
GLUON_ravpower-rp-wd009_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_tp-link-re305_SITE_PACKAGES += $(EXCLUDE_TLS)
+endif
+
+ifeq ($(GLUON_TARGET),realtek-rtl838x)
+ GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
endif
ifeq ($(GLUON_TARGET),rockchip-armv8)
From d82b02cbf9beb5c0eef4171bb6ddf0b9995f78fc Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 8 Oct 2023 08:54:18 +0200
Subject: [PATCH 099/129] remove TLS from devices instead of disabling them
---
contrib/genpkglist.py | 22 ++++-
patches/targets-ath79-generic.patch | 91 +--------------------
patches/targets-lantiq-xrx200-devices.patch | 13 +--
patches/targets-ramips-mt7620.patch | 53 ------------
patches/targets-ramips-mt76x8.patch | 15 ----
site.mk | 20 ++++-
6 files changed, 43 insertions(+), 171 deletions(-)
delete mode 100644 patches/targets-ramips-mt7620.patch
delete mode 100644 patches/targets-ramips-mt76x8.patch
diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py
index f72ebc3..faea2fc 100755
--- a/contrib/genpkglist.py
+++ b/contrib/genpkglist.py
@@ -215,6 +215,18 @@ def render(self):
'tp-link-archer-c58-v1',
'tp-link-archer-c25-v1',
'tp-link-archer-c2-v3',
+ 'tp-link-archer-c6-v2-eu-ru-jp',
+ 'tp-link-cpe210-v1',
+ 'tp-link-cpe210-v2',
+ 'tp-link-cpe210-v3',
+ 'tp-link-cpe220-v3',
+ 'tp-link-cpe510-v1',
+ 'tp-link-cpe510-v2',
+ 'tp-link-cpe510-v3',
+ 'tp-link-tl-wr902ac-v1',
+ 'tp-link-wbs210-v1',
+ 'tp-link-wbs210-v2',
+ 'tp-link-wbs510-v1',
], pkglists=[PKGS_TLS])
for target in ['ath79-nand', 'ipq40xx-generic', 'ipq40xx-mikrotik', 'ipq806x-generic', 'lantiq-xway', 'mpc85xx-p1010', 'mpc85xx-p1020', 'mvebu-cortexa9', 'rockchip-armv8', 'sunxi-cortexa7', 'realtek-rtl838x', 'mediatek-filogic']:
@@ -275,7 +287,9 @@ def render(self):
add_pkglist(PKGS_USB_STORAGE). \
add_pkglist(PKGS_TLS). \
exclude([ # devices without usb ports
- 'netgear-ex3700'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
+ 'netgear-ex3700'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \
+ exclude([ # low firmware space
+ 'netgear-ex3700', 'nexx-wt3020-8m', 'tp-link-archer-c2-v1', 'tp-link-archer-c20-v1', 'tp-link-archer-c20i', 'tp-link-archer-c50-v1'], pkglists=[PKGS_TLS])
targets['ramips-mt76x8']. \
add_pkglist(PKGS_TLS). \
@@ -283,7 +297,11 @@ def render(self):
'gl-mt300n-v2',
'gl.inet-microuter-n300',
'netgear-r6120',
- 'ravpower-rp-wd009'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
+ 'ravpower-rp-wd009'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \
+ exclude([ # low firmware space
+ 'netgear-r6020'], pkglists=[PKGS_TLS])
+
+
for target in ['x86-64', 'x86-generic', 'x86-geode']:
targets[target]. \
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 9c1eebd..5a4bf09 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,56 +1,8 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index aafcb22f..7db926b3 100644
+index aafcb22f..608057f5 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -405,13 +405,6 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', {
- class = 'tiny', -- 64M ath9k + ath10k
- })
-
--device('tp-link-archer-c6-v2-eu-ru-jp', 'tplink_archer-c6-v2', {
-- packages = ATH10K_PACKAGES_QCA9888,
-- manifest_aliases = {
-- 'tp-link-archer-c6-v2', -- Upgrade from OpenWrt 19.07
-- },
--})
--
- device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', {
- packages = ATH10K_PACKAGES_QCA9880,
- })
-@@ -434,33 +427,7 @@ device('tp-link-archer-d50-v1', 'tplink_archer-d50-v1', {
- broken = true, -- 64M ath9k + ath10k & power LED not working
- })
-
--device('tp-link-cpe210-v1', 'tplink_cpe210-v1', {
-- manifest_aliases = {
-- 'tp-link-cpe210-v1.0', -- Upgrade from OpenWrt 19.07
-- 'tp-link-cpe210-v1.1', -- Upgrade from OpenWrt 19.07
-- },
--})
--device('tp-link-cpe210-v2', 'tplink_cpe210-v2', {
-- manifest_aliases = {
-- 'tp-link-cpe210-v2.0', -- Upgrade from OpenWrt 19.07
-- },
--})
--device('tp-link-cpe210-v3', 'tplink_cpe210-v3', {
-- manifest_aliases = {
-- 'tp-link-cpe210-v3.0', -- Upgrade from OpenWrt 19.07
-- 'tp-link-cpe210-v3.1', -- Upgrade from OpenWrt 19.07
-- 'tp-link-cpe210-v3.20', -- Upgrade from OpenWrt 19.07
-- },
--})
- device('tp-link-cpe220-v3', 'tplink_cpe220-v3')
--device('tp-link-cpe510-v1', 'tplink_cpe510-v1', {
-- manifest_aliases = {
-- 'tp-link-cpe510-v1.0', -- upgrade from OpenWrt 19.07
-- 'tp-link-cpe510-v1.1', -- upgrade from OpenWrt 19.07
-- },
--})
--device('tp-link-cpe510-v2', 'tplink_cpe510-v2')
--device('tp-link-cpe510-v3', 'tplink_cpe510-v3')
-
- device('tp-link-cpe710-v1', 'tplink_cpe710-v1')
-
-@@ -468,6 +435,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
+@@ -468,6 +468,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
packages = ATH10K_PACKAGES_QCA9888,
})
@@ -61,44 +13,7 @@ index aafcb22f..7db926b3 100644
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
-@@ -480,11 +451,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', {
- },
- })
-
--device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
-- broken = true, -- OOM with 5GHz enabled in most environments
-- class = 'tiny', -- 64M ath9k + ath10k
--})
-+-- device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
-+-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
-+-- broken = true, -- OOM with 5GHz enabled in most environments
-+-- class = 'tiny', -- 64M ath9k + ath10k
-+-- })
-
- device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', {
- manifest_aliases = {
-@@ -503,19 +474,6 @@ device('tp-link-tl-wr1043nd-v4', 'tplink_tl-wr1043nd-v4', {
- })
- device('tp-link-tl-wr1043n-v5', 'tplink_tl-wr1043n-v5')
-
--device('tp-link-wbs210-v1', 'tplink_wbs210-v1', {
-- manifest_aliases = {
-- 'tp-link-wbs210-v1.20', -- upgrade from OpenWrt 19.07
-- },
--})
--
--device('tp-link-wbs210-v2', 'tplink_wbs210-v2')
--
--device('tp-link-wbs510-v1', 'tplink_wbs510-v1', {
-- manifest_aliases = {
-- 'tp-link-wbs510-v1.20', -- upgrade from OpenWrt 19.07
-- },
--})
-
- -- Ubiquiti
-
-@@ -581,3 +539,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -581,3 +585,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch
index 2cccbd7..0a6ddf1 100644
--- a/patches/targets-lantiq-xrx200-devices.patch
+++ b/patches/targets-lantiq-xrx200-devices.patch
@@ -58,7 +58,7 @@ index 00000000..9b7a21f9
+ caldata_extract_ubi "caldata" 0x1000 0x1000
+ ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) 2) 0x10c
diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200
-index f54cd87f..57d974cb 100644
+index f54cd87f..80f0659d 100644
--- a/targets/lantiq-xrx200
+++ b/targets/lantiq-xrx200
@@ -30,6 +30,10 @@ device('avm-fritz-box-3370-rev-2-micron-nand', 'avm_fritz3370-rev2-micron', {
@@ -83,14 +83,3 @@ index f54cd87f..57d974cb 100644
device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', {
factory = false,
aliases = {'o2-box-6431'},
-@@ -59,10 +67,6 @@ device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', {
- -- used as WAN ports. Clients connected to these
- -- ports will be connected to your private network.
-
--device('tp-link-td-w8970', 'tplink_tdw8970', {
-- factory = false,
--})
--
- device('tp-link-td-w8980', 'tplink_tdw8980', {
- factory = false,
- aliases = {'tp-link-td-w9980'},
diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch
deleted file mode 100644
index 7351137..0000000
--- a/patches/targets-ramips-mt7620.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620
-index fbf57ba8..de1861a0 100644
---- a/targets/ramips-mt7620
-+++ b/targets/ramips-mt7620
-@@ -19,48 +19,6 @@ device('gl-mt750', 'glinet_gl-mt750', {
- factory = false,
- })
-
---- Netgear
--
--device('netgear-ex3700', 'netgear_ex3700', {
-- aliases = {
-- 'netgear-ex3800',
-- },
-- manifest_aliases = {'netgear-ex3700-ex3800'},
-- factory_ext = '.chk',
--})
--
---- Nexx
--
--device('nexx-wt3020-8m', 'nexx_wt3020-8m', {
-- aliases = {
-- 'nexx-wt3020ad',
-- 'nexx-wt3020f',
-- 'nexx-wt3020h',
-- },
--})
--
---- TP-Link
--
--local tplink_region_suffix = ''
--if (env.GLUON_REGION or '') ~= '' then
-- tplink_region_suffix = '-' .. env.GLUON_REGION
--end
--
--device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', {
-- factory = false,
--})
--
--device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', {
-- factory = false,
--})
--
--device('tp-link-archer-c20i', 'tplink_archer-c20i')
--
--device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', {
-- factory = '-squashfs-factory' .. tplink_region_suffix,
-- manifest_aliases = {'tp-link-archer-c50'},
--})
--
-
- -- Xiaomi
-
diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch
deleted file mode 100644
index 9d4ad12..0000000
--- a/patches/targets-ramips-mt76x8.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8
-index 1e27ac35..10ef9d65 100644
---- a/targets/ramips-mt76x8
-+++ b/targets/ramips-mt76x8
-@@ -20,10 +20,6 @@ device('gl.inet-vixmini', 'glinet_vixmini', {
-
- -- Netgear
-
--device('netgear-r6020', 'netgear_r6020', {
-- factory_ext = '.img',
--})
--
- device('netgear-r6120', 'netgear_r6120', {
- factory_ext = '.img',
- })
diff --git a/site.mk b/site.mk
index 43c6183..ca7d3b7 100644
--- a/site.mk
+++ b/site.mk
@@ -221,6 +221,18 @@ ifeq ($(GLUON_TARGET),ath79-generic)
GLUON_tp-link-archer-c58-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
GLUON_tp-link-archer-c25-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
GLUON_tp-link-archer-c2-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-archer-c6-v2-eu-ru-jp_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-cpe210-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-cpe210-v2_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-cpe210-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-cpe220-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-cpe510-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-cpe510-v2_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-cpe510-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-tl-wr902ac-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-wbs210-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-wbs210-v2_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-wbs510-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
endif
# no pkglists for target ath79-mikrotik
@@ -308,7 +320,12 @@ endif
ifeq ($(GLUON_TARGET),ramips-mt7620)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_netgear-ex3700_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+ GLUON_netgear-ex3700_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+ GLUON_nexx-wt3020-8m_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-archer-c2-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-archer-c20-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-archer-c20i_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-archer-c50-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
endif
ifeq ($(GLUON_TARGET),ramips-mt7621)
@@ -326,6 +343,7 @@ ifeq ($(GLUON_TARGET),ramips-mt76x8)
GLUON_gl.inet-microuter-n300_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
GLUON_netgear-r6120_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
GLUON_ravpower-rp-wd009_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+ GLUON_netgear-r6020_SITE_PACKAGES += $(EXCLUDE_TLS)
endif
ifeq ($(GLUON_TARGET),realtek-rtl838x)
From 65526ee6d1d22820d2b50423d4baaea3696d8ab0 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Mon, 9 Oct 2023 11:47:41 +0200
Subject: [PATCH 100/129] remove TLS from some ath79-generic devices fix too
large output binary
---
contrib/genpkglist.py | 5 +++++
site.mk | 5 +++++
2 files changed, 10 insertions(+)
diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py
index faea2fc..6720c74 100755
--- a/contrib/genpkglist.py
+++ b/contrib/genpkglist.py
@@ -216,6 +216,7 @@ def render(self):
'tp-link-archer-c25-v1',
'tp-link-archer-c2-v3',
'tp-link-archer-c6-v2-eu-ru-jp',
+ 'tp-link-archer-d50-v1',
'tp-link-cpe210-v1',
'tp-link-cpe210-v2',
'tp-link-cpe210-v3',
@@ -227,6 +228,10 @@ def render(self):
'tp-link-wbs210-v1',
'tp-link-wbs210-v2',
'tp-link-wbs510-v1',
+ 'ubiquiti-nanostation-m-xw',
+ 'ubiquiti-nanobeam-m5-xw',
+ 'ubiquiti-nanostation-loco-m-xw',
+ 'ubiquiti-unifi-ap',
], pkglists=[PKGS_TLS])
for target in ['ath79-nand', 'ipq40xx-generic', 'ipq40xx-mikrotik', 'ipq806x-generic', 'lantiq-xway', 'mpc85xx-p1010', 'mpc85xx-p1020', 'mvebu-cortexa9', 'rockchip-armv8', 'sunxi-cortexa7', 'realtek-rtl838x', 'mediatek-filogic']:
diff --git a/site.mk b/site.mk
index ca7d3b7..3382c47 100644
--- a/site.mk
+++ b/site.mk
@@ -222,6 +222,7 @@ ifeq ($(GLUON_TARGET),ath79-generic)
GLUON_tp-link-archer-c25-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
GLUON_tp-link-archer-c2-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
GLUON_tp-link-archer-c6-v2-eu-ru-jp_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_tp-link-archer-d50-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
GLUON_tp-link-cpe210-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
GLUON_tp-link-cpe210-v2_SITE_PACKAGES += $(EXCLUDE_TLS)
GLUON_tp-link-cpe210-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
@@ -233,6 +234,10 @@ ifeq ($(GLUON_TARGET),ath79-generic)
GLUON_tp-link-wbs210-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
GLUON_tp-link-wbs210-v2_SITE_PACKAGES += $(EXCLUDE_TLS)
GLUON_tp-link-wbs510-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_ubiquiti-nanostation-m-xw_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_ubiquiti-nanobeam-m5-xw_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_ubiquiti-nanostation-loco-m-xw_SITE_PACKAGES += $(EXCLUDE_TLS)
+ GLUON_ubiquiti-unifi-ap_SITE_PACKAGES += $(EXCLUDE_TLS)
endif
# no pkglists for target ath79-mikrotik
From 57c208fb6cd74200ddd2147c92b4ae80e3c17124 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Mon, 16 Oct 2023 21:40:27 +0000
Subject: [PATCH 101/129] add FR3000, FR1750e, Xiaomi AX3600, EAP225v3
---
patches/targets-ath79-generic.patch | 22 +++++++++++++++++++---
patches/targets-ipq40xx-generic.patch | 16 ++++++++++++++--
patches/targets-qualcommax.patch | 19 +++++++++++++++++++
3 files changed, 52 insertions(+), 5 deletions(-)
create mode 100644 patches/targets-qualcommax.patch
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 5a4bf09..29e2160 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,11 +1,27 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index aafcb22f..608057f5 100644
+index aafcb22f..cd697d80 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -468,6 +468,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
+@@ -57,6 +57,10 @@ device('avm-fritz-wlan-repeater-450e', 'avm_fritz450e', {
+ factory = false,
+ })
+
++device('avm-fritz-wlan-repeater-1750e', 'avm_fritz1750e', {
++ factory = false,
++})
++
+ -- Buffalo
+
+ device('buffalo-wzr-hp-ag300h', 'buffalo_wzr-hp-ag300h')
+@@ -468,6 +472,15 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
packages = ATH10K_PACKAGES_QCA9888,
})
++device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', {
++ factory = false,
++ packages = ATH10K_PACKAGES_QCA9888,
++})
++
+device('tp-link-eap225-wall-v2', 'tplink_eap225-wall-v2', {
+ packages = ATH10K_PACKAGES_QCA9888,
+})
@@ -13,7 +29,7 @@ index aafcb22f..608057f5 100644
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
-@@ -581,3 +585,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -581,3 +594,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch
index 1cad386..9e386c0 100644
--- a/patches/targets-ipq40xx-generic.patch
+++ b/patches/targets-ipq40xx-generic.patch
@@ -1,8 +1,20 @@
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index b6a49ca7..96765dc1 100644
+index b6a49ca7..cf281a4b 100644
--- a/targets/ipq40xx-generic
+++ b/targets/ipq40xx-generic
-@@ -73,6 +73,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
+@@ -57,6 +57,11 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', {
+ factory = false,
+ })
+
++device('avm-fritz-repeater-3000', 'avm_fritzrepeater-3000', {
++ factory = false,
++})
++
++
+
+ -- GL.iNet
+
+@@ -73,6 +78,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
device('linksys-ea6350v3', 'linksys_ea6350v3')
diff --git a/patches/targets-qualcommax.patch b/patches/targets-qualcommax.patch
new file mode 100644
index 0000000..efc020f
--- /dev/null
+++ b/patches/targets-qualcommax.patch
@@ -0,0 +1,19 @@
+diff --git a/targets/qualcommax-ipq807x b/targets/qualcommax-ipq807x
+new file mode 100644
+index 00000000..5d70778b
+--- /dev/null
++++ b/targets/qualcommax-ipq807x
+@@ -0,0 +1,3 @@
++device('xiaomi-ax3600', 'xiaomi_ax3600', {
++ broken = true,
++})
+diff --git a/targets/targets.mk b/targets/targets.mk
+index 77940da5..9afa5510 100644
+--- a/targets/targets.mk
++++ b/targets/targets.mk
+@@ -28,4 +28,5 @@ ifneq ($(BROKEN),)
+ $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested
+ $(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested
+ $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support
++$(eval $(call GluonTarget,qualcommax,ipq807x)) # BROKEN: Untested
+ endif
From 867db0a67abc36f9a0497031798c366cf8f8a740 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Mon, 16 Oct 2023 23:19:07 +0000
Subject: [PATCH 102/129] Fixups
add target to targets.mk
rename target qualcommax-ipq807x (master) to ipq807x-generic (release)
remove third radio from Fritz!Repeater 3000 and Xiaomi AX3600
add master patch to improve support for Fritz!Repeater 3000
improve support for Linksys EA/MR8300 and Meraki MR33:
switch to default packages: ath10k instead of ath10k-ct
add QCA9880 packages for Fritz!Repeater 1750e (smallbuffers)
mark the three new devices as broken and one as class tiny
---
patches/targets-ath79-generic.patch | 11 +--
patches/targets-bcm2711-raspberry-pi-4.patch | 11 ---
patches/targets-ipq40xx-generic.patch | 70 +++++++++++++++++++-
patches/targets-ipq807x-generic.patch | 30 +++++++++
patches/targets-mk.patch | 12 ++++
patches/targets-qualcommax.patch | 19 ------
targets.mk | 1 +
7 files changed, 117 insertions(+), 37 deletions(-)
create mode 100644 patches/targets-ipq807x-generic.patch
create mode 100644 patches/targets-mk.patch
delete mode 100644 patches/targets-qualcommax.patch
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 29e2160..bbadb62 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,19 +1,22 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index aafcb22f..cd697d80 100644
+index aafcb22f..71457772 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -57,6 +57,10 @@ device('avm-fritz-wlan-repeater-450e', 'avm_fritz450e', {
+@@ -57,6 +57,13 @@ device('avm-fritz-wlan-repeater-450e', 'avm_fritz450e', {
factory = false,
})
+device('avm-fritz-wlan-repeater-1750e', 'avm_fritz1750e', {
++ packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880,
+ factory = false,
++ broken = true, -- OOM with 5GHz enabled in most environments
++ class = 'tiny', -- 64M ath9k + ath10k
+})
+
-- Buffalo
device('buffalo-wzr-hp-ag300h', 'buffalo_wzr-hp-ag300h')
-@@ -468,6 +472,15 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
+@@ -468,6 +475,15 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
packages = ATH10K_PACKAGES_QCA9888,
})
@@ -29,7 +32,7 @@ index aafcb22f..cd697d80 100644
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
-@@ -581,3 +594,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -581,3 +597,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
diff --git a/patches/targets-bcm2711-raspberry-pi-4.patch b/patches/targets-bcm2711-raspberry-pi-4.patch
index 13e619e..8ca4f48 100644
--- a/patches/targets-bcm2711-raspberry-pi-4.patch
+++ b/patches/targets-bcm2711-raspberry-pi-4.patch
@@ -13,14 +13,3 @@ index 00000000..90420dd0
+ 'raspberry-pi-4-model-b-rev-1.4',
+ },
+})
-diff --git a/targets/targets.mk b/targets/targets.mk
-index 3a885f22..77940da5 100644
---- a/targets/targets.mk
-+++ b/targets/targets.mk
-@@ -26,5 +26,6 @@ $(eval $(call GluonTarget,x86,64))
-
- ifneq ($(BROKEN),)
- $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested
-+$(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested
- $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support
- endif
diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch
index 9e386c0..8239c37 100644
--- a/patches/targets-ipq40xx-generic.patch
+++ b/patches/targets-ipq40xx-generic.patch
@@ -1,25 +1,72 @@
+diff --git a/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch b/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch
+new file mode 100644
+index 00000000..dad7e10b
+--- /dev/null
++++ b/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch
+@@ -0,0 +1,24 @@
++From: Alexander Friese
++Date: Wed, 12 Jul 2023 16:46:01 +0200
++Subject: ipq4019: fix support for AVM FRITZ!Repeater 3000
++
++new versions of the device have NAND with 8bit ECC
++which was not yet supported before. This change removes
++ECC restrictions.
++
++Signed-off-by: Alexander Friese
++
++diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts
++index 41dec72542421d8b2228e3f0432460e75bbcc329..8d88bc1521109f5469a0a7ce893af4b92b4f39ed 100644
++--- a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts
+++++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts
++@@ -121,9 +121,6 @@
++ status = "okay";
++
++ nand@0 {
++- /delete-property/ nand-ecc-strength;
++- /delete-property/ nand-ecc-step-size;
++-
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index b6a49ca7..cf281a4b 100644
+index b6a49ca7..8ddddcd2 100644
--- a/targets/ipq40xx-generic
+++ b/targets/ipq40xx-generic
-@@ -57,6 +57,11 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', {
+@@ -57,6 +57,23 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', {
factory = false,
})
+device('avm-fritz-repeater-3000', 'avm_fritzrepeater-3000', {
+ factory = false,
++ packages = { -- exclude until Gluon supports third radio
++ 'kmod-ath10k',
++ '-kmod-ath10k-ct',
++ '-kmod-ath10k-ct-smallbuffers',
++ 'ath10k-firmware-qca4019',
++ '-ath10k-firmware-qca4019-ct',
++ '-ath10k-firmware-qca9984-ct',
++ '-ath10k-board-qca9984',
++ },
++ broken = true,
++ -- 3rd WiFi radio not supported (5GHz DFS channels 100+)
++ -- outdoor mode is broken due to 5GHz being limited to channels 36-64
+})
+
+
-- GL.iNet
-@@ -73,6 +78,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
+@@ -73,6 +90,36 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
device('linksys-ea6350v3', 'linksys_ea6350v3')
+device('linksys-ea8300-dallas', 'linksys_ea8300', {
+ packages = { -- exclude until Gluon supports third radio
++ 'kmod-ath10k',
++ '-kmod-ath10k-ct',
++ '-kmod-ath10k-ct-smallbuffers',
++ 'ath10k-firmware-qca4019',
++ '-ath10k-firmware-qca4019-ct',
+ '-ath10k-firmware-qca9888-ct',
+ '-ath10k-board-qca9888',
+ },
@@ -30,6 +77,11 @@ index b6a49ca7..cf281a4b 100644
+
+device('linksys-mr8300-dallas', 'linksys_mr8300', {
+ packages = { -- exclude until Gluon supports third radio
++ 'kmod-ath10k',
++ '-kmod-ath10k-ct',
++ '-kmod-ath10k-ct-smallbuffers',
++ 'ath10k-firmware-qca4019',
++ '-ath10k-firmware-qca4019-ct',
+ '-ath10k-firmware-qca9888-ct',
+ '-ath10k-board-qca9888',
+ },
@@ -41,3 +93,15 @@ index b6a49ca7..cf281a4b 100644
-- Meraki
+@@ -80,6 +127,11 @@ device('meraki-mr33-access-point', 'meraki_mr33', {
+ packages = {
+ -- radio0 is monitoring radio - removed for now
+ -- the -ct firmware does not have working mesh
++ 'kmod-ath10k',
++ '-kmod-ath10k-ct',
++ '-kmod-ath10k-ct-smallbuffers',
++ 'ath10k-firmware-qca4019',
++ '-ath10k-firmware-qca4019-ct',
+ '-ath10k-firmware-qca9887-ct',
+ '-ath10k-board-qca9887',
+ },
diff --git a/patches/targets-ipq807x-generic.patch b/patches/targets-ipq807x-generic.patch
new file mode 100644
index 0000000..6222fcd
--- /dev/null
+++ b/patches/targets-ipq807x-generic.patch
@@ -0,0 +1,30 @@
+diff --git a/targets/ipq807x-generic b/targets/ipq807x-generic
+new file mode 100644
+index 00000000..28427b34
+--- /dev/null
++++ b/targets/ipq807x-generic
+@@ -0,0 +1,24 @@
++local ATH10K_PACKAGES_IPQ807X = {
++ -- default: candela tech driver
++}
++
++
++defaults {
++ packages = ATH10K_PACKAGES_IPQ807X,
++}
++
++
++-- Xiaomi
++
++device('xiaomi-ax3600', 'xiaomi_ax3600', {
++ packages = {
++ -- radio0 is monitoring radio - removed for now
++ '-ath10k-firmware-qca9887-ct',
++ '-ath10k-board-qca9887',
++ '-kmod-ath10k-ct-smallbuffers',
++ '-kmod-ath10k-smallbuffers',
++ },
++ broken = true,
++ -- 3rd WiFi radio not supported
++ -- 3rd radio comes with smallbuffers (512MB RAM is not enough next to ath11k)
++})
diff --git a/patches/targets-mk.patch b/patches/targets-mk.patch
new file mode 100644
index 0000000..96ef7ad
--- /dev/null
+++ b/patches/targets-mk.patch
@@ -0,0 +1,12 @@
+diff --git a/targets/targets.mk b/targets/targets.mk
+index 3a885f22..544f252b 100644
+--- a/targets/targets.mk
++++ b/targets/targets.mk
+@@ -26,5 +26,7 @@ $(eval $(call GluonTarget,x86,64))
+
+ ifneq ($(BROKEN),)
+ $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested
++$(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested
+ $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support
++$(eval $(call GluonTarget,ipq807x,generic)) # BROKEN: Untested
+ endif
diff --git a/patches/targets-qualcommax.patch b/patches/targets-qualcommax.patch
deleted file mode 100644
index efc020f..0000000
--- a/patches/targets-qualcommax.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff --git a/targets/qualcommax-ipq807x b/targets/qualcommax-ipq807x
-new file mode 100644
-index 00000000..5d70778b
---- /dev/null
-+++ b/targets/qualcommax-ipq807x
-@@ -0,0 +1,3 @@
-+device('xiaomi-ax3600', 'xiaomi_ax3600', {
-+ broken = true,
-+})
-diff --git a/targets/targets.mk b/targets/targets.mk
-index 77940da5..9afa5510 100644
---- a/targets/targets.mk
-+++ b/targets/targets.mk
-@@ -28,4 +28,5 @@ ifneq ($(BROKEN),)
- $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested
- $(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested
- $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support
-+$(eval $(call GluonTarget,qualcommax,ipq807x)) # BROKEN: Untested
- endif
diff --git a/targets.mk b/targets.mk
index 9a61787..cf942e7 100644
--- a/targets.mk
+++ b/targets.mk
@@ -29,6 +29,7 @@ define GLUON_TARGETS +=
bcm27xx-bcm2710
bcm27xx-bcm2711
mvebu-cortexa9
+ipq807x-generic
endef
endif
From e421884380ed82e4d783843edb7462c32b911e1a Mon Sep 17 00:00:00 2001
From: FFAC
Date: Tue, 17 Oct 2023 00:15:26 +0000
Subject: [PATCH 103/129] add support for new devices
ZTE MF289F
TP-Link Archer AX23
Ubiquiti UniFi nanoHD
Mikrotik WAP AC (D2)
Netgear WAX218
Google WiFi (Gale)
add target ipq40xx-chromium
---
patches/cellular.patch | 19 +++++++--
patches/targets-ipq40xx-chromium.patch | 25 ++++++++++++
patches/targets-ipq40xx-generic.patch | 41 +++++++++++++++++--
patches/targets-ipq40xx-mikrotik.patch | 56 ++++++++++++++++++++++++++
patches/targets-ipq807x-generic.patch | 9 ++++-
patches/targets-mk.patch | 7 ++--
patches/targets-ramips-mt7621.patch | 24 ++++++++++-
targets.mk | 3 +-
8 files changed, 168 insertions(+), 16 deletions(-)
create mode 100644 patches/targets-ipq40xx-chromium.patch
create mode 100644 patches/targets-ipq40xx-mikrotik.patch
diff --git a/patches/cellular.patch b/patches/cellular.patch
index dfe95b7..113c64d 100644
--- a/patches/cellular.patch
+++ b/patches/cellular.patch
@@ -1,8 +1,8 @@
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
-index 0099d1d8..98a21365 100755
+index 0099d1d8..7301eff2 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
-@@ -49,6 +49,7 @@ if platform.match('ath79', 'nand', {
+@@ -49,10 +49,12 @@ if platform.match('ath79', 'nand', {
setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
elseif platform.match('ath79', 'nand', {
'zte,mf281',
@@ -10,11 +10,16 @@ index 0099d1d8..98a21365 100755
}) then
setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15)
elseif platform.match('ipq40xx', 'generic', {
+ 'glinet,gl-ap1300',
++ 'zte,mf289f',
+ }) then
+ setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
+ elseif platform.match('ramips', 'mt7621', {
diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-index ba4b5b48..40728360 100644
+index ba4b5b48..78b51e05 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-@@ -75,6 +75,7 @@ end
+@@ -75,11 +75,13 @@ end
function M.is_cellular_device()
if M.match('ath79', 'nand', {
'zte,mf281',
@@ -22,3 +27,9 @@ index ba4b5b48..40728360 100644
'glinet,gl-xe300',
}) then
return true
+ elseif M.match('ipq40xx', 'generic', {
+ 'glinet,gl-ap1300',
++ 'zte,mf289f',
+ }) then
+ return true
+ elseif M.match('ramips', 'mt7621', {
diff --git a/patches/targets-ipq40xx-chromium.patch b/patches/targets-ipq40xx-chromium.patch
new file mode 100644
index 0000000..7d7a870
--- /dev/null
+++ b/patches/targets-ipq40xx-chromium.patch
@@ -0,0 +1,25 @@
+diff --git a/targets/ipq40xx-chromium b/targets/ipq40xx-chromium
+new file mode 100644
+index 00000000..7dfa219b
+--- /dev/null
++++ b/targets/ipq40xx-chromium
+@@ -0,0 +1,19 @@
++local ATH10K_PACKAGES_IPQ40XX = {
++ 'kmod-ath10k',
++ '-kmod-ath10k-ct',
++ '-kmod-ath10k-ct-smallbuffers',
++ 'ath10k-firmware-qca4019',
++ '-ath10k-firmware-qca4019-ct',
++}
++
++
++defaults {
++ packages = ATH10K_PACKAGES_IPQ40XX,
++}
++
++
++-- Google
++
++device('google-wifi-gale', 'google_wifi', {
++ broken = true, -- can only be flashed by opening the device, to enter devmode
++})
diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch
index 8239c37..802b00f 100644
--- a/patches/targets-ipq40xx-generic.patch
+++ b/patches/targets-ipq40xx-generic.patch
@@ -29,10 +29,26 @@ index 00000000..dad7e10b
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index b6a49ca7..8ddddcd2 100644
+index b6a49ca7..68cb4d55 100644
--- a/targets/ipq40xx-generic
+++ b/targets/ipq40xx-generic
-@@ -57,6 +57,23 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', {
+@@ -14,6 +14,15 @@ local ATH10K_PACKAGES_IPQ40XX_QCA9888 = {
+ 'ath10k-firmware-qca9888',
+ '-ath10k-firmware-qca9888-ct',
+ }
++local ATH10K_PACKAGES_IPQ40XX_QCA9984 = {
++ 'kmod-ath10k',
++ '-kmod-ath10k-ct',
++ '-kmod-ath10k-ct-smallbuffers',
++ 'ath10k-firmware-qca4019',
++ '-ath10k-firmware-qca4019-ct',
++ 'ath10k-firmware-qca9984',
++ '-ath10k-firmware-qca9984-ct',
++}
+
+
+ defaults {
+@@ -57,6 +66,23 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', {
factory = false,
})
@@ -56,7 +72,7 @@ index b6a49ca7..8ddddcd2 100644
-- GL.iNet
-@@ -73,6 +90,36 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
+@@ -73,6 +99,36 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
device('linksys-ea6350v3', 'linksys_ea6350v3')
@@ -93,7 +109,7 @@ index b6a49ca7..8ddddcd2 100644
-- Meraki
-@@ -80,6 +127,11 @@ device('meraki-mr33-access-point', 'meraki_mr33', {
+@@ -80,6 +136,11 @@ device('meraki-mr33-access-point', 'meraki_mr33', {
packages = {
-- radio0 is monitoring radio - removed for now
-- the -ct firmware does not have working mesh
@@ -105,3 +121,20 @@ index b6a49ca7..8ddddcd2 100644
'-ath10k-firmware-qca9887-ct',
'-ath10k-board-qca9887',
},
+@@ -120,6 +181,16 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', {
+ })
+
+
++-- ZTE
++
++device('zte-mf289f', 'zte_mf289f', {
++ packages = ATH10K_PACKAGES_IPQ40XX_QCA9984,
++ broken = true, -- case must be opened to install
++ -- only hw rev T2 was tested, hw rev T1 wasn't (implication: 5GHz was never verified for T1, everything else should be working)
++ factory = false,
++})
++
++
+ -- ZyXEL
+
+ device('zyxel-nbg6617', 'zyxel_nbg6617')
diff --git a/patches/targets-ipq40xx-mikrotik.patch b/patches/targets-ipq40xx-mikrotik.patch
new file mode 100644
index 0000000..772ae11
--- /dev/null
+++ b/patches/targets-ipq40xx-mikrotik.patch
@@ -0,0 +1,56 @@
+diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+index ba4b5b48..52d9f1b1 100644
+--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
++++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+@@ -26,6 +26,8 @@ function M.is_outdoor_device()
+ if M.match('ath79', 'generic', {
+ 'devolo,dvl1750x',
+ 'librerouter,librerouter-v1',
++ 'mikrotik,routerboard-wap-g-5hact2hnd',
++ 'mikrotik,wap-ac',
+ 'plasmacloud,pa300',
+ 'plasmacloud,pa300e',
+ 'tplink,cpe210-v1',
+diff --git a/targets/ipq40xx-mikrotik b/targets/ipq40xx-mikrotik
+index aed02b2a..eb08ef45 100644
+--- a/targets/ipq40xx-mikrotik
++++ b/targets/ipq40xx-mikrotik
+@@ -1,6 +1,27 @@
+ include 'mikrotik.inc'
+
+-local ATH10K_PACKAGES_IPQ40XX_SMALLBUFFERS = {}
++local ATH10K_PACKAGES_IPQ40XX = {
++ 'kmod-ath10k',
++ '-kmod-ath10k-ct',
++ '-kmod-ath10k-ct-smallbuffers',
++ 'ath10k-firmware-qca4019',
++ '-ath10k-firmware-qca4019-ct',
++}
++
++-- enforce mainline ath10k-smallbuffers kmod, fixes 5GHz-OOM for low memory devices
++
++local ATH10K_PACKAGES_IPQ40XX_SMALLBUFFERS = {
++ 'kmod-ath10k-smallbuffers',
++ '-kmod-ath10k-ct',
++ '-kmod-ath10k-ct-smallbuffers',
++ 'ath10k-firmware-qca4019',
++ '-ath10k-firmware-qca4019-ct',
++}
++
++defaults {
++ packages = ATH10K_PACKAGES_IPQ40XX,
++}
++
+
+ device('mikrotik-hap-ac2', 'mikrotik_hap-ac2', {
+ packages = ATH10K_PACKAGES_IPQ40XX_SMALLBUFFERS,
+@@ -10,3 +31,9 @@ device('mikrotik-sxtsq-5-ac-rbsxtsqg-5acd', 'mikrotik_sxtsq-5-ac', {
+ factory = false,
+ aliases = {'mikrotik-discg-5acd'},
+ })
++
++device('mikrotik-wap-ac', 'mikrotik_wap-ac', {
++ aliases = {'mikrotik-routerboard-wap-g-5hacd2hnd'},
++ aliases = {'mikrotik-routerboard-wap-ac-d2'},
++ factory = false,
++})
diff --git a/patches/targets-ipq807x-generic.patch b/patches/targets-ipq807x-generic.patch
index 6222fcd..be90d59 100644
--- a/patches/targets-ipq807x-generic.patch
+++ b/patches/targets-ipq807x-generic.patch
@@ -1,9 +1,9 @@
diff --git a/targets/ipq807x-generic b/targets/ipq807x-generic
new file mode 100644
-index 00000000..28427b34
+index 00000000..aebb8dd9
--- /dev/null
+++ b/targets/ipq807x-generic
-@@ -0,0 +1,24 @@
+@@ -0,0 +1,29 @@
+local ATH10K_PACKAGES_IPQ807X = {
+ -- default: candela tech driver
+}
@@ -14,6 +14,11 @@ index 00000000..28427b34
+}
+
+
++-- Netgear
++
++device('netgear-wax218', 'netgear_wax218')
++
++
+-- Xiaomi
+
+device('xiaomi-ax3600', 'xiaomi_ax3600', {
diff --git a/patches/targets-mk.patch b/patches/targets-mk.patch
index 96ef7ad..3adb047 100644
--- a/patches/targets-mk.patch
+++ b/patches/targets-mk.patch
@@ -1,12 +1,13 @@
diff --git a/targets/targets.mk b/targets/targets.mk
-index 3a885f22..544f252b 100644
+index 3a885f22..52186339 100644
--- a/targets/targets.mk
+++ b/targets/targets.mk
-@@ -26,5 +26,7 @@ $(eval $(call GluonTarget,x86,64))
+@@ -26,5 +26,8 @@ $(eval $(call GluonTarget,x86,64))
ifneq ($(BROKEN),)
$(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested
+$(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested
- $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support
++$(eval $(call GluonTarget,ipq40xx,chromium)) # BROKEN: Untested
+$(eval $(call GluonTarget,ipq807x,generic)) # BROKEN: Untested
+ $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support
endif
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index d2175bd..ebe3f02 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 01b9b94c..c9dd2e65 100644
+index c5708838..3a2c1cd2 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
@@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', {
@@ -13,7 +13,27 @@ index 01b9b94c..c9dd2e65 100644
device('cudy-x6-v1', 'cudy_x6-v1', {
factory = false,
})
-@@ -162,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
+@@ -83,6 +87,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', {
+
+ -- TP-Link
+
++device('tp-link-archer-ax23-v1', 'tplink_archer-ax23-v1')
++
+ device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', {
+ broken = true, -- LAN LED not working - review after resolving #2756
+ })
+@@ -100,6 +106,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', {
+ factory = false,
+ })
+
++device('ubiquiti-unifi-nanohd', 'ubnt_unifi-nanohd', {
++ factory = false,
++})
++
+
+ -- Wavlink
+
+@@ -156,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
-- Devices without WLAN
diff --git a/targets.mk b/targets.mk
index cf942e7..cff818a 100644
--- a/targets.mk
+++ b/targets.mk
@@ -28,8 +28,9 @@ ifneq ($(BROKEN),0)
define GLUON_TARGETS +=
bcm27xx-bcm2710
bcm27xx-bcm2711
-mvebu-cortexa9
+ipq40xx-chromium
ipq807x-generic
+mvebu-cortexa9
endef
endif
From 774934e0e7eb6009c57c18041aae213c4a1f186c Mon Sep 17 00:00:00 2001
From: FFAC
Date: Tue, 17 Oct 2023 01:40:00 +0000
Subject: [PATCH 104/129] update-patches
increase IDs of FFAC OpenWrt patches
---
patches/cellular.patch | 4 ++--
patches/targets-ipq40xx-generic.patch | 12 ++++++++++++
patches/targets-ipq807x-generic.patch | 9 ++++++---
patches/targets-ramips-mt7621.patch | 8 ++++----
4 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/patches/cellular.patch b/patches/cellular.patch
index 113c64d..5de730e 100644
--- a/patches/cellular.patch
+++ b/patches/cellular.patch
@@ -16,10 +16,10 @@ index 0099d1d8..7301eff2 100755
setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
elseif platform.match('ramips', 'mt7621', {
diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-index ba4b5b48..78b51e05 100644
+index 52d9f1b1..6b4b14ed 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-@@ -75,11 +75,13 @@ end
+@@ -77,11 +77,13 @@ end
function M.is_cellular_device()
if M.match('ath79', 'nand', {
'zte,mf281',
diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch
index 802b00f..4d076b3 100644
--- a/patches/targets-ipq40xx-generic.patch
+++ b/patches/targets-ipq40xx-generic.patch
@@ -28,6 +28,18 @@ index 00000000..dad7e10b
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+diff --git a/patches/openwrt/0007-procd-add-Dlink-sge-image.patch b/patches/openwrt/0008-procd-add-Dlink-sge-image.patch
+similarity index 100%
+rename from patches/openwrt/0007-procd-add-Dlink-sge-image.patch
+rename to patches/openwrt/0008-procd-add-Dlink-sge-image.patch
+diff --git a/patches/openwrt/0008-add-Dlink-COVR-X1860.patch b/patches/openwrt/0009-add-Dlink-COVR-X1860.patch
+similarity index 100%
+rename from patches/openwrt/0008-add-Dlink-COVR-X1860.patch
+rename to patches/openwrt/0009-add-Dlink-COVR-X1860.patch
+diff --git a/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
+similarity index 100%
+rename from patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
+rename to patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
index b6a49ca7..68cb4d55 100644
--- a/targets/ipq40xx-generic
diff --git a/patches/targets-ipq807x-generic.patch b/patches/targets-ipq807x-generic.patch
index be90d59..eb31806 100644
--- a/patches/targets-ipq807x-generic.patch
+++ b/patches/targets-ipq807x-generic.patch
@@ -1,9 +1,9 @@
diff --git a/targets/ipq807x-generic b/targets/ipq807x-generic
new file mode 100644
-index 00000000..aebb8dd9
+index 00000000..08c5ab5f
--- /dev/null
+++ b/targets/ipq807x-generic
-@@ -0,0 +1,29 @@
+@@ -0,0 +1,32 @@
+local ATH10K_PACKAGES_IPQ807X = {
+ -- default: candela tech driver
+}
@@ -16,7 +16,9 @@ index 00000000..aebb8dd9
+
+-- Netgear
+
-+device('netgear-wax218', 'netgear_wax218')
++device('netgear-wax218', 'netgear_wax218', {
++ factory = false,
++})
+
+
+-- Xiaomi
@@ -32,4 +34,5 @@ index 00000000..aebb8dd9
+ broken = true,
+ -- 3rd WiFi radio not supported
+ -- 3rd radio comes with smallbuffers (512MB RAM is not enough next to ath11k)
++ factory = false,
+})
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index ebe3f02..a8a5540 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index c5708838..3a2c1cd2 100644
+index 01b9b94c..630fd7ab 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
@@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', {
@@ -13,7 +13,7 @@ index c5708838..3a2c1cd2 100644
device('cudy-x6-v1', 'cudy_x6-v1', {
factory = false,
})
-@@ -83,6 +87,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', {
+@@ -89,6 +93,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', {
-- TP-Link
@@ -22,7 +22,7 @@ index c5708838..3a2c1cd2 100644
device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', {
broken = true, -- LAN LED not working - review after resolving #2756
})
-@@ -100,6 +106,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', {
+@@ -106,6 +112,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', {
factory = false,
})
@@ -33,7 +33,7 @@ index c5708838..3a2c1cd2 100644
-- Wavlink
-@@ -156,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
+@@ -162,6 +172,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
-- Devices without WLAN
From b5958d0dbeb40853475bcdf8d74aa806ed43b777 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Tue, 24 Oct 2023 07:29:12 +0000
Subject: [PATCH 105/129] fix ssid-changer for new devices
---
patches/ssid-changer.patch | 43 +++++++++++++++++++++++++++
patches/targets-ipq807x-generic.patch | 8 ++---
2 files changed, 47 insertions(+), 4 deletions(-)
create mode 100644 patches/ssid-changer.patch
diff --git a/patches/ssid-changer.patch b/patches/ssid-changer.patch
new file mode 100644
index 0000000..a2389f9
--- /dev/null
+++ b/patches/ssid-changer.patch
@@ -0,0 +1,43 @@
+diff --git a/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch b/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch
+new file mode 100644
+index 00000000..e920ea4e
+--- /dev/null
++++ b/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch
+@@ -0,0 +1,37 @@
++From: FFAC
++Date: Wed, 18 Oct 2023 11:41:27 +0000
++Subject: try to fix ssid-changer for 23.05 devices
++
++diff --git a/ffac-ssid-changer/shsrc/ssid-changer.sh b/ffac-ssid-changer/shsrc/ssid-changer.sh
++index f8b80fdb448e5e36093f8146f88c16ee0f2066de..4262e23b083cb5b51c3adb9be34f9c621bf08714 100755
++--- a/ffac-ssid-changer/shsrc/ssid-changer.sh
+++++ b/ffac-ssid-changer/shsrc/ssid-changer.sh
++@@ -10,7 +10,7 @@ safety_exit() {
++ pgrep -f autoupdater >/dev/null && safety_exit 'autoupdater running'
++ UT=$(sed 's/\..*//g' /proc/uptime)
++ [ $UT -gt 60 ] || safety_exit 'less than one minute'
++-[ $(find /var/run -name hostapd-phy* | wc -l) -gt 0 ] || safety_exit 'no hostapd-phy*'
+++[ $(find /var/run -name hostapd-* | wc -l) -gt 0 ] || safety_exit 'no hostapd-*'
++
++ # only once every timeframe minutes the SSID will change to the Offline-SSID
++ # (set to 1 minute to change immediately every time the router gets offline)
++@@ -120,8 +120,8 @@ HUP_NEEDED=0
++ if [ "$CHECK" -gt 0 ] || [ "$DISABLED" = '1' ]; then
++ echo "node is online"
++ LOOP=1
++- # check status for all physical devices
++- for HOSTAPD in $(ls /var/run/hostapd-phy*); do
+++ # check status for all physical and wireless devices
+++ for HOSTAPD in $(ls /var/run/hostapd-*); do
++ ONLINE_SSID="$(echo $ONLINE_SSIDs | awk -F '~' -v l=$((LOOP*2)) '{print $l}')"
++ LOOP=$((LOOP+1))
++ CURRENT_SSID="$(grep "^ssid=$ONLINE_SSID" $HOSTAPD | cut -d"=" -f2)"
++@@ -165,7 +165,7 @@ elif [ "$CHECK" -eq 0 ]; then
++ if [ $OFF_COUNT -ge $(($T / 2)) ]; then
++ # node was offline more times than half of switch_timeframe (or than $FIRST)
++ LOOP=1
++- for HOSTAPD in $(ls /var/run/hostapd-phy*); do
+++ for HOSTAPD in $(ls /var/run/hostapd-*); do
++ ONLINE_SSID="$(echo $ONLINE_SSIDs | awk -F '~' -v l=$((LOOP*2)) '{print $l}')"
++ LOOP=$((LOOP+1))
++ CURRENT_SSID="$(grep "^ssid=$OFFLINE_SSID" $HOSTAPD | cut -d"=" -f2)"
diff --git a/patches/targets-ipq807x-generic.patch b/patches/targets-ipq807x-generic.patch
index eb31806..896bcf4 100644
--- a/patches/targets-ipq807x-generic.patch
+++ b/patches/targets-ipq807x-generic.patch
@@ -10,15 +10,15 @@ index 00000000..08c5ab5f
+
+
+defaults {
-+ packages = ATH10K_PACKAGES_IPQ807X,
++ packages = ATH10K_PACKAGES_IPQ807X
+}
+
+
+-- Netgear
+
-+device('netgear-wax218', 'netgear_wax218', {
-+ factory = false,
-+})
++--device('netgear-wax218', 'netgear_wax218', {
++-- factory = false,
++--})
+
+
+-- Xiaomi
From a60ac8c37c0bdf38c63218b8f47405b08425be60 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Thu, 26 Oct 2023 08:02:29 +0000
Subject: [PATCH 106/129] fix building wax218
---
patches/030-openwrt-ipq807x-initramfs.patch | 40 +++++++++++++++++++++
patches/targets-ipq807x-generic.patch | 10 +++---
2 files changed, 45 insertions(+), 5 deletions(-)
create mode 100644 patches/030-openwrt-ipq807x-initramfs.patch
diff --git a/patches/030-openwrt-ipq807x-initramfs.patch b/patches/030-openwrt-ipq807x-initramfs.patch
new file mode 100644
index 0000000..23d9e9a
--- /dev/null
+++ b/patches/030-openwrt-ipq807x-initramfs.patch
@@ -0,0 +1,40 @@
+diff --git a/patches/openwrt/0011-qualcommax-fix-wax218.patch b/patches/openwrt/0011-qualcommax-fix-wax218.patch
+new file mode 100644
+index 00000000..b8ce5ca6
+--- /dev/null
++++ b/patches/openwrt/0011-qualcommax-fix-wax218.patch
+@@ -0,0 +1,34 @@
++From 02ed2b0271c5e17584884146649d7fb64a9ac35d Mon Sep 17 00:00:00 2001
++From: Florian Maurer
++Date: Thu, 26 Oct 2023 08:40:59 +0200
++Subject: [PATCH] qualcommax: only build initramfs if
++ CONFIG_TARGET_ROOTFS_INITRAMFS is set
++
++Signed-off-by: Florian Maurer
++---
++ target/linux/ipq807x/image/generic.mk | 4 +++-
++ 1 file changed, 3 insertions(+), 1 deletion(-)
++
++diff --git a/target/linux/ipq807x/image/generic.mk b/target/linux/ipq807x/image/generic.mk
++index 124cdfc3b2..fb991156d5 100644
++--- a/target/linux/ipq807x/image/generic.mk
+++++ b/target/linux/ipq807x/image/generic.mk
++@@ -80,15 +80,17 @@ TARGET_DEVICES += edimax_cax1800
++ define Device/netgear_wax218
++ $(call Device/FitImage)
++ $(call Device/UbiFit)
++- ARTIFACTS := web-ui-factory.fit
++ DEVICE_VENDOR := Netgear
++ DEVICE_MODEL := WAX218
++ DEVICE_DTS_CONFIG := config@hk07
++ BLOCKSIZE := 128k
++ PAGESIZE := 2048
++ SOC := ipq8072
+++ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
+++ ARTIFACTS := web-ui-factory.fit
++ ARTIFACT/web-ui-factory.fit := append-image initramfs-uImage.itb | \
++ ubinize-kernel | qsdk-ipq-factory-nand
+++endif
++ DEVICE_PACKAGES := kmod-spi-gpio kmod-spi-bitbang kmod-gpio-nxp-74hc164 \
++ ipq-wifi-netgear_wax218
++ endef
diff --git a/patches/targets-ipq807x-generic.patch b/patches/targets-ipq807x-generic.patch
index 896bcf4..d5533bd 100644
--- a/patches/targets-ipq807x-generic.patch
+++ b/patches/targets-ipq807x-generic.patch
@@ -1,6 +1,6 @@
diff --git a/targets/ipq807x-generic b/targets/ipq807x-generic
new file mode 100644
-index 00000000..08c5ab5f
+index 00000000..efe50f5f
--- /dev/null
+++ b/targets/ipq807x-generic
@@ -0,0 +1,32 @@
@@ -16,9 +16,9 @@ index 00000000..08c5ab5f
+
+-- Netgear
+
-+--device('netgear-wax218', 'netgear_wax218', {
-+-- factory = false,
-+--})
++device('netgear-wax218', 'netgear_wax218', {
++ factory = false,
++})
+
+
+-- Xiaomi
@@ -31,7 +31,7 @@ index 00000000..08c5ab5f
+ '-kmod-ath10k-ct-smallbuffers',
+ '-kmod-ath10k-smallbuffers',
+ },
-+ broken = true,
++ -- broken = true,
+ -- 3rd WiFi radio not supported
+ -- 3rd radio comes with smallbuffers (512MB RAM is not enough next to ath11k)
+ factory = false,
From 19ef6a6552da538061ed70628483395496208e74 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Sun, 29 Oct 2023 11:10:17 +0000
Subject: [PATCH 107/129] fix opkg key folder creation
---
Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index d4bbcb6..4ba2c12 100644
--- a/Makefile
+++ b/Makefile
@@ -148,8 +148,9 @@ build: gluon-prepare output-clean
echo ''Building target $$target''; \
$(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \
done
- @if [ ! -f "$(OPKG_KEY_FOLDER)/key-build" ]; then \
+ @if [ ! -f "$(OPKG_KEY_FOLDER)/key-build" ] && [ -f "$(GLUON_BUILD_DIR)/openwrt/key-build" ]; then \
echo 'Copying new opkg keys to $(OPKG_KEY_FOLDER)'; \
+ mkdir -p $(OPKG_KEY_FOLDER); \
cp $(GLUON_BUILD_DIR)/openwrt/key-build* $(OPKG_KEY_FOLDER)/; \
fi
cat $(GLUON_BUILD_DIR)/openwrt/bin/targets/*/*/profiles.json | jq -s > output/devices.json
From 5c2e34dedee23486219bb5c90032de0568245cf0 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Sun, 29 Oct 2023 20:34:10 +0100
Subject: [PATCH 108/129] add package for zyxel-nwa55axe
---
contrib/genpkglist.py | 9 ++++++++-
site.mk | 11 +++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py
index 6720c74..ed55d6b 100755
--- a/contrib/genpkglist.py
+++ b/contrib/genpkglist.py
@@ -188,6 +188,11 @@ def render(self):
])
pkglists.append(PKGS_TLS)
+PKGS_NSM = PackageList('NSM', [
+ 'ffda-network-setup-mode',
+])
+pkglists.append(PKGS_NSM)
+
#
# package assignment
#
@@ -280,10 +285,12 @@ def render(self):
add_pkglist(PKGS_USB_SERIAL). \
add_pkglist(PKGS_USB_STORAGE). \
add_pkglist(PKGS_TLS). \
+ include(['zyxel-nwa55axe'], pkglists=[PKGS_NSM]). \
exclude([ # devices without usb ports
'netgear-ex6150',
'ubiquiti-edgerouter-x',
- 'ubiquiti-edgerouter-x-sfp'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
+ 'ubiquiti-edgerouter-x-sfp',
+ 'zyxel-nwa55axe'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
targets['ramips-mt7620']. \
add_pkglist(PKGS_USB). \
diff --git a/site.mk b/site.mk
index 3382c47..0d19d2c 100644
--- a/site.mk
+++ b/site.mk
@@ -200,6 +200,12 @@ EXCLUDE_TLS := \
-libustream-openssl \
-openssh-sftp-server
+INCLUDE_NSM := \
+ ffda-network-setup-mode
+
+EXCLUDE_NSM := \
+ -ffda-network-setup-mode
+
ifeq ($(GLUON_TARGET),ath79-generic)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS)
@@ -336,9 +342,11 @@ endif
ifeq ($(GLUON_TARGET),ramips-mt7621)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+ GLUON_zyxel-nwa55axe_SITE_PACKAGES += $(INCLUDE_NSM)
GLUON_netgear-ex6150_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
GLUON_ubiquiti-edgerouter-x_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
GLUON_ubiquiti-edgerouter-x-sfp_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+ GLUON_zyxel-nwa55axe_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
endif
ifeq ($(GLUON_TARGET),ramips-mt76x8)
@@ -356,6 +364,9 @@ ifeq ($(GLUON_TARGET),realtek-rtl838x)
endif
+# no pkglists for target realtek-rtl838x
+
+
ifeq ($(GLUON_TARGET),rockchip-armv8)
GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
From f8bede69f48d4051c8b0fdea48f4da5b73160d51 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Thu, 28 Dec 2023 15:50:53 +0100
Subject: [PATCH 109/129] update modules and community-packages
---
modules | 2 +-
release.mk | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules b/modules
index 114fe27..e0c0781 100644
--- a/modules
+++ b/modules
@@ -1,5 +1,5 @@
GLUON_SITE_FEEDS="ffac"
PACKAGES_FFAC_REPO=https://github.com/freifunk-gluon/community-packages.git
-PACKAGES_FFAC_COMMIT=ca08c5446221cee0fc3d65b7dff2f12101a3ca59
+PACKAGES_FFAC_COMMIT=128ffc19f1960d487616db91e31a7353960657cd
PACKAGES_FFAC_BRANCH=master
diff --git a/release.mk b/release.mk
index 3d61e08..f4f9c61 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := 1b6ddac3c608961399c4877198dd552c12c3f07b # master
+GLUON_GIT_REF := d517e0ff7c065fde70e098f2659a828c02f13ce2 # master
From 24d729d18519fc8d2d3d70d2eb491ba429eb8785 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Thu, 28 Dec 2023 15:51:10 +0100
Subject: [PATCH 110/129] adjust configuration to image-customization.lua
---
contrib/genpkglist.py | 336 ------------------------------------
image-customization.lua | 214 +++++++++++++++++++++++
site.mk | 373 +---------------------------------------
3 files changed, 215 insertions(+), 708 deletions(-)
delete mode 100755 contrib/genpkglist.py
create mode 100644 image-customization.lua
diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py
deleted file mode 100755
index ed55d6b..0000000
--- a/contrib/genpkglist.py
+++ /dev/null
@@ -1,336 +0,0 @@
-#!/usr/bin/env python3
-import os
-from collections import defaultdict
-
-from jinja2 import Template
-
-# path to your gluon checkout, will be used to find targets and devices
-GLUON_DIR = './gluon-build/'
-
-
-class PackageList:
- def __init__(self, name: str, pkgs: list):
- self.name = name
- self.pkgs = pkgs
-
- def __repr__(self):
- return self.name
-
- def __lt__(self, other):
- return self.name < other.name
-
- def render(self):
- return Template("""
-INCLUDE_{{ name }} := \\
-{%- for pkg in pkgs %}
- {{ pkg }}{% if not loop.last %} \\{% endif %}
-{%- endfor %}
-
-EXCLUDE_{{ name }} := \\
-{%- for pkg in pkgs %}
- -{{ pkg }}{% if not loop.last %} \\{% endif %}
-{%- endfor %}""").render(
- name=self.name,
- pkgs=self.pkgs
- )
-
-
-class Target:
- def __init__(self, name):
- self.name = name
- self.devices = set()
- self.pkglists = set()
- self.excludes = defaultdict(set)
- self.includes = defaultdict(set)
-
- def add_device(self, device: str):
- self.devices.add(device)
-
- def add_pkglist(self, pkglist: PackageList):
- self.pkglists.add(pkglist)
- return self
-
- def include(self, devices: [str], pkglists: [PackageList]=None):
- for device in devices:
- assert(device in self.devices), "Device %s not in target %s" % (device, self.name)
- if not pkglists:
- self.includes[device] = self.pkglists
- else:
- self.includes[device] = self.includes[device].union(pkglists)
-
- return self
-
- def exclude(self, devices: [str], pkglists: [PackageList]=None):
- for device in devices:
- assert(device in self.devices), "Device %s not in target %s" % (device, self.name)
- if not pkglists:
- self.excludes[device] = self.pkglists
- else:
- self.excludes[device] = self.excludes[device].union(pkglists)
-
- return self
-
- def render(self):
- if not bool(self.includes) and not self.pkglists:
- return """
-# no pkglists for target %s
-""" % self.name
-
- return Template("""
-ifeq ($(GLUON_TARGET),{{ target }})
- GLUON_SITE_PACKAGES += {% for pkglist in pkglists %}$(INCLUDE_{{ pkglist.name }}){% if not loop.last %} {% endif %}{% endfor %}
-{% for device, include in includes.items() %}
- GLUON_{{ device }}_SITE_PACKAGES += {% for pkglist in include|sort %}$(INCLUDE_{{ pkglist.name }}){% if not loop.last %} {% endif %}{% endfor %}
-{%- endfor %}{% for device, exclude in excludes.items() %}
- GLUON_{{ device }}_SITE_PACKAGES += {% for pkglist in exclude|sort %}$(EXCLUDE_{{ pkglist.name }}){% if not loop.last %} {% endif %}{% endfor %}
-{%- endfor %}
-endif""").render(
- target=self.name,
- pkglists=sorted(self.pkglists),
- excludes=self.excludes,
- includes=self.includes
- )
-
-
-targets = {}
-targetdir = os.path.join(GLUON_DIR, 'targets')
-for targetfile in os.listdir(targetdir):
- if targetfile in ['generic', 'targets.mk'] or targetfile.endswith('.inc'):
- continue
-
- target = Target(targetfile)
- with open(os.path.join(targetdir, targetfile)) as handle:
- for line in handle.readlines():
- if line.startswith('device'):
- target.add_device(line.split('\'')[1])
-
- targets[targetfile] = target
-
-
-#
-# package definitions
-#
-
-pkglists = []
-
-PKGS_USB = PackageList('USB', ['usbutils'])
-pkglists.append(PKGS_USB)
-
-PKGS_USB_HID = PackageList('USB_HID', [
- 'kmod-usb-hid',
- 'kmod-hid-generic'
-])
-pkglists.append(PKGS_USB_HID)
-
-PKGS_USB_SERIAL = PackageList('USB_SERIAL', [
- 'kmod-usb-serial',
- 'kmod-usb-serial-ftdi',
- 'kmod-usb-serial-pl2303'
-])
-pkglists.append(PKGS_USB_SERIAL)
-
-PKGS_USB_STORAGE = PackageList('USB_STORAGE', [
- 'block-mount',
- 'blkid',
- 'kmod-fs-ext4',
- 'kmod-fs-ntfs',
- 'kmod-fs-vfat',
- 'kmod-usb-storage',
- 'kmod-usb-storage-extras', # Card Readers
- 'kmod-usb-storage-uas', # USB Attached SCSI (UAS/UASP)
- 'kmod-nls-base',
- 'kmod-nls-cp1250', # NLS Codepage 1250 (Eastern Europe)
- 'kmod-nls-cp437', # NLS Codepage 437 (United States, Canada)
- 'kmod-nls-cp850', # NLS Codepage 850 (Europe)
- 'kmod-nls-cp852', # NLS Codepage 852 (Europe)
- 'kmod-nls-iso8859-1', # NLS ISO 8859-1 (Latin 1)
- 'kmod-nls-iso8859-13', # NLS ISO 8859-13 (Latin 7; Baltic)
- 'kmod-nls-iso8859-15', # NLS ISO 8859-15 (Latin 9)
- 'kmod-nls-iso8859-2', # NLS ISO 8859-2 (Latin 2)
- 'kmod-nls-utf8' # NLS UTF-8
-])
-pkglists.append(PKGS_USB_STORAGE)
-
-PKGS_USB_NET = PackageList('USB_NET', [
- 'kmod-mii',
- 'kmod-usb-net',
- 'kmod-usb-net-asix',
- 'kmod-usb-net-asix-ax88179',
- 'kmod-usb-net-cdc-eem',
- 'kmod-usb-net-cdc-ether',
- 'kmod-usb-net-cdc-subset',
- 'kmod-usb-net-dm9601-ether',
- 'kmod-usb-net-hso',
- 'kmod-usb-net-ipheth',
- 'kmod-usb-net-mcs7830',
- 'kmod-usb-net-pegasus',
- 'kmod-usb-net-rndis',
- 'kmod-usb-net-rtl8152',
- 'kmod-usb-net-smsc95xx'
-])
-pkglists.append(PKGS_USB_NET)
-
-PKGS_PCI = PackageList('PCI', ['pciutils'])
-pkglists.append(PKGS_PCI)
-
-PKGS_PCI_NET = PackageList('PCI_NET', [
- 'kmod-bnx2' # Broadcom NetExtreme BCM5706/5708/5709/5716
-])
-pkglists.append(PKGS_PCI_NET)
-
-PKGS_VIRT = PackageList('VIRT', ['qemu-ga'])
-pkglists.append(PKGS_VIRT)
-
-PKGS_TLS = PackageList('TLS', [
- 'ca-bundle',
- 'libustream-openssl',
- 'openssh-sftp-server'
-])
-pkglists.append(PKGS_TLS)
-
-PKGS_NSM = PackageList('NSM', [
- 'ffda-network-setup-mode',
-])
-pkglists.append(PKGS_NSM)
-
-#
-# package assignment
-#
-
-targets['ath79-generic']. \
- add_pkglist(PKGS_TLS). \
- include([ # 7M usable firmware space + USB port
- 'devolo-wifi-pro-1750e',
- 'gl.inet-gl-ar150',
- 'gl.inet-gl-ar300m-lite',
- 'gl.inet-gl-ar750',
- 'joy-it-jt-or750i',
- 'netgear-wndr3700-v2',
- 'tp-link-archer-a7-v5',
- 'tp-link-archer-c5-v1',
- 'tp-link-archer-c7-v2',
- 'tp-link-archer-c7-v5',
- 'tp-link-archer-c59-v1',
- 'tp-link-tl-wr842n-v3',
- 'tp-link-tl-wr1043nd-v4',
- 'tp-link-tl-wr1043n-v5'
- ], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \
- exclude([
- 'd-link-dir825b1',
- 'tp-link-archer-c58-v1',
- 'tp-link-archer-c25-v1',
- 'tp-link-archer-c2-v3',
- 'tp-link-archer-c6-v2-eu-ru-jp',
- 'tp-link-archer-d50-v1',
- 'tp-link-cpe210-v1',
- 'tp-link-cpe210-v2',
- 'tp-link-cpe210-v3',
- 'tp-link-cpe220-v3',
- 'tp-link-cpe510-v1',
- 'tp-link-cpe510-v2',
- 'tp-link-cpe510-v3',
- 'tp-link-tl-wr902ac-v1',
- 'tp-link-wbs210-v1',
- 'tp-link-wbs210-v2',
- 'tp-link-wbs510-v1',
- 'ubiquiti-nanostation-m-xw',
- 'ubiquiti-nanobeam-m5-xw',
- 'ubiquiti-nanostation-loco-m-xw',
- 'ubiquiti-unifi-ap',
- ], pkglists=[PKGS_TLS])
-
-for target in ['ath79-nand', 'ipq40xx-generic', 'ipq40xx-mikrotik', 'ipq806x-generic', 'lantiq-xway', 'mpc85xx-p1010', 'mpc85xx-p1020', 'mvebu-cortexa9', 'rockchip-armv8', 'sunxi-cortexa7', 'realtek-rtl838x', 'mediatek-filogic']:
- targets[target]. \
- add_pkglist(PKGS_USB). \
- add_pkglist(PKGS_USB_NET). \
- add_pkglist(PKGS_USB_SERIAL). \
- add_pkglist(PKGS_USB_STORAGE). \
- add_pkglist(PKGS_TLS)
-
-targets['lantiq-xrx200']. \
- add_pkglist(PKGS_USB). \
- add_pkglist(PKGS_USB_NET). \
- add_pkglist(PKGS_USB_SERIAL). \
- add_pkglist(PKGS_USB_STORAGE). \
- add_pkglist(PKGS_TLS). \
- exclude([ # 7M usable firmware space + USB port
- 'avm-fritz-box-7412',
- 'tp-link-td-w8970',
- 'tp-link-td-w8980'
- ], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE, PKGS_TLS])
-
-targets['mpc85xx-p1020'].add_pkglist(PKGS_TLS)
-
-for target in ['bcm27xx-bcm2708', 'bcm27xx-bcm2709', 'bcm27xx-bcm2710', 'bcm27xx-bcm2711']:
- targets[target]. \
- add_pkglist(PKGS_USB). \
- add_pkglist(PKGS_USB_NET). \
- add_pkglist(PKGS_USB_SERIAL). \
- add_pkglist(PKGS_USB_STORAGE). \
- add_pkglist(PKGS_USB_HID). \
- add_pkglist(PKGS_TLS)
-
-targets['mediatek-mt7622']. \
- add_pkglist(PKGS_USB). \
- add_pkglist(PKGS_USB_NET). \
- add_pkglist(PKGS_USB_SERIAL). \
- add_pkglist(PKGS_USB_STORAGE). \
- add_pkglist(PKGS_TLS). \
- exclude([ # devices without usb ports
- 'ubiquiti-unifi-6-lr-v1'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
-
-targets['ramips-mt7621']. \
- add_pkglist(PKGS_USB). \
- add_pkglist(PKGS_USB_NET). \
- add_pkglist(PKGS_USB_SERIAL). \
- add_pkglist(PKGS_USB_STORAGE). \
- add_pkglist(PKGS_TLS). \
- include(['zyxel-nwa55axe'], pkglists=[PKGS_NSM]). \
- exclude([ # devices without usb ports
- 'netgear-ex6150',
- 'ubiquiti-edgerouter-x',
- 'ubiquiti-edgerouter-x-sfp',
- 'zyxel-nwa55axe'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE])
-
-targets['ramips-mt7620']. \
- add_pkglist(PKGS_USB). \
- add_pkglist(PKGS_USB_NET). \
- add_pkglist(PKGS_USB_SERIAL). \
- add_pkglist(PKGS_USB_STORAGE). \
- add_pkglist(PKGS_TLS). \
- exclude([ # devices without usb ports
- 'netgear-ex3700'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \
- exclude([ # low firmware space
- 'netgear-ex3700', 'nexx-wt3020-8m', 'tp-link-archer-c2-v1', 'tp-link-archer-c20-v1', 'tp-link-archer-c20i', 'tp-link-archer-c50-v1'], pkglists=[PKGS_TLS])
-
-targets['ramips-mt76x8']. \
- add_pkglist(PKGS_TLS). \
- include([ # 7M usable firmware space + USB port
- 'gl-mt300n-v2',
- 'gl.inet-microuter-n300',
- 'netgear-r6120',
- 'ravpower-rp-wd009'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \
- exclude([ # low firmware space
- 'netgear-r6020'], pkglists=[PKGS_TLS])
-
-
-
-for target in ['x86-64', 'x86-generic', 'x86-geode']:
- targets[target]. \
- add_pkglist(PKGS_USB). \
- add_pkglist(PKGS_USB_NET). \
- add_pkglist(PKGS_USB_SERIAL). \
- add_pkglist(PKGS_USB_STORAGE). \
- add_pkglist(PKGS_PCI). \
- add_pkglist(PKGS_PCI_NET). \
- add_pkglist(PKGS_TLS)
-
-targets['x86-64'].add_pkglist(PKGS_VIRT)
-targets['x86-legacy'].add_pkglist(PKGS_TLS)
-
-if __name__ == '__main__':
- for pkglist in pkglists:
- print(pkglist.render())
-
- for target in sorted(targets.values(), key=lambda x: x.name):
- print(target.render())
diff --git a/image-customization.lua b/image-customization.lua
new file mode 100644
index 0000000..782f542
--- /dev/null
+++ b/image-customization.lua
@@ -0,0 +1,214 @@
+features {
+ 'autoupdater',
+ 'ebtables-filter-multicast',
+ 'ebtables-filter-ra-dhcp',
+ 'ebtables-limit-arp',
+ 'mesh-batman-adv-15',
+ 'mesh-vpn-wireguard',
+ 'respondd',
+ 'status-page',
+ 'web-advanced',
+ 'web-wizard',
+ 'config-mode-geo-location-osm',
+ 'radv-filterd',
+ 'radvd',
+ 'web-private-wifi',
+}
+
+packages {
+ 'iwinfo',
+ 'ffac-ssid-changer',
+ 'ffac-wg-registration',
+ 'respondd-module-airtime',
+}
+
+if device({
+ 'zte,mf281',
+ 'glinet,gl-xe300',
+ 'glinet,gl-ap1300',
+ 'zte,mf289f',
+ 'wavlink,ws-wn572hp3-4g',
+ 'tplink,tl-mr6400-v5',
+}) then
+ features {
+ 'web-cellular'
+ }
+end
+
+if not device_class('tiny') then
+ packages {
+ 'ffac-autoupdater-wifi-fallback'
+ }
+end
+
+pkgs_usb = {
+ 'usbutils'
+}
+
+pkgs_hid = {
+ 'kmod-usb-hid',
+ 'kmod-hid-generic'
+}
+
+pkgs_usb_serial = {
+ 'kmod-usb-serial',
+ 'kmod-usb-serial-ftdi',
+ 'kmod-usb-serial-pl2303'
+}
+
+pkgs_usb_storage = {
+ 'block-mount',
+ 'blkid',
+ 'kmod-fs-ext4',
+ 'kmod-fs-ntfs',
+ 'kmod-fs-vfat',
+ 'kmod-usb-storage',
+ 'kmod-usb-storage-extras', -- Card Readers
+ 'kmod-usb-storage-uas', -- USB Attached SCSI (UAS/UASP)
+ 'kmod-nls-base',
+ 'kmod-nls-cp1250', -- NLS Codepage 1250 (Eastern Europe)
+ 'kmod-nls-cp437', -- NLS Codepage 437 (United States, Canada)
+ 'kmod-nls-cp850', -- NLS Codepage 850 (Europe)
+ 'kmod-nls-cp852', -- NLS Codepage 852 (Europe)
+ 'kmod-nls-iso8859-1', -- NLS ISO 8859-1 (Latin 1)
+ 'kmod-nls-iso8859-13', -- NLS ISO 8859-13 (Latin 7; Baltic)
+ 'kmod-nls-iso8859-15', -- NLS ISO 8859-15 (Latin 9)
+ 'kmod-nls-iso8859-2', -- NLS ISO 8859-2 (Latin 2)
+ 'kmod-nls-utf8' -- NLS UTF-8
+}
+
+pkgs_usb_net = {
+ 'kmod-mii',
+ 'kmod-usb-net',
+ 'kmod-usb-net-asix',
+ 'kmod-usb-net-asix-ax88179',
+ 'kmod-usb-net-cdc-eem',
+ 'kmod-usb-net-cdc-ether',
+ 'kmod-usb-net-cdc-subset',
+ 'kmod-usb-net-dm9601-ether',
+ 'kmod-usb-net-hso',
+ 'kmod-usb-net-ipheth',
+ 'kmod-usb-net-mcs7830',
+ 'kmod-usb-net-pegasus',
+ 'kmod-usb-net-rndis',
+ 'kmod-usb-net-rtl8152',
+ 'kmod-usb-net-smsc95xx'
+}
+
+pkgs_pci = {
+ 'pciutils',
+ 'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716
+}
+
+pkgs_tls = {
+ 'ca-bundle',
+ 'libustream-openssl',
+ 'openssh-sftp-server'
+}
+
+include_tls = not device({
+ 'd-link-dir825b1',
+ 'tp-link-archer-c58-v1',
+ 'tp-link-archer-c25-v1',
+ 'tp-link-archer-c2-v3',
+ 'tp-link-archer-c6-v2-eu-ru-jp',
+ 'tp-link-archer-d50-v1',
+ 'tp-link-cpe210-v1',
+ 'tp-link-cpe210-v2',
+ 'tp-link-cpe210-v3',
+ 'tp-link-cpe220-v3',
+ 'tp-link-cpe510-v1',
+ 'tp-link-cpe510-v2',
+ 'tp-link-cpe510-v3',
+ 'tp-link-tl-wr902ac-v1',
+ 'tp-link-wbs210-v1',
+ 'tp-link-wbs210-v2',
+ 'tp-link-wbs510-v1',
+ 'ubiquiti-nanostation-m-xw',
+ 'ubiquiti-nanobeam-m5-xw',
+ 'ubiquiti-nanostation-loco-m-xw',
+ 'ubiquiti-unifi-ap',
+
+ 'netgear-ex3700',
+ 'nexx-wt3020-8m',
+ 'tp-link-archer-c2-v1',
+ 'tp-link-archer-c20-v1',
+ 'tp-link-archer-c20i',
+ 'tp-link-archer-c50-v1',
+
+ 'netgear-r6020'
+})
+
+if include_tls then
+ packages(pkgs_tls)
+end
+
+include_usb = true
+
+-- 7M usable firmware space + USB port
+if target('ath79', 'generic') and not device({
+ 'devolo-wifi-pro-1750e',
+ 'gl.inet-gl-ar150',
+ 'gl.inet-gl-ar300m-lite',
+ 'gl.inet-gl-ar750',
+ 'joy-it-jt-or750i',
+ 'netgear-wndr3700-v2',
+ 'tp-link-archer-a7-v5',
+ 'tp-link-archer-c5-v1',
+ 'tp-link-archer-c7-v2',
+ 'tp-link-archer-c7-v5',
+ 'tp-link-archer-c59-v1',
+ 'tp-link-tl-wr842n-v3',
+ 'tp-link-tl-wr1043nd-v4',
+ 'tp-link-tl-wr1043n-v5'
+}) then
+ include_usb = false
+end
+
+if target('ramips', 'mt76x8') and not device({
+ 'gl-mt300n-v2',
+ 'gl.inet-microuter-n300',
+ 'netgear-r6120',
+ 'ravpower-rp-wd009'
+}) then
+ include_usb = false
+end
+
+if target('realtek','rtl838x') then
+ include_usb = false
+end
+
+if device({
+ 'avm-fritz-box-7412',
+ 'tp-link-td-w8970',
+ 'tp-link-td-w8980',
+ 'ubiquiti-unifi-6-lr-v1',
+ 'netgear-ex6150',
+ 'ubiquiti-edgerouter-x',
+ 'ubiquiti-edgerouter-x-sfp',
+ 'zyxel-nwa55axe'}) then
+ include_usb = false
+end
+
+if include_usb then
+ packages(pkgs_usb)
+ packages(pkgs_usb_net)
+ packages(pkgs_usb_serial)
+ packages(pkgs_usb_storage)
+end
+
+if device({'zyxel-nwa55axe'}) then
+ packages {'ffda-network-setup-mode'}
+end
+
+if target('x86', '64') then
+ packages {'qemu-ga'}
+end
+
+if target('x86') and not target('x86', 'legacy') then
+ packages(pkgs_pci)
+end
+
+if target('bcm27xx') then
+ packages(pkgs_hid)
+end
\ No newline at end of file
diff --git a/site.mk b/site.mk
index 0d19d2c..2d966ca 100644
--- a/site.mk
+++ b/site.mk
@@ -1,52 +1,5 @@
## gluon site.mk Freifunk Regio Aachen
-## GLUON_FEATURES
-# Specify Gluon features/packages to enable;
-# Gluon will automatically enable a set of packages
-# depending on the combination of features listed
-define GLUON_FEATURES :=
-autoupdater
-config-mode-geo-location-osm
-ebtables-filter-multicast
-ebtables-filter-ra-dhcp
-ebtables-limit-arp
-mesh-batman-adv-15
-mesh-vpn-wireguard
-radv-filterd
-radvd
-respondd
-status-page
-web-advanced
-web-private-wifi
-web-wizard
-endef
-GLUON_FEATURES := $(GLUON_FEATURES:\n= )
-
-define GLUON_FEATURES_standard :=
-web-cellular
-endef
-# wireless-encryption-wpa3
-# gluon-mesh-wireless-sae
-GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= )
-
-## GLUON_SITE_PACKAGES
-# Specify additional Gluon/OpenWrt packages to include here;
-# A minus sign may be prepended to remove a packages from the
-# selection that would be enabled by default or due to the
-# chosen feature flags
-define GLUON_SITE_PACKAGES :=
-ffac-ssid-changer
-ffac-wg-registration
-iwinfo
-respondd-module-airtime
-endef
-GLUON_SITE_PACKAGES := $(GLUON_SITE_PACKAGES:\n= )
-
-define GLUON_SITE_PACKAGES_standard :=
-ffac-autoupdater-wifi-fallback
-endef
-GLUON_SITE_PACKAGES_standard := $(GLUON_SITE_PACKAGES_standard:\n= )
-
# Build everything by default
ifeq ($(BROKEN),0)
override BROKEN :=
@@ -71,328 +24,4 @@ GLUON_AUTOUPDATER_ENABLED ?= 1
GLUON_REGION ?= eu
# Languages to include
-GLUON_LANGS ?= en de
-
-# Additional package list generated by contrib/genpkglist.py
-INCLUDE_USB := \
- usbutils
-
-EXCLUDE_USB := \
- -usbutils
-
-INCLUDE_USB_HID := \
- kmod-usb-hid \
- kmod-hid-generic
-
-EXCLUDE_USB_HID := \
- -kmod-usb-hid \
- -kmod-hid-generic
-
-INCLUDE_USB_SERIAL := \
- kmod-usb-serial \
- kmod-usb-serial-ftdi \
- kmod-usb-serial-pl2303
-
-EXCLUDE_USB_SERIAL := \
- -kmod-usb-serial \
- -kmod-usb-serial-ftdi \
- -kmod-usb-serial-pl2303
-
-INCLUDE_USB_STORAGE := \
- block-mount \
- blkid \
- kmod-fs-ext4 \
- kmod-fs-ntfs \
- kmod-fs-vfat \
- kmod-usb-storage \
- kmod-usb-storage-extras \
- kmod-usb-storage-uas \
- kmod-nls-base \
- kmod-nls-cp1250 \
- kmod-nls-cp437 \
- kmod-nls-cp850 \
- kmod-nls-cp852 \
- kmod-nls-iso8859-1 \
- kmod-nls-iso8859-13 \
- kmod-nls-iso8859-15 \
- kmod-nls-iso8859-2 \
- kmod-nls-utf8
-
-EXCLUDE_USB_STORAGE := \
- -block-mount \
- -blkid \
- -kmod-fs-ext4 \
- -kmod-fs-ntfs \
- -kmod-fs-vfat \
- -kmod-usb-storage \
- -kmod-usb-storage-extras \
- -kmod-usb-storage-uas \
- -kmod-nls-base \
- -kmod-nls-cp1250 \
- -kmod-nls-cp437 \
- -kmod-nls-cp850 \
- -kmod-nls-cp852 \
- -kmod-nls-iso8859-1 \
- -kmod-nls-iso8859-13 \
- -kmod-nls-iso8859-15 \
- -kmod-nls-iso8859-2 \
- -kmod-nls-utf8
-
-INCLUDE_USB_NET := \
- kmod-mii \
- kmod-usb-net \
- kmod-usb-net-asix \
- kmod-usb-net-asix-ax88179 \
- kmod-usb-net-cdc-eem \
- kmod-usb-net-cdc-ether \
- kmod-usb-net-cdc-subset \
- kmod-usb-net-dm9601-ether \
- kmod-usb-net-hso \
- kmod-usb-net-ipheth \
- kmod-usb-net-mcs7830 \
- kmod-usb-net-pegasus \
- kmod-usb-net-rndis \
- kmod-usb-net-rtl8152 \
- kmod-usb-net-smsc95xx
-
-EXCLUDE_USB_NET := \
- -kmod-mii \
- -kmod-usb-net \
- -kmod-usb-net-asix \
- -kmod-usb-net-asix-ax88179 \
- -kmod-usb-net-cdc-eem \
- -kmod-usb-net-cdc-ether \
- -kmod-usb-net-cdc-subset \
- -kmod-usb-net-dm9601-ether \
- -kmod-usb-net-hso \
- -kmod-usb-net-ipheth \
- -kmod-usb-net-mcs7830 \
- -kmod-usb-net-pegasus \
- -kmod-usb-net-rndis \
- -kmod-usb-net-rtl8152 \
- -kmod-usb-net-smsc95xx
-
-INCLUDE_PCI := \
- pciutils
-
-EXCLUDE_PCI := \
- -pciutils
-
-INCLUDE_PCI_NET := \
- kmod-bnx2
-
-EXCLUDE_PCI_NET := \
- -kmod-bnx2
-
-INCLUDE_VIRT := \
- qemu-ga
-
-EXCLUDE_VIRT := \
- -qemu-ga
-
-INCLUDE_TLS := \
- ca-bundle \
- libustream-openssl \
- openssh-sftp-server
-
-EXCLUDE_TLS := \
- -ca-bundle \
- -libustream-openssl \
- -openssh-sftp-server
-
-INCLUDE_NSM := \
- ffda-network-setup-mode
-
-EXCLUDE_NSM := \
- -ffda-network-setup-mode
-
-ifeq ($(GLUON_TARGET),ath79-generic)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS)
-
- GLUON_devolo-wifi-pro-1750e_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_gl.inet-gl-ar150_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_gl.inet-gl-ar300m-lite_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_gl.inet-gl-ar750_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_joy-it-jt-or750i_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_netgear-wndr3700-v2_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_tp-link-archer-a7-v5_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_tp-link-archer-c5-v1_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_tp-link-archer-c7-v2_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_tp-link-archer-c7-v5_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_tp-link-archer-c59-v1_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_tp-link-tl-wr842n-v3_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_tp-link-tl-wr1043nd-v4_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_tp-link-tl-wr1043n-v5_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_d-link-dir825b1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-archer-c58-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-archer-c25-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-archer-c2-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-archer-c6-v2-eu-ru-jp_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-archer-d50-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-cpe210-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-cpe210-v2_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-cpe210-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-cpe220-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-cpe510-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-cpe510-v2_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-cpe510-v3_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-tl-wr902ac-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-wbs210-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-wbs210-v2_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-wbs510-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_ubiquiti-nanostation-m-xw_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_ubiquiti-nanobeam-m5-xw_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_ubiquiti-nanostation-loco-m-xw_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_ubiquiti-unifi-ap_SITE_PACKAGES += $(EXCLUDE_TLS)
-endif
-
-# no pkglists for target ath79-mikrotik
-
-
-ifeq ($(GLUON_TARGET),ath79-nand)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),bcm27xx-bcm2708)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),bcm27xx-bcm2709)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),bcm27xx-bcm2710)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),bcm27xx-bcm2711)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),ipq40xx-generic)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),ipq40xx-mikrotik)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),ipq806x-generic)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),lantiq-xrx200)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
- GLUON_avm-fritz-box-7412_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
- GLUON_tp-link-td-w8970_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
- GLUON_tp-link-td-w8980_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
-endif
-
-ifeq ($(GLUON_TARGET),lantiq-xway)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),mediatek-filogic)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),mediatek-mt7622)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
- GLUON_ubiquiti-unifi-6-lr-v1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
-endif
-
-ifeq ($(GLUON_TARGET),mpc85xx-p1010)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),mpc85xx-p1020)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),mvebu-cortexa9)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),ramips-mt7620)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
- GLUON_netgear-ex3700_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
- GLUON_nexx-wt3020-8m_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-archer-c2-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-archer-c20-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-archer-c20i_SITE_PACKAGES += $(EXCLUDE_TLS)
- GLUON_tp-link-archer-c50-v1_SITE_PACKAGES += $(EXCLUDE_TLS)
-endif
-
-ifeq ($(GLUON_TARGET),ramips-mt7621)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
- GLUON_zyxel-nwa55axe_SITE_PACKAGES += $(INCLUDE_NSM)
- GLUON_netgear-ex6150_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
- GLUON_ubiquiti-edgerouter-x_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
- GLUON_ubiquiti-edgerouter-x-sfp_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
- GLUON_zyxel-nwa55axe_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
-endif
-
-ifeq ($(GLUON_TARGET),ramips-mt76x8)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS)
-
- GLUON_gl-mt300n-v2_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_gl.inet-microuter-n300_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_netgear-r6120_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_ravpower-rp-wd009_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
- GLUON_netgear-r6020_SITE_PACKAGES += $(EXCLUDE_TLS)
-endif
-
-ifeq ($(GLUON_TARGET),realtek-rtl838x)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-# no pkglists for target realtek-rtl838x
-
-
-ifeq ($(GLUON_TARGET),rockchip-armv8)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),sunxi-cortexa7)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),x86-64)
- GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT)
-
-endif
-
-ifeq ($(GLUON_TARGET),x86-generic)
- GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),x86-geode)
- GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
-
-endif
-
-ifeq ($(GLUON_TARGET),x86-legacy)
- GLUON_SITE_PACKAGES += $(INCLUDE_TLS)
-
-endif
+GLUON_LANGS ?= en de
\ No newline at end of file
From cf6e9f1055ba6765c41a41ead1379578651ee91b Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Thu, 4 Jan 2024 15:07:11 +0100
Subject: [PATCH 111/129] update modules, gluon and patches
---
modules | 8 +-
patches/010-primary-mac.patch | 2 +-
patches/020-interfaces.patch | 4 +-
patches/030-openwrt-ipq807x-initramfs.patch | 40 -
patches/add-covr-x1860.patch | 1220 +-----------------
patches/cellular.patch | 19 +-
patches/gluon-makefile.patch | 4 +-
patches/modules.patch | 16 +
patches/ssid-changer.patch | 43 -
patches/targets-ath79-generic.patch | 20 +-
patches/targets-ath79-mikrotik.patch | 8 +-
patches/targets-bcm2711-raspberry-pi-4.patch | 15 -
patches/targets-ipq40xx-generic.patch | 65 +-
patches/targets-ipq40xx-mikrotik.patch | 2 +-
patches/targets-lantiq-xrx200-devices.patch | 4 +-
patches/targets-mk.patch | 9 +-
patches/targets-ramips-mt7621.patch | 8 +-
release.mk | 2 +-
18 files changed, 57 insertions(+), 1432 deletions(-)
delete mode 100644 patches/030-openwrt-ipq807x-initramfs.patch
create mode 100644 patches/modules.patch
delete mode 100644 patches/ssid-changer.patch
delete mode 100644 patches/targets-bcm2711-raspberry-pi-4.patch
diff --git a/modules b/modules
index e0c0781..f47359e 100644
--- a/modules
+++ b/modules
@@ -1,5 +1,5 @@
-GLUON_SITE_FEEDS="ffac"
+GLUON_SITE_FEEDS="community"
-PACKAGES_FFAC_REPO=https://github.com/freifunk-gluon/community-packages.git
-PACKAGES_FFAC_COMMIT=128ffc19f1960d487616db91e31a7353960657cd
-PACKAGES_FFAC_BRANCH=master
+PACKAGES_COMMUNITY_REPO=https://github.com/freifunk-gluon/community-packages.git
+PACKAGES_COMMUNITY_COMMIT=d7554980f944273bb1e51c40a33aa6662130c6ab
+PACKAGES_COMMUNITY_BRANCH=master
diff --git a/patches/010-primary-mac.patch b/patches/010-primary-mac.patch
index 74c385d..3903fa8 100644
--- a/patches/010-primary-mac.patch
+++ b/patches/010-primary-mac.patch
@@ -1,5 +1,5 @@
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-index 9f92b5b2..5e8c5c1b 100755
+index fce501a6..08603e94 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
@@ -81,6 +81,8 @@ local primary_addrs = {
diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch
index 4c6b0fe..2a2ad3c 100644
--- a/patches/020-interfaces.patch
+++ b/patches/020-interfaces.patch
@@ -1,8 +1,8 @@
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-index 1ce81b65..24113719 100755
+index 22bf7bb8..0cddbaea 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces
-@@ -71,10 +71,29 @@ elseif platform.match('ramips', 'mt7621', {
+@@ -70,10 +70,29 @@ elseif platform.match('ramips', 'mt7621', {
'tplink,eap615-wall-v1',
}) then
lan_ifname, wan_ifname = 'lan1 lan2 lan3', 'lan0'
diff --git a/patches/030-openwrt-ipq807x-initramfs.patch b/patches/030-openwrt-ipq807x-initramfs.patch
deleted file mode 100644
index 23d9e9a..0000000
--- a/patches/030-openwrt-ipq807x-initramfs.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-diff --git a/patches/openwrt/0011-qualcommax-fix-wax218.patch b/patches/openwrt/0011-qualcommax-fix-wax218.patch
-new file mode 100644
-index 00000000..b8ce5ca6
---- /dev/null
-+++ b/patches/openwrt/0011-qualcommax-fix-wax218.patch
-@@ -0,0 +1,34 @@
-+From 02ed2b0271c5e17584884146649d7fb64a9ac35d Mon Sep 17 00:00:00 2001
-+From: Florian Maurer
-+Date: Thu, 26 Oct 2023 08:40:59 +0200
-+Subject: [PATCH] qualcommax: only build initramfs if
-+ CONFIG_TARGET_ROOTFS_INITRAMFS is set
-+
-+Signed-off-by: Florian Maurer
-+---
-+ target/linux/ipq807x/image/generic.mk | 4 +++-
-+ 1 file changed, 3 insertions(+), 1 deletion(-)
-+
-+diff --git a/target/linux/ipq807x/image/generic.mk b/target/linux/ipq807x/image/generic.mk
-+index 124cdfc3b2..fb991156d5 100644
-+--- a/target/linux/ipq807x/image/generic.mk
-++++ b/target/linux/ipq807x/image/generic.mk
-+@@ -80,15 +80,17 @@ TARGET_DEVICES += edimax_cax1800
-+ define Device/netgear_wax218
-+ $(call Device/FitImage)
-+ $(call Device/UbiFit)
-+- ARTIFACTS := web-ui-factory.fit
-+ DEVICE_VENDOR := Netgear
-+ DEVICE_MODEL := WAX218
-+ DEVICE_DTS_CONFIG := config@hk07
-+ BLOCKSIZE := 128k
-+ PAGESIZE := 2048
-+ SOC := ipq8072
-++ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
-++ ARTIFACTS := web-ui-factory.fit
-+ ARTIFACT/web-ui-factory.fit := append-image initramfs-uImage.itb | \
-+ ubinize-kernel | qsdk-ipq-factory-nand
-++endif
-+ DEVICE_PACKAGES := kmod-spi-gpio kmod-spi-bitbang kmod-gpio-nxp-74hc164 \
-+ ipq-wifi-netgear_wax218
-+ endef
diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch
index f4cdd67..701b4b6 100644
--- a/patches/add-covr-x1860.patch
+++ b/patches/add-covr-x1860.patch
@@ -1,1224 +1,8 @@
-diff --git a/patches/openwrt/0007-procd-add-Dlink-sge-image.patch b/patches/openwrt/0007-procd-add-Dlink-sge-image.patch
-new file mode 100644
-index 00000000..a84b7335
---- /dev/null
-+++ b/patches/openwrt/0007-procd-add-Dlink-sge-image.patch
-@@ -0,0 +1,885 @@
-+From: Roland <75312877+RolandoMagico@users.noreply.github.com>
-+Date: Mon, 26 Jun 2023 18:03:51 +0200
-+Subject: procd: add Dlink sge image
-+
-+diff --git a/tools/firmware-utils/patches/002-add-dlink-sge-image.patch b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch
-+new file mode 100644
-+index 0000000000000000000000000000000000000000..c87ad267dc2924c3520eb4fcae0c3ae2ca295017
-+--- /dev/null
-++++ b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch
-+@@ -0,0 +1,875 @@
-++--- a/CMakeLists.txt
-+++++ b/CMakeLists.txt
-++@@ -40,6 +40,7 @@ FW_UTIL(buffalo-tftp src/buffalo-lib.c "
-++ FW_UTIL(cros-vbutil "" "" "${OPENSSL_CRYPTO_LIBRARIES}")
-++ FW_UTIL(dgfirmware "" "" "")
-++ FW_UTIL(dgn3500sum "" "" "")
-+++FW_UTIL(dlink-sge-image "" "" "${OPENSSL_CRYPTO_LIBRARIES}")
-++ FW_UTIL(dns313-header "" "" "")
-++ FW_UTIL(edimax_fw_header "" "" "")
-++ FW_UTIL(encode_crc "" "" "")
-++--- /dev/null
-+++++ b/src/dlink-sge-image.c
-++@@ -0,0 +1,510 @@
-+++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
-+++/*
-+++ * Copyright (C) 2023 Sebastian Schaper
-+++ *
-+++ * This tool encrypts factory images for certain D-Link Devices
-+++ * manufactured by SGE / T&W, e.g. COVR-C1200, COVR-P2500, DIR-882, ...
-+++ *
-+++ * Usage:
-+++ * ./dlink-sge-image DEVICE_MODEL infile outfile [-d: decrypt]
-+++ *
-+++ */
-+++
-+++#include "dlink-sge-image.h"
-+++
-+++#include
-+++#include
-+++
-+++#include
-+++#include
-+++#include
-+++#include
-+++
-+++#define BUFSIZE 4096
-+++
-+++#define HEAD_MAGIC "SHRS"
-+++#define HEAD_MAGIC_LEN 4
-+++#define SHA512_DIGEST_LENGTH 64
-+++#define RSA_KEY_LENGTH_BYTES 512
-+++#define AES_BLOCK_SIZE 16
-+++#define HEADER_LEN 1756
-+++
-+++unsigned char aes_iv[AES_BLOCK_SIZE];
-+++
-+++unsigned char readbuf[BUFSIZE];
-+++unsigned char encbuf[BUFSIZE];
-+++
-+++unsigned int read_bytes;
-+++unsigned long read_total;
-+++unsigned int i;
-+++
-+++unsigned char vendor_key[AES_BLOCK_SIZE];
-+++BIO *rsa_private_bio;
-+++const EVP_CIPHER *aes128;
-+++EVP_CIPHER_CTX *aes_ctx;
-+++
-+++FILE *input_file;
-+++FILE *output_file;
-+++
-+++int pass_cb(char *buf, int size, int rwflag, void *u)
-+++{
-+++ char *tmp = "12345678";
-+++ size_t len = strlen(tmp);
-+++
-+++ if (len > size)
-+++ len = size;
-+++ memcpy(buf, tmp, len);
-+++ return len;
-+++}
-+++
-+++void image_encrypt(void)
-+++{
-+++ char buf[HEADER_LEN];
-+++ const EVP_MD *sha512;
-+++ EVP_MD_CTX *digest_before;
-+++ EVP_MD_CTX *digest_post;
-+++ EVP_MD_CTX *digest_vendor;
-+++ EVP_PKEY *signing_key;
-+++ EVP_PKEY_CTX *rsa_ctx;
-+++ uint32_t payload_length_before, pad_len, sizebuf;
-+++ unsigned char md_before[SHA512_DIGEST_LENGTH];
-+++ unsigned char md_post[SHA512_DIGEST_LENGTH];
-+++ unsigned char md_vendor[SHA512_DIGEST_LENGTH];
-+++ unsigned char sigret[RSA_KEY_LENGTH_BYTES];
-+++ size_t siglen;
-+++ char footer[] = {0x00, 0x00, 0x00, 0x00, 0x30};
-+++
-+++ // seek to position 1756 (begin of AES-encrypted data),
-+++ // write image headers later
-+++ memset(buf, 0, HEADER_LEN);
-+++ fwrite(&buf, 1, HEADER_LEN, output_file);
-+++ digest_before = EVP_MD_CTX_new();
-+++ digest_post = EVP_MD_CTX_new();
-+++ digest_vendor = EVP_MD_CTX_new();
-+++ sha512 = EVP_sha512();
-+++ EVP_DigestInit_ex(digest_before, sha512, NULL);
-+++ EVP_DigestInit_ex(digest_post, sha512, NULL);
-+++ EVP_DigestInit_ex(digest_vendor, sha512, NULL);
-+++
-+++ signing_key = PEM_read_bio_PrivateKey(rsa_private_bio, NULL, pass_cb, NULL);
-+++ rsa_ctx = EVP_PKEY_CTX_new(signing_key, NULL);
-+++
-+++ EVP_PKEY_sign_init(rsa_ctx);
-+++ EVP_PKEY_CTX_set_signature_md(rsa_ctx, sha512);
-+++
-+++ memcpy(&aes_iv, &salt, AES_BLOCK_SIZE);
-+++ aes_ctx = EVP_CIPHER_CTX_new();
-+++ EVP_EncryptInit_ex(aes_ctx, aes128, NULL, &vendor_key[0], aes_iv);
-+++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0);
-+++ int outlen;
-+++
-+++ while ((read_bytes = fread(&readbuf, 1, BUFSIZE, input_file)) == BUFSIZE) {
-+++ EVP_DigestUpdate(digest_before, &readbuf[0], read_bytes);
-+++ read_total += read_bytes;
-+++
-+++ EVP_EncryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], BUFSIZE);
-+++ fwrite(&encbuf, 1, BUFSIZE, output_file);
-+++
-+++ EVP_DigestUpdate(digest_post, &encbuf[0], BUFSIZE);
-+++ }
-+++
-+++ // handle last block of data (read_bytes < BUFSIZE)
-+++ EVP_DigestUpdate(digest_before, &readbuf[0], read_bytes);
-+++ read_total += read_bytes;
-+++
-+++ pad_len = AES_BLOCK_SIZE - (read_total % AES_BLOCK_SIZE);
-+++ if (pad_len == 0)
-+++ pad_len = AES_BLOCK_SIZE;
-+++ memset(&readbuf[read_bytes], 0, pad_len);
-+++
-+++ EVP_EncryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], read_bytes + pad_len);
-+++ EVP_CIPHER_CTX_free(aes_ctx);
-+++ fwrite(&encbuf, 1, read_bytes + pad_len, output_file);
-+++
-+++ EVP_DigestUpdate(digest_post, &encbuf[0], read_bytes + pad_len);
-+++
-+++ fclose(input_file);
-+++ payload_length_before = read_total;
-+++ printf("\npayload_length_before: %li\n", read_total);
-+++
-+++ // copy digest state, since we need another one with vendor key appended
-+++ EVP_MD_CTX_copy_ex(digest_vendor, digest_before);
-+++
-+++ EVP_DigestFinal_ex(digest_before, &md_before[0], NULL);
-+++ EVP_MD_CTX_free(digest_before);
-+++
-+++ printf("\ndigest_before: ");
-+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
-+++ printf("%02x", md_before[i]);
-+++
-+++ EVP_DigestUpdate(digest_vendor, &vendor_key[0], AES_BLOCK_SIZE);
-+++ EVP_DigestFinal_ex(digest_vendor, &md_vendor[0], NULL);
-+++ EVP_MD_CTX_free(digest_vendor);
-+++
-+++ printf("\ndigest_vendor: ");
-+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
-+++ printf("%02x", md_vendor[i]);
-+++
-+++ EVP_DigestFinal_ex(digest_post, &md_post[0], NULL);
-+++ EVP_MD_CTX_free(digest_post);
-+++
-+++ printf("\ndigest_post: ");
-+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
-+++ printf("%02x", md_post[i]);
-+++
-+++ fwrite(&footer, 1, 5, output_file);
-+++
-+++ // go back to file header and write all the digests and signatures
-+++ fseek(output_file, 0, SEEK_SET);
-+++
-+++ fwrite(HEAD_MAGIC, 1, HEAD_MAGIC_LEN, output_file);
-+++
-+++ // write payload length before
-+++ sizebuf = htonl(payload_length_before);
-+++ fwrite((char *) &sizebuf, 1, 4, output_file);
-+++
-+++ // write payload length post
-+++ payload_length_before += pad_len;
-+++ sizebuf = htonl(payload_length_before);
-+++ fwrite((char *) &sizebuf, 1, 4, output_file);
-+++
-+++ // write salt and digests
-+++ fwrite(salt, 1, AES_BLOCK_SIZE, output_file);
-+++ fwrite(&md_vendor[0], 1, SHA512_DIGEST_LENGTH, output_file);
-+++ fwrite(&md_before[0], 1, SHA512_DIGEST_LENGTH, output_file);
-+++ fwrite(&md_post[0], 1, SHA512_DIGEST_LENGTH, output_file);
-+++
-+++ // zero-fill rsa_pub field, unused in header
-+++ memset(sigret, 0, RSA_KEY_LENGTH_BYTES);
-+++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file);
-+++
-+++ // sign md_before
-+++ EVP_PKEY_sign(rsa_ctx, &sigret[0], &siglen, &md_before[0], SHA512_DIGEST_LENGTH);
-+++ printf("\nsigned before:\n");
-+++ for (i = 0; i < RSA_KEY_LENGTH_BYTES; i++)
-+++ printf("%02x", sigret[i]);
-+++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file);
-+++
-+++ // sign md_post
-+++ EVP_PKEY_sign(rsa_ctx, &sigret[0], &siglen, &md_post[0], SHA512_DIGEST_LENGTH);
-+++ printf("\nsigned post:\n");
-+++ for (i = 0; i < RSA_KEY_LENGTH_BYTES; i++)
-+++ printf("%02x", sigret[i]);
-+++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file);
-+++
-+++ printf("\n");
-+++
-+++ fclose(output_file);
-+++}
-+++
-+++void image_decrypt(void)
-+++{
-+++ char magic[4];
-+++ uint32_t payload_length_before, payload_length_post, pad_len;
-+++ char salt[AES_BLOCK_SIZE];
-+++ char md_vendor[SHA512_DIGEST_LENGTH];
-+++ char md_before[SHA512_DIGEST_LENGTH];
-+++ char md_post[SHA512_DIGEST_LENGTH];
-+++ EVP_PKEY *signing_key;
-+++ EVP_PKEY_CTX *rsa_ctx;
-+++ unsigned char rsa_sign_before[RSA_KEY_LENGTH_BYTES];
-+++ unsigned char rsa_sign_post[RSA_KEY_LENGTH_BYTES];
-+++ unsigned char md_post_actual[SHA512_DIGEST_LENGTH];
-+++ unsigned char md_before_actual[SHA512_DIGEST_LENGTH];
-+++ unsigned char md_vendor_actual[SHA512_DIGEST_LENGTH];
-+++ const EVP_MD *sha512;
-+++ EVP_MD_CTX *digest_before;
-+++ EVP_MD_CTX *digest_post;
-+++ EVP_MD_CTX *digest_vendor;
-+++
-+++ printf("\ndecrypt mode\n");
-+++
-+++ if (fread(&magic, 1, HEAD_MAGIC_LEN, input_file) == 0)
-+++ goto error_read;
-+++ if (strncmp(magic, HEAD_MAGIC, HEAD_MAGIC_LEN) != 0) {
-+++ fprintf(stderr, "Input File header magic does not match '%s'.\n"
-+++ "Maybe this file is not encrypted?\n", HEAD_MAGIC);
-+++ goto error;
-+++ }
-+++
-+++ if (fread((char *) &payload_length_before, 1, 4, input_file) == 0)
-+++ goto error_read;
-+++ if (fread((char *) &payload_length_post, 1, 4, input_file) == 0)
-+++ goto error_read;
-+++ payload_length_before = ntohl(payload_length_before);
-+++ payload_length_post = ntohl(payload_length_post);
-+++
-+++ if (fread(salt, 1, AES_BLOCK_SIZE, input_file) == 0)
-+++ goto error_read;
-+++ if (fread(md_vendor, 1, SHA512_DIGEST_LENGTH, input_file) == 0)
-+++ goto error_read;
-+++ if (fread(md_before, 1, SHA512_DIGEST_LENGTH, input_file) == 0)
-+++ goto error_read;
-+++ if (fread(md_post, 1, SHA512_DIGEST_LENGTH, input_file) == 0)
-+++ goto error_read;
-+++
-+++ // skip rsa_pub
-+++ if (fread(readbuf, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0)
-+++ goto error_read;
-+++
-+++ if (fread(rsa_sign_before, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0)
-+++ goto error_read;
-+++ if (fread(rsa_sign_post, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0)
-+++ goto error_read;
-+++
-+++ // file should be at position HEADER_LEN now, start AES decryption
-+++ digest_before = EVP_MD_CTX_new();
-+++ digest_post = EVP_MD_CTX_new();
-+++ digest_vendor = EVP_MD_CTX_new();
-+++ sha512 = EVP_sha512();
-+++ EVP_DigestInit_ex(digest_before, sha512, NULL);
-+++ EVP_DigestInit_ex(digest_post, sha512, NULL);
-+++ EVP_DigestInit_ex(digest_vendor, sha512, NULL);
-+++
-+++ memcpy(&aes_iv, &salt, AES_BLOCK_SIZE);
-+++ aes_ctx = EVP_CIPHER_CTX_new();
-+++ EVP_DecryptInit_ex(aes_ctx, aes128, NULL, &vendor_key[0], aes_iv);
-+++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0);
-+++ int outlen;
-+++ pad_len = payload_length_post - payload_length_before;
-+++
-+++ while (read_total < payload_length_post) {
-+++ if (read_total + BUFSIZE <= payload_length_post)
-+++ read_bytes = fread(&readbuf, 1, BUFSIZE, input_file);
-+++ else
-+++ read_bytes = fread(&readbuf, 1, payload_length_post - read_total, \
-+++ input_file);
-+++
-+++ read_total += read_bytes;
-+++
-+++ EVP_DigestUpdate(digest_post, &readbuf[0], read_bytes);
-+++
-+++ EVP_DecryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], read_bytes);
-+++
-+++ // only update digest_before until payload_length_before,
-+++ // do not hash decrypted padding
-+++ if (read_total > payload_length_before) {
-+++ // only calc hash for data before padding
-+++ EVP_DigestUpdate(digest_before, &encbuf[0], read_bytes - pad_len);
-+++ fwrite(&encbuf[0], 1, read_bytes - pad_len, output_file);
-+++
-+++ // copy digest state, since we need another one with vendor key appended
-+++ EVP_MD_CTX_copy_ex(digest_vendor, digest_before);
-+++
-+++ // append vendor_key
-+++ EVP_DigestUpdate(digest_vendor, &vendor_key[0], AES_BLOCK_SIZE);
-+++ } else {
-+++ // calc hash for all of read_bytes
-+++ EVP_DigestUpdate(digest_before, &encbuf[0], read_bytes);
-+++ fwrite(&encbuf[0], 1, read_bytes, output_file);
-+++ }
-+++ }
-+++
-+++ fclose(input_file);
-+++ fclose(output_file);
-+++ EVP_CIPHER_CTX_free(aes_ctx);
-+++
-+++ EVP_DigestFinal_ex(digest_post, &md_post_actual[0], NULL);
-+++ EVP_MD_CTX_free(digest_post);
-+++
-+++ printf("\ndigest_post: ");
-+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
-+++ printf("%02x", md_post_actual[i]);
-+++
-+++ if (strncmp(md_post, (char *) md_post_actual, SHA512_DIGEST_LENGTH) != 0) {
-+++ fprintf(stderr, "SHA512 post does not match file contents.\n");
-+++ goto error;
-+++ }
-+++
-+++ EVP_DigestFinal_ex(digest_before, &md_before_actual[0], NULL);
-+++ EVP_MD_CTX_free(digest_before);
-+++
-+++ printf("\ndigest_before: ");
-+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
-+++ printf("%02x", md_before_actual[i]);
-+++
-+++ if (strncmp(md_before, (char *) md_before_actual, SHA512_DIGEST_LENGTH) != 0) {
-+++ fprintf(stderr, "SHA512 before does not match decrypted payload.\n");
-+++ goto error;
-+++ }
-+++
-+++ EVP_DigestFinal_ex(digest_vendor, &md_vendor_actual[0], NULL);
-+++ EVP_MD_CTX_free(digest_vendor);
-+++
-+++ printf("\ndigest_vendor: ");
-+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
-+++ printf("%02x", md_vendor_actual[i]);
-+++
-+++ if (strncmp(md_vendor, (char *) md_vendor_actual, SHA512_DIGEST_LENGTH) != 0) {
-+++ fprintf(stderr, "SHA512 vendor does not match decrypted payload padded" \
-+++ " with vendor key.\n");
-+++ goto error;
-+++ }
-+++
-+++ signing_key = PEM_read_bio_PrivateKey(rsa_private_bio, NULL, pass_cb, NULL);
-+++ rsa_ctx = EVP_PKEY_CTX_new(signing_key, NULL);
-+++ EVP_PKEY_verify_init(rsa_ctx);
-+++ EVP_PKEY_CTX_set_signature_md(rsa_ctx, sha512);
-+++
-+++ if (EVP_PKEY_verify(rsa_ctx, &rsa_sign_before[0], RSA_KEY_LENGTH_BYTES, \
-+++ &md_before_actual[0], SHA512_DIGEST_LENGTH)) {
-+++ printf("\nsignature before verification success");
-+++ } else {
-+++ fprintf(stderr, "Signature before verification failed.\nThe decrypted" \
-+++ " image file may however be flashable via bootloader recovery.\n");
-+++ }
-+++
-+++ if (EVP_PKEY_verify(rsa_ctx, &rsa_sign_post[0], RSA_KEY_LENGTH_BYTES, \
-+++ &md_post_actual[0], SHA512_DIGEST_LENGTH)) {
-+++ printf("\nsignature post verification success");
-+++ } else {
-+++ fprintf(stderr, "Signature post verification failed.\nThe decrypted" \
-+++ " image file may however be flashable via bootloader recovery.\n");
-+++ }
-+++
-+++ printf("\n");
-+++
-+++ return;
-+++
-+++error_read:
-+++ fprintf(stderr, "Error reading header fields from input file.\n");
-+++error:
-+++ fclose(input_file);
-+++ fclose(output_file);
-+++ exit(1);
-+++}
-+++
-+++/*
-+++ generate legacy vendor key for COVR-C1200, COVR-P2500, DIR-882, DIR-2660, ...
-+++ decrypt ciphertext key2 using aes128 with key1 and iv, write result to *vkey
-+++*/
-+++void generate_vendorkey_legacy(unsigned char *vkey)
-+++{
-+++ int outlen;
-+++ memcpy(&aes_iv, &iv, AES_BLOCK_SIZE);
-+++ aes_ctx = EVP_CIPHER_CTX_new();
-+++ EVP_DecryptInit_ex(aes_ctx, aes128, NULL, &key1[0], &aes_iv[0]);
-+++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0);
-+++ EVP_DecryptUpdate(aes_ctx, vkey, &outlen, &key2[0], AES_BLOCK_SIZE);
-+++ EVP_CIPHER_CTX_free(aes_ctx);
-+++}
-+++
-+++/*
-+++ helper function for generate_vendorkey_dimgkey()
-+++ deinterleave input in chunks of 8 bytes according to pattern,
-+++ last block shorter than 8 bytes is appended in reverse order
-+++*/
-+++void deinterleave(unsigned char *enk, size_t len, unsigned char *vkey)
-+++{
-+++ unsigned char i, pattern = 0;
-+++
-+++ while (len >= INTERLEAVE_BLOCK_SIZE)
-+++ {
-+++ for (i = 0; i < INTERLEAVE_BLOCK_SIZE; i++)
-+++ *(vkey + i) = *(enk + interleaving_pattern[pattern][i]);
-+++
-+++ vkey += INTERLEAVE_BLOCK_SIZE;
-+++ enk += INTERLEAVE_BLOCK_SIZE;
-+++ len -= INTERLEAVE_BLOCK_SIZE;
-+++
-+++ if (pattern++ >= INTERLEAVE_BLOCK_SIZE)
-+++ pattern = 0;
-+++ }
-+++
-+++ for (i = 0; i < len; i++)
-+++ *(vkey + i) = *(enk + (len - i - 1));
-+++}
-+++
-+++/*
-+++ generate vendor key for COVR-X1860, DIR-X3260, ...
-+++ base64 decode enk, pass to deinterleave, result will be in *vkey
-+++*/
-+++void generate_vendorkey_dimgkey(const unsigned char *enk, size_t len, unsigned char *vkey)
-+++{
-+++ unsigned char *decode_buf = malloc(3 * (len / 4));
-+++ int outlen;
-+++ EVP_ENCODE_CTX *base64_ctx = EVP_ENCODE_CTX_new();
-+++ EVP_DecodeInit(base64_ctx);
-+++ EVP_DecodeUpdate(base64_ctx, decode_buf, &outlen, enk, len);
-+++ EVP_DecodeFinal(base64_ctx, decode_buf + outlen, &outlen);
-+++ EVP_ENCODE_CTX_free(base64_ctx);
-+++
-+++ // limit deinterleaving output to first 16 bytes
-+++ deinterleave(decode_buf, AES_BLOCK_SIZE, vkey);
-+++}
-+++
-+++int main(int argc, char **argv)
-+++{
-+++ if (argc < 3 || argc > 5) {
-+++ fprintf(stderr, "Usage:\n"
-+++ "\tdlink-sge-image DEVICE_MODEL infile outfile [-d: decrypt]\n\n"
-+++ "DEVICE_MODEL can be any of:\n"
-+++ "\tCOVR-C1200\n"
-+++ "\tCOVR-P2500\n"
-+++ "\tCOVR-X1860\n"
-+++ "\tDIR-853\n"
-+++ "\tDIR-867\n"
-+++ "\tDIR-878\n"
-+++ "\tDIR-882\n"
-+++ "\tDIR-1935\n"
-+++ "\tDIR-2150\n"
-+++ "\tDIR-X3260\n\n"
-+++ "Any other value will default to COVR-C1200/P2500/DIR-8xx keys\n"
-+++ "which may work to decrypt images for several further devices,\n"
-+++ "however there are currently no private keys known that would\n"
-+++ "allow for signing images to be used for flashing those devices.\n\n"
-+++ );
-+++ exit(1);
-+++ }
-+++
-+++ input_file = fopen(argv[2], "rb");
-+++ if (input_file == NULL) {
-+++ fprintf(stderr, "Input File %s could not be opened.\n", argv[2]);
-+++ exit(1);
-+++ }
-+++
-+++ output_file = fopen(argv[3], "wb");
-+++ if (input_file == NULL) {
-+++ fprintf(stderr, "Output File %s could not be opened.\n", argv[3]);
-+++ fclose(input_file);
-+++ exit(1);
-+++ }
-+++
-+++ aes128 = EVP_aes_128_cbc();
-+++
-+++ if (strncmp(argv[1], "COVR-X1860", 10) == 0)
-+++ {
-+++ generate_vendorkey_dimgkey(enk_covrx1860, sizeof(enk_covrx1860), &vendor_key[0]);
-+++ rsa_private_bio = BIO_new_mem_buf(key_covrx1860_pem, -1);
-+++ }
-+++ else if (strncmp(argv[1], "DIR-X3260", 9) == 0)
-+++ {
-+++ generate_vendorkey_dimgkey(enk_dirx3260, sizeof(enk_dirx3260), &vendor_key[0]);
-+++ rsa_private_bio = BIO_new_mem_buf(key_dirx3260_pem, -1);
-+++ }
-+++ else if (strncmp(argv[1], "DIR-1260", 8) == 0)
-+++ {
-+++ generate_vendorkey_legacy(&vendor_key[0]);
-+++ rsa_private_bio = BIO_new_mem_buf(key_dir1260_pem, -1);
-+++ }
-+++ else if (strncmp(argv[1], "DIR-2150", 8) == 0)
-+++ {
-+++ generate_vendorkey_legacy(&vendor_key[0]);
-+++ rsa_private_bio = BIO_new_mem_buf(key_dir2150_pem, -1);
-+++ }
-+++ else
-+++ {
-+++ /* COVR-C1200, COVR-P2500, DIR-853, DIR-867, DIR-878, DIR-882, DIR-1935 */
-+++ generate_vendorkey_legacy(&vendor_key[0]);
-+++ rsa_private_bio = BIO_new_mem_buf(key_legacy_pem, -1);
-+++ }
-+++
-+++ printf("\nvendor_key: ");
-+++ for (i = 0; i < AES_BLOCK_SIZE; i++)
-+++ printf("%02x", vendor_key[i]);
-+++
-+++ if (argc == 5 && strncmp(argv[4], "-d", 2) == 0)
-+++ image_decrypt();
-+++ else
-+++ image_encrypt();
-+++}
-++--- /dev/null
-+++++ b/src/dlink-sge-image.h
-++@@ -0,0 +1,349 @@
-+++/* SPDX-License-Identifier: GPL-2.0-only */
-+++
-+++const unsigned char key1[] =
-+++ "\x35\x87\x90\x03\x45\x19\xf8\xc8\x23\x5d\xb6\x49\x28\x39\xa7\x3f";
-+++
-+++const unsigned char key2[] =
-+++ "\xc8\xd3\x2f\x40\x9c\xac\xb3\x47\xc8\xd2\x6f\xdc\xb9\x09\x0b\x3c";
-+++
-+++const unsigned char iv[] =
-+++ "\x98\xc9\xd8\xf0\x13\x3d\x06\x95\xe2\xa7\x09\xc8\xb6\x96\x82\xd4";
-+++
-+++const unsigned char salt[] =
-+++ "\x67\xc6\x69\x73\x51\xff\x4a\xec\x29\xcd\xba\xab\xf2\xfb\xe3\x46";
-+++
-+++/*
-+++ enk.txt as found in GPL tarball:
-+++ COVR-X1860_GPL_Release/MTK7621_AX1800_BASE/vendors/COVR-X1860/imgkey/enk.txt
-+++*/
-+++const unsigned char enk_covrx1860[] =
-+++ "NE1oIS1lKzkkIzZkbX49KTMsMWFkJXEybjheJiN6KjIwNjgx";
-+++
-+++/*
-+++ enk.txt as found in GPL tarball:
-+++ DIR-X3260_GPL_Release/MTK7621_AX1800_BASE/vendors/DIR-X3260/imgkey/enk.txt
-+++*/
-+++const unsigned char enk_dirx3260[] =
-+++ "NF5yKy10JTl+bSkhNj1kTTIkI3FhIyUsJDU0czMyZmR6Jl4jMzI4KjA2Mg==";
-+++
-+++#define INTERLEAVE_BLOCK_SIZE 8
-+++const unsigned char interleaving_pattern[INTERLEAVE_BLOCK_SIZE][INTERLEAVE_BLOCK_SIZE] = {
-+++ {2, 5, 7, 4, 0, 6, 1, 3},
-+++ {7, 3, 2, 6, 4, 5, 1, 0},
-+++ {5, 1, 6, 7, 3, 0, 4, 2},
-+++ {0, 3, 7, 6, 5, 4, 2, 1},
-+++ {1, 5, 7, 0, 3, 2, 6, 4},
-+++ {3, 6, 2, 5, 4, 7, 1, 0},
-+++ {6, 0, 5, 1, 3, 4, 2, 7},
-+++ {4, 6, 7, 3, 2, 0, 1, 5}
-+++};
-+++
-+++/*
-+++ key.pem as found in GPL tarball, e.g.:
-+++ COVRP2500A1_FW101/COVRP2500_GPL_Release/package/tw-prog.priv/imgcrypt/key.pem
-+++ encrypted with passphrase: "12345678"
-+++*/
-+++const unsigned char key_legacy_pem[] = R"(
-+++-----BEGIN RSA PRIVATE KEY-----
-+++Proc-Type: 4,ENCRYPTED
-+++DEK-Info: AES-256-CBC,EAA1FD02CDBC7AA7E62AC821D47823F2
-+++
-+++1LiXFElARVvVJnikiVqZxC5FS7silmaqZ1yBOfzWuYNLaiEuvoUOylwiT0JYna94
-+++nevCGjdU27GOUBsLnhGVulVuD8aiZCGBaZES5BAFtOEz0rrmpJLHxD3txLBh49rM
-+++zLfn77/bMfubuhUFw+TPQ9J6SlrwK12IaMBTBTCFf06h+dkY500A0GAESgSA4Cab
-+++retvT5/xtnl5jtT7zBYPbDGPDZ0fFoDSa7IqkqJ+chGz4w02UezAuKPPlNTTxD4l
-+++aJkBUm/rmnasY5fctkRVLsRXUD3/SlrmABbykROjaY1e+iHQAb8+111cGJBj7KHE
-+++MasReOMz6/awJe3NhU1SaHfTYGnf/JbHXQ1l07pxqT0sgTU+gEr447yzoZOroV+7
-+++pX3BfLoe2ZawfOEiAu+TRJmVgbNa5IpO2c9ID2ZFI0iqIiv0PYzoM8RSIX3H4tqP
-+++UUimdySOBNiBFjj4bsLSo2EmLNdNsCHRVh9rTjTs07iB9QBPeHGFaMnhTDjYJZBj
-+++gO/U4dOoQpYq5P8WZHecZ7OafSS+tYr5IdbMnpkJwWImlDyGOE1559XB5MRUqFOv
-+++Csl+eFh2Br8Ks34AA5nJPLHMnN56oAkRQhjj2LC/oK75dElSWNVnlciIceR0vY7j
-+++pLzPKdLc5UZ+y/fy2EEC6Jwowi4DIDxEx+HCse9lNmVoBN+dtEX4rBAaBewz8ha5
-+++lOV72k4IWLgvlmmJG6kespPFWd0h+ZzTKdM0i6Rl0Imms9f/Pp1H2A6k+mpD2PkJ
-+++ZZi711x5UIQSn8wmSgFa4pwVuUuGozg7T64F0K63EeEFMPGQ53r6fKKFt9/cm/Bo
-+++7bh6wqEqTgRm+/w05MIAo7ksoCCSJ/qPS5jB0VZDy2SJYF/fVAJKCIRZt6RJ/2no
-+++rzADS0dQG45By5Gfbg+dHnd31jrtd1SEmL8l7R9L2nIi0z5ard3carc3EtKDfny+
-+++fSOnOGBUPxDiOqoB8ksGXZTasz9BjF/Vt6/KwIbVhM0T0yurUexf6n30tWwVDqpl
-+++YBW25mgzxjECyNNm7vUAPkzjFgJ2gqvKosF9EALV0p1p3hcC366R5n/0EMJu4OBN
-+++QM3RmHu4CV7DwuS+2NxKLsFtUCxsWZVw/dd/eG51wEAsQvnuNNwbsW0KezDmEzTo
-+++WeigJQAHI0MD6kjD9qHcFw+gvcfK1S89kru/edq3E4k9jhxR7jyM1IolInJuwKFM
-+++Dw7RN42o7O4BIO3uur4ghUoyfJMBlOidULw7Jqq8YcLjWMMSWtEjd6f/m0j7e0B4
-+++4N40YA3Yzkog1n1/wk69/O6Xdzw7mpAH61JF2VKzAGSjF9VpSg96yC9UE4jgi42C
-+++Em7QiA10eVtPkIN/qr06xntPmG0d8yZAtsmOL1vaJEgKF3yY2lOIoGMJCSQBqaR9
-+++xn5TISP4bPUucSZchaukwlm7Q6fJ90utaB5FkjbfjA8EtcMfAqEagXX8nBtSioTf
-+++miSK1aHRexWgbRZnxsEf9oUHfGjhEd1+EyM7+F1eJUPWxyCGE6H+H+5W55xJL7wA
-+++vWa38s1yGtibPLef4rVyXtN9aQTkRa++SB59tw0xu7nDEV49oqFDStJr2ByIvdI1
-+++f0nimeY5EAesvtNUrKdaFWo6PCgnB7XwxG9KumKW4Xr0QFAJWTS31M97M9JnhTV0
-+++BpZj9XQ90NMQOpHIZaEsWbmbcVAPzkeKWGTNLq5/2jInE7+4Dis6TH7t5ulhyDLJ
-+++YO49IR814qQBWv4XLODUKK0+5ZHpx63loSFEcMfxUTQMyEdEi6pjdwxTE3a1RrGj
-+++ZOmgOh7owRapfo3Z39K+GZAaJrFynm1TJllqyaSRX6KUDz3q0FxeTtUtc/hzJ9Ms
-+++jQ1Xf0R1IPX8SYIHVB5ZX/mrnuXPXlEGw/WZ3eUzPaolRKpFPDxyUll8iZLpOOVK
-+++wUrN55A1TYO0Qs6oSoQUeS0nshfFHVoeLw6tHvoVXx7LOwA6PfNgrx3yOWPjqp3X
-+++DViPmcmaw5h50WU34w8YyTm94jamn5zjeVXo3TPDmSxsSovkpiGpHciheK5XmGkp
-+++DN5i9t/cOvZv7E9h7mXGKZW0opkAcg/mAWelqCKF6yCrX0YbEJLiTn+axGX803+t
-+++HFTMQaU4ZJ4oer9JrODiXhSqWZU1nVtLvyITELBRU3PdTEAR/5jDgHPg780osG8P
-+++FqOcNti31PL0+mjbzGybPe52NnEsInCwi6yUtq98ROWgjzi4ogW0f8CPu4szlQ88
-+++b7QbrPK53ufEutPISdhny0kKTddJIMqRzWOXrN1KkQq4NEICvnXqo94ewxF1BszZ
-+++8G3qNkxHTP8L3UPBnop6gmm82BbIYNrRLItqvtuPqmOCK5qRr79SvyGPDXnCe3pF
-+++7yFd1HsdYjLbitPex2g2Iw2+xUhQTOhapTqF2AuZpXCVunrqG6w/zJ2OTIuQVU+W
-+++Yfaude7su1ghaA+RHY3DXuqJMdYXC8l6beEL35A0LV/LPiTOId5qCIbQb3TdU+kQ
-+++igC1HWaZ9XelSbsbymor/WmBAcG/u1Txy5s2cwfXAUodgXb2LSSjlKO++oOAQcAQ
-+++eWd9AOwNXnwcXELuSYYIZQBBGbOx6cmqxYGxNAb4K61n8JxODdO83+Ar0UJHnOtZ
-+++9gBcE6TifBE07TibkHwQRR4y7+J8dleHSXgXM+iwMsnOfjcC3jcjDI63E3LV5fm1
-+++ZTvnQYg0B20EXRL3Z65C7lQDkS/iJj/ctDgEEtn5pj12fOXjcEjHRdj1mbpz3MVq
-+++sS+2wp2gL8jyNjtN/06hVVw6qMoPt5+qKPdvBw7VZ/DCw+gQOcZVjX4BcTEWOR1/
-+++tTgNnJg9lB3jLmh7MAyTg3PDe+ev7yaYNVCLsmFqHgFeNvbrC3rKbouQ3MT0Hz1f
-+++F+NR0CrEF2DH1f6Cp9mYh7IrEYTQnPXCtLzOiJKfglFdpok/37v0nG+VkcN9ANhr
-+++AqoP6KzblcsBSHUD/7SHG6VWCeZhGd/o51+tTh+zCvG9cXG5CKTZV3nILMhFrR6t
-+++NbsS6ke3VyLqcrvcNk4zr1mJ+J+G1HWhTkSSZgX3AwHoG9xJVZ7BA7ZAkaGwBsIt
-+++o1UhI6IofI/cZt4iCM9WmKMLM2cSKmW+5AxWyYQbOA0jU/899mEiLPepxygh7IZC
-+++-----END RSA PRIVATE KEY-----
-+++)";
-+++
-+++/*
-+++ key.pem as found in GPL tarball:
-+++ DIR1260_GPL_Release/vendors/DIR-1260/imgkey/key.pem
-+++ encrypted with passphrase: "12345678"
-+++*/
-+++const unsigned char key_dir1260_pem[] = R"(
-+++-----BEGIN RSA PRIVATE KEY-----
-+++Proc-Type: 4,ENCRYPTED
-+++DEK-Info: AES-256-CBC,FFC890207BA9F13F6CE13F8EF7E69802
-+++
-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
-+++-----END RSA PRIVATE KEY-----
-+++)";
-+++
-+++/*
-+++ key.pem as found in GPL tarball:
-+++ DIR2150_GPL_Release/vendors/DIR-2150/imgkey/key.pem
-+++ encrypted with passphrase: "12345678"
-+++*/
-+++const unsigned char key_dir2150_pem[] = R"(
-+++-----BEGIN RSA PRIVATE KEY-----
-+++Proc-Type: 4,ENCRYPTED
-+++DEK-Info: AES-256-CBC,314D3C7FB69E7DDEAF084A0A7CA39069
-+++
-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
-+++-----END RSA PRIVATE KEY-----
-+++)";
-+++
-+++/*
-+++ key.pem as found in GPL tarball:
-+++ COVR-X1860_GPL_Release/MTK7621_AX1800_BASE/vendors/COVR-X1860/imgkey/key.pem
-+++ encrypted with passphrase: "12345678"
-+++*/
-+++const unsigned char key_covrx1860_pem[] = R"(
-+++-----BEGIN RSA PRIVATE KEY-----
-+++Proc-Type: 4,ENCRYPTED
-+++DEK-Info: AES-256-CBC,34CCF1AEF0C34EAC5FFAE6BCF81ABB8D
-+++
-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
-+++-----END RSA PRIVATE KEY-----
-+++)";
-+++
-+++/*
-+++ key.pem as found in GPL tarball, e.g.:
-+++ DIR-X3260_GPL_Release/MTK7621_AX1800_BASE/vendors/DIR-X3260/imgkey/key.pem
-+++ encrypted with passphrase: "12345678"
-+++*/
-+++const unsigned char key_dirx3260_pem[] = R"(
-+++-----BEGIN RSA PRIVATE KEY-----
-+++Proc-Type: 4,ENCRYPTED
-+++DEK-Info: AES-256-CBC,DDAC1FE060CB240242046BDFEEE17E44
-+++
-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
-+++-----END RSA PRIVATE KEY-----
-+++)";
-diff --git a/patches/openwrt/0008-add-Dlink-COVR-X1860.patch b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch
-new file mode 100644
-index 00000000..263f2408
---- /dev/null
-+++ b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch
-@@ -0,0 +1,319 @@
-+From: Roland <75312877+RolandoMagico@users.noreply.github.com>
-+Date: Mon, 26 Jun 2023 18:03:51 +0200
-+Subject: add Dlink COVR-X1860
-+
-+diff --git a/include/image-commands.mk b/include/image-commands.mk
-+index dc6ee6e7c160c0935c3d72fb26b88c4ebcf4b028..6666eddf8f72d3ad49aafe1b08d79c26e0089945 100644
-+--- a/include/image-commands.mk
-++++ b/include/image-commands.mk
-+@@ -226,6 +226,11 @@ define Build/copy-file
-+ cat "$(1)" > "$@"
-+ endef
-+
-++define Build/dlink-sge-image
-++ $(STAGING_DIR_HOST)/bin/dlink-sge-image $(1) $@ $@.enc
-++ mv $@.enc $@
-++endef
-++
-+ define Build/edimax-header
-+ $(STAGING_DIR_HOST)/bin/mkedimaximg -i $@ -o $@.new $(1)
-+ @mv $@.new $@
-+diff --git a/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts
-+new file mode 100644
-+index 0000000000000000000000000000000000000000..c06c5e36baaedacaef339bf91a08dabbba732898
-+--- /dev/null
-++++ b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts
-+@@ -0,0 +1,186 @@
-++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
-++
-++#include "mt7621.dtsi"
-++
-++#include
-++#include
-++
-++/ {
-++ compatible = "dlink,covr-x1860-a1", "mediatek,mt7621-soc";
-++ model = "D-Link COVR-X1860 A1";
-++
-++ aliases {
-++ led-boot = &status_orange;
-++ led-failsafe = &status_red;
-++ led-running = &status_white;
-++ led-upgrade = &status_red;
-++ };
-++
-++ chosen {
-++ bootargs = "console=ttyS0,115200";
-++ };
-++
-++ keys {
-++ compatible = "gpio-keys";
-++
-++ reset {
-++ label = "reset";
-++ linux,code = ;
-++ gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
-++ };
-++
-++ wps {
-++ label = "wps";
-++ linux,code = ;
-++ gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
-++ };
-++ };
-++
-++ leds {
-++ compatible = "gpio-leds";
-++
-++ status_white: power {
-++ label = "white:status";
-++ gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
-++ };
-++
-++ status_orange: status_orange {
-++ label = "orange:status";
-++ gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
-++ default-state = "on";
-++ };
-++
-++ status_red: status_red {
-++ label = "red:status";
-++ gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
-++ };
-++ };
-++
-++ virtual_flash {
-++ compatible = "mtd-concat";
-++
-++ devices = <&fwconcat0 &fwconcat1>;
-++
-++ partitions {
-++ compatible = "fixed-partitions";
-++ #address-cells = <1>;
-++ #size-cells = <1>;
-++
-++ partition@0 {
-++ label = "ubi";
-++ reg = <0x0 0x0>;
-++ };
-++ };
-++ };
-++};
-++
-++&nand {
-++ status = "okay";
-++
-++ partitions {
-++ compatible = "fixed-partitions";
-++ #address-cells = <1>;
-++ #size-cells = <1>;
-++
-++ partition@0 {
-++ label = "bootloader";
-++ reg = <0x0 0x80000>;
-++ read-only;
-++ };
-++
-++ partition@80000 {
-++ label = "config";
-++ reg = <0x80000 0x80000>;
-++ read-only;
-++ };
-++
-++ factory: partition@100000 {
-++ label = "factory";
-++ reg = <0x100000 0x80000>;
-++ read-only;
-++ };
-++
-++ partition@180000 {
-++ label = "config2";
-++ reg = <0x180000 0x40000>;
-++ read-only;
-++ };
-++
-++ partition@1c0000 {
-++ label = "kernel";
-++ reg = <0x1c0000 0x800000>;
-++ };
-++
-++ fwconcat0: partition@9c0000 {
-++ label = "fwconcat0";
-++ reg = <0x9c0000 0x2000000>;
-++ };
-++
-++ partition@29c0000 {
-++ label = "kernel2";
-++ reg = <0x29c0000 0x800000>;
-++ read-only;
-++ };
-++
-++ fwconcat1: partition@31c0000 {
-++ label = "fwconcat1";
-++ reg = <0x31c0000 0x2a00000>;
-++ };
-++
-++ partition@5bc0000 {
-++ label = "private";
-++ reg = <0x5bc0000 0x1400000>;
-++ read-only;
-++ };
-++
-++ partition@6fc0000 {
-++ label = "mydlink";
-++ reg = <0x6fc0000 0x600000>;
-++ read-only;
-++ };
-++
-++ partition@75c0000 {
-++ label = "myconfig";
-++ reg = <0x75c0000 0xa00000>;
-++ read-only;
-++ };
-++ };
-++};
-++
-++&pcie {
-++ status = "okay";
-++};
-++
-++&pcie1 {
-++ wifi@0,0 {
-++ compatible = "mediatek,mt76";
-++ reg = <0x0000 0 0 0 0>;
-++ mediatek,mtd-eeprom = <&factory 0x0>;
-++ mediatek,disable-radar-background;
-++ };
-++};
-++
-++&gmac1 {
-++ status = "okay";
-++ phy-handle = <ðphy4>;
-++};
-++
-++&mdio {
-++ ethphy4: ethernet-phy@4 {
-++ reg = <4>;
-++ };
-++};
-++
-++&switch0 {
-++ ports {
-++ port@0 {
-++ status = "okay";
-++ label = "internet";
-++ };
-++
-++ port@2 {
-++ status = "okay";
-++ label = "ethernet";
-++ };
-++ };
-++};
-+diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
-+index 962d7ef44017d1ead2a44eb67cac041220709ca4..e3799e9319404297bc1faf945dab83117b6d9499 100644
-+--- a/target/linux/ramips/image/mt7621.mk
-++++ b/target/linux/ramips/image/mt7621.mk
-+@@ -9,6 +9,14 @@ DEFAULT_SOC := mt7621
-+
-+ DEVICE_VARS += ELECOM_HWNAME LINKSYS_HWNAME DLINK_HWID
-+
-++define Build/append-dlink-covr-metadata
-++ echo -ne '{"supported_devices": "$(1)", "firmware": "' > $@metadata.tmp
-++ $(MKHASH) md5 "$@" | head -c32 >> $@metadata.tmp
-++ echo '"}' >> $@metadata.tmp
-++ fwtool -I $@metadata.tmp $@
-++ rm $@metadata.tmp
-++endef
-++
-+ define Build/arcadyan-trx
-+ echo -ne "hsqs" > $@.hsqs
-+ $(eval trx_magic=$(word 1,$(1)))
-+@@ -581,6 +589,31 @@ define Device/cudy_x6-v2
-+ endef
-+ TARGET_DEVICES += cudy_x6-v2
-+
-++define Device/dlink_covr-x1860-a1
-++ $(Device/dsa-migration)
-++ BLOCKSIZE := 128k
-++ PAGESIZE := 2048
-++ KERNEL_SIZE := 8192k
-++ IMAGE_SIZE := 40960k
-++ DEVICE_VENDOR := D-Link
-++ DEVICE_MODEL := COVR-X1860
-++ DEVICE_VARIANT := A1
-++ DEVICE_PACKAGES := kmod-mt7915-firmware
-++ UBINIZE_OPTS := -E 5
-++ KERNEL_LOADADDR := 0x82000000
-++ KERNEL := kernel-bin | relocate-kernel 0x80001000 | lzma | \
-++ fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb | \
-++ append-squashfs4-fakeroot
-++ IMAGES += factory.bin recovery.bin
-++ IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
-++ IMAGE/recovery.bin := append-kernel | pad-to $$(KERNEL_SIZE) | \
-++ append-ubi | check-size
-++ IMAGE/factory.bin := $$(IMAGE/recovery.bin) | \
-++ append-dlink-covr-metadata $$(DEVICE_MODEL) | \
-++ dlink-sge-image $$(DEVICE_MODEL)
-++endef
-++TARGET_DEVICES += dlink_covr-x1860-a1
-++
-+ define Device/dlink_dap-1620-b1
-+ DEVICE_VENDOR := D-Link
-+ DEVICE_MODEL := DAP-1620
-+diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
-+index 11a7c9465a333ee69b62f59f5e8fd6035c42f51b..feb2a196f582c7a49ae074ce2f387e40a3c8c102 100644
-+--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
-++++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
-+@@ -93,6 +93,9 @@ ramips_setup_interfaces()
-+ zyxel,nt7101)
-+ ucidef_set_interfaces_lan_wan "lan" "wan"
-+ ;;
-++ dlink,covr-x1860-a1)
-++ ucidef_set_interfaces_lan_wan "ethernet" "internet"
-++ ;;
-+ gnubee,gb-pc1)
-+ ucidef_set_interface_lan "ethblack ethblue"
-+ ;;
-+@@ -197,6 +200,11 @@ ramips_setup_macs()
-+ lan_mac=$wan_mac
-+ label_mac=$wan_mac
-+ ;;
-++ dlink,covr-x1860-a1)
-++ label_mac=$(mtd_get_mac_ascii config2 factory_mac)
-++ wan_mac=$label_mac
-++ lan_mac=$label_mac
-++ ;;
-+ dlink,dir-860l-b1)
-+ lan_mac=$(mtd_get_mac_ascii factory lanmac)
-+ wan_mac=$(mtd_get_mac_ascii factory wanmac)
-+diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
-+index 3467e783f0482621ee933f1abcd7be780854bb38..79a521b4126e648aa7afbdc8ef7bb9bc70e34fad 100644
-+--- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
-++++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
-+@@ -41,6 +41,13 @@ case "$board" in
-+ [ "$PHYNBR" = "1" ] && \
-+ macaddr_add $lan_mac_addr 2 > /sys${DEVPATH}/macaddress
-+ ;;
-++ dlink,covr-x1860-a1)
-++ label_mac=$(mtd_get_mac_ascii config2 factory_mac)
-++ [ "$PHYNBR" = "0" ] && \
-++ macaddr_add $label_mac 1 > /sys${DEVPATH}/macaddress
-++ [ "$PHYNBR" = "1" ] && \
-++ macaddr_add $label_mac 2 > /sys${DEVPATH}/macaddress
-++ ;;
-+ dlink,dap-x1860-a1)
-+ hw_mac_addr="$(mtd_get_mac_binary factory 0x4)"
-+ [ "$PHYNBR" = "0" ] && \
-+diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
-+index 5d8305b788cce391335f2563d60c999f4d0b27de..6dc0f594afc66bc4f36c19165bc3a8582d40389d 100755
-+--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
-++++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
-+@@ -63,6 +63,7 @@ platform_do_upgrade() {
-+ beeline,smartbox-turbo|\
-+ beeline,smartbox-turbo-plus|\
-+ belkin,rt1800|\
-++ dlink,covr-x1860-a1|\
-+ dlink,dap-x1860-a1|\
-+ dlink,dir-1960-a1|\
-+ dlink,dir-2640-a1|\
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index c5708838..01b9b94c 100644
+index 3a2c1cd2..630fd7ab 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
-@@ -33,6 +33,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', {
+@@ -37,6 +37,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', {
-- D-Link
diff --git a/patches/cellular.patch b/patches/cellular.patch
index 5de730e..98c6799 100644
--- a/patches/cellular.patch
+++ b/patches/cellular.patch
@@ -1,8 +1,8 @@
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
-index 0099d1d8..7301eff2 100755
+index 27294c4d..7301eff2 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
-@@ -49,10 +49,12 @@ if platform.match('ath79', 'nand', {
+@@ -49,6 +49,7 @@ if platform.match('ath79', 'nand', {
setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
elseif platform.match('ath79', 'nand', {
'zte,mf281',
@@ -10,16 +10,11 @@ index 0099d1d8..7301eff2 100755
}) then
setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15)
elseif platform.match('ipq40xx', 'generic', {
- 'glinet,gl-ap1300',
-+ 'zte,mf289f',
- }) then
- setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
- elseif platform.match('ramips', 'mt7621', {
diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-index 52d9f1b1..6b4b14ed 100644
+index 7ba3103f..37b25bb0 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-@@ -77,11 +77,13 @@ end
+@@ -76,6 +76,7 @@ end
function M.is_cellular_device()
if M.match('ath79', 'nand', {
'zte,mf281',
@@ -27,9 +22,3 @@ index 52d9f1b1..6b4b14ed 100644
'glinet,gl-xe300',
}) then
return true
- elseif M.match('ipq40xx', 'generic', {
- 'glinet,gl-ap1300',
-+ 'zte,mf289f',
- }) then
- return true
- elseif M.match('ramips', 'mt7621', {
diff --git a/patches/gluon-makefile.patch b/patches/gluon-makefile.patch
index fa1f78d..5e058f6 100644
--- a/patches/gluon-makefile.patch
+++ b/patches/gluon-makefile.patch
@@ -1,8 +1,8 @@
diff --git a/Makefile b/Makefile
-index 695b1bc7..00dd9ceb 100644
+index 5fa37a43..c5206668 100644
--- a/Makefile
+++ b/Makefile
-@@ -111,11 +111,11 @@ update-modules: FORCE
+@@ -121,11 +121,11 @@ update-modules: FORCE
update-ci: FORCE
@$(GLUON_ENV) scripts/update-ci.sh
diff --git a/patches/modules.patch b/patches/modules.patch
new file mode 100644
index 0000000..86bae96
--- /dev/null
+++ b/patches/modules.patch
@@ -0,0 +1,16 @@
+diff --git a/modules b/modules
+index 8b77b64d..c0da2c9a 100644
+--- a/modules
++++ b/modules
+@@ -1,8 +1,8 @@
+ GLUON_FEEDS='gluon packages routing'
+
+-OPENWRT_REPO=https://github.com/openwrt/openwrt.git
+-OPENWRT_BRANCH=openwrt-23.05
+-OPENWRT_COMMIT=59fd8f08cf544a7f0fcaf700ca9af9292de3adcc
++OPENWRT_REPO=https://github.com/maurerle/openwrt.git
++OPENWRT_BRANCH=covr-x1860
++OPENWRT_COMMIT=59ade364e3de2a3353e7050004d4165dd48c3ab1
+
+ PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
+ PACKAGES_GLUON_COMMIT=53ea3b89771fc7d7a80f1800ce25e98dfe1633aa
diff --git a/patches/ssid-changer.patch b/patches/ssid-changer.patch
deleted file mode 100644
index a2389f9..0000000
--- a/patches/ssid-changer.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-diff --git a/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch b/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch
-new file mode 100644
-index 00000000..e920ea4e
---- /dev/null
-+++ b/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch
-@@ -0,0 +1,37 @@
-+From: FFAC
-+Date: Wed, 18 Oct 2023 11:41:27 +0000
-+Subject: try to fix ssid-changer for 23.05 devices
-+
-+diff --git a/ffac-ssid-changer/shsrc/ssid-changer.sh b/ffac-ssid-changer/shsrc/ssid-changer.sh
-+index f8b80fdb448e5e36093f8146f88c16ee0f2066de..4262e23b083cb5b51c3adb9be34f9c621bf08714 100755
-+--- a/ffac-ssid-changer/shsrc/ssid-changer.sh
-++++ b/ffac-ssid-changer/shsrc/ssid-changer.sh
-+@@ -10,7 +10,7 @@ safety_exit() {
-+ pgrep -f autoupdater >/dev/null && safety_exit 'autoupdater running'
-+ UT=$(sed 's/\..*//g' /proc/uptime)
-+ [ $UT -gt 60 ] || safety_exit 'less than one minute'
-+-[ $(find /var/run -name hostapd-phy* | wc -l) -gt 0 ] || safety_exit 'no hostapd-phy*'
-++[ $(find /var/run -name hostapd-* | wc -l) -gt 0 ] || safety_exit 'no hostapd-*'
-+
-+ # only once every timeframe minutes the SSID will change to the Offline-SSID
-+ # (set to 1 minute to change immediately every time the router gets offline)
-+@@ -120,8 +120,8 @@ HUP_NEEDED=0
-+ if [ "$CHECK" -gt 0 ] || [ "$DISABLED" = '1' ]; then
-+ echo "node is online"
-+ LOOP=1
-+- # check status for all physical devices
-+- for HOSTAPD in $(ls /var/run/hostapd-phy*); do
-++ # check status for all physical and wireless devices
-++ for HOSTAPD in $(ls /var/run/hostapd-*); do
-+ ONLINE_SSID="$(echo $ONLINE_SSIDs | awk -F '~' -v l=$((LOOP*2)) '{print $l}')"
-+ LOOP=$((LOOP+1))
-+ CURRENT_SSID="$(grep "^ssid=$ONLINE_SSID" $HOSTAPD | cut -d"=" -f2)"
-+@@ -165,7 +165,7 @@ elif [ "$CHECK" -eq 0 ]; then
-+ if [ $OFF_COUNT -ge $(($T / 2)) ]; then
-+ # node was offline more times than half of switch_timeframe (or than $FIRST)
-+ LOOP=1
-+- for HOSTAPD in $(ls /var/run/hostapd-phy*); do
-++ for HOSTAPD in $(ls /var/run/hostapd-*); do
-+ ONLINE_SSID="$(echo $ONLINE_SSIDs | awk -F '~' -v l=$((LOOP*2)) '{print $l}')"
-+ LOOP=$((LOOP+1))
-+ CURRENT_SSID="$(grep "^ssid=$OFFLINE_SSID" $HOSTAPD | cut -d"=" -f2)"
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index bbadb62..7da5daa 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,22 +1,8 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index aafcb22f..71457772 100644
+index 626b6520..9c0f12fd 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -57,6 +57,13 @@ device('avm-fritz-wlan-repeater-450e', 'avm_fritz450e', {
- factory = false,
- })
-
-+device('avm-fritz-wlan-repeater-1750e', 'avm_fritz1750e', {
-+ packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880,
-+ factory = false,
-+ broken = true, -- OOM with 5GHz enabled in most environments
-+ class = 'tiny', -- 64M ath9k + ath10k
-+})
-+
- -- Buffalo
-
- device('buffalo-wzr-hp-ag300h', 'buffalo_wzr-hp-ag300h')
-@@ -468,6 +475,15 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
+@@ -506,6 +506,15 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', {
packages = ATH10K_PACKAGES_QCA9888,
})
@@ -32,7 +18,7 @@ index aafcb22f..71457772 100644
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
-@@ -581,3 +597,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -604,3 +613,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
})
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
diff --git a/patches/targets-ath79-mikrotik.patch b/patches/targets-ath79-mikrotik.patch
index 8ba9f0f..1f938dc 100644
--- a/patches/targets-ath79-mikrotik.patch
+++ b/patches/targets-ath79-mikrotik.patch
@@ -1,11 +1,11 @@
diff --git a/targets/ath79-mikrotik b/targets/ath79-mikrotik
-index c2002987..974ce347 100644
+index 6d008811..7e59c05c 100644
--- a/targets/ath79-mikrotik
+++ b/targets/ath79-mikrotik
-@@ -1,3 +1,13 @@
- include 'mikrotik.inc'
-
+@@ -3,3 +3,13 @@ include 'mikrotik.inc'
device('mikrotik-routerboard-951ui-2nd-hap', 'mikrotik_routerboard-951ui-2nd')
+
+ device('mikrotik-routerboard-wapr-2nd', 'mikrotik_routerboard-wapr-2nd')
+
+device('mikrotik-routerboard-mapl-2nd', 'mikrotik_routerboard-mapl-2nd', {
+ aliases = {'mikrotik-routerboard-map-lite'},
diff --git a/patches/targets-bcm2711-raspberry-pi-4.patch b/patches/targets-bcm2711-raspberry-pi-4.patch
deleted file mode 100644
index 8ca4f48..0000000
--- a/patches/targets-bcm2711-raspberry-pi-4.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/targets/bcm27xx-bcm2711 b/targets/bcm27xx-bcm2711
-new file mode 100644
-index 00000000..90420dd0
---- /dev/null
-+++ b/targets/bcm27xx-bcm2711
-@@ -0,0 +1,9 @@
-+include 'bcm27xx.inc'
-+
-+device('raspberry-pi-4-model-b', 'rpi-4', {
-+ manifest_aliases = {
-+ 'raspberry-pi-4-model-b-rev-1.1',
-+ 'raspberry-pi-4-model-b-rev-1.2',
-+ 'raspberry-pi-4-model-b-rev-1.4',
-+ },
-+})
diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch
index 4d076b3..0543daf 100644
--- a/patches/targets-ipq40xx-generic.patch
+++ b/patches/targets-ipq40xx-generic.patch
@@ -1,47 +1,5 @@
-diff --git a/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch b/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch
-new file mode 100644
-index 00000000..dad7e10b
---- /dev/null
-+++ b/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch
-@@ -0,0 +1,24 @@
-+From: Alexander Friese
-+Date: Wed, 12 Jul 2023 16:46:01 +0200
-+Subject: ipq4019: fix support for AVM FRITZ!Repeater 3000
-+
-+new versions of the device have NAND with 8bit ECC
-+which was not yet supported before. This change removes
-+ECC restrictions.
-+
-+Signed-off-by: Alexander Friese
-+
-+diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts
-+index 41dec72542421d8b2228e3f0432460e75bbcc329..8d88bc1521109f5469a0a7ce893af4b92b4f39ed 100644
-+--- a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts
-++++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts
-+@@ -121,9 +121,6 @@
-+ status = "okay";
-+
-+ nand@0 {
-+- /delete-property/ nand-ecc-strength;
-+- /delete-property/ nand-ecc-step-size;
-+-
-+ partitions {
-+ compatible = "fixed-partitions";
-+ #address-cells = <1>;
-diff --git a/patches/openwrt/0007-procd-add-Dlink-sge-image.patch b/patches/openwrt/0008-procd-add-Dlink-sge-image.patch
-similarity index 100%
-rename from patches/openwrt/0007-procd-add-Dlink-sge-image.patch
-rename to patches/openwrt/0008-procd-add-Dlink-sge-image.patch
-diff --git a/patches/openwrt/0008-add-Dlink-COVR-X1860.patch b/patches/openwrt/0009-add-Dlink-COVR-X1860.patch
-similarity index 100%
-rename from patches/openwrt/0008-add-Dlink-COVR-X1860.patch
-rename to patches/openwrt/0009-add-Dlink-COVR-X1860.patch
-diff --git a/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
-similarity index 100%
-rename from patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
-rename to patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index b6a49ca7..68cb4d55 100644
+index 068f538b..6e7c8bd4 100644
--- a/targets/ipq40xx-generic
+++ b/targets/ipq40xx-generic
@@ -14,6 +14,15 @@ local ATH10K_PACKAGES_IPQ40XX_QCA9888 = {
@@ -133,20 +91,11 @@ index b6a49ca7..68cb4d55 100644
'-ath10k-firmware-qca9887-ct',
'-ath10k-board-qca9887',
},
-@@ -120,6 +181,16 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', {
- })
+@@ -123,6 +184,7 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', {
+ -- ZTE
-
-+-- ZTE
-+
-+device('zte-mf289f', 'zte_mf289f', {
+ device('zte-mf289f', 'zte_mf289f', {
+ packages = ATH10K_PACKAGES_IPQ40XX_QCA9984,
-+ broken = true, -- case must be opened to install
-+ -- only hw rev T2 was tested, hw rev T1 wasn't (implication: 5GHz was never verified for T1, everything else should be working)
-+ factory = false,
-+})
-+
-+
- -- ZyXEL
-
- device('zyxel-nbg6617', 'zyxel_nbg6617')
+ broken = true, -- case must be opened to install
+ factory = false,
+ })
diff --git a/patches/targets-ipq40xx-mikrotik.patch b/patches/targets-ipq40xx-mikrotik.patch
index 772ae11..246bdb4 100644
--- a/patches/targets-ipq40xx-mikrotik.patch
+++ b/patches/targets-ipq40xx-mikrotik.patch
@@ -1,5 +1,5 @@
diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-index ba4b5b48..52d9f1b1 100644
+index 37b25bb0..c81913a8 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
@@ -26,6 +26,8 @@ function M.is_outdoor_device()
diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch
index 0a6ddf1..67519ec 100644
--- a/patches/targets-lantiq-xrx200-devices.patch
+++ b/patches/targets-lantiq-xrx200-devices.patch
@@ -1,8 +1,8 @@
-diff --git a/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
+diff --git a/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
new file mode 100644
index 00000000..9b7a21f9
--- /dev/null
-+++ b/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
++++ b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
@@ -0,0 +1,53 @@
+From: Felix Baumann
+Date: Tue, 28 Feb 2023 04:21:07 +0100
diff --git a/patches/targets-mk.patch b/patches/targets-mk.patch
index 3adb047..c2f3d09 100644
--- a/patches/targets-mk.patch
+++ b/patches/targets-mk.patch
@@ -1,12 +1,11 @@
diff --git a/targets/targets.mk b/targets/targets.mk
-index 3a885f22..52186339 100644
+index 14955134..7a5a9b2e 100644
--- a/targets/targets.mk
+++ b/targets/targets.mk
-@@ -26,5 +26,8 @@ $(eval $(call GluonTarget,x86,64))
-
- ifneq ($(BROKEN),)
+@@ -29,5 +29,7 @@ $(eval $(call GluonTarget,x86,64))
+ ifeq ($(BROKEN),1)
$(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested
-+$(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested
+ $(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: No 11s support, no reset button, sys LED issues
+$(eval $(call GluonTarget,ipq40xx,chromium)) # BROKEN: Untested
+$(eval $(call GluonTarget,ipq807x,generic)) # BROKEN: Untested
$(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index a8a5540..ebe3f02 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 01b9b94c..630fd7ab 100644
+index c5708838..3a2c1cd2 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
@@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', {
@@ -13,7 +13,7 @@ index 01b9b94c..630fd7ab 100644
device('cudy-x6-v1', 'cudy_x6-v1', {
factory = false,
})
-@@ -89,6 +93,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', {
+@@ -83,6 +87,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', {
-- TP-Link
@@ -22,7 +22,7 @@ index 01b9b94c..630fd7ab 100644
device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', {
broken = true, -- LAN LED not working - review after resolving #2756
})
-@@ -106,6 +112,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', {
+@@ -100,6 +106,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', {
factory = false,
})
@@ -33,7 +33,7 @@ index 01b9b94c..630fd7ab 100644
-- Wavlink
-@@ -162,6 +172,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
+@@ -156,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
-- Devices without WLAN
diff --git a/release.mk b/release.mk
index f4f9c61..61962a8 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := d517e0ff7c065fde70e098f2659a828c02f13ce2 # master
+GLUON_GIT_REF := 06d547710bcd1d0e99ed6acb54002f9a46ed23de # master
\ No newline at end of file
From a5885b335c79d9288591f93802147a7cfa7fa51f Mon Sep 17 00:00:00 2001
From: FFAC
Date: Fri, 5 Jan 2024 07:07:50 +0000
Subject: [PATCH 112/129] use gluon tls, fix covr-x1860, update gluon and
modules
---
image-customization.lua | 13 +++++--------
modules | 2 +-
patches/modules.patch | 4 ++--
release.mk | 2 +-
4 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/image-customization.lua b/image-customization.lua
index 782f542..a528cf3 100644
--- a/image-customization.lua
+++ b/image-customization.lua
@@ -19,6 +19,7 @@ packages {
'iwinfo',
'ffac-ssid-changer',
'ffac-wg-registration',
+ 'ff-web-ap-timer',
'respondd-module-airtime',
}
@@ -100,12 +101,6 @@ pkgs_pci = {
'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716
}
-pkgs_tls = {
- 'ca-bundle',
- 'libustream-openssl',
- 'openssh-sftp-server'
-}
-
include_tls = not device({
'd-link-dir825b1',
'tp-link-archer-c58-v1',
@@ -135,12 +130,14 @@ include_tls = not device({
'tp-link-archer-c20-v1',
'tp-link-archer-c20i',
'tp-link-archer-c50-v1',
+ 'tp-link-archer-c60-v1',
'netgear-r6020'
})
if include_tls then
- packages(pkgs_tls)
+ features {'tls'}
+ packages {'openssh-sftp-server'}
end
include_usb = true
@@ -211,4 +208,4 @@ end
if target('bcm27xx') then
packages(pkgs_hid)
-end
\ No newline at end of file
+end
diff --git a/modules b/modules
index f47359e..529ca21 100644
--- a/modules
+++ b/modules
@@ -1,5 +1,5 @@
GLUON_SITE_FEEDS="community"
PACKAGES_COMMUNITY_REPO=https://github.com/freifunk-gluon/community-packages.git
-PACKAGES_COMMUNITY_COMMIT=d7554980f944273bb1e51c40a33aa6662130c6ab
+PACKAGES_COMMUNITY_COMMIT=661f553c12785f3287fab6018487a55efda55071
PACKAGES_COMMUNITY_BRANCH=master
diff --git a/patches/modules.patch b/patches/modules.patch
index 86bae96..bfae0a8 100644
--- a/patches/modules.patch
+++ b/patches/modules.patch
@@ -9,8 +9,8 @@ index 8b77b64d..c0da2c9a 100644
-OPENWRT_BRANCH=openwrt-23.05
-OPENWRT_COMMIT=59fd8f08cf544a7f0fcaf700ca9af9292de3adcc
+OPENWRT_REPO=https://github.com/maurerle/openwrt.git
-+OPENWRT_BRANCH=covr-x1860
-+OPENWRT_COMMIT=59ade364e3de2a3353e7050004d4165dd48c3ab1
++OPENWRT_BRANCH=covr-x1860-gluon
++OPENWRT_COMMIT=02d87a058393ce714b6ffd3c63cc3823d42987f4
PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
PACKAGES_GLUON_COMMIT=53ea3b89771fc7d7a80f1800ce25e98dfe1633aa
diff --git a/release.mk b/release.mk
index 61962a8..89a7802 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := 06d547710bcd1d0e99ed6acb54002f9a46ed23de # master
\ No newline at end of file
+GLUON_GIT_REF := 06d547710bcd1d0e99ed6acb54002f9a46ed23de # master
From 681e7822ba1ef89d3b9609766eb6df13a49b4cdc Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Fri, 5 Jan 2024 09:08:40 +0100
Subject: [PATCH 113/129] update release notes remove old genpkglist from
readme
---
CHANGELOG.md | 16 ++++++++++++++++
README.md | 10 ----------
2 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 93110c6..6a3552a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,21 @@
# Freifunk Aachen Firmware Changelog
+## v2023.2.0-8
+ - package configuration with image-customization.lua
+ - switch to maurerle/covr-x1860-gluon openwrt base
+ - remove obsolete patches
+ - switch from openssl to mbedtls (gluon-tls)
+ - add ff-web-ap-timer
+ - update to latest community-packages
+ - update gluon release to v2023.2
+ - add ffda-network-setup-mode for zyxel-nwa55axe
+ - fix opkg key folder creation
+
+## v2023.2.0-7
+ - fix building wax218
+ - add FR3000, FR1750e, Xiaomi AX3600, EAP225v3
+ - add ZTE MF289F, TP-Link Archer AX23, Ubiquiti UniFi nanoHD, Mikrotik WAP AC (D2), Netgear WAX218, Google WiFi (Gale)
+
## v2023.2.0-6
- update openwrt to nearly v23.05.0-rc4
- update community-packages
diff --git a/README.md b/README.md
index 7e8b6b7..69df56f 100644
--- a/README.md
+++ b/README.md
@@ -17,16 +17,6 @@ A single target can be built using:
## CHANGELOG
The [CHANGELOG](./CHANGELOG.md) can be found [here](./CHANGELOG.md)
-## Update site.mk packages
-
-To update the site.mk packages, the `genpkglist.py` can be executed from the build server like:
-
-```console
-~/site-ffac$ ./contrib/genpkglist.py
-```
-
-The output must then be appended to the end of the `site.mk`
-
Currently outdated further information can be found in the Freifunk Wiki[^wiki]
From d32c7b45fe26fd77662193b28db888cac8b0528b Mon Sep 17 00:00:00 2001
From: FFAC
Date: Fri, 5 Jan 2024 14:37:01 +0000
Subject: [PATCH 114/129] remove excluding devices from tls - use tiny add hid
packages for x86
---
image-customization.lua | 44 ++++-------------------------------------
1 file changed, 4 insertions(+), 40 deletions(-)
diff --git a/image-customization.lua b/image-customization.lua
index a528cf3..7146e60 100644
--- a/image-customization.lua
+++ b/image-customization.lua
@@ -37,8 +37,10 @@ if device({
end
if not device_class('tiny') then
+ features {'tls'}
packages {
- 'ffac-autoupdater-wifi-fallback'
+ 'ffac-autoupdater-wifi-fallback',
+ 'openssh-sftp-server'
}
end
@@ -101,45 +103,6 @@ pkgs_pci = {
'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716
}
-include_tls = not device({
- 'd-link-dir825b1',
- 'tp-link-archer-c58-v1',
- 'tp-link-archer-c25-v1',
- 'tp-link-archer-c2-v3',
- 'tp-link-archer-c6-v2-eu-ru-jp',
- 'tp-link-archer-d50-v1',
- 'tp-link-cpe210-v1',
- 'tp-link-cpe210-v2',
- 'tp-link-cpe210-v3',
- 'tp-link-cpe220-v3',
- 'tp-link-cpe510-v1',
- 'tp-link-cpe510-v2',
- 'tp-link-cpe510-v3',
- 'tp-link-tl-wr902ac-v1',
- 'tp-link-wbs210-v1',
- 'tp-link-wbs210-v2',
- 'tp-link-wbs510-v1',
- 'ubiquiti-nanostation-m-xw',
- 'ubiquiti-nanobeam-m5-xw',
- 'ubiquiti-nanostation-loco-m-xw',
- 'ubiquiti-unifi-ap',
-
- 'netgear-ex3700',
- 'nexx-wt3020-8m',
- 'tp-link-archer-c2-v1',
- 'tp-link-archer-c20-v1',
- 'tp-link-archer-c20i',
- 'tp-link-archer-c50-v1',
- 'tp-link-archer-c60-v1',
-
- 'netgear-r6020'
-})
-
-if include_tls then
- features {'tls'}
- packages {'openssh-sftp-server'}
-end
-
include_usb = true
-- 7M usable firmware space + USB port
@@ -204,6 +167,7 @@ end
if target('x86') and not target('x86', 'legacy') then
packages(pkgs_pci)
+ packages(pkgs_hid)
end
if target('bcm27xx') then
From f0f23a669fbcbc0822a0ee1cb47ade0f4a5dc073 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Fri, 5 Jan 2024 15:49:13 +0100
Subject: [PATCH 115/129] image-customization: change indentation to spaces
---
image-customization.lua | 232 ++++++++++++++++++++--------------------
1 file changed, 118 insertions(+), 114 deletions(-)
diff --git a/image-customization.lua b/image-customization.lua
index 7146e60..5dad5ca 100644
--- a/image-customization.lua
+++ b/image-customization.lua
@@ -1,175 +1,179 @@
features {
- 'autoupdater',
- 'ebtables-filter-multicast',
- 'ebtables-filter-ra-dhcp',
- 'ebtables-limit-arp',
- 'mesh-batman-adv-15',
- 'mesh-vpn-wireguard',
- 'respondd',
- 'status-page',
- 'web-advanced',
- 'web-wizard',
- 'config-mode-geo-location-osm',
- 'radv-filterd',
- 'radvd',
- 'web-private-wifi',
+ 'autoupdater',
+ 'ebtables-filter-multicast',
+ 'ebtables-filter-ra-dhcp',
+ 'ebtables-limit-arp',
+ 'mesh-batman-adv-15',
+ 'mesh-vpn-wireguard',
+ 'respondd',
+ 'status-page',
+ 'web-advanced',
+ 'web-wizard',
+ 'config-mode-geo-location-osm',
+ 'radv-filterd',
+ 'radvd',
+ 'web-private-wifi',
}
packages {
- 'iwinfo',
- 'ffac-ssid-changer',
- 'ffac-wg-registration',
- 'ff-web-ap-timer',
- 'respondd-module-airtime',
+ 'iwinfo',
+ 'ffac-ssid-changer',
+ 'ffac-wg-registration',
+ 'ff-web-ap-timer',
+ 'respondd-module-airtime',
}
if device({
- 'zte,mf281',
- 'glinet,gl-xe300',
- 'glinet,gl-ap1300',
- 'zte,mf289f',
- 'wavlink,ws-wn572hp3-4g',
- 'tplink,tl-mr6400-v5',
+ 'zte,mf281',
+ 'glinet,gl-xe300',
+ 'glinet,gl-ap1300',
+ 'zte,mf289f',
+ 'wavlink,ws-wn572hp3-4g',
+ 'tplink,tl-mr6400-v5',
}) then
- features {
- 'web-cellular'
- }
+ features {
+ 'web-cellular'
+ }
end
if not device_class('tiny') then
- features {'tls'}
- packages {
- 'ffac-autoupdater-wifi-fallback',
- 'openssh-sftp-server'
- }
+ features {'tls'}
+ packages {
+ 'ffac-autoupdater-wifi-fallback',
+ 'openssh-sftp-server'
+ }
end
pkgs_usb = {
- 'usbutils'
+ 'usbutils',
}
pkgs_hid = {
- 'kmod-usb-hid',
- 'kmod-hid-generic'
+ 'kmod-usb-hid',
+ 'kmod-hid-generic',
}
pkgs_usb_serial = {
- 'kmod-usb-serial',
- 'kmod-usb-serial-ftdi',
- 'kmod-usb-serial-pl2303'
+ 'kmod-usb-serial',
+ 'kmod-usb-serial-ftdi',
+ 'kmod-usb-serial-pl2303',
}
pkgs_usb_storage = {
- 'block-mount',
- 'blkid',
- 'kmod-fs-ext4',
- 'kmod-fs-ntfs',
- 'kmod-fs-vfat',
- 'kmod-usb-storage',
- 'kmod-usb-storage-extras', -- Card Readers
- 'kmod-usb-storage-uas', -- USB Attached SCSI (UAS/UASP)
- 'kmod-nls-base',
- 'kmod-nls-cp1250', -- NLS Codepage 1250 (Eastern Europe)
- 'kmod-nls-cp437', -- NLS Codepage 437 (United States, Canada)
- 'kmod-nls-cp850', -- NLS Codepage 850 (Europe)
- 'kmod-nls-cp852', -- NLS Codepage 852 (Europe)
- 'kmod-nls-iso8859-1', -- NLS ISO 8859-1 (Latin 1)
- 'kmod-nls-iso8859-13', -- NLS ISO 8859-13 (Latin 7; Baltic)
- 'kmod-nls-iso8859-15', -- NLS ISO 8859-15 (Latin 9)
- 'kmod-nls-iso8859-2', -- NLS ISO 8859-2 (Latin 2)
- 'kmod-nls-utf8' -- NLS UTF-8
+ 'block-mount',
+ 'blkid',
+ 'kmod-fs-ext4',
+ 'kmod-fs-ntfs',
+ 'kmod-fs-vfat',
+ 'kmod-usb-storage',
+ 'kmod-usb-storage-extras',-- Card Readers
+ 'kmod-usb-storage-uas', -- USB Attached SCSI (UAS/UASP)
+ 'kmod-nls-base',
+ 'kmod-nls-cp1250', -- NLS Codepage 1250 (Eastern Europe)
+ 'kmod-nls-cp437', -- NLS Codepage 437 (United States, Canada)
+ 'kmod-nls-cp850', -- NLS Codepage 850 (Europe)
+ 'kmod-nls-cp852', -- NLS Codepage 852 (Europe)
+ 'kmod-nls-iso8859-1', -- NLS ISO 8859-1 (Latin 1)
+ 'kmod-nls-iso8859-13', -- NLS ISO 8859-13 (Latin 7; Baltic)
+ 'kmod-nls-iso8859-15', -- NLS ISO 8859-15 (Latin 9)
+ 'kmod-nls-iso8859-2', -- NLS ISO 8859-2 (Latin 2)
+ 'kmod-nls-utf8', -- NLS UTF-8
}
pkgs_usb_net = {
- 'kmod-mii',
- 'kmod-usb-net',
- 'kmod-usb-net-asix',
- 'kmod-usb-net-asix-ax88179',
- 'kmod-usb-net-cdc-eem',
- 'kmod-usb-net-cdc-ether',
- 'kmod-usb-net-cdc-subset',
- 'kmod-usb-net-dm9601-ether',
- 'kmod-usb-net-hso',
- 'kmod-usb-net-ipheth',
- 'kmod-usb-net-mcs7830',
- 'kmod-usb-net-pegasus',
- 'kmod-usb-net-rndis',
- 'kmod-usb-net-rtl8152',
- 'kmod-usb-net-smsc95xx'
+ 'kmod-mii',
+ 'kmod-usb-net',
+ 'kmod-usb-net-asix',
+ 'kmod-usb-net-asix-ax88179',
+ 'kmod-usb-net-cdc-eem',
+ 'kmod-usb-net-cdc-ether',
+ 'kmod-usb-net-cdc-subset',
+ 'kmod-usb-net-dm9601-ether',
+ 'kmod-usb-net-hso',
+ 'kmod-usb-net-ipheth',
+ 'kmod-usb-net-mcs7830',
+ 'kmod-usb-net-pegasus',
+ 'kmod-usb-net-rndis',
+ 'kmod-usb-net-rtl8152',
+ 'kmod-usb-net-smsc95xx',
}
pkgs_pci = {
- 'pciutils',
- 'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716
+ 'pciutils',
+ 'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716
}
include_usb = true
-- 7M usable firmware space + USB port
if target('ath79', 'generic') and not device({
- 'devolo-wifi-pro-1750e',
- 'gl.inet-gl-ar150',
- 'gl.inet-gl-ar300m-lite',
- 'gl.inet-gl-ar750',
- 'joy-it-jt-or750i',
- 'netgear-wndr3700-v2',
- 'tp-link-archer-a7-v5',
- 'tp-link-archer-c5-v1',
- 'tp-link-archer-c7-v2',
- 'tp-link-archer-c7-v5',
- 'tp-link-archer-c59-v1',
- 'tp-link-tl-wr842n-v3',
- 'tp-link-tl-wr1043nd-v4',
- 'tp-link-tl-wr1043n-v5'
+ 'devolo-wifi-pro-1750e',
+ 'gl.inet-gl-ar150',
+ 'gl.inet-gl-ar300m-lite',
+ 'gl.inet-gl-ar750',
+ 'joy-it-jt-or750i',
+ 'netgear-wndr3700-v2',
+ 'tp-link-archer-a7-v5',
+ 'tp-link-archer-c5-v1',
+ 'tp-link-archer-c7-v2',
+ 'tp-link-archer-c7-v5',
+ 'tp-link-archer-c59-v1',
+ 'tp-link-tl-wr842n-v3',
+ 'tp-link-tl-wr1043nd-v4',
+ 'tp-link-tl-wr1043n-v5',
}) then
- include_usb = false
+ include_usb = false
end
if target('ramips', 'mt76x8') and not device({
- 'gl-mt300n-v2',
- 'gl.inet-microuter-n300',
- 'netgear-r6120',
- 'ravpower-rp-wd009'
+ 'gl-mt300n-v2',
+ 'gl.inet-microuter-n300',
+ 'netgear-r6120',
+ 'ravpower-rp-wd009',
}) then
- include_usb = false
+ include_usb = false
end
if target('realtek','rtl838x') then
- include_usb = false
+ include_usb = false
end
if device({
- 'avm-fritz-box-7412',
- 'tp-link-td-w8970',
- 'tp-link-td-w8980',
- 'ubiquiti-unifi-6-lr-v1',
- 'netgear-ex6150',
- 'ubiquiti-edgerouter-x',
- 'ubiquiti-edgerouter-x-sfp',
- 'zyxel-nwa55axe'}) then
- include_usb = false
+ 'avm-fritz-box-7412',
+ 'tp-link-td-w8970',
+ 'tp-link-td-w8980',
+ 'ubiquiti-unifi-6-lr-v1',
+ 'netgear-ex6150',
+ 'ubiquiti-edgerouter-x',
+ 'ubiquiti-edgerouter-x-sfp',
+ 'zyxel-nwa55axe'}) then
+ include_usb = false
end
if include_usb then
- packages(pkgs_usb)
- packages(pkgs_usb_net)
- packages(pkgs_usb_serial)
- packages(pkgs_usb_storage)
+ packages(pkgs_usb)
+ packages(pkgs_usb_net)
+ packages(pkgs_usb_serial)
+ packages(pkgs_usb_storage)
end
-if device({'zyxel-nwa55axe'}) then
- packages {'ffda-network-setup-mode'}
+-- device has no reset button and requires a special package to go into setup mode
+-- https://github.com/freifunk-gluon/community-packages/tree/master/ffda-network-setup-mode
+if device({
+ 'zyxel-nwa55axe',
+}) then
+ packages {'ffda-network-setup-mode'}
end
if target('x86', '64') then
- packages {'qemu-ga'}
+ packages {'qemu-ga'}
end
if target('x86') and not target('x86', 'legacy') then
- packages(pkgs_pci)
- packages(pkgs_hid)
+ packages(pkgs_pci)
+ packages(pkgs_hid)
end
if target('bcm27xx') then
- packages(pkgs_hid)
+ packages(pkgs_hid)
end
From d5c9778f0ab6036882e09b93ccd9c0d46dceedd6 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Fri, 5 Jan 2024 15:54:28 +0100
Subject: [PATCH 116/129] add wireless-encryption-wpa3 update structure to
ffmuc remove usb for devices without usb port
---
image-customization.lua | 63 ++++++++++++++++++++++++++---------------
1 file changed, 40 insertions(+), 23 deletions(-)
diff --git a/image-customization.lua b/image-customization.lua
index 5dad5ca..3d7ece9 100644
--- a/image-customization.lua
+++ b/image-customization.lua
@@ -23,24 +23,27 @@ packages {
'respondd-module-airtime',
}
-if device({
- 'zte,mf281',
- 'glinet,gl-xe300',
- 'glinet,gl-ap1300',
- 'zte,mf289f',
- 'wavlink,ws-wn572hp3-4g',
- 'tplink,tl-mr6400-v5',
-}) then
+if not device_class('tiny') then
features {
- 'web-cellular'
+ 'tls',
+ 'wireless-encryption-wpa3',
}
-end
-
-if not device_class('tiny') then
- features {'tls'}
packages {
+ 'openssh-sftp-server',
'ffac-autoupdater-wifi-fallback',
- 'openssh-sftp-server'
+ }
+end
+
+if device({
+ 'zte,mf281',
+ 'glinet,gl-xe300',
+ 'glinet,gl-ap1300',
+ 'zte,mf289f',
+ 'wavlink,ws-wn572hp3-4g',
+ 'tplink,tl-mr6400-v5',
+ }) then
+ features {
+ 'web-cellular',
}
end
@@ -105,6 +108,11 @@ pkgs_pci = {
include_usb = true
+-- rtl838x has no USB support as of Gluon v2023.2
+if target('realtek', 'rtl838x') then
+ include_usb = false
+end
+
-- 7M usable firmware space + USB port
if target('ath79', 'generic') and not device({
'devolo-wifi-pro-1750e',
@@ -134,19 +142,28 @@ if target('ramips', 'mt76x8') and not device({
include_usb = false
end
-if target('realtek','rtl838x') then
+-- 7M usable firmware space + USB port
+if device({
+ 'avm-fritz-box-7412',
+ 'tp-link-td-w8970',
+ 'tp-link-td-w8980',
+ 'gl-mt300n-v2',
+ 'gl.inet-microuter-n300',
+ 'netgear-r6120',
+ 'ravpower-rp-wd009'
+}) then
include_usb = false
end
+-- devices without usb ports
if device({
- 'avm-fritz-box-7412',
- 'tp-link-td-w8970',
- 'tp-link-td-w8980',
- 'ubiquiti-unifi-6-lr-v1',
- 'netgear-ex6150',
- 'ubiquiti-edgerouter-x',
- 'ubiquiti-edgerouter-x-sfp',
- 'zyxel-nwa55axe'}) then
+ 'ubiquiti-unifi-6-lr-v1',
+ 'netgear-ex6150',
+ 'netgear-ex3700',
+ 'ubiquiti-edgerouter-x',
+ 'ubiquiti-edgerouter-x-sfp',
+ 'zyxel-nwa55axe',
+}) then
include_usb = false
end
From 7835b4ea9cc545204ca44a4f367a074ec974e239 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Tue, 9 Jan 2024 23:12:25 +0000
Subject: [PATCH 117/129] covr-x1860 is officially supported
---
patches/add-covr-x1860.patch | 17 -----------------
patches/modules.patch | 16 ----------------
patches/targets-ramips-mt7621.patch | 8 ++++----
release.mk | 2 +-
4 files changed, 5 insertions(+), 38 deletions(-)
delete mode 100644 patches/add-covr-x1860.patch
delete mode 100644 patches/modules.patch
diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch
deleted file mode 100644
index 701b4b6..0000000
--- a/patches/add-covr-x1860.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 3a2c1cd2..630fd7ab 100644
---- a/targets/ramips-mt7621
-+++ b/targets/ramips-mt7621
-@@ -37,6 +37,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', {
-
- -- D-Link
-
-+device('d-link-covr-x1860-a1', 'dlink_covr-x1860-a1', {
-+ extra_images = {
-+ {'-squashfs-recovery', '-recovery', '.bin'}
-+ },
-+})
-+
- device('d-link-dap-x1860-a1', 'dlink_dap-x1860-a1')
-
- device('d-link-dir-860l-b1', 'dlink_dir-860l-b1')
diff --git a/patches/modules.patch b/patches/modules.patch
deleted file mode 100644
index bfae0a8..0000000
--- a/patches/modules.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff --git a/modules b/modules
-index 8b77b64d..c0da2c9a 100644
---- a/modules
-+++ b/modules
-@@ -1,8 +1,8 @@
- GLUON_FEEDS='gluon packages routing'
-
--OPENWRT_REPO=https://github.com/openwrt/openwrt.git
--OPENWRT_BRANCH=openwrt-23.05
--OPENWRT_COMMIT=59fd8f08cf544a7f0fcaf700ca9af9292de3adcc
-+OPENWRT_REPO=https://github.com/maurerle/openwrt.git
-+OPENWRT_BRANCH=covr-x1860-gluon
-+OPENWRT_COMMIT=02d87a058393ce714b6ffd3c63cc3823d42987f4
-
- PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
- PACKAGES_GLUON_COMMIT=53ea3b89771fc7d7a80f1800ce25e98dfe1633aa
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index ebe3f02..a8a5540 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index c5708838..3a2c1cd2 100644
+index 01b9b94c..630fd7ab 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
@@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', {
@@ -13,7 +13,7 @@ index c5708838..3a2c1cd2 100644
device('cudy-x6-v1', 'cudy_x6-v1', {
factory = false,
})
-@@ -83,6 +87,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', {
+@@ -89,6 +93,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', {
-- TP-Link
@@ -22,7 +22,7 @@ index c5708838..3a2c1cd2 100644
device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', {
broken = true, -- LAN LED not working - review after resolving #2756
})
-@@ -100,6 +106,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', {
+@@ -106,6 +112,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', {
factory = false,
})
@@ -33,7 +33,7 @@ index c5708838..3a2c1cd2 100644
-- Wavlink
-@@ -156,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
+@@ -162,6 +172,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
-- Devices without WLAN
diff --git a/release.mk b/release.mk
index 89a7802..2a489df 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := 06d547710bcd1d0e99ed6acb54002f9a46ed23de # master
+GLUON_GIT_REF := 1ba17d6fe2f5bc0f327d42f1627522b709408b67 # master
From 9de9eb4e15a6e5105e307157714582821f7a281c Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Thu, 18 Jan 2024 00:58:06 +0100
Subject: [PATCH 118/129] add open-vm-tools to x86-64 images
---
image-customization.lua | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/image-customization.lua b/image-customization.lua
index 3d7ece9..01bedc6 100644
--- a/image-customization.lua
+++ b/image-customization.lua
@@ -183,7 +183,11 @@ if device({
end
if target('x86', '64') then
- packages {'qemu-ga'}
+ -- add guest agent for qemu and vmware
+ packages {
+ 'qemu-ga',
+ 'open-vm-tools',
+ }
end
if target('x86') and not target('x86', 'legacy') then
From 6b238213e32ec95829d28db68cbe56c1ebc16675 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Thu, 18 Jan 2024 01:02:45 +0100
Subject: [PATCH 119/129] update to latest gluon: fixes WDR3600 and WDR4300
issue
---
release.mk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/release.mk b/release.mk
index 2a489df..4387179 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := 1ba17d6fe2f5bc0f327d42f1627522b709408b67 # master
+GLUON_GIT_REF := bfbefa4580d1162b2766c6e685d85b970d0c9680 # master
From a94984e508a7a19e1da71cf0655b6899f5323ce6 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Thu, 18 Jan 2024 01:11:20 +0100
Subject: [PATCH 120/129] temporarily fix 40MHz operation
---
site.conf | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/site.conf b/site.conf
index 0df15bf..33cb722 100644
--- a/site.conf
+++ b/site.conf
@@ -58,7 +58,8 @@
wifi5 = {
channel = 44,
- outdoor_chanlist = '100-116 132-140', -- exclude/avoid weather radar frequencies
+ outdoor_chanlist = '100-116 132-136', -- exclude/avoid weather radar frequencies
+ -- exclude 136-140 temporarily to fix 40MHz operation
-- https://homepage.univie.ac.at/albert.rafetseder/RADARs/radars.html
ap = {
ssid = 'Freifunk',
From 845501e5e3dada3ca9f32c5a5d83c80f66146d12 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Thu, 18 Jan 2024 01:20:35 +0100
Subject: [PATCH 121/129] update changelog for release v2023.2.0-9
---
CHANGELOG.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6a3552a..52f8276 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# Freifunk Aachen Firmware Changelog
+## v2023.2.0-9
+ - add open-vm-tools to x86-64
+ - update to latest gluon v2023.2.x
+ - fixes WDR3600 and WDR4300 hang on reboot issue
+ - fixes 40MHz operation with highest 5GHz channel
+
## v2023.2.0-8
- package configuration with image-customization.lua
- switch to maurerle/covr-x1860-gluon openwrt base
From 0bb9c0cffd65c7f04d4c1546f887b06d45d771a5 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Thu, 18 Jan 2024 04:58:31 +0000
Subject: [PATCH 122/129] update patches
---
patches/cellular.patch | 4 ++--
patches/targets-ath79-generic.patch | 8 ++++----
patches/targets-ipq40xx-mikrotik.patch | 2 +-
patches/targets-lantiq-xrx200-devices.patch | 4 ++--
4 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/patches/cellular.patch b/patches/cellular.patch
index 98c6799..36b1c04 100644
--- a/patches/cellular.patch
+++ b/patches/cellular.patch
@@ -11,10 +11,10 @@ index 27294c4d..7301eff2 100755
setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15)
elseif platform.match('ipq40xx', 'generic', {
diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-index 7ba3103f..37b25bb0 100644
+index 931363b5..5dd3980c 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-@@ -76,6 +76,7 @@ end
+@@ -79,6 +79,7 @@ end
function M.is_cellular_device()
if M.match('ath79', 'nand', {
'zte,mf281',
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 7da5daa..59c68ca 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index 626b6520..9c0f12fd 100644
+index af23bf6a..8b0ae548 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
@@ -506,6 +506,15 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', {
@@ -18,10 +18,10 @@ index 626b6520..9c0f12fd 100644
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
-@@ -604,3 +613,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', {
+@@ -610,3 +619,14 @@ device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', {
+ factory = false,
+ packages = ATH10K_PACKAGES_QCA9880,
})
-
- device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
+
+-- device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', {
+-- packages = ATH10K_PACKAGES_QCA9880,
diff --git a/patches/targets-ipq40xx-mikrotik.patch b/patches/targets-ipq40xx-mikrotik.patch
index 246bdb4..0e73059 100644
--- a/patches/targets-ipq40xx-mikrotik.patch
+++ b/patches/targets-ipq40xx-mikrotik.patch
@@ -1,5 +1,5 @@
diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-index 37b25bb0..c81913a8 100644
+index 014e516c..931363b5 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
@@ -26,6 +26,8 @@ function M.is_outdoor_device()
diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch
index 67519ec..daede07 100644
--- a/patches/targets-lantiq-xrx200-devices.patch
+++ b/patches/targets-lantiq-xrx200-devices.patch
@@ -1,8 +1,8 @@
-diff --git a/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
+diff --git a/patches/openwrt/0007-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0007-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
new file mode 100644
index 00000000..9b7a21f9
--- /dev/null
-+++ b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
++++ b/patches/openwrt/0007-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch
@@ -0,0 +1,53 @@
+From: Felix Baumann
+Date: Tue, 28 Feb 2023 04:21:07 +0100
From 69808182b82af90ac0df032d06f58e7316267b0a Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Mon, 29 Jan 2024 23:08:19 +0100
Subject: [PATCH 123/129] remove old unused x86 targets and sunxi-cortexa7 add
zte-mf286r to web-cellular
---
image-customization.lua | 1 +
targets.mk | 4 ----
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/image-customization.lua b/image-customization.lua
index 01bedc6..4311c00 100644
--- a/image-customization.lua
+++ b/image-customization.lua
@@ -39,6 +39,7 @@ if device({
'glinet,gl-xe300',
'glinet,gl-ap1300',
'zte,mf289f',
+ 'zte,mf286r',
'wavlink,ws-wn572hp3-4g',
'tplink,tl-mr6400-v5',
}) then
diff --git a/targets.mk b/targets.mk
index cff818a..c4ca0f9 100644
--- a/targets.mk
+++ b/targets.mk
@@ -17,10 +17,6 @@ ramips-mt7620
ramips-mt7621
ramips-mt76x8
rockchip-armv8
-sunxi-cortexa7
-x86-generic
-x86-geode
-x86-legacy
x86-64
endef
From 061ee9126f788350b2ecf0f278b4533a9eca495d Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Mon, 29 Jan 2024 23:08:32 +0100
Subject: [PATCH 124/129] update gluon to v2023.2.1
---
release.mk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/release.mk b/release.mk
index 4387179..f2f696a 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := bfbefa4580d1162b2766c6e685d85b970d0c9680 # master
+GLUON_GIT_REF := v2023.2.1
From 318531e57be9184219a6a172b7164d5cff5b2dab Mon Sep 17 00:00:00 2001
From: Felix Baumann
Date: Tue, 13 Feb 2024 22:25:56 +0100
Subject: [PATCH 125/129] Create new v2024.1.x based on Gluon next
---
release.mk | 2 +-
site.conf | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/release.mk b/release.mk
index f2f696a..b83a83e 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := v2023.2.1
+GLUON_GIT_REF := befc3e803bca9a115ccd0ea17d4924feb7a83f83
diff --git a/site.conf b/site.conf
index 33cb722..7e2ecad 100644
--- a/site.conf
+++ b/site.conf
@@ -78,7 +78,7 @@
mesh = {
vxlan = false,
- filter_membership_reports = false,
+ filter_membership_reports = true,
batman_adv = {
routing_algo = 'BATMAN_IV',
gw_sel_class = 1,
From 327dfb116cae256a94f1da44efc5cd149eb585d6 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Tue, 13 Feb 2024 21:34:35 +0000
Subject: [PATCH 126/129] update-patches
---
patches/targets-ath79-generic.patch | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 59c68ca..9c5d3c6 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index af23bf6a..8b0ae548 100644
+index 11d78ba2..b53e3d7b 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -506,6 +506,15 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', {
+@@ -512,6 +512,15 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', {
packages = ATH10K_PACKAGES_QCA9888,
})
@@ -18,7 +18,7 @@ index af23bf6a..8b0ae548 100644
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
-@@ -610,3 +619,14 @@ device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', {
+@@ -616,3 +625,14 @@ device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', {
factory = false,
packages = ATH10K_PACKAGES_QCA9880,
})
From bcf5440b9877c138e1919798ab100702566fa191 Mon Sep 17 00:00:00 2001
From: FFAC
Date: Tue, 13 Feb 2024 21:39:50 +0000
Subject: [PATCH 127/129] Update mirrors
---
site.conf | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/site.conf b/site.conf
index 7e2ecad..cd064b2 100644
--- a/site.conf
+++ b/site.conf
@@ -221,9 +221,9 @@
stable = {
name = 'stable',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2023.2.x/stable/sysupgrade',
- 'http://updates.ffac.rocks/from-2023.2.x/stable/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2023.2.x/stable/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2024.1.x/stable/sysupgrade',
+ 'http://updates.ffac.rocks/from-2024.1.x/stable/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2024.1.x/stable/sysupgrade',
},
good_signatures = 4,
pubkeys = {
@@ -241,9 +241,9 @@
beta = {
name = 'beta',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2023.2.x/beta/sysupgrade',
- 'http://updates.ffac.rocks/from-2023.2.x/beta/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2023.2.x/beta/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2024.1.x/beta/sysupgrade',
+ 'http://updates.ffac.rocks/from-2024.1.x/beta/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2024.1.x/beta/sysupgrade',
},
good_signatures = 3,
pubkeys = {
@@ -261,9 +261,9 @@
experimental = {
name = 'experimental',
mirrors = {
- 'http://updates.freifunk-aachen.de/from-2023.2.x/experimental/sysupgrade',
- 'http://updates.ffac.rocks/from-2023.2.x/experimental/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2023.2.x/experimental/sysupgrade',
+ 'http://updates.freifunk-aachen.de/from-2024.1.x/experimental/sysupgrade',
+ 'http://updates.ffac.rocks/from-2024.1.x/experimental/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2024.1.x/experimental/sysupgrade',
},
good_signatures = 2,
pubkeys = {
From ecf67fbb25b88d91ac8fd4adaa30a64dedc5dbe5 Mon Sep 17 00:00:00 2001
From: Florian Maurer
Date: Fri, 5 Apr 2024 00:58:10 +0200
Subject: [PATCH 128/129] update gluon and patches
Signed-off-by: Florian Maurer
---
patches/targets-ath79-generic.patch | 19 +++++--------------
patches/targets-ath79-nand.patch | 4 ++--
patches/targets-ipq40xx-generic.patch | 10 +++++-----
patches/targets-lantiq-xrx200-devices.patch | 6 +++---
patches/targets-mediatek-mt7622.patch | 10 +++-------
patches/targets-ramips-mt7621.patch | 10 +++++-----
release.mk | 2 +-
7 files changed, 24 insertions(+), 37 deletions(-)
diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch
index 9c5d3c6..ba60956 100644
--- a/patches/targets-ath79-generic.patch
+++ b/patches/targets-ath79-generic.patch
@@ -1,35 +1,26 @@
diff --git a/targets/ath79-generic b/targets/ath79-generic
-index 11d78ba2..b53e3d7b 100644
+index c41bf0db..17ee5e70 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
-@@ -512,6 +512,15 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', {
+@@ -471,6 +471,10 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', {
packages = ATH10K_PACKAGES_QCA9888,
})
-+device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', {
-+ factory = false,
-+ packages = ATH10K_PACKAGES_QCA9888,
-+})
-+
+device('tp-link-eap225-wall-v2', 'tplink_eap225-wall-v2', {
+ packages = ATH10K_PACKAGES_QCA9888,
+})
+
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
+
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
- device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
-@@ -616,3 +625,14 @@ device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', {
+@@ -548,3 +552,9 @@ device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', {
factory = false,
packages = ATH10K_PACKAGES_QCA9880,
})
+
-+-- device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', {
-+-- packages = ATH10K_PACKAGES_QCA9880,
-+-- })
-+
-+
+-- Zyxel
+
+device('zyxel-nbg6616', 'zyxel_nbg6616', {
+ packages = ATH10K_PACKAGES_QCA9880,
+})
+\ No newline at end of file
diff --git a/patches/targets-ath79-nand.patch b/patches/targets-ath79-nand.patch
index 96569b5..927edc5 100644
--- a/patches/targets-ath79-nand.patch
+++ b/patches/targets-ath79-nand.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ath79-nand b/targets/ath79-nand
-index 68bffa4e..ed6907d0 100644
+index ba7e71f5..90918fb1 100644
--- a/targets/ath79-nand
+++ b/targets/ath79-nand
-@@ -62,6 +62,12 @@ device('zte-mf281', 'zte_mf281', {
+@@ -56,6 +56,12 @@ device('zte-mf281', 'zte_mf281', {
packages = ATH10K_PACKAGES_QCA9888,
})
diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch
index 0543daf..149f904 100644
--- a/patches/targets-ipq40xx-generic.patch
+++ b/patches/targets-ipq40xx-generic.patch
@@ -1,5 +1,5 @@
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
-index 068f538b..6e7c8bd4 100644
+index 85509de7..b26de7ca 100644
--- a/targets/ipq40xx-generic
+++ b/targets/ipq40xx-generic
@@ -14,6 +14,15 @@ local ATH10K_PACKAGES_IPQ40XX_QCA9888 = {
@@ -18,7 +18,7 @@ index 068f538b..6e7c8bd4 100644
defaults {
-@@ -57,6 +66,23 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', {
+@@ -73,6 +82,23 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', {
factory = false,
})
@@ -42,7 +42,7 @@ index 068f538b..6e7c8bd4 100644
-- GL.iNet
-@@ -73,6 +99,36 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
+@@ -89,6 +115,36 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', {
device('linksys-ea6350v3', 'linksys_ea6350v3')
@@ -79,7 +79,7 @@ index 068f538b..6e7c8bd4 100644
-- Meraki
-@@ -80,6 +136,11 @@ device('meraki-mr33-access-point', 'meraki_mr33', {
+@@ -96,6 +152,11 @@ device('meraki-mr33-access-point', 'meraki_mr33', {
packages = {
-- radio0 is monitoring radio - removed for now
-- the -ct firmware does not have working mesh
@@ -91,7 +91,7 @@ index 068f538b..6e7c8bd4 100644
'-ath10k-firmware-qca9887-ct',
'-ath10k-board-qca9887',
},
-@@ -123,6 +184,7 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', {
+@@ -139,6 +200,7 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', {
-- ZTE
device('zte-mf289f', 'zte_mf289f', {
diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch
index daede07..18e90d0 100644
--- a/patches/targets-lantiq-xrx200-devices.patch
+++ b/patches/targets-lantiq-xrx200-devices.patch
@@ -58,10 +58,10 @@ index 00000000..9b7a21f9
+ caldata_extract_ubi "caldata" 0x1000 0x1000
+ ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) 2) 0x10c
diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200
-index f54cd87f..80f0659d 100644
+index 744fdea4..16672c91 100644
--- a/targets/lantiq-xrx200
+++ b/targets/lantiq-xrx200
-@@ -30,6 +30,10 @@ device('avm-fritz-box-3370-rev-2-micron-nand', 'avm_fritz3370-rev2-micron', {
+@@ -33,6 +33,10 @@ device('avm-fritz-box-3370-rev-2-micron-nand', 'avm_fritz3370-rev2-micron', {
broken = true, -- no button for setup mode; hw revision not visible on device
})
@@ -72,7 +72,7 @@ index f54cd87f..80f0659d 100644
device('avm-fritz-box-7360-sl', 'avm_fritz7360sl', {
factory = false,
aliases = {'avm-fritz-box-7360-v1'},
-@@ -47,6 +51,10 @@ device('avm-fritz-box-7412', 'avm_fritz7412', {
+@@ -50,6 +54,10 @@ device('avm-fritz-box-7412', 'avm_fritz7412', {
factory = false,
})
diff --git a/patches/targets-mediatek-mt7622.patch b/patches/targets-mediatek-mt7622.patch
index 41c604a..bdec74d 100644
--- a/patches/targets-mediatek-mt7622.patch
+++ b/patches/targets-mediatek-mt7622.patch
@@ -1,9 +1,9 @@
diff --git a/targets/mediatek-mt7622 b/targets/mediatek-mt7622
-index 8376c397..5c75ac21 100644
+index 81440d50..389c77a9 100644
--- a/targets/mediatek-mt7622
+++ b/targets/mediatek-mt7622
-@@ -11,6 +11,22 @@ device('ubiquiti-unifi-6-lr-v1', 'ubnt_unifi-6-lr-v1', {
- manifest_aliases = {'ubiquiti-unifi-6-lr'},
+@@ -13,3 +13,18 @@ device('ubiquiti-unifi-6-lr-v1', 'ubnt_unifi-6-lr-v1', {
+ manifest_aliases = {'ubiquiti-unifi-6-lr'}, -- Upgrade from OpenWrt 22.03
})
+device('ubiquiti-unifi-6-lr-v2', 'ubnt_unifi-6-lr-v2', {
@@ -21,7 +21,3 @@ index 8376c397..5c75ac21 100644
+ factory_ext = '.img',
+})
+
-+
- -- Xiaomi
-
- device('xiaomi-redmi-router-ax6s', 'xiaomi_redmi-router-ax6s', {
diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch
index a8a5540..8663feb 100644
--- a/patches/targets-ramips-mt7621.patch
+++ b/patches/targets-ramips-mt7621.patch
@@ -1,8 +1,8 @@
diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621
-index 01b9b94c..630fd7ab 100644
+index f58a26c5..540f7ae9 100644
--- a/targets/ramips-mt7621
+++ b/targets/ramips-mt7621
-@@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', {
+@@ -23,6 +23,10 @@ device('cudy-wr2100', 'cudy_wr2100', {
factory = false,
})
@@ -13,7 +13,7 @@ index 01b9b94c..630fd7ab 100644
device('cudy-x6-v1', 'cudy_x6-v1', {
factory = false,
})
-@@ -89,6 +93,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', {
+@@ -87,6 +91,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', {
-- TP-Link
@@ -22,7 +22,7 @@ index 01b9b94c..630fd7ab 100644
device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', {
broken = true, -- LAN LED not working - review after resolving #2756
})
-@@ -106,6 +112,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', {
+@@ -104,6 +110,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', {
factory = false,
})
@@ -33,7 +33,7 @@ index 01b9b94c..630fd7ab 100644
-- Wavlink
-@@ -162,6 +172,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
+@@ -153,6 +163,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', {
-- Devices without WLAN
diff --git a/release.mk b/release.mk
index b83a83e..a50a37b 100644
--- a/release.mk
+++ b/release.mk
@@ -1,2 +1,2 @@
GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
-GLUON_GIT_REF := befc3e803bca9a115ccd0ea17d4924feb7a83f83
+GLUON_GIT_REF := 8eb4bf1756f2b6697995531a97660922d4003ef0
From 3f5d533e2ba10dc9a62e8685c50b9dc3fe335711 Mon Sep 17 00:00:00 2001
From: wusel
Date: Sun, 16 Jun 2024 03:57:34 +0200
Subject: [PATCH 129/129] Adjust to 4830.org ...
---
ReleaseNotes | 121 +++++
image-customization.lua | 27 +-
modules | 6 +-
patches/0001-ffgt-Hide-email-address.patch | 25 +
patches/0003-ffgt-Setup-via-WAN.patch | 84 ++++
...Fix-respondd-to-work-on-ff02-1-again.patch | 25 +
...005-ffgt-Fix-respondd-to-ff02-2-1001.patch | 33 ++
patches/0006-ffgt-Adjust-for-FFGT-maps.patch | 36 ++
patches/0007-ffgt-status-page-fix.patch | 32 ++
patches/0009-ffgt-Show-online-status.patch | 41 ++
.../0010-ffgt-Show-online-status-fix.patch | 35 ++
patches/0011-ffgt-Add-community-name.patch | 35 ++
patches/0012-ffgt-Block-Ports-80-22.patch | 27 +
.../0017-Allow-setting-HTMODE-from-site.patch | 53 ++
patches/status-page-anonymization.patch | 23 -
site.conf | 464 ++++++------------
site.conf_ | 340 +++++++++++++
site.mk | 3 +-
18 files changed, 1057 insertions(+), 353 deletions(-)
create mode 100644 ReleaseNotes
create mode 100644 patches/0001-ffgt-Hide-email-address.patch
create mode 100644 patches/0003-ffgt-Setup-via-WAN.patch
create mode 100644 patches/0004-ffgt-Fix-respondd-to-work-on-ff02-1-again.patch
create mode 100644 patches/0005-ffgt-Fix-respondd-to-ff02-2-1001.patch
create mode 100644 patches/0006-ffgt-Adjust-for-FFGT-maps.patch
create mode 100644 patches/0007-ffgt-status-page-fix.patch
create mode 100644 patches/0009-ffgt-Show-online-status.patch
create mode 100644 patches/0010-ffgt-Show-online-status-fix.patch
create mode 100644 patches/0011-ffgt-Add-community-name.patch
create mode 100644 patches/0012-ffgt-Block-Ports-80-22.patch
create mode 100644 patches/0017-Allow-setting-HTMODE-from-site.patch
delete mode 100644 patches/status-page-anonymization.patch
create mode 100644 site.conf_
diff --git a/ReleaseNotes b/ReleaseNotes
new file mode 100644
index 0000000..3dd50c0
--- /dev/null
+++ b/ReleaseNotes
@@ -0,0 +1,121 @@
+Release Notes for gluon-4830-@@RELEASE@@
+========================================
+
+This Freifunk Firmware is based on Gluon v2018.1.4 (1.0.x)
+or v2018.2 (1.1.x; as of 2020-01-10 based on v2018.2.4) or
+v2019.1 (1.2.x; as of 2021-04-06 based on v2019.1.3) and
+includes some additional modules.
+
+ 1.0.x: v2018.1.4 based, fastd
+ 1.1.2: v2018.2.x based, fastd
+ 1.1.5: v2018.2.x based, L2TP (tunneldigger)
+ 1.1.6: v2018.2.x based, VXLAN via Wireguard
+ 1.2.0: v2019.1.x based, L2TP (tunneldigger) (>= 1.2.0~38 includes the BROKEN gluon-migrate-ffbi)
+ 1.2.5: v2019.1.x based, fastd+batman14 — FFUE-Migration (tested WiFi-Autoupdater, FW servers migration-firmware.ffue & .4830.org)
+ 1.4.0: v2021.1.x based, L2TP (tunneldigger) (>= 1.4.0~48 includes a WORKING gluon-migrate-ffbiv2, ~50 fflg-migrate-to-multidomain, ca. ~120 ffue-migrate-to-multidomain)
+ 1.5.0: v2022.1.x based, L2TP (tunneldigger) – tng only, short-lived tests
+ 1.6.0: v2023.2.x based, L2TP (tunneldigger) – tng only, short-lived tests
+ 1.6.1: v2022.1.4 based, L2TP (tunneldigger) — new build process, NO migration support anymore (FFBI, FFLG, FFUE), possibly migration support from FFLIP-FW
+ 1.7.0: v2023.2.x based, L2TP (tunneldigger)
+ 1.8.0: v2024.1.x based, L2TP (tunneldigger)
+
+For 1.5 and beyond, the patches applied to Gluon reside in site/patches and are applied against the plain Gluon tree at build time. Prior to that, we used a modified Gluon tree:
+
+ - modified $GLUON/package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname
+ and $GLUON/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network so
+ that node a) uses WAN (if existing) for setup mode and b) is DHCP client — just like
+ in Freifunk mode.
+
+ Files changed in core Gluon:
+ ./package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname
+ ./package/gluon-setup-mode/Makefile
+ ./package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network
+ ./package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html
+ ./package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd
+ ./package/gluon-respondd/files/etc/init.d/gluon-respondd (Undoing commit 59a44274cb00e88e3420b4c9c4303ca70f16b211)
+ ./package/gluon-respondd/src/respondd.c (from 1.4.x onwards: ./package/gluon-respondd/src/respondd-nodeinfo.c)
+
+ - gluon-ssid-changer
+
+ See https://github.com/Freifunk-Nord/gluon-ssid-changer/tree/2018.1.x -- for commit etc. see modules file
+
+ - ffgt-banner
+
+ Supplies a pimped motd file, including info about the HW, the OS and the FW version
+
+ - ffgt-geolocate
+
+ Supports geolocation in config mode and corrections in Freifunk mode
+
+ - ffgt-setup-mode
+
+ Base scripts of our geolocation-aware setup process
+
+ - ffgt-nachtruhe
+
+ Toggle "Nachtruhe", i. e. disable AP between 22:00 and 06:00 (based on ffho-ap-timer)
+
+ - ffda-domain-director
+
+ Server-based domain selection based on node's or neighbouring node's coordinates
+
+ - ffda-name-conformizer
+
+ Modify the nodename per firmware upgrade (cosmetic, non-sticking change)
+
+ - tecff-autoupdater-wifi-fallback
+
+ On prolonged lack of connectivity to the mesh, search for freifunk SSIDs and
+ try to become a wireless client, then force autoupdate.
+
+ - gluon-ebtables-limit-arp
+
+ The gluon-ebtables-limit-arp package adds filters to limit the amount of ARP
+ requests client devices are allowed to send into the mesh.
+
+ The limits per client device, identified by its MAC address, are 6 packets per
+ minute and 1 per second per node in total. A burst of up to 50 ARP requests is
+ allowed until the rate-limiting takes effect (see --limit-burst in ebtables(8)).
+ […]
+ It mitigates the impact on the mesh when a larger range of its IPv4 subnet is
+ being scanned, which would otherwise result in a significant amount of ARP chatter,
+ even for unused IP addresses.
+
+ - gluon-ebtables-filter-multicast
+
+ The gluon-ebtables-filter-multicast package filters out various kinds of
+ non-essential multicast traffic, as this traffic often constitutes a
+ disproportionate burden on the mesh network. Unfortunately, this breaks many
+ useful services (Avahi, Bonjour chat, …), but this seems unavoidable, as the
+ current Avahi implementation is optimized for small local networks and causes
+ too much traffic in large mesh networks.
+
+ - gluon-ebtables-filter-ra-dhcp
+
+ The gluon-ebtables-filter-ra-dhcp package tries to prevent common
+ misconfigurations (i.e. connecting the client interface of a Gluon node to a
+ private network) from causing issues for either of the networks.
+
+ - gluon-tunneldigger-watchdog
+
+ Script that checks every five minutes for the presence of the tunneldigger process,
+ restarting it if neccessary.
+
+ - gluon-migrate-ffbiv2
+
+ Migrates nodename, coordinates, ... from FFBI-Firmware to Gluon
+
+ - fflg-migrate-to-multidomain
+
+ Migrates from FFLG-Firmware to Mesh "lbg" in the 4830-Firmware
+
+ - ffue-migrate-to-multidomain
+
+ Migrates from FFUE-Firmwares to Meshes "uel", "cel", "gif", lhw" or "uez" in the 4830-Firmware
+
+For further info check corresponding Gluon Release Notes.
+
+
+
+Further Build Information:
+==========================
diff --git a/image-customization.lua b/image-customization.lua
index 4311c00..6f2d1a3 100644
--- a/image-customization.lua
+++ b/image-customization.lua
@@ -4,23 +4,30 @@ features {
'ebtables-filter-ra-dhcp',
'ebtables-limit-arp',
'mesh-batman-adv-15',
- 'mesh-vpn-wireguard',
'respondd',
'status-page',
'web-advanced',
'web-wizard',
- 'config-mode-geo-location-osm',
'radv-filterd',
'radvd',
'web-private-wifi',
}
packages {
+ 'ff-mesh-vpn-tunneldigger',
'iwinfo',
'ffac-ssid-changer',
'ffac-wg-registration',
'ff-web-ap-timer',
'respondd-module-airtime',
+ 'ffac-ssid-changer',
+ 'ffac-autoupdater-wifi-fallback',
+ 'ffgt-speedtest',
+ 'ffgt-banner',
+ 'ffgt-config-mode-wizard',
+ 'ffgt-preserve-mods',
+ 'gluon-tunneldigger-watchdog',
+ 'gluon-multi-radio'
}
if not device_class('tiny') then
@@ -107,11 +114,19 @@ pkgs_pci = {
'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716
}
+pkgs_4830 = {
+ 'tcpdump',
+ 'mtr-json',
+ 'sipcalc'
+}
+
include_usb = true
+include_4830 = true
-- rtl838x has no USB support as of Gluon v2023.2
if target('realtek', 'rtl838x') then
include_usb = false
+ include_4830 = false
end
-- 7M usable firmware space + USB port
@@ -132,6 +147,7 @@ if target('ath79', 'generic') and not device({
'tp-link-tl-wr1043n-v5',
}) then
include_usb = false
+ include_4830 = false
end
if target('ramips', 'mt76x8') and not device({
@@ -141,6 +157,7 @@ if target('ramips', 'mt76x8') and not device({
'ravpower-rp-wd009',
}) then
include_usb = false
+ include_4830 = false
end
-- 7M usable firmware space + USB port
@@ -154,6 +171,7 @@ if device({
'ravpower-rp-wd009'
}) then
include_usb = false
+ include_4830 = false
end
-- devices without usb ports
@@ -166,6 +184,7 @@ if device({
'zyxel-nwa55axe',
}) then
include_usb = false
+ include_4830 = false
end
if include_usb then
@@ -175,6 +194,10 @@ if include_usb then
packages(pkgs_usb_storage)
end
+if include_4830 then
+ packages(pkgs_4830)
+end
+
-- device has no reset button and requires a special package to go into setup mode
-- https://github.com/freifunk-gluon/community-packages/tree/master/ffda-network-setup-mode
if device({
diff --git a/modules b/modules
index 529ca21..fa20169 100644
--- a/modules
+++ b/modules
@@ -1,5 +1,9 @@
-GLUON_SITE_FEEDS="community"
+GLUON_SITE_FEEDS="community ffgt"
PACKAGES_COMMUNITY_REPO=https://github.com/freifunk-gluon/community-packages.git
PACKAGES_COMMUNITY_COMMIT=661f553c12785f3287fab6018487a55efda55071
PACKAGES_COMMUNITY_BRANCH=master
+
+PACKAGES_FFGT_REPO=https://github.com/ffgtso/4830-packages-v2022.git
+PACKAGES_FFGT_COMMIT=b393295771577c1a1fcf9df7216b5975bc2eec6d
+PACKAGES_FFGT_BRANCH=master
diff --git a/patches/0001-ffgt-Hide-email-address.patch b/patches/0001-ffgt-Hide-email-address.patch
new file mode 100644
index 0000000..2e6ae28
--- /dev/null
+++ b/patches/0001-ffgt-Hide-email-address.patch
@@ -0,0 +1,25 @@
+From 5334c863918f3be4683d216512809b43395a37b5 Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Sat, 4 Feb 2023 02:25:42 +0100
+Subject: [PATCH] Hide email address
+
+---
+ .../files/lib/gluon/status-page/view/status-page.html | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html b/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html
+index cc121fe5..f404f3fe 100644
+--- a/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html
++++ b/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html
+@@ -144,7 +144,7 @@
+
+ <%:Node name%> <%| nodeinfo.hostname %>
+ <% if nodeinfo.owner and nodeinfo.owner.contact then -%>
+- <%:Contact%> <%| nodeinfo.owner.contact %>
++ <%:Contact%> email
+ <%- end %>
+ <% if nodeinfo.location then -%>
+ <%:Location%>
+--
+2.30.2
+
diff --git a/patches/0003-ffgt-Setup-via-WAN.patch b/patches/0003-ffgt-Setup-via-WAN.patch
new file mode 100644
index 0000000..91df5e8
--- /dev/null
+++ b/patches/0003-ffgt-Setup-via-WAN.patch
@@ -0,0 +1,84 @@
+From 21b8e793322cba5be01c00735563bf49ef026f68 Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Sat, 4 Feb 2023 03:08:27 +0100
+Subject: [PATCH] Our setup mode has dhcp client on setup_ifname (WAN), and
+ 203.0.113.1/24 on lan_ifname (LAN)
+
+---
+ .../files/lib/gluon/setup-mode/rc.d/S50uhttpd | 12 ++++++++++++
+ .../files/lib/gluon/setup-mode/rc.d/S20network | 14 ++++++++++----
+ .../luasrc/lib/gluon/upgrade/320-setup-ifname | 3 +++
+ 3 files changed, 25 insertions(+), 4 deletions(-)
+
+diff --git a/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd b/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd
+index efd1d612..0a7f1c87 100755
+--- a/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd
++++ b/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd
+@@ -7,6 +7,18 @@ USE_PROCD=1
+ UHTTPD_BIN="/usr/sbin/uhttpd"
+
+ start_service() {
++ /usr/sbin/iptables -I INPUT -s 10.0.0.0/8 -p tcp --dport 80 -j ACCEPT ||:
++ /usr/sbin/iptables -I INPUT -s 172.16.0.0/12 -p tcp --dport 80 -j ACCEPT ||:
++ /usr/sbin/iptables -I INPUT -s 192.168.0.0/16 -p tcp --dport 80 -j ACCEPT ||:
++ /usr/sbin/iptables -I INPUT -s 203.0.113.0/24 -p tcp --dport 80 -j ACCEPT ||:
++ /usr/sbin/iptables -I INPUT -s 10.0.0.0/8 -p tcp --dport 22 -j ACCEPT ||:
++ /usr/sbin/iptables -I INPUT -s 172.16.0.0/12 -p tcp --dport 22 -j ACCEPT ||:
++ /usr/sbin/iptables -I INPUT -s 192.168.0.0/16 -p tcp --dport 22 -j ACCEPT ||:
++ /usr/sbin/iptables -I INPUT -s 203.0.113.0/24 -p tcp --dport 22 -j ACCEPT ||:
++ /usr/sbin/ip6tables -I INPUT -s fe80::/10 -p tcp --dport 80 -j ACCEPT ||:
++ /usr/sbin/ip6tables -I INPUT -s fc00::/7 -p tcp --dport 80 -j ACCEPT ||:
++ /usr/sbin/ip6tables -I INPUT -s fe80::/10 -p tcp --dport 22 -j ACCEPT ||:
++ /usr/sbin/ip6tables -I INPUT -s fc00::/7 -p tcp --dport 22 -j ACCEPT ||:
+ procd_open_instance
+ procd_set_param respawn
+ procd_set_param command "$UHTTPD_BIN" -f -h /lib/gluon/config-mode/www -x /cgi-bin -A 1 -R -p 0.0.0.0:80
+diff --git a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network
+index 19ba6221..fb264d9b 100755
+--- a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network
++++ b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network
+@@ -1,6 +1,6 @@
+ #!/bin/sh /etc/rc.common
+
+-SETUP_MODE_ADDR=192.168.1.1
++SETUP_MODE_ADDR=203.0.113.1
+ SETUP_MODE_NETMASK=255.255.255.0
+
+ START=20
+@@ -24,13 +24,19 @@ prepare_config() {
+ config_load network
+ config_foreach delete_interface interface
+
++ # Our setup has dhcp client on setup_ifname, and 203.0.113.1/24 on lan_ifname (which may be the same;
++ # needs to be tested if this works properly).
+ uci_add network interface setup
+ uci_set network setup ifname "$(lua -e 'print(require("gluon.sysconfig").setup_ifname)')"
+ uci_set network setup macaddr "$(lua -e 'print(require("gluon.sysconfig").primary_mac)')"
+ uci_set network setup type 'bridge'
+- uci_set network setup proto 'static'
+- uci_set network setup ipaddr "$SETUP_MODE_ADDR"
+- uci_set network setup netmask "$SETUP_MODE_NETMASK"
++ uci_set network setup proto 'dhcp'
++
++ uci_add network interface fallback
++ uci_set network fallback ifname "$(lua -e 'print(require("gluon.sysconfig").lan_ifname)')"
++ uci_set network fallback proto 'static'
++ uci_set network fallback ipaddr "$SETUP_MODE_ADDR"
++ uci_set network fallback netmask "$SETUP_MODE_NETMASK"
+
+ uci_commit network
+ )
+diff --git a/package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname b/package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname
+index 3692fee8..a4b234d4 100755
+--- a/package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname
++++ b/package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname
+@@ -13,3 +13,6 @@ then
+ else
+ sysconfig.setup_ifname = sysconfig.single_ifname or sysconfig.lan_ifname
+ end
++
++-- Always prefer WAN over LAN for setup_ifname
++sysconfig.setup_ifname = sysconfig.wan_ifname or sysconfig.single_ifname or sysconfig.lan_ifname
+--
+2.30.2
+
diff --git a/patches/0004-ffgt-Fix-respondd-to-work-on-ff02-1-again.patch b/patches/0004-ffgt-Fix-respondd-to-work-on-ff02-1-again.patch
new file mode 100644
index 0000000..c6b0e53
--- /dev/null
+++ b/patches/0004-ffgt-Fix-respondd-to-work-on-ff02-1-again.patch
@@ -0,0 +1,25 @@
+From 5d03cbaeb44a77b30f39e3e6b3b61fa4f719b52b Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Sat, 4 Feb 2023 02:50:47 +0100
+Subject: [PATCH] Fix respondd to work on ff02::1 again
+
+---
+ package/gluon-respondd/files/etc/init.d/gluon-respondd | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/package/gluon-respondd/files/etc/init.d/gluon-respondd b/package/gluon-respondd/files/etc/init.d/gluon-respondd
+index c7b071eb..4e81332f 100755
+--- a/package/gluon-respondd/files/etc/init.d/gluon-respondd
++++ b/package/gluon-respondd/files/etc/init.d/gluon-respondd
+@@ -13,7 +13,7 @@ start_service() {
+ local clientdevs=$(for dev in $(echo "$ifdump" | jsonfilter -e "@.interface[@.interface='$(cat /lib/gluon/respondd/client.dev 2>/dev/null)' && @.up=true].device"); do echo " -i $dev -t $MAXDELAY";done;)
+
+ procd_open_instance
+- procd_set_param command $DAEMON -d /usr/lib/respondd -p 1001 -g ff02::2:1001 $meshdevs -g ff05::2:1001 $clientdevs
++ procd_set_param command $DAEMON -d /usr/lib/respondd -p 1001 -g ff02::1 $clientdevs $meshdevs -g ff02::2:1001 $meshdevs -g ff05::2:1001 $clientdevs
+ procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+ procd_set_param stderr 1
+ procd_close_instance
+--
+2.30.2
+
diff --git a/patches/0005-ffgt-Fix-respondd-to-ff02-2-1001.patch b/patches/0005-ffgt-Fix-respondd-to-ff02-2-1001.patch
new file mode 100644
index 0000000..5a17c08
--- /dev/null
+++ b/patches/0005-ffgt-Fix-respondd-to-ff02-2-1001.patch
@@ -0,0 +1,33 @@
+From 969a3517c60419c0bb47fd9e2aa8730a13d397fd Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Mon, 6 Feb 2023 03:25:32 +0100
+Subject: [PATCH] Fix respondd to ff02::2:1001
+
+---
+ .../luasrc/lib/gluon/ebtables/110-mcast-allow-respondd | 1 +
+ package/gluon-respondd/files/etc/init.d/gluon-respondd | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/package/gluon-ebtables-filter-multicast/luasrc/lib/gluon/ebtables/110-mcast-allow-respondd b/package/gluon-ebtables-filter-multicast/luasrc/lib/gluon/ebtables/110-mcast-allow-respondd
+index 7df37ec9..4aa0bfc5 100644
+--- a/package/gluon-ebtables-filter-multicast/luasrc/lib/gluon/ebtables/110-mcast-allow-respondd
++++ b/package/gluon-ebtables-filter-multicast/luasrc/lib/gluon/ebtables/110-mcast-allow-respondd
+@@ -1 +1,2 @@
+ rule 'MULTICAST_OUT -p IPv6 --ip6-protocol udp --ip6-destination-port 1001 --ip6-dst ff05::2:1001 -j RETURN'
++rule 'MULTICAST_OUT -p IPv6 --ip6-protocol udp --ip6-destination-port 1001 -j RETURN'
+diff --git a/package/gluon-respondd/files/etc/init.d/gluon-respondd b/package/gluon-respondd/files/etc/init.d/gluon-respondd
+index 4e81332f..dd2eab4e 100755
+--- a/package/gluon-respondd/files/etc/init.d/gluon-respondd
++++ b/package/gluon-respondd/files/etc/init.d/gluon-respondd
+@@ -13,7 +13,7 @@ start_service() {
+ local clientdevs=$(for dev in $(echo "$ifdump" | jsonfilter -e "@.interface[@.interface='$(cat /lib/gluon/respondd/client.dev 2>/dev/null)' && @.up=true].device"); do echo " -i $dev -t $MAXDELAY";done;)
+
+ procd_open_instance
+- procd_set_param command $DAEMON -d /usr/lib/respondd -p 1001 -g ff02::1 $clientdevs $meshdevs -g ff02::2:1001 $meshdevs -g ff05::2:1001 $clientdevs
++ procd_set_param command $DAEMON -d /usr/lib/respondd -p 1001 -g ff02::2:1001 $meshdevs $clientdevs -g ff05::2:1001 $clientdevs -g ff02::1 $clientdevs
+ procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+ procd_set_param stderr 1
+ procd_close_instance
+--
+2.30.2
+
diff --git a/patches/0006-ffgt-Adjust-for-FFGT-maps.patch b/patches/0006-ffgt-Adjust-for-FFGT-maps.patch
new file mode 100644
index 0000000..5ba8a0d
--- /dev/null
+++ b/patches/0006-ffgt-Adjust-for-FFGT-maps.patch
@@ -0,0 +1,36 @@
+From ffa329a488c2796c09c5a758be9c0dbafe5b6bcd Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Mon, 6 Feb 2023 13:16:38 +0100
+Subject: [PATCH] Adjust for FFGT maps
+
+---
+ package/gluon-respondd/src/respondd-nodeinfo.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/package/gluon-respondd/src/respondd-nodeinfo.c b/package/gluon-respondd/src/respondd-nodeinfo.c
+index 105ce3c6..511c58f1 100644
+--- a/package/gluon-respondd/src/respondd-nodeinfo.c
++++ b/package/gluon-respondd/src/respondd-nodeinfo.c
+@@ -127,10 +127,18 @@ struct json_object * respondd_provider_nodeinfo(void) {
+ json_object_object_add(ret, "software", software);
+
+ struct json_object *system = json_object_new_object();
+- json_object_object_add(system, "site_code", get_site_code());
++ // json_object_object_add(system, "site_code", get_site_code());
++ // if (gluonutil_has_domains()) {
++ // json_object_object_add(system, "domain_code", get_domain_code());
++ // json_object_object_add(system, "primary_domain_code", get_primary_domain_code());
++ // }
+ if (gluonutil_has_domains()) {
+ json_object_object_add(system, "domain_code", get_domain_code());
++ json_object_object_add(system, "gluon_site_code", get_site_code());
++ json_object_object_add(system, "site_code", get_domain_code());
+ json_object_object_add(system, "primary_domain_code", get_primary_domain_code());
++ } else {
++ json_object_object_add(system, "site_code", get_site_code());
+ }
+ json_object_object_add(ret, "system", system);
+
+--
+2.30.2
+
diff --git a/patches/0007-ffgt-status-page-fix.patch b/patches/0007-ffgt-status-page-fix.patch
new file mode 100644
index 0000000..09bf4b2
--- /dev/null
+++ b/patches/0007-ffgt-status-page-fix.patch
@@ -0,0 +1,32 @@
+From 21c4507532a254858e2dc1356ade03d0686301b2 Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Wed, 8 Feb 2023 22:07:06 +0100
+Subject: [PATCH] =?UTF-8?q?If=20no=20radio=20=E2=80=93=20e.=20g.=20Offload?=
+ =?UTF-8?q?er=20=E2=80=93,=20do=20not=20show=20wifi24/wifi5=20clients=20(t?=
+ =?UTF-8?q?here=20would=20be=20none=20anyway).?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+---
+ .../files/lib/gluon/status-page/view/status-page.html | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html b/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html
+index f404f3fe..b98d410f 100644
+--- a/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html
++++ b/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html
+@@ -222,8 +222,10 @@
+
+
+ <%:Total%> <%= statistics('clients/total') %>
++ <% if radios[1] then -%>
+ <%:Wireless 2.4 GHz%> <%= statistics('clients/wifi24') %>
+ <%:Wireless 5 GHz%> <%= statistics('clients/wifi5') %>
++ <%- end %>
+
+
+ <% if radios[1] then -%>
+--
+2.30.2
+
diff --git a/patches/0009-ffgt-Show-online-status.patch b/patches/0009-ffgt-Show-online-status.patch
new file mode 100644
index 0000000..8d8eff2
--- /dev/null
+++ b/patches/0009-ffgt-Show-online-status.patch
@@ -0,0 +1,41 @@
+From a1c2f0f8b5db43e488b3e7e855378304dcb2f90e Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Sun, 12 Feb 2023 17:05:53 +0100
+Subject: [PATCH] =?UTF-8?q?Show=20online=20status,=20depends=20on=20ffgt?=
+ =?UTF-8?q?=20package=20=E2=80=94=20maybe=20move=20to=20package=20&=20modi?=
+ =?UTF-8?q?fy-at-upgrade=3F?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+---
+ .../files/lib/gluon/config-mode/view/theme/layout.html | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html
+index 865ec2aa..33406cca 100644
+--- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html
++++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html
+@@ -16,6 +16,11 @@ You may obtain a copy of the License at
+ local hostname = pretty_hostname.get(uci)
+ local release = util.readfile("/lib/gluon/release")
+
++ local onlinestate = "offline"
++ if unistd.access('/tmp/is_online') then
++ onlinestate=util.readfile("/tmp/is_online"):gsub("\.$","")
++ onlinestate=onlinestate:gsub("ipv". "IPv")
++ end
+ local root = node()
+ local rnode = node(unpack(request))
+
+@@ -112,6 +117,7 @@ You may obtain a copy of the License at
+ <% if release then %>
+ / <%|release%>
+ <% end %>
++ (<%|onlinestate%>)
+
+
+
+--
+2.30.2
+
diff --git a/patches/0010-ffgt-Show-online-status-fix.patch b/patches/0010-ffgt-Show-online-status-fix.patch
new file mode 100644
index 0000000..83012bc
--- /dev/null
+++ b/patches/0010-ffgt-Show-online-status-fix.patch
@@ -0,0 +1,35 @@
+From df6ec257913b621ed77d0b081bb43299cf4e2745 Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Mon, 13 Feb 2023 23:48:10 +0100
+Subject: [PATCH] Fix
+
+---
+ .../files/lib/gluon/config-mode/view/theme/layout.html | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html
+index 33406cca..7e5111e8 100644
+--- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html
++++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html
+@@ -12,14 +12,16 @@ You may obtain a copy of the License at
+ local pretty_hostname = require "pretty_hostname"
+ local uci = require("simple-uci").cursor()
+ local util = require "gluon.util"
++ local unistd = require 'posix.unistd'
+
+ local hostname = pretty_hostname.get(uci)
+ local release = util.readfile("/lib/gluon/release")
+
+ local onlinestate = "offline"
+ if unistd.access('/tmp/is_online') then
+- onlinestate=util.readfile("/tmp/is_online"):gsub("\.$","")
+- onlinestate=onlinestate:gsub("ipv". "IPv")
++ onlinestate=util.readfile("/tmp/is_online")
++ onlinestate=onlinestate:gsub('\.\n', '')
++ onlinestate=onlinestate:gsub("ipv", "IPv")
+ end
+ local root = node()
+ local rnode = node(unpack(request))
+--
+2.30.2
+
diff --git a/patches/0011-ffgt-Add-community-name.patch b/patches/0011-ffgt-Add-community-name.patch
new file mode 100644
index 0000000..89df600
--- /dev/null
+++ b/patches/0011-ffgt-Add-community-name.patch
@@ -0,0 +1,35 @@
+From 438a36abf851a323817c26b8e3b83d4fa3f5081d Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Tue, 14 Feb 2023 03:20:11 +0100
+Subject: [PATCH] Add community name
+
+---
+ .../files/lib/gluon/config-mode/view/admin/info.html | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/info.html b/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/info.html
+index 7e2c9e2d..3025a77f 100644
+--- a/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/info.html
++++ b/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/info.html
+@@ -7,7 +7,9 @@
+ local platform = require 'gluon.platform'
+ local util = require "gluon.util"
+ local has_vpn, vpn = pcall(require, 'gluon.mesh-vpn')
+-
++ local uci = require('simple-uci').cursor()
++ local core_domain = uci:get("gluon", "core", "domain") or "n/a"
++ local communityname = string.gsub(util.exec(string.format("/lib/gluon/ffgt-geolocate/get_domain_name.sh %s", core_domain)),"\n", "") or "n/a"
+ local _ = translate
+
+
+@@ -28,6 +30,7 @@
+ .. " / " .. util.trim(util.readfile('/lib/gluon/site-version')) },
+ { _('Firmware release'), util.trim(util.readfile('/lib/gluon/release')) },
+ { _('Site'), site.site_name() },
++ { _('Mesh'), communityname },
+ { _('Public VPN key'), pubkey },
+ }
+ -%>
+--
+2.30.2
+
diff --git a/patches/0012-ffgt-Block-Ports-80-22.patch b/patches/0012-ffgt-Block-Ports-80-22.patch
new file mode 100644
index 0000000..3cf9eab
--- /dev/null
+++ b/patches/0012-ffgt-Block-Ports-80-22.patch
@@ -0,0 +1,27 @@
+From f8689a8c400e296a1a43ecfee2ac6038dadc0113 Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Wed, 15 Feb 2023 00:28:42 +0100
+Subject: [PATCH] Block Ports 80, 22
+
+---
+ .../files/lib/gluon/setup-mode/rc.d/S50uhttpd | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd b/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd
+index 0a7f1c87..a24f0f04 100755
+--- a/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd
++++ b/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd
+@@ -19,6 +19,10 @@ start_service() {
+ /usr/sbin/ip6tables -I INPUT -s fc00::/7 -p tcp --dport 80 -j ACCEPT ||:
+ /usr/sbin/ip6tables -I INPUT -s fe80::/10 -p tcp --dport 22 -j ACCEPT ||:
+ /usr/sbin/ip6tables -I INPUT -s fc00::/7 -p tcp --dport 22 -j ACCEPT ||:
++ /usr/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 22 -j DROP ||:
++ /usr/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 80 -j DROP ||:
++ /usr/sbin/ip6tables -A INPUT -s 0/0 -p tcp --dport 22 -j DROP ||:
++ /usr/sbin/ip6tables -A INPUT -s 0/0 -p tcp --dport 80 -j DROP ||:
+ procd_open_instance
+ procd_set_param respawn
+ procd_set_param command "$UHTTPD_BIN" -f -h /lib/gluon/config-mode/www -x /cgi-bin -A 1 -R -p 0.0.0.0:80
+--
+2.30.2
+
diff --git a/patches/0017-Allow-setting-HTMODE-from-site.patch b/patches/0017-Allow-setting-HTMODE-from-site.patch
new file mode 100644
index 0000000..f81a446
--- /dev/null
+++ b/patches/0017-Allow-setting-HTMODE-from-site.patch
@@ -0,0 +1,53 @@
+From c1b7b26df7755a4b9c719a412c617cf7fbcc48de Mon Sep 17 00:00:00 2001
+From: wusel
+Date: Mon, 12 Jun 2023 02:43:10 +0200
+Subject: [PATCH] Allow setting HTMODE from site
+
+---
+ .../luasrc/lib/gluon/upgrade/200-wireless | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless
+index 604e33a8..b0b1e452 100755
+--- a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless
++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless
+@@ -66,6 +66,8 @@ local function get_channel(radio, config)
+ end
+
+ local function get_htmode(radio)
++ local site_htmode
++
+ if radio.band == '5g' and is_outdoor() then
+ local outdoor_htmode = uci:get('gluon', 'wireless', 'outdoor_' .. radio['.name'] .. '_htmode')
+ if outdoor_htmode ~= nil then
+@@ -74,15 +76,22 @@ local function get_htmode(radio)
+ end
+
+ local phy = wireless.find_phy(radio)
+- if iwinfo.nl80211.hwmodelist(phy).ax then
+- return 'HE20'
++ if radio.band == '5g' then
++ site_htmode=site.wifi5.htmode('HT20')
++ else
++ site_htmode=site.wifi2.htmode('HT20')
+ end
+
+- if iwinfo.nl80211.hwmodelist(phy).ac then
+- return 'VHT20'
++ if iwinfo.nl80211.hwmodelist(phy).ax then
++ if site_htmode == 'VHT40' then
++ site_htmode="HE40"
++ end
+ end
++ uci:set('gluon', 'wireless', radio['.name'] .. '_htmode', site_htmode)
++ uci:save('gluon')
++ uci:commit('gluon')
+
+- return 'HT20'
++ return site_htmode
+ end
+
+ local function is_disabled(name)
+--
+2.30.2
+
diff --git a/patches/status-page-anonymization.patch b/patches/status-page-anonymization.patch
deleted file mode 100644
index bd6afe3..0000000
--- a/patches/status-page-anonymization.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff --git a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo b/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
-index ffe3651f..ef203e53 100755
---- a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
-+++ b/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
-@@ -8,4 +8,4 @@ badrequest() {
-
- ( gluon-list-mesh-interfaces | grep -qxF "$QUERY_STRING" ) 2>/dev/null || badrequest
-
--exec gluon-neighbour-info -s neighbour -i "$QUERY_STRING" -d ff02::2:1001 -p 1001 -r nodeinfo
-+exec gluon-neighbour-info -s neighbour -i "$QUERY_STRING" -d ff02::2:1001 -p 1001 -r nodeinfo | sed 's/"owner":{"contact":"[^"]*"},//'
-diff --git a/package/gluon-status-page/luasrc/lib/gluon/status-page/controller/status-page.lua b/package/gluon-status-page/luasrc/lib/gluon/status-page/controller/status-page.lua
-index 80c5e50a..55fbb86b 100644
---- a/package/gluon-status-page/luasrc/lib/gluon/status-page/controller/status-page.lua
-+++ b/package/gluon-status-page/luasrc/lib/gluon/status-page/controller/status-page.lua
-@@ -61,7 +61,7 @@ local function match(a, b, n)
- end
-
- entry({}, call(function(http, renderer)
-- local nodeinfo = json.parse(util.exec('exec gluon-neighbour-info -d ::1 -p 1001 -t 3 -c 1 -r nodeinfo'))
-+ local nodeinfo = json.parse(util.exec('exec gluon-neighbour-info -d ::1 -p 1001 -t 3 -c 1 -r nodeinfo | sed \'s/"owner":{"contact":"[^"]*"},//\''))
-
- local node_ip = parse_ip(http:getenv('SERVER_ADDR'))
- if node_ip and (
diff --git a/site.conf b/site.conf
index cd064b2..f0cc1dd 100644
--- a/site.conf
+++ b/site.conf
@@ -1,340 +1,152 @@
{
-- Documentation can be found here: https://gluon.readthedocs.io/en/latest/user/site.html#site-conf
- hostname_prefix = 'ffac-',
- site_name = 'Freifunk Rheinland - Regio Aachen',
- site_code = 'ffac',
- domain_seed = 'fcd2bb830c677865c60459899facdb630a9c09e26b72d995451c4feb9b337e6d',
-
- opkg = {
- extra = {
- modules = 'http://opkg.ffac.rocks/modules/gluon-%GS-%GR/%S',
- ffac = 'http://opkg.ffac.rocks/packages-%v/%A/ffac',
- gluon = 'http://opkg.ffac.rocks/packages-%v/%A/gluon',
- gluon_base = 'http://opkg.ffac.rocks/packages-%v/%A/gluon_base',
- },
- },
-
- --[[ General network settings
- prefix4: IPv4 range of your community
- prefix6: IPv6 range of your community
- is also required for radvd
-
- We use our global unicast block 2a03:2260:114::/48 for IP routing. This prefix is ONLY used for the next node feature and is used in multiple layer 2 network segments.
- ]]
- prefix6 = 'fdac::/64',
-
-
- --[[ NTP settings
- Synchronize the time of the nodes
- timezone: Timezone of your community
- http://wiki.openwrt.org/doc/uci/system#time.zones
- ntp_servers: List of NTP-Servers to query. You can use any public and/or your private NTP-Servers of your community.
- http://www.pool.ntp.org/zone/de
- #############
- # NOTE: http://news.ntppool.org/2013/06/ipv6-monitoring-problems-for-g.html
- # > As you might know only "2.pool.ntp.org" (and 2.debian.pool.ntp.org, etc)
- # > returns AAAA records currently.
- #############
- ]]
- timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
- ntp_servers = {
- 'a.ntp.ffac.rocks',
- 'ntp-b.aachen.freifunk.net',
- '2.openwrt.pool.ntp.org',
- },
-
- regdom = 'DE',
-
- wifi24 = {
- channel = 11,
- ap = {
- ssid = 'Freifunk',
- },
- mesh = {
- id = 'ffac-bat4-mesh',
- mcast_rate = 12000,
- },
- },
-
- wifi5 = {
- channel = 44,
- outdoor_chanlist = '100-116 132-136', -- exclude/avoid weather radar frequencies
- -- exclude 136-140 temporarily to fix 40MHz operation
- -- https://homepage.univie.ac.at/albert.rafetseder/RADARs/radars.html
- ap = {
- ssid = 'Freifunk',
- },
- mesh = {
- id = 'ffac-bat4-mesh',
- mcast_rate = 12000,
- },
- },
-
- -- Configuration of the local node feature of Gluon
- next_node = {
- ip6 = 'fdac::ac',
- mac = 'ac:41:95:40:f7:dc',
- },
-
- mesh = {
- vxlan = false,
- filter_membership_reports = true,
- batman_adv = {
- routing_algo = 'BATMAN_IV',
- gw_sel_class = 1,
- },
- },
-
-
- --[[ Gateway settings
- fastd_mesh_vpn: fastd vpn settings
- https://projects.universe-factory.net/projects/fastd/wiki/User_manual
- sub
- methods: encryption algorithms to use
- https://projects.universe-factory.net/projects/fastd/wiki/Methods
- When multiple method statements are given, the first one has the highest preference.
- mtu: package size
- backbone: fastd vpn gateways of your community
- sub
- limit: Number of gateways each node connects to
- On startup, each node tries to connect to every gateway, and then chooses the number of 'limit' fastest gateways it could reach
- peers: Gateways
- sub sub
- key: public fastd key of your gateway
- https://github.com/tcatm/ecdsautils
- remotes: List of fastd configuration strings to connect to your gateway server
- ]]
- mesh_vpn = {
- enabled = true,
- pubkey_privacy = false,
-
- wireguard = {
- broker = 'wg-broker.freifunk-aachen.de/api/add_key',
- peers = {
- sn120 = {
- public_key = 'jp47kK4OEkXf+VSsgKSYGji6mn6vrbXVeBMKwhx1on4=',
- endpoint = '01.wg-node.freifunk-aachen.de:51820'
- },
- sn111 = {
- public_key = 'EuHYG/4MZZYf+ViX8gy2HY0A2RGR0Im45mZXmD6ThxI=',
- endpoint = '01.wg-node.freifunk-aachen.de:51811'
- },
- sn112 = {
- public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsNjugaSIJ7VBHM=',
- endpoint = '01.wg-node.freifunk-aachen.de:51812'
- },
- sn113 = {
- public_key = 'ibMJXBMiC3jFA4rSMjcTqsueszOSder7N8Dpw1W+liQ=',
- endpoint = '01.wg-node.freifunk-aachen.de:51813'
- },
- sn114 = {
- public_key = 'e4jSvixMGi89JAKnTpHA86GoHmBc6owOckTUslhNVxA=',
- endpoint = '01.wg-node.freifunk-aachen.de:51814'
- },
- sn115 = {
- public_key = 'yY8Z5YbrAc518Z4Z/Bvlum8pB1VARZ316miql/uu1C0=',
- endpoint = '01.wg-node.freifunk-aachen.de:51815'
- },
- sn116 = {
- public_key = 'RtPF/2EYZNJEKI/DJh+6R2M1FNsQUbCE0nvNSzXZW10=',
- endpoint = '01.wg-node.freifunk-aachen.de:51816'
- },
- sn117 = {
- public_key = 'fA+lVmeVGIBcshSO1ZH8uHRqPainM7xS3wEhGTX+2DA=',
- endpoint = '01.wg-node.freifunk-aachen.de:51817'
- },
- sn118 = {
- public_key = 'u8rkarH+ZNGZoMWD6aGLgnRHzSj95S5fbiBuQXvyFV0=',
- endpoint = '01.wg-node.freifunk-aachen.de:51818'
- },
- sn119 = {
- public_key = 'Zk4LZXhYW+gj9dN/afKH634yYLDNBUDXEFxejHy7wgs=',
- endpoint = '01.wg-node.freifunk-aachen.de:51819'
- },
- sn220 = {
- public_key = 'MK8M88m2Wfc5EFLQPbCRZwhqfPYMNAh51Jf0d7A78nY=',
- endpoint = '02.wg-node.freifunk-aachen.de:51820'
- },
- sn211 = {
- public_key = 'VDqpMh1ljN/rqng88wIOet/XfMHk3XE6+nCBkOS82g0=',
- endpoint = '02.wg-node.freifunk-aachen.de:51811'
- },
- sn212 = {
- public_key = 'UGK2rNyQX30dqMsdk+vU+0424DP1M/3UahjJR7rN3nw=',
- endpoint = '02.wg-node.freifunk-aachen.de:51812'
- },
- sn213 = {
- public_key = 'iopPxw0qD6e2DAqEzR5WMHls9EQsxlYQk/pOAaKM9TM=',
- endpoint = '02.wg-node.freifunk-aachen.de:51813'
- },
- sn214 = {
- public_key = 'yYZlSxiyKXLGk8jyDTnzXkxrPYvmOWpny9AWX3KPdFE=',
- endpoint = '02.wg-node.freifunk-aachen.de:51814'
- },
- sn215 = {
- public_key = 'X0jmE3MOqzAjgWWNl6JAGcdE66rvsuhKp+WxC59geEE=',
- endpoint = '02.wg-node.freifunk-aachen.de:51815'
- },
- sn216 = {
- public_key = 'Aq0yNPf2431SndyQtOBaIo5IDs73Tsv/Pw1FH2aNmxk=',
- endpoint = '02.wg-node.freifunk-aachen.de:51816'
- },
- sn217 = {
- public_key = 'BunPn7Zvoub3QOYnygCxa/oCmPqM6XMjYHXNm3mOxRE=',
- endpoint = '02.wg-node.freifunk-aachen.de:51817'
- },
- sn218 = {
- public_key = 'rsji/zzTtLTkG+ITrOKCyLWv61XWryT2s3TdozVjwV4=',
- endpoint = '02.wg-node.freifunk-aachen.de:51818'
- },
- sn219 = {
- public_key = 'Ah9IDIcdW3zfoXuhD7MkKiDSL7xrgKfEKfMFfXRjphQ=',
- endpoint = '02.wg-node.freifunk-aachen.de:51819'
- },
- },
- mtu = 1406,
- },
- },
-
- --[[ Autoupdater settings
- branch: Automatically update to this branch
- branches: Available branches your community is publishing
- sub sub
- name: Name of branch (is used when compiling images)
- mirrors: List of urls where to find the firmware
- just serve the images on port 80 via http. a simple apache file-listing is enough.
- see: http://luebeck.freifunk.net/firmware/
- probability: How often should a node search for updates
- 1.0 - perform an update every hour
- 0.5 - on average, perform an update every two hours
- 0.0 - inhibit any automatic updates
- good_signatures: How many signatures should be valid so the node decides to upgrade itself
- pubkeys: public keys by developers used in manifest file of branch
- manifest file - see gluon readme
- $ make manifest GLUON_BRANCH=mybranch
- $ contrib/sign.sh $SECRETKEY.file images/sysupgrade/manifest
- ]]
- autoupdater = {
- branch = 'stable',
- enabled = 1,
- branches = {
- stable = {
- name = 'stable',
- mirrors = {
- 'http://updates.freifunk-aachen.de/from-2024.1.x/stable/sysupgrade',
- 'http://updates.ffac.rocks/from-2024.1.x/stable/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2024.1.x/stable/sysupgrade',
- },
- good_signatures = 4,
- pubkeys = {
- 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de
- 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM
- 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva
- '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty
- 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic
- '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius
- '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
- 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
- '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe
- },
- },
- beta = {
- name = 'beta',
- mirrors = {
- 'http://updates.freifunk-aachen.de/from-2024.1.x/beta/sysupgrade',
- 'http://updates.ffac.rocks/from-2024.1.x/beta/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2024.1.x/beta/sysupgrade',
- },
- good_signatures = 3,
- pubkeys = {
- 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de
- 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM
- 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva
- '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty
- 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic
- '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius
- '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
- 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
- '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe
- },
- },
- experimental = {
- name = 'experimental',
- mirrors = {
- 'http://updates.freifunk-aachen.de/from-2024.1.x/experimental/sysupgrade',
- 'http://updates.ffac.rocks/from-2024.1.x/experimental/sysupgrade',
- 'http://updates.aachen.freifunk.net/from-2024.1.x/experimental/sysupgrade',
- },
- good_signatures = 2,
- pubkeys = {
- 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de
- 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM
- 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva
- '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty
- 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic
- '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius
- '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
- 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
- '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe
- },
- },
- },
- },
-
- -- uncomment for update from 2019.1.x to v2021.1.x
- --[[ update_channel = {
- from_name = experimental, -- remove or false to catch all
- -- if to_name is defined, autoupdater branch is set to it
- to_name = 'beta',
- }
- ]]
-
- --[[ setup_mode = {
- skip = false, -- Skip config_mode on first boot
- },
- ]]
-
- config_mode = {
+ default_domain = 'zzz',
+ hostname_prefix = 'unconfigured-node-',
+
+ opkg = {
+ extra = {
+ gluon = 'http://firmware.4830.org/packages/gluon-%GS-%GR/%S',
+ },
+ },
+
+ site_name = 'Freifunk powered by 4830.org e. V.',
+ site_code = '4830',
+ timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
+ ntp_servers = {'ntp.4830.org', 'time.nist.gov', '2.freifunk.pool.ntp.org'},
+ regdom = 'DE',
+
+ domain_director = {
+ url = 'http://setup.ipv6.4830.org/dd.php',
+ switch_after_offline = 360,
+ enabled = true,
+ },
+
+ config_mode = {
+ geo_location = {
+ show_altitude = false,
+ osm = {
+ center = {
+ lat = 51.893444037,
+ lon = 8.437500000,
+ },
+ zoom = 10,
+-- tile_layer = {
+-- type = 'XYZ',
+-- url = 'https://tiles.aachen.freifunk.net/{z}/{x}/{y}.png',
+-- attributions = '© OpenStreetMap contributors.',
+-- },
+ },
+ },
hostname = {
optional = false,
},
remote_login = {
- show_password_form = true,
+ show_password_form = false,
min_password_length = 10,
},
owner = {
obligatory = true,
},
- geo_location = {
- osm = {
- center = {
- lat = 50.77,
- lon = 6.107,
- },
- zoom = 11,
- tile_layer = {
- type = 'XYZ',
- url = 'https://tiles.aachen.freifunk.net/{z}/{x}/{y}.png',
- attributions = '© OpenStreetMap contributors.',
- },
- },
- },
- },
-
- ssid_changer = {
- enabled = true,
- switch_timeframe = 1, -- only once every timeframe (in minutes) the SSID will change to OFFLINE
- -- set to 1440 to change once a day
- -- set to 1 minute to change every time the router gets offline
- first = 2, -- the first few minutes directly after reboot within which an Offline-SSID always may be activated
- prefix = 'FF_Offline_', -- use something short to leave space for the nodename (no '~' allowed!)
- suffix = 'nodename', -- generate the SSID with either 'nodename', 'mac' or to use only the prefix: 'none'
- tq_limit_enabled = false, -- if false, the offline SSID will only be set if there is no gateway reacheable
- -- upper and lower limit to turn the offline_ssid on and off
- -- in-between these two values the SSID will never be changed to prevent it from toggeling every minute.
- tq_limit_max = 55, -- upper limit, above that the online SSID will be used
- tq_limit_min = 45, -- lower limit, below that the offline SSID will be used
- },
+ },
+
+ radv_filterd = {
+ threshold = 1000,
+ },
+
+ mesh_vpn = {
+ enabled = true,
+ bandwidth_limit = {
+ enabled = false,
+ egress = 4000,
+ ingress = 16000,
+ },
+ },
+
+ ssid_changer = {
+ enabled = true,
+ switch_timeframe = 1,
+ first = 2,
+ prefix = 'FF_OFFLINE_',
+ suffix = 'mac',
+ tq_limit_enabled = false,
+ tq_limit_max = 55,
+ tq_limit_min = 45
+ },
+
+ autoupdater = {
+ enabled = 1,
+ branch = 'stable',
+ branches = {
+ stable = {
+ name = 'stable',
+ -- List of mirrors to fetch images from. IPv6 required!
+ --mirrors = {'http://firmware.ipv4.4830.org/stable/sysupgrade', 'http://firmware.ipv6.4830.org/stable/sysupgrade'},
+ mirrors = {'http://firmware.ipv6.4830.org/stable/sysupgrade'},
+ good_signatures = 2,
+ pubkeys = {
+ 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder
+ 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel
+ '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1
+ 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2
+ },
+ },
+ testing = {
+ name = 'testing',
+ mirrors = {'http://firmware.ipv6.4830.org/testing/sysupgrade'},
+ good_signatures = 1,
+ pubkeys = {
+ 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder
+ 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel
+ '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1
+ 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2
+ },
+ },
+ experimental = {
+ name = 'experimental',
+ mirrors = {'http://firmware.ipv6.4830.org/experimental/sysupgrade'},
+ good_signatures = 1,
+ pubkeys = {
+ 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder
+ 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel
+ '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1
+ 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2
+ },
+ },
+ rawhide = {
+ name = 'rawhide',
+ mirrors = {'http://firmware.ipv6.4830.org/rawhide/sysupgrade'},
+ good_signatures = 1,
+ pubkeys = {
+ 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder
+ 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel
+ '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1
+ 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2
+ },
+ },
+ master = {
+ name = 'master',
+ mirrors = {'http://firmware.ipv6.4830.org/master/sysupgrade'},
+ good_signatures = 1,
+ pubkeys = {
+ 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder
+ 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel
+ '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1
+ 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2
+ },
+ },
+ tng = {
+ name = 'tng',
+ mirrors = {'http://firmware.ipv6.4830.org/tng/sysupgrade'},
+ good_signatures = 1,
+ pubkeys = {
+ 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder
+ 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel
+ '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1
+ 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2
+ },
+ },
+ },
+ },
}
-- /* vi: set ft=lua: */
diff --git a/site.conf_ b/site.conf_
new file mode 100644
index 0000000..cd064b2
--- /dev/null
+++ b/site.conf_
@@ -0,0 +1,340 @@
+{
+ -- Documentation can be found here: https://gluon.readthedocs.io/en/latest/user/site.html#site-conf
+ hostname_prefix = 'ffac-',
+ site_name = 'Freifunk Rheinland - Regio Aachen',
+ site_code = 'ffac',
+ domain_seed = 'fcd2bb830c677865c60459899facdb630a9c09e26b72d995451c4feb9b337e6d',
+
+ opkg = {
+ extra = {
+ modules = 'http://opkg.ffac.rocks/modules/gluon-%GS-%GR/%S',
+ ffac = 'http://opkg.ffac.rocks/packages-%v/%A/ffac',
+ gluon = 'http://opkg.ffac.rocks/packages-%v/%A/gluon',
+ gluon_base = 'http://opkg.ffac.rocks/packages-%v/%A/gluon_base',
+ },
+ },
+
+ --[[ General network settings
+ prefix4: IPv4 range of your community
+ prefix6: IPv6 range of your community
+ is also required for radvd
+
+ We use our global unicast block 2a03:2260:114::/48 for IP routing. This prefix is ONLY used for the next node feature and is used in multiple layer 2 network segments.
+ ]]
+ prefix6 = 'fdac::/64',
+
+
+ --[[ NTP settings
+ Synchronize the time of the nodes
+ timezone: Timezone of your community
+ http://wiki.openwrt.org/doc/uci/system#time.zones
+ ntp_servers: List of NTP-Servers to query. You can use any public and/or your private NTP-Servers of your community.
+ http://www.pool.ntp.org/zone/de
+ #############
+ # NOTE: http://news.ntppool.org/2013/06/ipv6-monitoring-problems-for-g.html
+ # > As you might know only "2.pool.ntp.org" (and 2.debian.pool.ntp.org, etc)
+ # > returns AAAA records currently.
+ #############
+ ]]
+ timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
+ ntp_servers = {
+ 'a.ntp.ffac.rocks',
+ 'ntp-b.aachen.freifunk.net',
+ '2.openwrt.pool.ntp.org',
+ },
+
+ regdom = 'DE',
+
+ wifi24 = {
+ channel = 11,
+ ap = {
+ ssid = 'Freifunk',
+ },
+ mesh = {
+ id = 'ffac-bat4-mesh',
+ mcast_rate = 12000,
+ },
+ },
+
+ wifi5 = {
+ channel = 44,
+ outdoor_chanlist = '100-116 132-136', -- exclude/avoid weather radar frequencies
+ -- exclude 136-140 temporarily to fix 40MHz operation
+ -- https://homepage.univie.ac.at/albert.rafetseder/RADARs/radars.html
+ ap = {
+ ssid = 'Freifunk',
+ },
+ mesh = {
+ id = 'ffac-bat4-mesh',
+ mcast_rate = 12000,
+ },
+ },
+
+ -- Configuration of the local node feature of Gluon
+ next_node = {
+ ip6 = 'fdac::ac',
+ mac = 'ac:41:95:40:f7:dc',
+ },
+
+ mesh = {
+ vxlan = false,
+ filter_membership_reports = true,
+ batman_adv = {
+ routing_algo = 'BATMAN_IV',
+ gw_sel_class = 1,
+ },
+ },
+
+
+ --[[ Gateway settings
+ fastd_mesh_vpn: fastd vpn settings
+ https://projects.universe-factory.net/projects/fastd/wiki/User_manual
+ sub
+ methods: encryption algorithms to use
+ https://projects.universe-factory.net/projects/fastd/wiki/Methods
+ When multiple method statements are given, the first one has the highest preference.
+ mtu: package size
+ backbone: fastd vpn gateways of your community
+ sub
+ limit: Number of gateways each node connects to
+ On startup, each node tries to connect to every gateway, and then chooses the number of 'limit' fastest gateways it could reach
+ peers: Gateways
+ sub sub
+ key: public fastd key of your gateway
+ https://github.com/tcatm/ecdsautils
+ remotes: List of fastd configuration strings to connect to your gateway server
+ ]]
+ mesh_vpn = {
+ enabled = true,
+ pubkey_privacy = false,
+
+ wireguard = {
+ broker = 'wg-broker.freifunk-aachen.de/api/add_key',
+ peers = {
+ sn120 = {
+ public_key = 'jp47kK4OEkXf+VSsgKSYGji6mn6vrbXVeBMKwhx1on4=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51820'
+ },
+ sn111 = {
+ public_key = 'EuHYG/4MZZYf+ViX8gy2HY0A2RGR0Im45mZXmD6ThxI=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51811'
+ },
+ sn112 = {
+ public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsNjugaSIJ7VBHM=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51812'
+ },
+ sn113 = {
+ public_key = 'ibMJXBMiC3jFA4rSMjcTqsueszOSder7N8Dpw1W+liQ=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51813'
+ },
+ sn114 = {
+ public_key = 'e4jSvixMGi89JAKnTpHA86GoHmBc6owOckTUslhNVxA=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51814'
+ },
+ sn115 = {
+ public_key = 'yY8Z5YbrAc518Z4Z/Bvlum8pB1VARZ316miql/uu1C0=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51815'
+ },
+ sn116 = {
+ public_key = 'RtPF/2EYZNJEKI/DJh+6R2M1FNsQUbCE0nvNSzXZW10=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51816'
+ },
+ sn117 = {
+ public_key = 'fA+lVmeVGIBcshSO1ZH8uHRqPainM7xS3wEhGTX+2DA=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51817'
+ },
+ sn118 = {
+ public_key = 'u8rkarH+ZNGZoMWD6aGLgnRHzSj95S5fbiBuQXvyFV0=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51818'
+ },
+ sn119 = {
+ public_key = 'Zk4LZXhYW+gj9dN/afKH634yYLDNBUDXEFxejHy7wgs=',
+ endpoint = '01.wg-node.freifunk-aachen.de:51819'
+ },
+ sn220 = {
+ public_key = 'MK8M88m2Wfc5EFLQPbCRZwhqfPYMNAh51Jf0d7A78nY=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51820'
+ },
+ sn211 = {
+ public_key = 'VDqpMh1ljN/rqng88wIOet/XfMHk3XE6+nCBkOS82g0=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51811'
+ },
+ sn212 = {
+ public_key = 'UGK2rNyQX30dqMsdk+vU+0424DP1M/3UahjJR7rN3nw=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51812'
+ },
+ sn213 = {
+ public_key = 'iopPxw0qD6e2DAqEzR5WMHls9EQsxlYQk/pOAaKM9TM=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51813'
+ },
+ sn214 = {
+ public_key = 'yYZlSxiyKXLGk8jyDTnzXkxrPYvmOWpny9AWX3KPdFE=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51814'
+ },
+ sn215 = {
+ public_key = 'X0jmE3MOqzAjgWWNl6JAGcdE66rvsuhKp+WxC59geEE=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51815'
+ },
+ sn216 = {
+ public_key = 'Aq0yNPf2431SndyQtOBaIo5IDs73Tsv/Pw1FH2aNmxk=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51816'
+ },
+ sn217 = {
+ public_key = 'BunPn7Zvoub3QOYnygCxa/oCmPqM6XMjYHXNm3mOxRE=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51817'
+ },
+ sn218 = {
+ public_key = 'rsji/zzTtLTkG+ITrOKCyLWv61XWryT2s3TdozVjwV4=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51818'
+ },
+ sn219 = {
+ public_key = 'Ah9IDIcdW3zfoXuhD7MkKiDSL7xrgKfEKfMFfXRjphQ=',
+ endpoint = '02.wg-node.freifunk-aachen.de:51819'
+ },
+ },
+ mtu = 1406,
+ },
+ },
+
+ --[[ Autoupdater settings
+ branch: Automatically update to this branch
+ branches: Available branches your community is publishing
+ sub sub
+ name: Name of branch (is used when compiling images)
+ mirrors: List of urls where to find the firmware
+ just serve the images on port 80 via http. a simple apache file-listing is enough.
+ see: http://luebeck.freifunk.net/firmware/
+ probability: How often should a node search for updates
+ 1.0 - perform an update every hour
+ 0.5 - on average, perform an update every two hours
+ 0.0 - inhibit any automatic updates
+ good_signatures: How many signatures should be valid so the node decides to upgrade itself
+ pubkeys: public keys by developers used in manifest file of branch
+ manifest file - see gluon readme
+ $ make manifest GLUON_BRANCH=mybranch
+ $ contrib/sign.sh $SECRETKEY.file images/sysupgrade/manifest
+ ]]
+ autoupdater = {
+ branch = 'stable',
+ enabled = 1,
+ branches = {
+ stable = {
+ name = 'stable',
+ mirrors = {
+ 'http://updates.freifunk-aachen.de/from-2024.1.x/stable/sysupgrade',
+ 'http://updates.ffac.rocks/from-2024.1.x/stable/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2024.1.x/stable/sysupgrade',
+ },
+ good_signatures = 4,
+ pubkeys = {
+ 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de
+ 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM
+ 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva
+ '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty
+ 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic
+ '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius
+ '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
+ 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
+ '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe
+ },
+ },
+ beta = {
+ name = 'beta',
+ mirrors = {
+ 'http://updates.freifunk-aachen.de/from-2024.1.x/beta/sysupgrade',
+ 'http://updates.ffac.rocks/from-2024.1.x/beta/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2024.1.x/beta/sysupgrade',
+ },
+ good_signatures = 3,
+ pubkeys = {
+ 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de
+ 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM
+ 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva
+ '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty
+ 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic
+ '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius
+ '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
+ 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
+ '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe
+ },
+ },
+ experimental = {
+ name = 'experimental',
+ mirrors = {
+ 'http://updates.freifunk-aachen.de/from-2024.1.x/experimental/sysupgrade',
+ 'http://updates.ffac.rocks/from-2024.1.x/experimental/sysupgrade',
+ 'http://updates.aachen.freifunk.net/from-2024.1.x/experimental/sysupgrade',
+ },
+ good_signatures = 2,
+ pubkeys = {
+ 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de
+ 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM
+ 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva
+ '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty
+ 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic
+ '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius
+ '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms
+ 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle
+ '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe
+ },
+ },
+ },
+ },
+
+ -- uncomment for update from 2019.1.x to v2021.1.x
+ --[[ update_channel = {
+ from_name = experimental, -- remove or false to catch all
+ -- if to_name is defined, autoupdater branch is set to it
+ to_name = 'beta',
+ }
+ ]]
+
+ --[[ setup_mode = {
+ skip = false, -- Skip config_mode on first boot
+ },
+ ]]
+
+ config_mode = {
+ hostname = {
+ optional = false,
+ },
+ remote_login = {
+ show_password_form = true,
+ min_password_length = 10,
+ },
+ owner = {
+ obligatory = true,
+ },
+ geo_location = {
+ osm = {
+ center = {
+ lat = 50.77,
+ lon = 6.107,
+ },
+ zoom = 11,
+ tile_layer = {
+ type = 'XYZ',
+ url = 'https://tiles.aachen.freifunk.net/{z}/{x}/{y}.png',
+ attributions = '© OpenStreetMap contributors.',
+ },
+ },
+ },
+ },
+
+ ssid_changer = {
+ enabled = true,
+ switch_timeframe = 1, -- only once every timeframe (in minutes) the SSID will change to OFFLINE
+ -- set to 1440 to change once a day
+ -- set to 1 minute to change every time the router gets offline
+ first = 2, -- the first few minutes directly after reboot within which an Offline-SSID always may be activated
+ prefix = 'FF_Offline_', -- use something short to leave space for the nodename (no '~' allowed!)
+ suffix = 'nodename', -- generate the SSID with either 'nodename', 'mac' or to use only the prefix: 'none'
+ tq_limit_enabled = false, -- if false, the offline SSID will only be set if there is no gateway reacheable
+ -- upper and lower limit to turn the offline_ssid on and off
+ -- in-between these two values the SSID will never be changed to prevent it from toggeling every minute.
+ tq_limit_max = 55, -- upper limit, above that the online SSID will be used
+ tq_limit_min = 45, -- lower limit, below that the offline SSID will be used
+ },
+}
+
+-- /* vi: set ft=lua: */
diff --git a/site.mk b/site.mk
index 2d966ca..950d056 100644
--- a/site.mk
+++ b/site.mk
@@ -24,4 +24,5 @@ GLUON_AUTOUPDATER_ENABLED ?= 1
GLUON_REGION ?= eu
# Languages to include
-GLUON_LANGS ?= en de
\ No newline at end of file
+GLUON_LANGS ?= de en
+