Compare commits

...

179 Commits

Author SHA1 Message Date
716daff077
testing something
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-05-20 17:34:46 +02:00
f8806d672c
apt update
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2023-05-20 12:47:24 +02:00
1e187f21ef
installed file dependency
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2023-05-20 12:45:43 +02:00
d5f9f5dd46
added ci pipeline
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2023-05-20 12:39:42 +02:00
David Bauer
979dd354fa
Merge pull request #2901 from maurerle/patch-3
gluon-info: Add domain to gluon-info
2023-05-10 13:30:06 +02:00
Florian Maurer
f0246b65e2
gluon-info: Add current domain to gluon-info
- provides easier information of the currently active domain
- tested by patching a running node
2023-05-10 10:02:27 +02:00
David Bauer
079f449d9d
Merge pull request #2794 from Djfe/add_cudy_wr1300v1
ramips: add support for Cudy WR1300 v1
2023-05-10 01:24:29 +02:00
Jan-Niklas Burfeind
b840afe95f
Merge pull request #2898 from blocktrron/gluon-2022.1.4-master
[master] [forward-port] docs: Add v2022.1.4 release notes
2023-05-10 00:02:50 +02:00
Jan-Niklas Burfeind
02878ee083
Merge pull request #2899 from freifunk-gluon/readthedocs-yaml
readthedocs: specify build-container
2023-05-10 00:01:54 +02:00
David Bauer
44a891807c readthedocs: specify build-container
Docs builds currently fail with

Could not import extension sphinx.builders.linkcheck
(exception: urllib3 v2.0 only supports OpenSSL 1.1.1+,
currently the 'ssl' module is compiled with OpenSSL
1.0.2n  7 Dec 2017.
See: https://github.com/urllib3/urllib3/issues/2168)

The Gluon issuetracker suggests specifying the build-container.

Link: https://github.com/readthedocs/readthedocs.org/issues/10290#issuecomment-1535120995

Signed-off-by: David Bauer <mail@david-bauer.net>
2023-05-09 23:46:49 +02:00
David Bauer
6771803de3 docs: Add v2022.1.4 release notes
(cherry picked from commit 205e66c743)
2023-05-09 21:57:03 +02:00
David Bauer
cc452904b5
Merge pull request #2897 from herbetom/master-updates
modules: update to latest HEAD
2023-05-09 09:40:26 +02:00
Tom Herbers
677d56aea6
modules: update packages
55eed1761 mwan3: bump PKG_VERSION to 2.11.7
675bd01a1 mwan3: reset score to up+down on connected
3c9ad7df7 mwan3: refactoring mwan3track action handling
ce66eecb6  banip: release 0.8.5-2
d63f0e859  banip: release 0.8.5-1
7af20d484 cloudflared: Update to 2023.5.0
20d99ef7b  banip: update 0.8.4-5
8d9c17e91 zoneinfo: adjust to current timezone data file structure
2e667a1f8 sqlite3: Update to 3.41.2
726e94527  banip: update 0.8.4-4
bb8efb657  banip: update 0.8.4-3
02b6973b0 mwan3: bump PKG_VERSION to 2.11.6
3b80d11e2 mwan3: fix addition of routes to mwan3_connected ipset
aa68fc4cb shadowsocks-libev: ss-rules: Add 'auto-merge' flag to avoid conflicts
7398724ec mwan3: bump PKG_VERSION to 2.11.5
4addfcf15 mwan3: fix addition of iptables rules for mwan3 sticky rules
5f26bba47 slang2: Update to 2.3.3, refresh patches
3492a48b0 pbr: update to 1.1.1-1
1086d4f74 librespeed-go: update file permissions for ujail
216261ea4 banip: update 0.8.4-2
c68388fb6 banip: release 0.8.4-1
5b7e01ad5 simple-adblock: implement curl_additional_param compressed_cache_dir
2023-05-08 14:17:06 +02:00
Tom Herbers
70da43fa35
modules: update openwrt
e500494771 wireless-regdb: update to 2023.05.03
2677220d81 kernel: bump 5.10 to 5.10.179
5cc1bd5b21 kernel: bump 5.10 to 5.10.178
dcdd8e9dee kernel: bump 5.10 to 5.10.177
2023-05-08 14:17:05 +02:00
Jan-Niklas Burfeind
ed36f1456f
Merge pull request #2889 from Djfe/fixup
docs: fix supported_devices (missing newline)
2023-05-05 23:31:58 +02:00
Felix Baumann
41b2f002f3 docs: fix supported_devices (missing newline)
I made the mistake of never looking at the rendered version
fixes 95e5d382ec
backport like 8b2cc206d3 is optional
2023-05-05 23:22:18 +02:00
David Bauer
22781dac06
Merge pull request #2887 from Djfe/add_cudy_x6_v2
ramips: add support for Cudy X6 v2
2023-05-05 22:03:16 +02:00
Felix Baumann
5328f17b09 ramips: add support for Cudy X6 v2 2023-05-05 15:45:20 +02:00
David Bauer
eca926abc7
Merge pull request #2793 from Djfe/add_cudy_x6_v1
ramips: add support for Cudy X6 v1
2023-05-05 14:53:56 +02:00
Felix Baumann
76ad25f826 ramips: add support for Cudy X6 v1 2023-05-04 20:43:53 +02:00
David Bauer
91b26c65aa
Merge pull request #2886 from Djfe/master
modules: update openwrt
2023-05-04 19:54:49 +02:00
FFAC
2f463c0353 modules: update openwrt
5f583d31c7 ramips: mt7621: add support for Cudy X6 v2
2023-05-03 22:20:07 +00:00
David Bauer
8b5a282c4a
Merge pull request #2552 from AiyionPrime/ath79-migrate-hiveap-121
ath79-nand: (re)add hiveap-121
2023-05-03 01:01:15 +02:00
David Bauer
4018db1823
Merge pull request #2882 from Djfe/update-modules
modules: update openwrt
2023-05-02 01:32:23 +02:00
Felix Baumann
899dd916d0 modules: update openwrt
749cc6ffc4 ramips: Cudy X6 fixes / improvements
2023-04-30 22:03:51 +02:00
Felix Baumann
e06e555ac2 ramips: add new lines to separate vendors consistently 2023-04-30 20:51:56 +02:00
Felix Baumann
3e3a7987b6 ramips: add support for Cudy WR1300 v1 2023-04-30 20:51:56 +02:00
David Bauer
918e3ce784
Merge pull request #2880 from herbetom/master-updates
modules: update to latest HEAD
2023-04-30 14:09:26 +02:00
Tom Herbers
f7298d70f3
modules: update packages
7d7663dc1 newt: Update to 0.52.23
f64aaa69a dnsproxy: Update to 0.49.1
5d3fc9c5b dnsproxy: Update to 0.49.0
bd2cebf65 xray-core: Update to 1.8.1
f0128ce98 v2ray-core: Update to 5.4.1
4e7f27b21 obfs4proxy: Update to 0.0.14
891299822 ruby: update to 3.0.6
93bd5fad3 htop: update to 3.2.2
698132112 php8: update to 8.1.18
ec321e666 curl: update to 8.0.1
2023-04-28 00:50:18 +02:00
Tom Herbers
2a3a0e32d5
modules: update openwrt
3960c220da OpenWrt v22.03.5: revert to branch defaults
863f769b75 OpenWrt v22.03.5: adjust config defaults
5f15225c1e ramips: reduce Archer AX23 / MR70X SPI-frequency
c1ccae54ce ccache: update to 4.6.3
80653f0c07 tools/ccache: update to 4.6.2
eeff8b3be1 tools/ccache: update to 4.6.1
31b1366bc6 ramips: fix lzma-loader for buffalo_WSR_600DHP
bf81a92171 ath79: create Aruba AP-105 APBoot compatible image
b6cbab1ad7 openssl: fix CVE-2023-464 and CVE-2023-465
2023-04-28 00:50:12 +02:00
Matthias Schiffer
10e52bec3a
Merge pull request #2688 from lemoer/pr_config_mode_ui_for_interface_roles_v2
Config-Mode UI for Interface Role Assignment (v2)
2023-04-27 21:11:33 +02:00
David Bauer
75c62fd2aa
Merge pull request #2601 from AiyionPrime/key-translate
gluon-mesh-vpn-wireguard: add fastd key migration
2023-04-25 23:22:49 +02:00
lemoer
19f3c9d396 gluon-web-network: migrate to SPDX headers for licensing 2023-04-24 21:41:53 +02:00
lemoer
b774f6f434 gluon-web-model: migrate to SPDX headers for licensing 2023-04-24 21:41:53 +02:00
lemoer
abd6d6415d gluon-core: make interface roles exclusive in site config 2023-04-24 21:41:53 +02:00
lemoer
e7da501442 docs: explain that invalid interface roles are removed 2023-04-24 20:59:26 +02:00
lemoer
a31a802e85 gluon-core: fix invalid role configurations during reconfigure 2023-04-24 20:59:26 +02:00
lemoer
1e21dbcfad gluon-web-network: make roles "uplink" / "mesh" and "client" exclusive 2023-04-24 20:59:26 +02:00
lemoer
7805ff700e gluon-web-model: add exclusive options for MultiListValue 2023-04-24 20:59:20 +02:00
Jan-Niklas Burfeind
276cd0ee37 docs: gluon-mesh-vpn-key-translate 2023-04-20 00:22:19 +02:00
aiyion.prime
e4d05e6ba9 gluon-mesh-vpn-wireguard: add fastd key migration 2023-04-20 00:22:13 +02:00
aiyion.prime
759a3436e0 gluon-mesh-vpn-wireguard: add gluon-hex-to-b64
gluon-hex-to-b64 takes base64 content such as a fastd private key
in legacy form via stdin and emits it in base64 encoded (WireGuard) form.

Provides basic return codes.
2023-04-20 00:21:42 +02:00
Jan-Niklas Burfeind
5ed8508a09
Merge pull request #2864 from blocktrron/combine-dual-boot
openwrt: backport combination of dual-flash partitions
2023-04-19 22:07:53 +02:00
Matthias Schiffer
d91b11ec3d
Merge pull request #2860 from jluebbe/libbatadv-uapi-update
libbatadv: Update UAPI from kernel 6.2
2023-04-19 21:48:29 +02:00
Matthias Schiffer
051d10a59f
Merge pull request #2837 from maurerle/feature/build_dependencies
[docs] improve build dependencies and docs
2023-04-19 21:38:20 +02:00
lemoer
03b9ffdb24 gluon-web-model: uglify flag --support-ie8 is now --ie
From uglify 3.14.0 on, this command is called --ie:

ef5f7fc25e
2023-04-19 21:34:29 +02:00
lemoer
d46c5f89c5 gluon-web-network: show pretty interface names 2023-04-19 21:34:29 +02:00
lemoer
f0b2e632d0 gluon-web-network: initial draft of role configuration 2023-04-19 21:04:24 +02:00
lemoer
7cd4a189e0 gluon-web-model: add MultiListValue class 2023-04-19 21:04:23 +02:00
David Bauer
d1b215aeec
Merge pull request #2866 from AiyionPrime/fix-docs-make-linkcheck
docs: use linkcheck_ignore for unreachable links
2023-04-17 19:28:29 +02:00
Jan-Niklas Burfeind
7ca4cb3698 docs: use linkcheck_ignore for unreachable links
Config Mode
- http://192.168.1.1

(not existing) anchors on hackint used to join channels
- https://webirc.hackint.org/#
2023-04-17 16:23:18 +02:00
David Bauer
cc854594b0 openwrt: backport combination of dual-flash partitions
Backport two patches combining dual-flash layouts of OCEDO as well as
UniFi AC boards.

The two firmware partitions are already combined on OpenWrt master to
prolong the life of these devices. It allows the device to store
firmware images up to 14 MB compared to the previous 7 MB.

The intention behind backporting these patches is to allow these devices
to have a wide update path to firmware-versions requiring this extra
space. Otherwise a device might not be able to install an upgrade which
exceeds a single firmware-partition.

For UniFi AC boards it should be noted that factory-installation will
not be possible with an image exceeding a single firmware-partition. In
this case, an older OpenWrt image that fits in a single partition and
supports writing the enlarged partition space is required.

Currently, this is not the case. As these devices are end-of-sale, this
will become less of a concern over time.

Signed-off-by: David Bauer <mail@david-bauer.net>
2023-04-17 06:38:53 +02:00
Jan Luebbe
31d1429ad2 libbatadv: update UAPI and policy from batctl v2023.0
batadv_gw_modes and BATADV_ATTR_GW_MODE were missing from the local
version, so update it and the corresponding policy table from batctl.
2023-04-16 20:24:54 +02:00
Martin Weinelt
297cd5bc3f
Merge pull request #2856 from blocktrron/upstream-master-updates
modules: update to latest HEAD
2023-04-15 20:04:24 +02:00
David Bauer
4faa6f3d61 modules: update gluon
a5259c0 autoupdater: improve handling of interrupted HTTP requests
e4bd7a4 autoupdater: uclient: fix segfault after interrupted HTTP request
5521926 autoupdater: uclient: remove early returns from get_url()
2023-04-15 12:56:37 +02:00
David Bauer
c620ae789e modules: update packages
42b5ae640 golang: Update to 1.19.8
be3a2dce9 lighttpd: update to lighttpd 1.4.69 release hash
ad2f6fd4c lighttpd: remove patch included upstream
6e07b2816 lighttpd: add lighttpd-mod-webdav_min package
e5a1e8bef lighttpd: collect mods now built into lighttpd exe
9116a5880 lighttpd: fix meson build
aa6df20e5 lighttpd: remove patch included upstream
64cdc76c0 lighttpd: update to lighttpd 1.4.68 release hash
0d66dc36c lighttpd: modify build cmd for type: feature opts
8bcfb64a5 lighttpd: add lighttpd-mod-rrdtool dep on rrdtool1
0c0fd4bbd lighttpd: lighttpd-1.4.67-4
10c8bee8c lighttpd: document crypto lib options in Makefile
fb17428a1 cloudflared: Update to 2023.4.0
235acacf0 borgbackup: bump to 1.2.4
31f36e5b2 borgbackup: add missing dependencies
3d12ac7e7  banip: update 0.8.3-2
81a57cdc1  banip: release 0.8.3-1
9b81bca1b v2raya: Update to 2.0.5
bab4d7ebf apinger: add rrd graph support
e5c7e5021 apinger: improve uci and procd support
87c46fde9 rrdtool: update PKG_SOURCE_URL
38cb01297 dnsproxy: Update to 0.48.3
2023-04-15 12:56:30 +02:00
David Bauer
a834298b4e modules: update openwrt
074db57936 kernel: backport fix for recently introduced UBI bug
9af29da281 uclient: update to Git version 2023-04-13
1d4db4e4db OpenWrt v22.03.4: revert to branch defaults
94adc23fa6 OpenWrt v22.03.4: adjust config defaults
38ccc47687 imagebuilder: allow to specific ROOTFS_PARTSIZE
2023-04-15 12:56:16 +02:00
Andreas Ziegler
e40ed5810d
Merge pull request #2848 from herbetom/fix_ath79-generic_wave2
ath79-generic: switch Wave2 firmware to -ct
2023-04-13 23:13:56 +02:00
Andreas Ziegler
f21e3e129a
Merge pull request #2830 from herbetom/add_dlink-dap-x1860-a1
ramips-mt7621: add support for D-Link DAP-X1860 (A1)
2023-04-13 23:12:48 +02:00
Felix Baumann
48b017b1a4
ipq40xx-mikrotik: rename ath10k_packages to smallbuffers (#2850)
The only device using the ATH10K_PACKAGES_IPQ40XX variable in
ipq40xx-mikrotik (the MikroTik hAP ac2) has little RAM and is
using ath10k-ct-smallbuffers by default at the moment. This is
just a suggestion to rename the variable in-case the wifi driver
ever has to be replaced by ath10k.

Analogue to 4a00b8aebb

Signed-off-by: Felix Baumann <felix.bau@gmx.de>
2023-04-13 11:08:28 +02:00
Tom Herbers
4badb2702e
ath79-generic: switch Wave2 firmware to -ct
This partially reverts commit 22c47df242.

Devices in ath79-generic like the TP-Link EAP225-Outdoor v1 are really
unstable with the non -ct Wave2 firmware and regulary crash with 100% memory
consumption when only a handful devices are connected via 5 GHz.

closes freifunk-gluon/gluon#2827
2023-04-12 02:30:41 +02:00
Tom Herbers
e8e956fe57
ramips-mt7621: add support for D-Link DAP-X1860 (A1) 2023-04-09 19:30:55 +02:00
Andreas Ziegler
157a74c5ab
Merge pull request #2844 from herbetom/master-updates
modules: update to latest HEAD
2023-04-09 19:15:04 +02:00
Tom Herbers
c81e9c287b
modules: update packages
1fd9cbcf9 yq: Update to 4.33.2
93b973f51 nano: make nanorc world readable
12bef946f zoneinfo: updated to the latest release
630603042 node: bump to v16.20.0
2023-04-09 12:02:51 +02:00
Tom Herbers
10e0bd1fe0
modules: update openwrt
deafcf9162 ramips: define remapping-range for DAP-X1860
711e45e158 ramips: add support for D-Link DAP-X1860 A1
2a4a6372d3 ramips: lower re305-v3 spi-max-frequency
50d707e344 lantiq: fix lzma-loader for Netgear DGN 3500(B)
fea7478f2d iproute2: add missing libbpf dependency
b2db4fa956 ath79: tiny: Do not build TPLink WPA8630Pv2 by default
c6b6cab858 ramips: mt7621: mikrotik 760igs (hEX S) fix SFP
2faa7ff09e openssl: fix variable reference in conffiles
0636d6b925 ath79: use lzma-loader for Senao initramfs images
70d2e8b4db ath79: Fix glinet ar300m usb not working
9aaeaa8d2a toolchain: musl: Fix symbol loading in gdb
99fddbe4fd wireless-regdb: update to 2023.02.13
f677302cc4 build: fix for sourcing targets image config installed via feeds
50d37b0b37 ramips: rt5350: enable lzma-loader for ALLNET ALL5003
13d3fb3c20 bpf-headers: fix package category
7531ef7f1c sdk: expose PATENTED an NLS build options
4ed98849a5 ksmbd: update to 3.4.7
51cf5aa731 hostapd: add missing return code for the bss_mgmt_enable ubus method
d2f3422e9d kernel: filter out pahole version
5030620db6 dnsmasq: add dhcphostsfile to ujail sandbox
066ac40c29 netifd: strip mask from IP address in DHCP client params
354ad1084a lantiq: nand: don't yield while holding spinlock
6035401f46 mac80211: fix invalid calls to drv_sta_pre_rcu_remove
fc1750b305 ramips: mt7621: ASUS RT-AX53U add NMBM, nest firmware
85b6a7a195 ramips: Alternative name Asus RT-AX1800U for Asus RT-AX53U
a3fbeb2cbb ramips: add missing LEDs to Asus RT-AX53U
21a121af80 uboot-envtools: add support for ramips Asus RX-AX53U
3014c694da ramips: add support for read/write uboot env to Asus RX-AX53U
ff22a20922 comgt: ncm: support Mikrotik R11e-LTE6 modem
5909b6c886 comgt: add quirk for Mikrotik modems based on Mikrotik R11e-LTE6
05ec70f6ae kernel: add support for XMC XM25QH64C
541be7ddb2 ath79: Refresh patches
2023-04-09 12:02:43 +02:00
Magnus Frühling
4a00b8aebb
ipq40xx: use ath10k-smallbuffers for ZyXEL WRE6606 (#2842)
The WRE6066, has in contrast to other ip40xx devices, has only 128MB system RAM.
This results in OOM situations and instability, to circumvent this we need
to use ath10k-smallbuffers.

Signed-off-by: skorpy <skorpy@frankfurt.ccc.de>
2023-04-07 18:30:33 +02:00
Florian Maurer
b70b9d2a05
update install dependency docs
* add missing libelf-dev dependency (to build x86-64)
* remove subversion dependency
* add rsync dependency
* add ecdsautils to docs
2023-04-02 15:58:55 +02:00
Andreas Ziegler
f3b25c1e7d
Merge pull request #2835 from blocktrron/upstream-master-updates
modules: update to latest HEAD
2023-04-01 01:59:03 +02:00
David Bauer
7b2e04e8dc modules: update packages
391e18067 banip: update to 0.8.2-6
9748c394d banip: update to 0.8.2-5
5ae16a7a6 yq: Update to 4.33.1
e9b65e5d7 dnsproxy: Update to 0.48.2
7894fd057 dnsproxy: Update to 0.48.1
8a8c51a92 dnsproxy: Update to 0.48.0
b2c3f2d13 natmap: update to 20230322
7852691b8 banip: update to 0.8.2-4
9fb40dbb8 banip: update to 0.8.2-3
33431b63b sqlite3: Update to 3.41.1
2023-03-31 13:56:43 +02:00
David Bauer
068e8fbdce modules: update openwrt
c2331038b2 kernel: remove obsolete netfilter tcp window size check bypass patch
4ae854d055 mac80211, mt76: add fixes for recently discovered security issues
b573a785e0 ncm: add error check and retry mechanism for gcom call
f61c5cf76b kernel: bump 5.10 to 5.10.176
a4212b77c0 kernel: bump 5.10 to 5.10.175
6b19d24254 kernel: bump 5.10 to 5.10.174
24d84a13a4 kernel: bump 5.10 to 5.10.173
36bf158b47 kernel: tcindex classifier has been retired
999cb9574f x86: fix deprecated CONFIG_MICROCODE_OLD_INTERACE
a88c65507d kernel: bump 5.10 to 5.10.172
cb91aa4b29 kernel: bump 5.10 to 5.10.170
26cc831e44 kernel: bump 5.10 to 5.10.169
28e5045f3a bcm4908: include usbport trigger
836e3d1e5e bcm4908: backport v6.4 pending DTS changes
b7c031d933 ipq40xx: Linksys MR8300: fix the USB port power
0170bc1af1 ramips: mt7621: enable lzma-loader for AFOUNDRY EW1200
96e3fee7ad ramips: fix 5g mac for TOTOLINK X5000R
2023-03-31 13:56:43 +02:00
Jan-Niklas Burfeind
b8d47e6c4b
Merge pull request #2832 from Djfe/TD-W8970
docs: readd TP-Link TD-W8970 v1
2023-03-31 00:55:11 +02:00
Felix Baumann
95e5d382ec docs: readd TP-Link TD-W8970 v1
This device is already supported.
It's a lantiq device that was entered as ar71xx
in to the list of supported device and therefore
removed before the release of Gluon 22.
2023-03-31 00:33:05 +02:00
Jan-Niklas Burfeind
006396620a
Merge pull request #2831 from blocktrron/mr70x
ramips-mt7621: add support for Mercusys MR70X v1
2023-03-29 23:32:18 +02:00
David Bauer
a2056d97a9 ramips-mt7621: add support for Mercusys MR70X v1
Signed-off-by: David Bauer <mail@david-bauer.net>
2023-03-25 23:23:52 +01:00
David Bauer
3a0b0b061a
Merge pull request #2825 from blocktrron/upstream-master-updates
modules: update to latest Git HEAD
2023-03-25 23:21:21 +01:00
David Bauer
1c6405a756
gluon-core: set WAN mac from board-data (#2823)
Set the MAC-adress for the WAN interfacce in case it is defined in the
board-data.

This commit fixes random MAC-Addresses on reboot in case OpenWrt stores
them in the device network configuration.

Fixes #2808

Signed-off-by: David Bauer <mail@david-bauer.net>
2023-03-24 17:20:53 +01:00
David Bauer
44e79fc5c9 modules: update routing
b8e0831 bird1: fix "Form token mismatch" errors in luci-app-bird1-ipv{4,6}
3d7df59 bird1: rename get_bool() to get_a_bool() in bird{4,6}-lib.sh
4e0e702 bird1-openwrt: fix Makefile issues
58a4a00 bird1-openwrt: use a single Makefile for IPv4 and IPv6 packages
2023-03-24 16:22:34 +01:00
David Bauer
63a3921acd modules: update packages
0d566071c adblock: update to 4.1.5-7
05262f346 yq: Update to 4.32.2
245d3479c cloudflared: Update to 2023.3.1
bf9bafd2c v2raya: Update to 2.0.4
66816f0f6 banip: push 0.8.2-2 to stable branch
07e032ee1 v2ray-geodata: Update to latest version
869e5573c xray-core: Update to 1.8.0
b13728e6a strongswan: add fix for CVE-2022-40617
eb4966e54 golang: Update to 1.19.7
b1f684f01 miniupnpd: bump to 2.3.3
1f1bfff84 php8: update to 8.1.16
fe75545e6 gphoto2: fix compilation with BUILD_NLS
19347485a mv88e6xxx_dump: update to 2023.03.08
ae7dd67aa simple-adblock: update init file and config
4ee651287 crowdsec: update to 1.4.6 Update crowdsec to latest upstream release version 1.4.6
6c78413ed frp: update to 0.48.0
4ab4523f7 frp: update to 0.47.0
90749ee59 v2raya: switch to use nftables
70bfe06bb perl-ack: Update to 3.7.0
b53d4f03f v2ray-core: Update to 5.4.0
acddc2050 crowdsec-firewall-bouncer: update to 0.0.25
3c59f514b yt-dlp: update to 2023.3.4
3ea3a0657 haproxy: update to v2.4.22
3e3650bc9 curl: add lang/perl-www-curl/patches/230-curl_7.88_compat.patch
009b2d005 curl: update to 7.88.1
2023-03-24 16:22:34 +01:00
David Bauer
6dc5a4735b modules: update openwrt
f5db04e8ea ramips: add support for Mercusys MR70X
c58959dc45 firmware-utils: tplink-safeloader: add Mercusys MR70X
c1bfb704b1 ramips: fix Archer AX23  WiFi MAC address conflict
3c6692ba03 ramips: add support for TP-Link Archer AX23 v1
a507243bfe firmware-utils: tplink-safeloader: add TP-Link Archer AX23 v1
788a0cf15c mpc85xx: add support for Watchguard Firebox T10
2023-03-24 16:22:34 +01:00
Stefan Weil
cab47e73e4
gluon-status-page: fix status display of wireless mesh for recent openwrt (#2826)
Instead of checking for the deprecated sysfs entry `wireless` which no
longer exists when running newer versions of openwrt, testing for `phy80211`
can be used and works for old and new versions of openwrt.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
2023-03-24 13:34:25 +01:00
lemoer
6504a4dd6e
Merge pull request #2820 from stweil/contributing
actions, docs: fix English typo, wording
2023-03-22 21:19:36 +01:00
lemoer
1a489c5216
Merge pull request #2815 from bobidle/fix_typos
docs: fix typos
2023-03-22 21:18:01 +01:00
Stefan Weil
d81897a467 actions, docs: fix English typo, wording
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2023-03-21 07:16:43 +01:00
Tom Herbers
f80bef8405
ath79-generic: fix WS-AP3705i autoupdater name (#2817)
The device was introduced in #2332 and merged in 102a4b9350.

It appears that the autoupdater name wasn't correct and devices therefore don't receive updates.

root@64295-ggw3-20b399bb366f-132:~# lua -e 'print(require("platform_info").get_image_name())'
enterasys-ws-ap3705i
2023-03-19 20:33:47 +01:00
Bob Idle
337f2f119e docs: fix typos 2023-03-18 05:10:16 +01:00
David Bauer
9a4395d048
Merge pull request #2768 from herbetom/add_gl-xe300
ath79-nand: add support for GL.iNet GL-XE300
2023-03-16 07:51:20 +01:00
Andreas Ziegler
fe79b50473
Merge pull request #2813 from FreifunkChemnitz/gl-mt1300v1
ramips-mt7621: add GL.iNet MT1300
2023-03-12 00:07:34 +01:00
Steffen Förster
2c221bac79 ramips-mt7621: add GL.iNet MT1300
The GL-MT1300 is a high-performance new generation pocket-sized router
that offers a powerful hardware and first-class cybersecurity protocol
with unique and modern design.

Specifications:
- SoC: MT7621A, Dual-Core @880MHz
- RAM: 256 MB DDR3
- Flash: 32 MB
- Ethernet: 3 x 10/100/1000: 2 x LAN + 1 x WAN
- Wireless: 1 x MT7615D Dual-Band 2.4GHz(400Mbps) + 5GHz(867Mbps)
- USB: 1 x USB 3.0 port
- Slot: 1 x MicroSD card slot
- Button: 1 x Reset button
- Switch: 1 x Mode switch
- LED: 1 x Blue LED + 1 x White LED

MAC addresses based on vendor firmware:
WAN : factory 0x4000
LAN : Mac from factory 0x4000 + 1
2.4GHz : factory 0x4
5GHz : Mac form factory 0x4 + 1

Flashing instructions:
1.Connect to one of LAN ports.
2.Set the static IP on the PC to 192.168.1.2.
3.Press the Reset button and power the device (do not release the button).
  After waiting for the blue led to flash 5 times, the white led will
  come on and release the button.
4.Browse the 192.168.1.1 web page and update firmware according to web
  tips.
5.The blue led will flash when the firmware is being upgraded.
6.The blue led stops blinking to indicate that the firmware upgrade is
  complete and U-Boot automatically starts the firmware.
2023-03-11 18:14:24 +01:00
Jan-Niklas Burfeind
02d363eadc
Merge pull request #2811 from bobidle/external_links
docs: Update external links
2023-03-10 19:45:35 +01:00
Bob Idle
2f9d59cdb8 docs: Update external links 2023-03-08 18:20:53 +01:00
David Bauer
bf153bc943
Merge pull request #2810 from blocktrron/upstream-master-updates
modules: update to latest OpenWrt HEAD
2023-03-06 16:37:27 +01:00
David Bauer
ec57f6c666 ath79-generic: remove workaround
Now that OpenWrt implements a proper fix for the stalled boots on 74kc
boards, the previous workaround can be removed.

Signed-off-by: David Bauer <mail@david-bauer.net>
2023-03-05 20:32:01 +01:00
David Bauer
53b84e3424 modules: update routing
cc1dd76 bird2: bump to version 2.0.12
2023-03-05 20:31:04 +01:00
David Bauer
989a16d103 modules: update packages
f06652bc1 v2raya: drop wrong patches
b6fab0750 yq: Update to 4.31.2
614680d93 yq: Update to 4.31.1
781be9731 cloudflared: Update to 2023.3.0
889028f86 cloudflared: Update to 2023.2.2
4b630ba72 sed: remove old libpcre dependency
3e2c1336a msgpack-c: Update to 5.0.0
43ae97707 golang: Update to 1.19.6
692052b8c node: bump to v16.19.1
2fcba9a46 zerotier: update to 1.10.3
651c73467 git: update to 2.34.7
656835201 https-dns-proxy: 2022-10-15-11 update
0790a0626 cloudreve: Update to 3.7.1
11780f597 gg: Update to 0.2.18
a4393e648 dnsproxy: Update to 0.47.0
2ccdd6d27 kcptun: update to version 20230207
48d58b61c simple-adblock: bugfix: ensure directory for jsonFile is created
b0050dc7f simple-adblock: implement procd_boot_wan_timeout support
fc70290d5 adblock: update 4.1.5-6
1e59e5d12 snowflake: update to v2.5.1
c13c734e3 django: bump to version 4.0.10
d3c9e5200 irqbalance: Add upstream fix for AARCH64 irq name parsing
f38c9e1d2 simple-adblock: update to 1.9.4-1
1c0d2ce41 adblock: update 4.1.5-5
2023-03-05 20:31:00 +01:00
David Bauer
f3c7f340b8 modules: update openwrt
0a32f66fea generic: remove patch for unused kernel version
ea6fb9c16d generic: MIPS: Add barriers between dcache & icache flushes
7b05a8d05d kernel: fix mtk dsa tag padding
cfce8ab388 kernel: can: fix MCP251x CAN controller module autoload
55a48b0957 kernel: bump 5.10 to 5.10.168
a66e53d8ed kernel: bump 5.10 to 5.10.167
3167f7c9fa openssl: bump to 1.1.1t
2023-03-05 20:30:51 +01:00
Andreas Ziegler
ac14244b79
Merge pull request #2809 from AiyionPrime/master-v2022.1.3-fp
docs: Add v2022.1.3 release notes
2023-03-04 23:25:46 +01:00
Jan-Niklas Burfeind
25eb6763cd docs: Add v2022.1.3 release notes
(cherry picked from commit 190d7f8701)
2023-03-04 23:19:33 +01:00
Martin Weinelt
82723f3a45
Merge pull request #2803 from freifunk-gluon/dependabot/github_actions/korthout/backport-action-1.2.0
build(deps): bump korthout/backport-action from 1.1.0 to 1.2.0
2023-03-02 13:26:03 +00:00
Jan-Niklas Burfeind
ccca92cf92
Merge pull request #2806 from freifunk-gluon/master-bugfix
gluon-core: fix typo in wireless upgrade script
2023-03-02 14:06:25 +01:00
Andreas Ziegler
94537db4df
gluon-core: fix typo in wireless upgrade script 2023-03-02 00:23:56 +01:00
Jan-Niklas Burfeind
23145c58a0
Merge pull request #2802 from freifunk-gluon/dependabot/github_actions/actions/checkout-3
build(deps): bump actions/checkout from 1 to 3
2023-03-01 09:36:27 +01:00
Jan-Niklas Burfeind
7e8c9f41a6
Merge pull request #2804 from freifunk-gluon/dependabot/pip/docs/sphinx-rtd-theme-1.2.0
build(deps): bump sphinx-rtd-theme from 1.1.1 to 1.2.0 in /docs
2023-03-01 09:28:10 +01:00
dependabot[bot]
43faa4f0d9
build(deps): bump sphinx-rtd-theme from 1.1.1 to 1.2.0 in /docs
Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 1.1.1 to 1.2.0.
- [Release notes](https://github.com/readthedocs/sphinx_rtd_theme/releases)
- [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst)
- [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/1.1.1...1.2.0)

---
updated-dependencies:
- dependency-name: sphinx-rtd-theme
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 00:57:31 +00:00
dependabot[bot]
1d50bedce8
build(deps): bump korthout/backport-action from 1.1.0 to 1.2.0
Bumps [korthout/backport-action](https://github.com/korthout/backport-action) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/korthout/backport-action/releases)
- [Commits](https://github.com/korthout/backport-action/compare/v1.1.0...v1.2.0)

---
updated-dependencies:
- dependency-name: korthout/backport-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 00:57:18 +00:00
dependabot[bot]
002ace202f
build(deps): bump actions/checkout from 1 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 1 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v1...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 00:57:16 +00:00
Jan-Niklas Burfeind
44844262cd
Merge pull request #2654 from T-X/pr-librerouter-v1
ath79-generic: add LibreRouter v1
2023-02-28 16:53:15 +01:00
Matthias Schiffer
a0f8d2ca52
Merge pull request #2695 from Kistelini/preserve_channels
gluon-core: preserve channel list for 5G radios
2023-02-27 23:28:30 +01:00
Christian Buschau
4e68059bc8
gluon-core: preserve channel list for 5G radios
Currently the 'channels' setting of a 5G radio gets overwritten or
deleted even if the 'preserve_channels' option is enabled. Don't touch it
if 'preserve_channels' is set.
2023-02-26 15:14:13 +01:00
Matthias Schiffer
193fe036b0
Merge pull request #2799 from AiyionPrime/workaround-unicast-ct
Revert "ipq40xx: switch Wave2 firmware to -ct (#2541)"
2023-02-26 13:38:55 +01:00
Jan-Niklas Burfeind
22c47df242 Revert "ipq40xx: switch Wave2 firmware to -ct (#2541)"
This is a temporary measure that fixes #2692.

This reverts commit 15ef885836.
2023-02-26 00:54:32 +01:00
Jan-Niklas Burfeind
f71e31a211
Merge pull request #2792 from freifunk-gluon/master-ath79-bugfix
gluon-core:  sleep to wait for device initialisations
2023-02-26 00:10:45 +01:00
Andreas Ziegler
d97673f715
gluon-core: sleep a few seconds during upgrade
wait for device initialisations
workaround for a timing issue during first boot on ath79-generic
after sysupgrade from ar71xx-generic image

GitHub Issue: #2779
2023-02-26 00:04:50 +01:00
Linus Lüssing
0cdaeaa0c9 ath79-generic: add LibreRouter v1
add comments about lacking radios
Co-authored-by: Jan-Niklas Burfeind <git@aiyionpri.me>
Co-authored-by: Matthias Schiffer <mschiffer@universe-factory.net>
2023-02-25 23:58:37 +01:00
Tom Herbers
b28f58dbd4
ath79-nand: add support for GL.iNet GL-XE300
The activated setup mode is indicated by the WLAN LED.

Co-authored-by: David Bauer <mail@david-bauer.net>
2023-02-25 11:44:07 +01:00
Matthias Schiffer
be672eda35
Merge pull request #2791 from FreifunkVogtland/war-ath79-hang
ath79-generic: Work around boot hang on Unifi AC-Mesh
2023-02-22 23:02:01 +01:00
Sven Eckelmann
536c771f3f ath79-generic: Work around boot hang on Unifi AC-Mesh
It looks like boot hangs on an AC-Mesh for unknown reasons. The last
message seen on the console is:

    [    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)

But interestingly, it seems like enabling AIO somehow works around this
problem. Changing any off the following options seem to have the same
effect at the moment for Linux 5.10.160+5.10.161

    # CONFIG_KERNEL_AIO is not set
    # CONFIG_KERNEL_CGROUPS is not set
    # CONFIG_KERNEL_FANOTIFY is not set
    # CONFIG_KERNEL_FHANDLE is not set
    # CONFIG_KERNEL_IO_URING is not set
    # CONFIG_KERNEL_IPV6_MROUTE is not set
    # CONFIG_KERNEL_IPV6_SEG6_LWTUNNEL is not set
    # CONFIG_KERNEL_IP_MROUTE is not set
    CONFIG_KERNEL_PROC_STRIPPED=y

Just enable CONFIG_AIO until the actual problem was fixed.

Link: https://github.com/freifunk-gluon/gluon/issues/2784
2023-02-21 00:05:08 +01:00
Jan-Niklas Burfeind
670da836c7
Merge pull request #2535 from ffgraz/olsr2
OLSRDv2 Support: Initial Meshing
2023-02-16 11:59:13 +01:00
Maciej Krüger
37b88cf790
gluon-mesh-olsrd: remove unused files 2023-02-15 21:40:31 +01:00
Jan-Niklas Burfeind
b9ffb7dcca
Merge pull request #2787 from herbetom/master-updates
modules: update to latest HEAD
2023-02-15 09:27:47 +01:00
Tom Herbers
3354c37f47
modules: update routing
83bc4fc babeld: remove AUTORELEASE
59bc28b babeld: update to 1.12.2
2023-02-14 20:05:14 +01:00
Tom Herbers
6398670b57
modules: update packages
669357351 v2ray-geodata: Update to latest version
04af31728 v2ray-core: Update to 5.3.0
6c13c9363 xray-core: Update to 1.7.5
bfe92ef86 cloudflared: Update to 2023.2.1
ce1d359a7 cloudflared: Update to 2023.1.0
5b8e61edb php8: update to 8.1.15
65b1563d0 xfrpc: update to version 2.1.606
30b0a36c7 xfrpc: Update to 1.11.587
3f023d5af xfrpc: allow server_addr ip and domain
028345fa9 xfrpc: Update to 1.07.582
9167756cb xfrpc: update to 1.06.579
ff4c824e2 xfrpc: set xfrpc's disabled default value to 0
74ed1a15a xfrpc: fix bug of xfrpc.init
8b80ad3b9 xfrpc: update to 1.05.561
b266107c3 xfrpc: Update to 1.05.548
ef5cacd4e xfrpc: fast reverve proxy client in c language
97c38b456 simple-adblock: update to 1.9.3-7
a13b1a64d ci: update github actions to v3
7abfee2e8 ci: Use openwrt/gh-action-sdk@v5
02e95fdef autossh: return from instance function, not exit the script
76ba43711 autossh: Add dropbear proxy (-J) support
09ae01170 mv88e6xxx_dump: add new packages to debug switch issues
1497ef515 bind: update to 9.18.11
2023-02-14 20:05:14 +01:00
Tom Herbers
b8c68307c5
modules: update openwrt
f7541aecdc bpf: ignore missing LLVM bins on package for non compile steps
98b8507e83 bpf: check llvm version only when used
7370479224 at91: sam9x,sama5: fix racy SD card image generation
52564e65d5 at91: sama7: fix racy SD card image generation
863288b49d mac80211: Update to version 5.15.92-1
71cbc95111 kernel: bump 5.10 to 5.10.166
3fd3d99e3a ramips: mt7621-dts: fix phy-mode of external phy on GB-PC2
212c3ffdfc octeontx: add sqaushfs and ramdisk to features
2601873cc5 ath79: add LTE packages for GL-XE300
2702ef9427 ath79: add label-mac-device for GL-XE300
0657576ce1 ath79: add LTE led for GL.iNet GL-XE300
428d720c7f kernel: backport some mv88e6xxx devlink patches
83a13b74f5 kernel: bump 5.10 to 5.10.165
10c79414db kernel: bump 5.10 to 5.10.164
15b9c02d6c kernel: bump 5.10 to 5.10.163
a8025bc2c2 kernel: bump 5.10 to 5.10.162
2023-02-14 20:05:11 +01:00
David Bauer
1780bafafc
Merge pull request #2772 from ffgraz/warn2
gluon-web-model: fix issue with warning blocking save on private-wifi
2023-02-03 03:07:33 +01:00
Jan-Niklas Burfeind
57a0e44458
Merge pull request #2777 from freifunk-gluon/dependabot/github_actions/korthout/backport-action-1.1.0
build(deps): bump korthout/backport-action from 1.0.1 to 1.1.0
2023-02-01 22:21:02 +01:00
dependabot[bot]
2a1873b3c3
build(deps): bump korthout/backport-action from 1.0.1 to 1.1.0
Bumps [korthout/backport-action](https://github.com/korthout/backport-action) from 1.0.1 to 1.1.0.
- [Release notes](https://github.com/korthout/backport-action/releases)
- [Commits](https://github.com/korthout/backport-action/compare/v1.0.1...v1.1.0)

---
updated-dependencies:
- dependency-name: korthout/backport-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-01 00:01:21 +00:00
Jan-Niklas Burfeind
ee36d5a611
editorconfig: exclude docs/_built (#2776)
while not present unless built, they are never meant to be checked
2023-02-01 00:57:04 +01:00
aiyion.prime
a18510c09a ath79-nand: (re)add hiveap-121
Direct migration from 19.07 is currently not possible.

Gone due to
commit 45c84a117b ("ar71xx: drop target")
2023-01-31 10:23:30 +01:00
Jan-Niklas Burfeind
9ac048dbdf
docs,LICENSE: Drop copyright years (#2774) 2023-01-30 21:37:44 +01:00
David Bauer
953a227ab0
Merge pull request #2775 from blocktrron/master-v2022.1.2-bp
docs: add Gluon 2022.1.2 release notes
2023-01-30 17:22:31 +01:00
Jan-Niklas Burfeind
826e6541bc docs: remove trailing spaces
in Gluon 2022.1.2 release notes
2023-01-30 10:31:27 +01:00
David Bauer
83809093e0 docs: add Gluon 2022.1.2 release notes
(cherry picked from commit f000a605cd)
2023-01-29 23:33:26 +01:00
David Bauer
0a2eac6e5d
Merge pull request #2771 from blocktrron/upstream-master-updates
modules: update to latest HEAD
2023-01-28 22:59:58 +01:00
Maciej Krüger
ad8cfe02c2
gluon-web-model: fix Warning field not being hidden
"not self.title" doesn't work because of "self.title = title or """
2023-01-28 20:46:41 +01:00
Maciej Krüger
1f451d4021
gluon-web-model: fix issue with warning blocking save on private-wifi
The other bugfix which made this element inherit from AbstractValue
caused AbstractValue:validate() to be inherited aswell

Now added an if so validate only runs if a datatype is set
(since Element is meant as a generic way to extend web-model without
modifying web-model - also to add custom inputs - just hiding it behind an if sounds like a sane solution)
2023-01-28 20:42:52 +01:00
David Bauer
4fb43ab020 modules: update routing
74948d5 opennds: Release v9.10.0
2023-01-28 15:13:11 +01:00
David Bauer
154a245fc2 modules: update packages
4cb3303d5 nextdns: Update to version 1.39.4
7a756db00 python3: bump to version 3.10.9
bcd299d0c bash: update to version 5.2.15
080466064 pbr: bugfix: fix is_domain()
994dbb785 php8: update to 8.1.14
2023-01-28 15:13:09 +01:00
David Bauer
3597a8ba98 modules: update openwrt
ddeeb35007 mac80211: use 802.11ax iw modes
1f32774ded kernel: mtk-bmt: fix usage of _oob_read
2023-01-28 15:13:00 +01:00
David Bauer
03fe3d4a1d
Merge pull request #2595 from maurerle/feature/o2box6431
targets/lantiq-xrx200: add device Arcadyan VGV7510KW22 aka o2 Box 6431
2023-01-25 17:51:18 +01:00
Florian Maurer
f5a41dd3bc
lantiq-xrx200: add Arcadyan VGV7510KW22 (o2 Box 6431)
update lan, wan separation for o2 6431
2023-01-25 13:32:04 +01:00
Jan-Niklas Burfeind
11b2636ded
Merge pull request #2767 from herbetom/i18n_gluon-web-cellular_de
gluon-web-cellular: add German translation
2023-01-24 19:20:00 +01:00
Tom Herbers
7b25412541 gluon-web-cellular: add German translation
Co-authored-by: Jan-Niklas Burfeind <github@aiyionpri.me>
2023-01-24 16:07:25 +01:00
David Bauer
1df9fbeb54
Merge pull request #2766 from AiyionPrime/master-updates
Master updates
2023-01-23 23:28:26 +01:00
Jan-Niklas Burfeind
703313e2e0 modules: update packages
47fb67e5e v2ray-core: Update to 5.2.1
dc39bbef1 atlas-sw-probe: add more binaries
73cbdbc82 python-docutils: bump to version 0.19
328e64835 frp: update to 0.46.1
02b33536b frp: update to 0.46.0
5ba2c1314 nano: update to 7.2
05844d909 git: update to 2.34.6
2023-01-22 13:32:15 +01:00
Jan-Niklas Burfeind
d65cbdf32a modules: update openwrt
28e1770a3b tools/mkimage: build uboot with NO_SDL=1
1bead4c521 lantiq: xrx200: Fix wifi LED on o2 box 6431
2023-01-22 13:32:09 +01:00
Maciej Krüger
5baa8e07f1
gluon-mesh-olsrd: editorconfig/whitespace fixup 2023-01-20 03:01:24 +01:00
Maciej Krüger
ad378ce60f
gluon-mesh-olsrd: add olsr2 support 2023-01-20 03:01:24 +01:00
Maciej Krüger
052e08e771
gluon-mesh-olsrd: example site 2023-01-20 03:01:24 +01:00
David Bauer
760cf8e87f
Merge pull request #2763 from blocktrron/upstream-master-updates
modules: update master
2023-01-19 09:21:41 +01:00
David Bauer
4c544d4b79 modules: update packages
b4198d7ac xray-core: Update to 1.7.2
057cadb08 yq: Update to 4.30.8
1ae5d856c yq: Update to 4.30.7
37d658ce6 boinc-wrapper: add new package
b31bcb053 python-requests: update URL
28d0c75dd netperf: use git tarball
716c76b1d bc: use @DEBIAN
8e02db2d7 python-exceptiongroup: bump to 1.1.0
d8632f16d borgbackup: bump to 1.2.3
215b235c7 snowflake: update to 2.4.2
4e9dcb98f miredo: add miredo.conf conffile
9e9eb8240 pbr: update to 1.0.1-14
3232bd049 simple-adblock: update sed for allowing domains
2023-01-18 23:40:48 +01:00
David Bauer
13da5ece33 modules: update openwrt
9a12afc5e7 mbedtls: move source modification to patch
c1a26341ab Revert "toolchaini/gcc: fix libstdc++ dual abi model"
2023-01-18 23:40:38 +01:00
David Bauer
95b48893ac
Merge pull request #2760 from blocktrron/upstream-master-updates
modules: update to latest HEAD
2023-01-17 11:04:10 +01:00
David Bauer
e0256f40bd modules: update packages
2417b74fc atlas-sw-probe: update to version 5080
18fa44a14 golang: Update to 1.19.5
e81ff3fcc atlas-probe: update to 2.6.3
360bce6f3 xz: update to version 5.4.1
68d3d099b docker-compose: Update to version 2.15.1
2feedb1e2 speedtestpp: drop libxml2 dependency
df3799fe0 yt-dlp: update to 2023.1.6
69a8305f7 ocserv: disable libmaxminddb detection
5234dc93b knot: disable libmaxminddb detection
709172c95 python-pytz: bump to version 2022.7
0d346fe7f bind: disable geoip
e4a7f86bf docker-compose: Update to version 2.15.0
f709ba1ee stubby: Restart on interface trigger
4ff16a7bf stubby: Update to 0.4.3
8038868ba getdns: Update to 1.7.3
2023-01-17 00:00:53 +01:00
David Bauer
8e5c4b1edf modules: update openwrt
807483d336 dosfstools: switch to AC_CHECK_LIB
3bc6d2af76 tools/dosfstools: fix PKG_SOURCE
c0b4303d2e toolchaini/gcc: fix libstdc++ dual abi model
aa5023b9cd scripts/dl_github_archieve.py: fix generating unreproducible tar
e88e0ace7a ksmbd: Fix ZDI-CAN-18259
aca915e847 ksmbd: update to 3.4.6
2023-01-17 00:00:43 +01:00
David Bauer
355f9f7bae
Merge pull request #2759 from mweinelt/dnsmasq-dnssec-caching
Restore local DNS caching
2023-01-16 19:51:44 +01:00
David Bauer
474b26ae5b docs: remove redundant explanation 2023-01-16 19:49:33 +01:00
Martin Weinelt
d65ce73762
Revert "gluon-core: remove DNS cache feature"
This reverts commit 543eb17882.

Restores the dns caching configuration that should be feasible, since we
now require around 8 MB of flash.
2023-01-15 22:50:14 +01:00
Martin Weinelt
86502c46ba
Migrate to dnsmasq-full to restore query caching
We migrate to dnsmasq-full, while disabling most of its features.
Notably, dhcp and dnssec are compiled in, while other features of the
full variant are deselected.
2023-01-15 22:50:00 +01:00
Jan-Niklas Burfeind
acfd3f1744
Merge pull request #2758 from AiyionPrime/editorconfig-checker-270
workflows/docker: bump editorconfig-checker from 2.6.0 to 2.7.0
2023-01-15 20:01:44 +01:00
Jan-Niklas Burfeind
f1bff05c7b workflows/docker: bump editorconfig-checker from 2.6.0 to 2.7.0
- [Release notes](https://github.com/editorconfig-checker/editorconfig-checker/releases)
- [Commits](https://github.com/editorconfig-checker/editorconfig-checker/compare/2.6.0...2.7.0)

Signed-off-by: Jan-Niklas Burfeind <git@aiyionpri.me>
2023-01-15 17:17:20 +01:00
Andreas Ziegler
b2397ebf30
Merge pull request #2116 from freifunk-gluon/lint-editorconfig
actions: add editorconfig checker
2023-01-15 17:01:27 +01:00
Jan-Niklas Burfeind
17f94663a2 targets: fix indentation 2023-01-15 16:46:32 +01:00
Jan-Niklas Burfeind
edc1260743 editorconfig: add siteconf 2023-01-15 16:46:32 +01:00
Jan-Niklas Burfeind
f2d137b17a editorconfig: add exceptions for Makefiles
- [*.mk]
- [Makefile]

OpenWrt and Gluon use spaces for a better overview,
tabs are used for `make` to mark recipes as such.
2023-01-15 16:46:32 +01:00
Martin Weinelt
48b70a9ea5 contrib: Dockerfile: add editorconfig-checker
Co-authored-by: Jan-Niklas Burfeind <git@aiyionpri.me>
version bump to 2.6.0
aligned indentation
2023-01-15 16:46:25 +01:00
Martin Weinelt
c93eb80bbe actions: add editorconfig checker
Adds `lint-editorconfig` make target.

Co-authored-by: Jan-Niklas Burfeind <git@aiyionpri.me>
version bump to 2.6.0
2023-01-15 16:44:17 +01:00
Jan-Niklas Burfeind
0e5a5d31f5
Merge pull request #2751 from AiyionPrime/c-indentation
C indentation
2023-01-15 15:53:27 +01:00
Jan-Niklas Burfeind
ab89bacb55 libbatadv: fix c indentation 2023-01-12 21:46:55 +01:00
Jan-Niklas Burfeind
896dae59f6 gluon-web: fix c indentation 2023-01-12 21:46:55 +01:00
Jan-Niklas Burfeind
9c023fba57 gluon-status-page: fix c indentation 2023-01-12 21:46:55 +01:00
Jan-Niklas Burfeind
10613b9e52 gluon-status-page-mesh-batman-adv: fix c indentation 2023-01-12 21:46:55 +01:00
Jan-Niklas Burfeind
051c74b987 gluon-respondd: fix c indentation 2023-01-12 21:46:55 +01:00
Jan-Niklas Burfeind
e797ad4c2f gluon-radvd-filterd: fix c indentation 2023-01-12 21:46:55 +01:00
Jan-Niklas Burfeind
36f407877b gluon-neighbour-info: fix c indentation 2023-01-12 21:46:55 +01:00
Jan-Niklas Burfeind
ac7de8414e gluon-mesh-vpn-wireguard: fix c indentation 2023-01-12 21:46:55 +01:00
Jan-Niklas Burfeind
27d52b5ee5 gluon-mesh-vpn-fastd: fix c indentation 2023-01-12 21:46:55 +01:00
Jan-Niklas Burfeind
44c12e87ec gluon-mesh-batman-adv: fix c indentation 2023-01-12 21:46:55 +01:00
Jan-Niklas Burfeind
e43d4290a1 gluon-core: fix c indentation 2023-01-12 21:46:54 +01:00
Jan-Niklas Burfeind
6ff3217903 gluon-ebtables-limit-arp: fix c indentation 2023-01-12 21:46:52 +01:00
Jan-Niklas Burfeind
d7f869ad6d gluon-autoupdater: fix c indentation 2023-01-12 21:44:31 +01:00
126 changed files with 3268 additions and 1307 deletions

3
.ecrc Normal file
View File

@ -0,0 +1,3 @@
{
"Exclude": ["docs/_build"]
}

View File

@ -35,6 +35,9 @@ indent_size = 2
[*.lua]
[{Makefile,*.mk}]
indent_style = unset
[*.md]
indent_style = space
indent_size = 4
@ -58,3 +61,7 @@ indent_size = 2
[CMakeLists.txt]
indent_style = space
indent_size = 2
[{docs,contrib/ci}/*site*/**/*.conf]
indent_style = space
indent_size = 2

View File

@ -1,4 +1,4 @@
# Docs: <https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/customizing-dependency-updates>
# Docs: <https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/customizing-dependency-updates>
version: 2

View File

@ -13,7 +13,7 @@ jobs:
steps:
- uses: actions/checkout@v3
- name: Create backport PRs
uses: korthout/backport-action@v1.0.1
uses: korthout/backport-action@v1.2.0
with:
# Config README: https://github.com/korthout/backport-action#backport-action
pull_description: |-

View File

@ -34,7 +34,7 @@ jobs:
strategy:
fail-fast: false
matrix:
# Read back changd targets to create build matrix
# Read back changed targets to create build matrix
target: ${{ fromJSON(needs.changed.outputs.targets) }}
runs-on: ubuntu-latest
steps:

View File

@ -30,3 +30,25 @@ jobs:
run: ln -s ./docs/site-example ./site
- name: Lint shell code
run: make lint-sh
editorconfig:
name: Editorconfig
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Dependencies
run: sudo apt install curl tar
- name: Install editorconfig-checker
env:
VERSION: 2.7.0
OS: linux
ARCH: amd64
run: |
curl -O -L -C - https://github.com/editorconfig-checker/editorconfig-checker/releases/download/$VERSION/ec-$OS-$ARCH.tar.gz
tar xzf ec-$OS-$ARCH.tar.gz
sudo mv ./bin/ec-$OS-$ARCH /usr/bin/editorconfig-checker
sudo chmod +x /usr/bin/editorconfig-checker
- name: Install example site
run: ln -s ./docs/site-example ./site
- name: Lint editorconfig
run: make lint-editorconfig

View File

@ -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",
@ -50,6 +51,7 @@ files["package/**/check_site.lua"] = {
files["package/**/luasrc/lib/gluon/config-mode/*"] = {
globals = {
"MultiListValue",
"DynamicList",
"Flag",
"Form",

View File

@ -11,6 +11,10 @@ sphinx:
# Optionally set the version of Python and requirements required to build your docs
python:
version: 3.8
install:
- requirements: docs/requirements.txt
build:
os: ubuntu-22.04
tools:
python: "3.8"

30
.woodpecker.yml Normal file
View File

@ -0,0 +1,30 @@
workspace:
base: /build
#clone:
# git:
# image: woodpeckerci/plugin-git
# settings:
# recursive: true
pipeline:
build-${TARGET}:
image: "ubuntu:latest"
pull: true
environment:
- input_version=v2022.1.4
- GLUON_SITEDIR=../site
- FORCE_UNSAFE_CONFIGURE=1
- GLUON_TARGET=${TARGET}
- GLUON_DEPRECATED=1
commands:
- echo ${TARGET}
# - git config --global init.defaultBranch main
# - sed -i 's/install/install file/' contrib/actions/install-dependencies.sh
# - sh contrib/actions/install-dependencies.sh
# - sh contrib/actions/run-build.sh ${TARGET}
matrix:
TARGET:
- ath79-generic
- x86-64

View File

@ -23,8 +23,8 @@ using other parts or why the proposed change breaks other parts of the system.
They might even refuse the idea altogether - after all, they have to sleep well
after merging the changes, too.
The preferred way to discuss in the IRC channel ([#gluon] on irc.hackint.org)
or on the [mailing list], however, you can also open a new issue on Github to
The preferred way to discuss is in the IRC channel ([#gluon] on irc.hackint.org)
or on the [mailing list], however, you can also open a new issue on GitHub to
discuss there. We maintain a [list of rejected features] and we'd like to
kindly ask you to review it first. In general, looking for duplicates may save
you some time.

View File

@ -1,7 +1,7 @@
The code of Project Gluon may be distributed under the following terms, unless
noted otherwise in individual files or subtrees.
Copyright (c) 2013-2022, Project Gluon
Copyright (c) Project Gluon
All rights reserved.
Redistribution and use in source and binary forms, with or without

View File

@ -151,7 +151,10 @@ list-targets: FORCE
echo "$$target"
done
lint: lint-lua lint-sh
lint: lint-editorconfig lint-lua lint-sh
lint-editorconfig: FORCE
@scripts/lint-editorconfig.sh
lint-lua: FORCE
@scripts/lint-lua.sh

View File

@ -1,5 +1,5 @@
[![Build Gluon](https://github.com/freifunk-gluon/gluon/actions/workflows/build-gluon.yml/badge.svg?branch=master)](https://github.com/freifunk-gluon/gluon/actions/workflows/build-gluon.yml)
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/licenses/BSD-2-Clause)
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/license/bsd-2-clause/)
[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/freifunk-gluon/gluon?sort=semver)](https://github.com/freifunk-gluon/gluon/releases/latest)
# Gluon

View File

@ -3,6 +3,6 @@
set -e
apt-get -y update
apt-get -y install git subversion build-essential python3 gawk unzip libncurses5-dev zlib1g-dev libssl-dev wget time qemu-utils
apt-get -y install git build-essential python3 gawk unzip libncurses5-dev zlib1g-dev libssl-dev libelf-dev wget rsync time qemu-utils
apt-get -y clean
rm -rf /var/lib/apt/lists/*

1
contrib/ci/olsr-site/i18n Symbolic link
View File

@ -0,0 +1 @@
../minimal-site/i18n

View File

@ -0,0 +1 @@
../minimal-site/modules

View File

@ -0,0 +1,176 @@
-- This is an example site configuration for Gluon v2022.1
--
-- Take a look at the documentation located at
-- https://gluon.readthedocs.io/ for details.
--
-- This configuration will not work as is. You're required to make
-- community specific changes to it!
{
-- Used for generated hostnames, e.g. freifunk-abcdef123456. (optional)
-- hostname_prefix = 'freifunk-',
-- Name of the community.
site_name = 'Continuous Integration',
-- Shorthand of the community.
site_code = 'ci',
-- 32 bytes of random data, encoded in hexadecimal
-- This data must be unique among all sites and domains!
-- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom)
domain_seed = 'e9608c4ff338b920992d629190e9ff11049de1dfc3f299eac07792dfbcda341c',
-- Prefixes used by clients within the mesh.
-- prefix6 is required, prefix4 can be omitted if next_node.ip4
-- is not set.
prefix6 = 'fdff:cafe:cafe:cafe::/64',
-- Prefixes used by nodes within the mesh
node_prefix6 = 'fdff:cafe:cafe:cafe::/64',
-- Timezone of your community.
-- See https://openwrt.org/docs/guide-user/base-system/system_configuration#time_zones
timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
-- List of NTP servers in your community.
-- Must be reachable using IPv6!
-- ntp_servers = {'1.ntp.services.ffxx'},
-- Wireless regulatory domain of your community.
regdom = 'DE',
-- Wireless configuration for 2.4 GHz interfaces.
wifi24 = {
-- Wireless channel.
channel = 1,
-- ESSIDs used for client network.
ap = {
ssid = 'gluon-ci-ssid',
-- disabled = true, -- (optional)
-- Configuration for a backward compatible OWE network below.
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
},
mesh = {
-- Adjust these values!
id = 'ueH3uXjdp', -- usually you don't want users to connect to this mesh-SSID, so use a cryptic id that no one will accidentally mistake for the client WiFi
mcast_rate = 12000,
-- disabled = true, -- (optional)
},
},
-- Wireless configuration for 5 GHz interfaces.
-- This should be equal to the 2.4 GHz variant, except
-- for channel.
wifi5 = {
channel = 44,
outdoor_chanlist = '100-140',
ap = {
ssid = 'gluon-ci-ssid',
-- disabled = true, -- (optional)
-- Configuration for a backward compatible OWE network below.
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
},
mesh = {
-- Adjust these values!
id = 'ueH3uXjdp',
mcast_rate = 12000,
},
},
-- The next node feature allows clients to always reach the node it is
-- connected to using a known IP address.
next_node = {
-- anycast IPs of all nodes
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
ip4 = '10.0.0.1',
ip6 = 'fd::1',
},
-- Options specific to routing protocols (optional)
mesh = {
vxlan = true,
olsrd = {},
},
mesh_vpn = {
-- enabled = true,
fastd = {
-- Refer to https://fastd.readthedocs.io/en/latest/ to better understand
-- what these options do.
-- List of crypto-methods to use.
methods = {'salsa2012+umac'},
mtu = 1312,
-- configurable = true,
-- syslog_level = 'warn',
groups = {
backbone = {
-- Limit number of connected peers to reduce bandwidth.
limit = 1,
-- List of peers.
peers = {
},
-- Optional: nested peer groups
-- groups = {
-- backbone_sub = {
-- ...
-- },
-- ...
-- },
},
-- Optional: additional peer groups, possibly with other limits
-- backbone2 = {
-- ...
-- },
},
},
bandwidth_limit = {
-- The bandwidth limit can be enabled by default here.
enabled = false,
-- Default upload limit (kbit/s).
egress = 200,
-- Default download limit (kbit/s).
ingress = 3000,
},
},
autoupdater = {
-- Default branch (optional), can be overridden by setting GLUON_AUTOUPDATER_BRANCH when building.
-- Set GLUON_AUTOUPDATER_ENABLED to enable the autoupdater by default for newly installed nodes.
branch = 'stable',
-- List of branches. You may define multiple branches.
branches = {
stable = {
name = 'stable',
-- List of mirrors to fetch images from. IPv6 required!
mirrors = {'http://1.updates.services.ffhl/stable/sysupgrade'},
-- Number of good signatures required.
-- Have multiple maintainers sign your build and only
-- accept it when a sufficient number of them have
-- signed it.
good_signatures = 0,
-- List of public keys of maintainers.
pubkeys = {
},
},
},
},
}

View File

@ -0,0 +1,57 @@
## gluon site.mk makefile example
## GLUON_FEATURES
# Specify Gluon features/packages to enable;
# Gluon will automatically enable a set of packages
# depending on the combination of features listed
GLUON_FEATURES := \
autoupdater \
ebtables-filter-multicast \
ebtables-filter-ra-dhcp \
ebtables-limit-arp \
mesh-olsrd \
mesh-vpn-fastd \
respondd \
status-page \
web-advanced \
web-wizard
GLUON_FEATURES_standard := \
wireless-encryption-wpa3
## 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
GLUON_SITE_PACKAGES := iwinfo
## DEFAULT_GLUON_RELEASE
# version string to use for images
# gluon relies on
# opkg compare-versions "$1" '>>' "$2"
# to decide if a version is newer or not.
DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d')
# Variables set with ?= can be overwritten from the command line
## GLUON_RELEASE
# call make with custom GLUON_RELEASE flag, to use your own release version scheme.
# e.g.:
# $ make images GLUON_RELEASE=23.42+5
# would generate images named like this:
# gluon-ff%site_code%-23.42+5-%router_model%.bin
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
# Default priority for updates.
GLUON_PRIORITY ?= 0
# Region code required for some images; supported values: us eu
GLUON_REGION ?= eu
# Languages to include
GLUON_LANGS ?= en de

View File

@ -5,7 +5,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
file \
git \
subversion \
python3 \
build-essential \
gawk \
@ -24,6 +23,12 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir /tmp/ec &&\
wget -O /tmp/ec/ec-linux-amd64.tar.gz https://github.com/editorconfig-checker/editorconfig-checker/releases/download/2.7.0/ec-linux-amd64.tar.gz &&\
tar -xvzf /tmp/ec/ec-linux-amd64.tar.gz &&\
mv bin/ec-linux-amd64 /usr/local/bin/editorconfig-checker &&\
rm -rf /tmp/ec
RUN useradd -d /gluon gluon
USER gluon

View File

@ -20,7 +20,7 @@
# -- Project information -----------------------------------------------------
project = 'Gluon'
copyright = '2015-2022, Project Gluon'
copyright = 'Project Gluon'
author = 'Project Gluon'
# The short X.Y version
@ -71,6 +71,13 @@ pygments_style = None
# Don't highlight code blocks unless requested explicitly
highlight_language = 'none'
# Ignore links to the config mode, as well as anchors on on hackint, which are
# used to mark channel names and do not exist. Regular links are not effected.
linkcheck_ignore = [
'http://192.168.1.1',
'https://webirc.hackint.org/#'
]
# -- Options for HTML output -------------------------------------------------

View File

@ -57,7 +57,7 @@ commits, making `git reflog` the only way to recover them!
make refresh-patches
In order to refresh patches when updating feeds or the OpenWrt base, `make refresh-patches` applies and updates all of their patches without installing feed packages to the OpenWrt buildsystem.
In order to refresh patches when updating feeds or the OpenWrt base, `make refresh-patches` applies and updates all of their patches without installing feed packages to the OpenWrt build system.
This command speeds up the maintenance of updating OpenWrt and feeds.
@ -77,7 +77,7 @@ apply:
- use tabs instead of spaces
- trailing whitespaces must be eliminated
- files need to end with a final newline
- newlines need to have unix line endings (lf)
- newlines need to have Unix line endings (lf)
To that end we provide a ``.editorconfig`` configuration, which is supported by most
of the editors out there.

View File

@ -45,7 +45,7 @@ Some more information on how to use this tool can be found at
Obtaining Stacktraces
.....................
On many targets stacktraces can be read from the following
On many targets stack traces can be read from the following
location after reboot: ::
/sys/kernel/debug/crashlog

View File

@ -0,0 +1,51 @@
DNS caching
===========
User experience may be greatly improved when dns is accelerated. Also, it
seems like a good idea to keep the number of packages being exchanged
between node and gateway as small as possible. In order to do this, a
DNS cache may be used on a node. The dnsmasq instance listening on port
53 on the node will be reconfigured to answer requests, use a list of
upstream servers and a specific cache size if the options listed below are
added to site.conf. Upstream servers are the DNS servers which are normally
used by the nodes to resolve hostnames (e.g. gateways/supernodes).
There are the following settings:
servers
cacheentries
To use the node's DNS server, both options should be set. The node will cache at
most 'cacheentries' many DNS records in RAM. The 'servers' list will be used to
resolve the received DNS queries if the request cannot be answered from
cache. Gateways should announce the "next node" address via DHCP and RDNSS (if
any). Note that not setting 'servers' here will lead to DNS not working: Once
the gateways all announce the "next node" address for DNS, there is no way for
nodes to automatically determine DNS servers. They have to be baked into the
firmware.
If these settings do not exist, the cache is not initialized and RAM usage will
not increase.
When next_node.name is set, an A record and an AAAA record for the
next-node IP address are placed in the dnsmasq configuration. This means that
the content of next_node.name may be resolved even without upstream connectivity.
It is suggested to use the same name as the DNS server provides:
e.g. nextnode.location.community.example.org (This way the name also works if a
client uses static DNS Servers). Hint: If next_node.name does not contain a dot
some browsers would open the searchpage instead.
::
dns = {
cacheentries = 5000,
servers = { '2001:db8::1', },
},
next_node = {
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
ip6 = '2001:db8:8::1',
ip4 = '198.51.100.1',
}
Each cache entry will occupy about 90 bytes of RAM.

View File

@ -1,26 +0,0 @@
DNS forwarder
=============
A Gluon node can be configured to act as a DNS forwarder. Requests for the
next-node hostname(s) can be answered locally, without querying the upstream
resolver.
**Note:** While this reduces answer time and allows to use the next-node
hostname without upstream connectivity, this feature should not be used for
next-node hostnames that are FQDN when the zone uses DNSSEC.
One or more upstream resolvers can be configured in the *dns.servers* setting.
When *next_node.name* is set, A and/or AAAA records for the next-node IP
addresses are placed in the dnsmasq configuration.
::
dns = {
servers = { '2001:db8::1', },
},
next_node = {
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
ip6 = '2001:db8:8::1',
ip4 = '198.51.100.1',
}

View File

@ -47,7 +47,7 @@ installed. Please note that at least one alfred daemon is required to run as
.. _alfred-json: https://github.com/ffnord/alfred-json
The following datatypes are used:
The following data types are used:
* `nodeinfo`: 158
* `statistics`: 159

View File

@ -77,7 +77,7 @@ should always appear before ``null`` in the configuration when both are enabled.
fastd v22 or newer is needed for the ``null@l2tp`` method.
It is often not necessary to enable L2TP offloading on supernodes for
performance reasons. Nodes using offloading can communicate with supornodes that
performance reasons. Nodes using offloading can communicate with supernodes that
don't use offloading as long as both use the ``null@l2tp`` method.
@ -107,7 +107,7 @@ However, the important changes to the fastd config on your Supernode are:
Note that in ``multitap`` mode, which is required when using L2TP offloading,
fastd will create one interface per peer on the supernode's. This allows
offloading the L2TP forwarding into the kernel space. But this also means added
copmlexity with regards to handling those interfaces.
complexity with regards to handling those interfaces.
There are two main options on how you can handle this:
@ -191,6 +191,16 @@ negative effects. Only when a previously connected node reboots the effect
comes into play, as the gateway still knows about the old timestamp of the gluon
node.
gluon-mesh-vpn-key-translate
""""""""""""""""""""""""""""
Many communities already possess a collection of active fastd-keys when they
plan migrating their community to WireGuard.
These public keys known on the server-side can be derived into their WireGuard
equivalent using `gluon-mesh-vpn-key-translate <https://github.com/AiyionPrime/gluon-mesh-vpn-key-translate>`__.
The routers do the necessary reencoding of the private key seamlessly
when updating firmware from fastd to the WireGuard variant.
Gateway / Supernode Configuration
"""""""""""""""""""""""""""""""""

View File

@ -25,7 +25,7 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre
features/wlan-configuration
features/private-wlan
features/wired-mesh
features/dns-forwarder
features/dns-cache
features/monitoring
features/multidomain
features/authorized-keys

View File

@ -5,6 +5,9 @@ Release Notes
:caption: Gluon 2022.1
:maxdepth: 2
v2022.1.4
v2022.1.3
v2022.1.2
v2022.1.1
v2022.1

View File

@ -88,6 +88,8 @@ New features
* Add support for making nodes a DNS cache for clients
(`#1000 <https://github.com/freifunk-gluon/gluon/pull/1000>`_)
See also: :doc:`../features/dns-cache`
* Add L2TP via tunneldigger as an alternative VPN system
(`#978 <https://github.com/freifunk-gluon/gluon/pull/978>`_)

View File

@ -28,7 +28,7 @@ Bugfixes
As the path to both config mode and status page were changed between versions
users could be affected by a redirect to a no more valid URL.
* batman-adv has received two bugfixes, which were `backported <https://github.com/openwrt-routing/packages/commit/7bf62cc8b556b5046f9bbd37687376fe9ea175bb>`_ from v2018.4
* batman-adv has received two bugfixes, which were `backported <https://github.com/openwrt/routing/commit/7bf62cc8b556b5046f9bbd37687376fe9ea175bb>`_ from v2018.4
Other changes
~~~~~~~~~~~~~

View File

@ -127,10 +127,10 @@ Renamed targets
Status Page
~~~~~~~~~~~
- Gateway nexthop information has been added to the statuspage when batman-adv
- Gateway nexthop information has been added to the status page when batman-adv
is used. This includes its MAC address and prettyname as well as the interface
name towards the selected gateway.
- The site name has been added to the statuspage. If the node is in a multidomain
- The site name has been added to the status page. If the node is in a multidomain
setup it will also show the domain name.
DECT button to enter config mode

View File

@ -34,7 +34,7 @@ Bugfixes
- The Tunneldigger VPN provider was not registered with the Gluon VPN backend, resulting in broken Tunneldigger configurations.
- Disabling Radio interfaces in v2021.1 could lead to nullpointer dereferences in the respondd airtime module, as the survey returns no data in this case.
- Disabling Radio interfaces in v2021.1 could lead to null pointer dereferences in the respondd airtime module, as the survey returns no data in this case.
Known issues

View File

@ -0,0 +1,37 @@
Gluon 2022.1.2
==============
Bugfixes
--------
* Various build-errors which sporadically occur when building with a large thread-count have been fixed
* Android devices do not lose their IPv6 connectivity after extended idle-time
* The 802.11s mesh network is now using 802.11ax HE-modes when supported by hardware
Known issues
------------
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the NAND flash which the NAND driver before this release does not handle well.
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
* The integration of the BATMAN_V routing algorithm is incomplete.
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
metric.
- Throughput values are not correctly acquired for different interface types.
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
This affects virtual interface types like bridges and VXLAN.
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
Reducing the TX power in the Advanced Settings is recommended.
* In configurations without VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).

View File

@ -0,0 +1,40 @@
Gluon 2022.1.3
==============
Bugfixes
--------
* Ipq40xx Wave2 devices temporarily use non-ct firmware again to work around 802.11s unicast package loss in ath10k-ct
(`#2692 <https://github.com/freifunk-gluon/gluon/issues/2692>`_)
* Modify kernel builds slightly to work around a boot hang on various devices based on the QCA9563 SoC - especially the Unifi AC-* devices
(`#2784 <https://github.com/freifunk-gluon/gluon/issues/2784>`_)
* Work around an issue with wifi setup timing by waiting a bit while device initialisation is ongoing
(`#2779 <https://github.com/freifunk-gluon/gluon/issues/2779>`_)
Known issues
------------
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the NAND flash which the NAND driver before this release does not handle well.
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
* The integration of the BATMAN_V routing algorithm is incomplete.
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
metric.
- Throughput values are not correctly acquired for different interface types.
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
This affects virtual interface types like bridges and VXLAN.
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
Reducing the TX power in the Advanced Settings is recommended.
* In configurations without VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).

136
docs/releases/v2022.1.4.rst Normal file
View File

@ -0,0 +1,136 @@
Gluon 2022.1.4
==============
Added hardware support
----------------------
ath79-generic
~~~~~~~~~~~~~
- LibreRouter
- LibreRouter (v1)
- Teltonika
- RUT230 (v1)
ath79-nand
~~~~~~~~~~
- Aerohive
- HiveAP 121
- NETGEAR
- WNDR4300 (v1)
lantiq-xrx200
~~~~~~~~~~~~~
- Arcadyan
- o2 Box 6431
ramips-mt7621
~~~~~~~~~~~~~
- Cudy
- X6 (v1, v2)
- D-Link
- DAP-X1860 (A1)
- GL.iNet
- GL-MT1300
- Mercusys
- MR70X (v1)
- Xiaomi
- Mi Router 3G
ramips-mt76x8
~~~~~~~~~~~~~
- TP-Link
- RE200 (v3)
realtek-rtl838x
~~~~~~~~~~~~~~~
- D-Link
- DGS-1210-10P
ipq40xx-generic
~~~~~~~~~~~~~~~
- AVM
- FRITZBox 7520
ipq40xx-mikrotik
~~~~~~~~~~~~~~~~
- Mikrotik
- hAP ac2
Bugfixes
--------
* Enterasys WS-AP3705i now uses the correct image-name for use with the autoupdater
(`#2819 <https://github.com/freifunk-gluon/gluon/issues/2819>`_)
* Reduce memory Usage for ath10k on ZyXEL WRE6606 devices
(`#2842 <https://github.com/freifunk-gluon/gluon/issues/2842>`_)
* Replace the Workaround for failed boots on ath79 with a proper fix.
(`#2784 <https://github.com/freifunk-gluon/gluon/issues/2784#issuecomment-1452126501>`_)
* AVM FRITZ!Box 7360 v2 flashed with the incorrect image for v1 will automatically update to the correct image.
* Revert OOM inducing switch of ath79 Wave2 firmware back to -ct
(`#2879 <https://github.com/freifunk-gluon/gluon/pull/2879>`_)
Known issues
------------
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the NAND flash which the NAND driver before this release does not handle well.
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
* The integration of the BATMAN_V routing algorithm is incomplete.
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
metric.
- Throughput values are not correctly acquired for different interface types.
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
This affects virtual interface types like bridges and VXLAN.
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
Reducing the TX power in the Advanced Settings is recommended.
* In configurations without VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).

View File

@ -1 +1 @@
sphinx-rtd-theme==1.1.1
sphinx-rtd-theme==1.2.0

View File

@ -25,18 +25,20 @@ An example configuration can be found in the Gluon repository at *docs/site-exam
Dependencies
------------
To build Gluon, several packages need to be installed on the system. On a
freshly installed Debian Stretch system the following packages are required:
freshly installed Debian Bullseye system the following packages are required:
* `git` (to get Gluon and other dependencies)
* `subversion`
* `python3`
* `build-essential`
* `ecdsautils` (to sign firmware, see `contrib/sign.sh`)
* `gawk`
* `unzip`
* `libncurses-dev` (actually `libncurses5-dev`)
* `libz-dev` (actually `zlib1g-dev`)
* `libssl-dev`
* `libelf-dev` (to build x86-64)
* `wget`
* `rsync`
* `time` (built-in `time` doesn't work)
* `qemu-utils`

View File

@ -15,7 +15,7 @@ Consider these key values:
- and configure `MSS clamping`_ accordingly,
- and announce your link MTU via Router Advertisements and DHCP
.. _MSS clamping: https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.cookbook.mtu-mss.html
.. _MSS clamping: https://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.cookbook.mtu-mss.html
- Encapsulation: Account for the overhead created by the configured mesh protocol
encapsulating the payload, which is up to 32 Byte (14 Byte Ethernet + 18 Byte

View File

@ -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:

View File

@ -57,6 +57,10 @@ ath79-generic
- JT-OR750i
* LibreRouter
- LibreRouter v1 [#missing_radios]_
* Netgear
- WNDR3700 (v1, v2)
@ -139,10 +143,15 @@ ath79-generic
ath79-nand
----------
* Aerohive
- HiveAP 121
* GL.iNet
- GL-AR300M
- GL-AR750S
- GL-XE300
* Netgear
@ -238,6 +247,10 @@ ipq806x-generic
lantiq-xrx200
-------------
* Arcadyan
- VGV7510KW22 (o2 Box 6431)
* AVM
- FRITZ!Box 7360 (v1, v2) [#avmflash]_ [#lan_as_wan]_
@ -245,6 +258,10 @@ lantiq-xrx200
- FRITZ!Box 7362 SL [#eva_ramboot]_ [#lan_as_wan]_
- FRITZ!Box 7412 [#eva_ramboot]_
* TP-Link
- TD-W8970 (v1) [#lan_as_wan]_
lantiq-xway
-----------
@ -343,12 +360,23 @@ ramips-mt7621
* Cudy
- WR1300 (v1)
- WR2100
- X6 (v1, v2)
* D-Link
- DAP-X1860 (A1)
- DIR-860L (B1)
* GL.iNet
- GL-MT1300
* Mercusys
- MR70X (v1)
* NETGEAR
- EX6150 (v1)
@ -496,6 +524,10 @@ Footnotes
.. [#lan_as_wan]
All LAN ports on this device are used as WAN.
.. [#missing_radios]
This device contains more than two WLAN radios, which is currently
unsupported by Gluon. Only the first two radios will work.
.. [#modular_ethernet]
These devices follow a modular principle,
which means even basic functionality like ethernet is provided by an expansion-board,

View File

@ -15,7 +15,7 @@ The following targets for x86 images exist:
There are three images:
* `generic` (compressed "raw" image, can written to a disk directly or booted with qemu)
* `generic` (compressed "raw" image, can be written to a disk directly or booted with qemu)
* `virtualbox` (VDI image)
* `vmware` (VMDK image)

View File

@ -2,15 +2,15 @@ GLUON_FEEDS='packages routing gluon'
OPENWRT_REPO=https://github.com/openwrt/openwrt.git
OPENWRT_BRANCH=openwrt-22.03
OPENWRT_COMMIT=4b7f9e42e2bff91d8eec2f195d0bb3bb6f6c43e2
OPENWRT_COMMIT=e500494771537b9f42f78e4d907bed18b6383606
PACKAGES_PACKAGES_REPO=https://github.com/openwrt/packages.git
PACKAGES_PACKAGES_BRANCH=openwrt-22.03
PACKAGES_PACKAGES_COMMIT=4b30c97b57aa158cbb70190d0aab8bb472875b6a
PACKAGES_PACKAGES_COMMIT=55eed1761207f4dfdb8e7d79138f6f65c8849b50
PACKAGES_ROUTING_REPO=https://github.com/openwrt/routing.git
PACKAGES_ROUTING_BRANCH=openwrt-22.03
PACKAGES_ROUTING_COMMIT=1a87333f268bcf0a11e3a665a357cb0d4ec2d680
PACKAGES_ROUTING_COMMIT=1cc7676b9f32acc30ec47f15fcb70380d5d6ef01
PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
PACKAGES_GLUON_COMMIT=04d2b6ffbb6ee02012f2733b7752d8db0d12eaff
PACKAGES_GLUON_COMMIT=29912ec6308fd10b47763b4cf28a638d07f59973

View File

@ -37,7 +37,7 @@ static struct json_object * get_autoupdater(void) {
return ret;
error:
error:
uci_free_context(ctx);
return NULL;
}

File diff suppressed because one or more lines are too long

View File

@ -273,6 +273,10 @@ input[type=checkbox] {
text-align: center;
font-size: 1.7em;
}
&[disabled] + label {
background-color: #dcdcdc !important;
}
}
input[type=radio] {
@ -366,6 +370,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;

View File

@ -66,6 +66,7 @@ need_boolean(in_site({'poe_passthrough'}), false)
if need_table({'dns'}, nil, false) then
need_string_array_match({'dns', 'servers'}, '^[%x:]+$')
need_number({'dns', 'cacheentries'}, false)
end
need_string_array(in_domain({'next_node', 'name'}), false)
@ -76,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.')

View File

@ -1,5 +1,10 @@
#!/bin/sh
# Work around an issue with wifi setup timing by waiting a bit
# while device initialisation is ongoing.
# https://github.com/freifunk-gluon/gluon/issues/2779
sleep 3
gluon-reconfigure
exit 0

View File

@ -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,21 @@ 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 only one of the elements %s and %s, but not both.',
path_to_string(path), format(a), format(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,

View File

@ -87,6 +87,9 @@ local primary_addrs = {
{'ipq806x', 'generic', {
'netgear,r7800',
}},
{'lantiq', 'xrx200', {
'arcadyan,vgv7510kw22-nor',
}},
{'lantiq', 'xway', {
'netgear,dgn3500b',
}},

View File

@ -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 = 'lan1 lan2 lan3 lan4', 'wan'
elseif platform.match('realtek', 'rtl838x', {
'd-link,dgs-1210-10p',
}) then

View File

@ -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')

View File

@ -4,6 +4,19 @@ local uci = require('simple-uci').cursor()
local sysconfig = require 'gluon.sysconfig'
local util = require 'gluon.util'
local json = require 'jsonc'
local function get_network_mac(name)
local board_data = json.load('/etc/board.json')
local network_data = (board_data or {}).network
if network_data == nil then
return nil
end
local ifdata = network_data[name] or {}
return ifdata.macaddr
end
local wan = uci:get_all('network_gluon-old', 'wan') or {}
local wan6 = uci:get_all('network_gluon-old', 'wan6') or {}
@ -27,6 +40,7 @@ uci:section('network', 'interface', 'wan', {
ipaddr = wan.ipaddr,
netmask = wan.netmask,
gateway = wan.gateway,
macaddr = get_network_mac('wan'),
ifname = util.get_role_interfaces(uci, 'uplink'),
type = 'bridge',
igmp_snooping = true,

View File

@ -53,16 +53,12 @@ local function is_outdoor()
end
local function get_channel(radio, config)
local channel
if wireless.preserve_channels(uci) then
-- preserved channel always wins
channel = radio.channel
elseif radio.band == '5g' and is_outdoor() then
if radio.band == '5g' and is_outdoor() then
-- actual channel will be picked and probed from chanlist
channel = 'auto'
return 'auto'
end
return channel or config.channel()
return config.channel()
end
local function get_htmode(radio)
@ -179,6 +175,20 @@ local function configure_mesh_wireless(radio, index, config, disabled)
)
end
local function set_channels(radio, radio_name, config)
if wireless.preserve_channels(uci) then
return
end
local channel = get_channel(radio, config)
uci:set('wireless', radio_name, 'channel', channel)
local chanlist
if radio.band == '5g' and is_outdoor() then
chanlist = config.outdoor_chanlist()
end
uci:set('wireless', radio_name, 'channels', chanlist)
end
wireless.foreach_radio(uci, function(radio, index, config)
local radio_name = radio['.name']
@ -194,13 +204,13 @@ wireless.foreach_radio(uci, function(radio, index, config)
return
end
local channel = get_channel(radio, config)
local htmode = get_htmode(radio)
local beacon_interval = config.beacon_interval()
uci:delete('wireless', radio_name, 'disabled')
uci:set('wireless', radio_name, 'channel', channel)
set_channels(radio, radio_name, config)
uci:set('wireless', radio_name, 'htmode', htmode)
uci:set('wireless', radio_name, 'country', site.regdom())
@ -218,13 +228,10 @@ wireless.foreach_radio(uci, function(radio, index, config)
uci:set_list('wireless', radio_name, 'hostapd_options', hostapd_options)
if is_outdoor() then
uci:set('wireless', radio_name, 'channels', config.outdoor_chanlist())
-- enforce outdoor channels by filtering the regdom for outdoor channels
uci:set('wireless', radio_name, 'country3', '0x4f')
configure_mesh_wireless(radio, index, config, true)
else
uci:delete('wireless', radio_name, 'channels')
uci:delete('wireless', radio_name, 'country3')
configure_mesh_wireless(radio, index, config)
end

View File

@ -43,6 +43,10 @@ local function setup_ncm_qmi(devpath, control_type, delay)
end
if platform.match('ath79', 'nand', {
'glinet,gl-xe300',
}) then
setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
elseif platform.match('ath79', 'nand', {
'zte,mf281',
}) then
setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15)

View File

@ -12,7 +12,7 @@ uci:set('dhcp', dnsmasq, 'localise_queries', true)
uci:set('dhcp', dnsmasq, 'localservice', false)
uci:set('dhcp', dnsmasq, 'server', dns.servers)
uci:delete('dhcp', dnsmasq, 'cachesize')
uci:set('dhcp', dnsmasq, 'cachesize', dns.cacheentries)
uci:delete('firewall', 'client_dns')
if dns.servers then

View File

@ -26,6 +26,7 @@ local values = {
.. ' / ' .. util.trim(util.readfile('/lib/gluon/site-version')) },
{ 'Firmware release', util.trim(util.readfile('/lib/gluon/release')) },
{ 'Site', site.site_name() },
{ 'Domain', uci:get('gluon', 'core', 'domain') or 'n/a' },
{ 'Public VPN key', pubkey or 'n/a' },
}

View File

@ -25,6 +25,7 @@ end
function M.is_outdoor_device()
if M.match('ath79', 'generic', {
'devolo,dvl1750x',
'librerouter,librerouter-v1',
'plasmacloud,pa300',
'plasmacloud,pa300e',
'tplink,cpe210-v1',
@ -73,6 +74,7 @@ end
function M.is_cellular_device()
if M.match('ath79', 'nand', {
'zte,mf281',
'glinet,gl-xe300',
}) then
return true
elseif M.match('ipq40xx', 'generic', {

View File

@ -10,104 +10,104 @@
static struct json_object * gluon_site_udata(lua_State *L, int narg) {
return *(struct json_object **)luaL_checkudata(L, narg, UDATA);
return *(struct json_object **)luaL_checkudata(L, narg, UDATA);
}
static void gluon_site_push_none(lua_State *L) {
lua_pushlightuserdata(L, gluon_site_push_none);
lua_rawget(L, LUA_REGISTRYINDEX);
lua_pushlightuserdata(L, gluon_site_push_none);
lua_rawget(L, LUA_REGISTRYINDEX);
}
static void gluon_site_do_wrap(lua_State *L, struct json_object *obj) {
struct json_object **objp = lua_newuserdata(L, sizeof(struct json_object *));
*objp = json_object_get(obj);
luaL_getmetatable(L, UDATA);
lua_setmetatable(L, -2);
struct json_object **objp = lua_newuserdata(L, sizeof(struct json_object *));
*objp = json_object_get(obj);
luaL_getmetatable(L, UDATA);
lua_setmetatable(L, -2);
}
static void gluon_site_wrap(lua_State *L, struct json_object *obj) {
if (obj)
gluon_site_do_wrap(L, obj);
else
gluon_site_push_none(L);
if (obj)
gluon_site_do_wrap(L, obj);
else
gluon_site_push_none(L);
}
static int gluon_site_index(lua_State *L) {
struct json_object *obj = gluon_site_udata(L, 1);
const char *key;
lua_Number lua_index;
size_t index;
struct json_object *v = NULL;
struct json_object *obj = gluon_site_udata(L, 1);
const char *key;
lua_Number lua_index;
size_t index;
struct json_object *v = NULL;
switch (json_object_get_type(obj)) {
switch (json_object_get_type(obj)) {
case json_type_object:
key = lua_tostring(L, 2);
if (key)
json_object_object_get_ex(obj, key, &v);
break;
key = lua_tostring(L, 2);
if (key)
json_object_object_get_ex(obj, key, &v);
break;
case json_type_array:
index = lua_index = lua_tonumber(L, 2);
if (lua_index == (lua_Number)index && index >= 1)
v = json_object_array_get_idx(obj, index-1);
break;
index = lua_index = lua_tonumber(L, 2);
if (lua_index == (lua_Number)index && index >= 1)
v = json_object_array_get_idx(obj, index-1);
break;
case json_type_string:
case json_type_null:
break;
case json_type_null:
break;
case json_type_boolean:
case json_type_int:
case json_type_double:
luaL_error(L, "attempt to index a number or boolean value");
__builtin_unreachable();
}
luaL_error(L, "attempt to index a number or boolean value");
__builtin_unreachable();
}
gluon_site_wrap(L, v);
return 1;
gluon_site_wrap(L, v);
return 1;
}
static int gluon_site_call(lua_State *L) {
struct json_object *obj = gluon_site_udata(L, 1);
struct json_object *obj = gluon_site_udata(L, 1);
if (obj) {
lua_jsonc_push_json(L, obj);
} else {
if (lua_isnone(L, 2))
lua_pushnil(L);
else
lua_pushvalue(L, 2);
}
return 1;
}
static int gluon_site_gc(lua_State *L) {
json_object_put(gluon_site_udata(L, 1));
return 0;
}
static const luaL_reg R[] = {
{ "__index", gluon_site_index },
{ "__call", gluon_site_call },
{ "__gc", gluon_site_gc },
{}
};
int luaopen_gluon_site(lua_State *L) {
luaL_newmetatable(L, UDATA);
luaL_register(L, NULL, R);
lua_pop(L, 1);
/* Create "none" object */
lua_pushlightuserdata(L, gluon_site_push_none);
gluon_site_do_wrap(L, NULL);
lua_rawset(L, LUA_REGISTRYINDEX);
struct json_object *site = gluonutil_load_site_config();
gluon_site_wrap(L, site);
json_object_put(site);
if (obj) {
lua_jsonc_push_json(L, obj);
} else {
if (lua_isnone(L, 2))
lua_pushnil(L);
else
lua_pushvalue(L, 2);
}
return 1;
}
static int gluon_site_gc(lua_State *L) {
json_object_put(gluon_site_udata(L, 1));
return 0;
}
static const luaL_reg R[] = {
{ "__index", gluon_site_index },
{ "__call", gluon_site_call },
{ "__gc", gluon_site_gc },
{}
};
int luaopen_gluon_site(lua_State *L) {
luaL_newmetatable(L, UDATA);
luaL_register(L, NULL, R);
lua_pop(L, 1);
/* Create "none" object */
lua_pushlightuserdata(L, gluon_site_push_none);
gluon_site_do_wrap(L, NULL);
lua_rawset(L, LUA_REGISTRYINDEX);
struct json_object *site = gluonutil_load_site_config();
gluon_site_wrap(L, site);
json_object_put(site);
return 1;
}

View File

@ -10,7 +10,7 @@
#include "lookup3.h"
static struct addr_list *addr_node_alloc(void *addr,
struct addr_store *store)
struct addr_store *store)
{
struct addr_list *node;
size_t addr_len = store->addr_len;
@ -27,8 +27,8 @@ static struct addr_list *addr_node_alloc(void *addr,
}
static struct addr_list *addr_list_search(void *addr,
size_t addr_len,
struct addr_list *list)
size_t addr_len,
struct addr_list *list)
{
struct addr_list *node = list;
struct addr_list *ret = NULL;
@ -73,7 +73,7 @@ int addr_store_add(void *addr, struct addr_store *store)
{
struct addr_list **bucket = addr_store_get_bucket(addr, store);
struct addr_list *node = addr_list_search(addr, store->addr_len,
*bucket);
*bucket);
if (node) {
node->tic = clock;
@ -91,9 +91,9 @@ int addr_store_add(void *addr, struct addr_store *store)
}
int addr_store_init(size_t addr_len,
void (*destructor)(struct addr_list *),
char *(*ntoa)(void *),
struct addr_store *store)
void (*destructor)(struct addr_list *),
char *(*ntoa)(void *),
struct addr_store *store)
{
int i;

View File

@ -20,9 +20,9 @@ struct addr_store {
};
int addr_store_init(size_t addr_len,
void (*destructor)(struct addr_list *),
char *(*ntoa)(void *),
struct addr_store *store);
void (*destructor)(struct addr_list *),
char *(*ntoa)(void *),
struct addr_store *store);
int addr_store_add(void *addr, struct addr_store *store);
void addr_store_cleanup(struct addr_store *store);

View File

@ -39,8 +39,8 @@ static void ebt_ip_call(char *mod, struct in_addr ip)
int ret;
snprintf(str, sizeof(str),
EBTABLES " %s ARP_LIMIT_DATCHECK -p ARP --arp-ip-dst %s -j mark --mark-or 0x2 --mark-target RETURN",
mod, inet_ntoa(ip));
EBTABLES " %s ARP_LIMIT_DATCHECK -p ARP --arp-ip-dst %s -j mark --mark-or 0x2 --mark-target RETURN",
mod, inet_ntoa(ip));
ret = system(str);
if (ret)
@ -62,8 +62,8 @@ static void ebt_mac_limit_call(char *mod, struct mac_addr *mac)
int ret;
snprintf(str, sizeof(str),
EBTABLES " %s ARP_LIMIT_TLCHECK --source %s --limit 6/min --limit-burst 50 -j RETURN",
mod, mac_ntoa(mac));
EBTABLES " %s ARP_LIMIT_TLCHECK --source %s --limit 6/min --limit-burst 50 -j RETURN",
mod, mac_ntoa(mac));
ret = system(str);
if (ret)
@ -78,8 +78,8 @@ static void ebt_mac_ret_call(char *mod, struct mac_addr *mac, int add)
int ret;
snprintf(str, sizeof(str),
EBTABLES " %s ARP_LIMIT_TLCHECK %s --source %s -j DROP",
mod, add ? "2" : "", mac_ntoa(mac));
EBTABLES " %s ARP_LIMIT_TLCHECK %s --source %s -j DROP",
mod, add ? "2" : "", mac_ntoa(mac));
ret = system(str);
if (ret)

File diff suppressed because it is too large Load Diff

View File

@ -21,8 +21,8 @@ int mac_aton(const char *cp, struct mac_addr *mac)
memset(&m, 0, sizeof(m));
ret = sscanf(cp, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
&m.storage[0], &m.storage[1], &m.storage[2],
&m.storage[3], &m.storage[4], &m.storage[5]);
&m.storage[0], &m.storage[1], &m.storage[2],
&m.storage[3], &m.storage[4], &m.storage[5]);
if (ret != ETH_ALEN)
return 0;
@ -36,8 +36,8 @@ char *mac_ntoa(struct mac_addr *mac)
unsigned char *m = mac->storage;
snprintf(mntoa_buf, sizeof(mntoa_buf),
"%02x:%02x:%02x:%02x:%02x:%02x",
m[0], m[1], m[2], m[3], m[4], m[5]);
"%02x:%02x:%02x:%02x:%02x:%02x",
m[0], m[1], m[2], m[3], m[4], m[5]);
return mntoa_buf;
}

View File

@ -68,7 +68,7 @@ static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg)
char mac1[18];
opts = batadv_container_of(query_opts, struct neigh_netlink_opts,
query_opts);
query_opts);
if (!genlmsg_valid_hdr(nlh, 0))
return NL_OK;
@ -79,11 +79,11 @@ static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg)
return NL_OK;
if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
genlmsg_len(ghdr), batadv_genl_policy))
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)))
BATADV_ARRAY_SIZE(parse_orig_list_mandatory)))
return NL_OK;
orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]);

View File

@ -106,7 +106,7 @@ static bool interface_file_exists(const char *ifname, const char *name) {
}
static void mesh_add_subif(const char *ifname, struct json_object *wireless,
struct json_object *tunnel, struct json_object *other) {
struct json_object *tunnel, struct json_object *other) {
struct json_object *address = gluonutil_wrap_and_free_string(gluonutil_get_interface_address(ifname));
/* In case of VLAN and bridge interfaces, we want the lower interface
@ -144,7 +144,7 @@ static struct json_object * get_mesh_subifs(const char *ifname) {
size_t i;
for (i = 0; i < lower.gl_pathc; i++) {
mesh_add_subif(lower.gl_pathv[i] + pattern_len - 1,
wireless, tunnel, other);
wireless, tunnel, other);
}
globfree(&lower);

View File

@ -57,7 +57,7 @@ static int parse_gw_list_netlink_cb(struct nl_msg *msg, void *arg)
char addr[18];
opts = batadv_container_of(query_opts, struct gw_netlink_opts,
query_opts);
query_opts);
if (!genlmsg_valid_hdr(nlh, 0))
return NL_OK;
@ -68,11 +68,11 @@ static int parse_gw_list_netlink_cb(struct nl_msg *msg, void *arg)
return NL_OK;
if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
genlmsg_len(ghdr), batadv_genl_policy))
genlmsg_len(ghdr), batadv_genl_policy))
return NL_OK;
if (batadv_genl_missing_attrs(attrs, gateways_mandatory,
BATADV_ARRAY_SIZE(gateways_mandatory)))
BATADV_ARRAY_SIZE(gateways_mandatory)))
return NL_OK;
if (!attrs[BATADV_ATTR_FLAG_BEST])
@ -105,8 +105,8 @@ static void add_gateway(struct json_object *obj) {
};
batadv_genl_query("bat0", BATADV_CMD_GET_GATEWAYS,
parse_gw_list_netlink_cb, NLM_F_DUMP,
&opts.query_opts);
parse_gw_list_netlink_cb, NLM_F_DUMP,
&opts.query_opts);
}
static inline bool ethtool_ioctl(int fd, struct ifreq *ifr, void *data) {
@ -214,7 +214,7 @@ static struct json_object * get_traffic(void) {
json_object_object_add(ret, "mgmt_rx", mgmt_rx);
json_object_object_add(ret, "mgmt_tx", mgmt_tx);
out:
out:
free(stats);
free(strings);
close(fd);
@ -241,7 +241,7 @@ static int parse_clients_list_netlink_cb(struct nl_msg *msg, void *arg)
uint32_t flags, lastseen;
opts = batadv_container_of(query_opts, struct clients_netlink_opts,
query_opts);
query_opts);
if (!genlmsg_valid_hdr(nlh, 0))
return NL_OK;
@ -252,11 +252,11 @@ static int parse_clients_list_netlink_cb(struct nl_msg *msg, void *arg)
return NL_OK;
if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
genlmsg_len(ghdr), batadv_genl_policy))
genlmsg_len(ghdr), batadv_genl_policy))
return NL_OK;
if (batadv_genl_missing_attrs(attrs, clients_mandatory,
BATADV_ARRAY_SIZE(clients_mandatory)))
BATADV_ARRAY_SIZE(clients_mandatory)))
return NL_OK;
flags = nla_get_u32(attrs[BATADV_ATTR_TT_FLAGS]);
@ -282,8 +282,8 @@ static struct json_object * get_clients(void) {
};
batadv_genl_query("bat0", BATADV_CMD_GET_TRANSTABLE_LOCAL,
parse_clients_list_netlink_cb, NLM_F_DUMP,
&opts.query_opts);
parse_clients_list_netlink_cb, NLM_F_DUMP,
&opts.query_opts);
struct json_object *ret = json_object_new_object();

View File

@ -0,0 +1,19 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=gluon-mesh-olsrd
PKG_VERSION=1
include ../gluon.mk
define Package/gluon-mesh-olsrd
TITLE:=olsrd mesh
DEPENDS:= \
+gluon-core \
@IPV6 \
+oonf-olsrd2 \
+firewall \
+gluon-mesh-layer3-common
PROVIDES:=gluon-mesh-provider
endef
$(eval $(call BuildPackageGluon,gluon-mesh-olsrd))

View File

@ -0,0 +1 @@
need_table({'mesh', 'olsrd', 'v2', 'config'}, nil, false)

View File

@ -0,0 +1,10 @@
#!/bin/sh
reload_running() {
if [ -x /etc/init.d/"$1" ] && /etc/init.d/"$1" enabled && /etc/init.d/"$1" running; then
echo "(post-setup.d:$IFNAME) Reloading $1..."
/etc/init.d/"$1" reload
fi
}
reload_running olsrd2

View File

@ -0,0 +1,10 @@
#!/bin/sh
reload_running() {
if [ -x /etc/init.d/"$1" ] && /etc/init.d/"$1" enabled && /etc/init.d/"$1" running; then
echo "(teardown.d:$IFNAME) Reloading $1..."
/etc/init.d/"$1" reload
fi
}
reload_running olsrd2

View File

@ -0,0 +1 @@
mmfd

View File

@ -0,0 +1,7 @@
#!/bin/sh
. /lib/gluon/autoupdater/lib.sh
start_enabled olsrd2
wifi up

View File

@ -0,0 +1,7 @@
#!/bin/sh
. /lib/gluon/autoupdater/lib.sh
stop olsrd2
wifi down

View File

@ -0,0 +1,163 @@
#!/usr/bin/lua
local uci = require('simple-uci').cursor()
local site = require 'gluon.site'
local util = require 'gluon.util'
local wireless = require 'gluon.wireless'
local mesh_interfaces = util.get_role_interfaces(uci, 'mesh')
local uplink_interfaces = util.get_role_interfaces(uci, 'uplink')
local client_interfaces = util.get_role_interfaces(uci, 'client')
local mesh_interfaces_uplink = {}
local mesh_interfaces_client = {}
local mesh_interfaces_other = {}
for _, iface in ipairs(mesh_interfaces) do
if util.contains(uplink_interfaces, iface) then
table.insert(mesh_interfaces_uplink, iface)
elseif util.contains(client_interfaces, iface) then
table.insert(mesh_interfaces_client, iface)
else
table.insert(mesh_interfaces_other, iface)
end
end
local intf = {
wired_mesh = {},
vpn_mesh = {},
radio_mesh = {},
}
intf.all_intfs = {}
for _, l in ipairs({ intf.wired_mesh, intf.vpn_mesh, intf.radio_mesh }) do
for _, n in ipairs(l) do
table.insert(intf.all_intfs, n)
end
end
-- get all mesh radios and mesh lans and then add them to olsrd
wireless.foreach_radio(uci, function(radio, _, _)
local radio_name = radio['.name']
table.insert(intf.radio_mesh, 'mesh_' .. radio_name)
end)
if pcall(function() require 'gluon.mesh-vpn' end) then
local vpn_core = require 'gluon.mesh-vpn'
if vpn_core.enabled() then
-- mesh_vpn is a interface that has the right ifname
-- we can't use mesh-vpn (dash instead of underscore) since it's not a uci interface
table.insert(intf.vpn_mesh, 'mesh_vpn')
end
end
table.insert(intf.wired_mesh, 'loopback')
local has_uplink_mesh = false
local has_other_mesh = false
for _,i in pairs(mesh_interfaces) do
if util.contains(uplink_interfaces, i) then
has_uplink_mesh = true
else
has_other_mesh = true
end
end
if has_uplink_mesh then
table.insert(intf.wired_mesh, 'mesh_uplink')
end
if has_other_mesh then
table.insert(intf.wired_mesh, 'mesh_other')
end
uci:delete_all('olsrd2', 'interface')
if site.mesh.olsrd.v2.enable(true) then
os.execute('/etc/init.d/olsrd2 enable')
local addrs = { }
local lan = { }
local cfg = site.mesh.olsrd.v2
local config = uci:get_first("olsrd2", "olsrv2")
-- set global config
local olsr2Config = {
failfast = 'no',
pidfile = '/var/run/olsrd2.pid',
lockfile = '/var/lock/olsrd2'
}
local extraConf = cfg.config()
if extraConf then
for k, _ in pairs(extraConf) do
olsr2Config[k] = extraConf[k]
end
end
uci:delete_all('olsrd2', 'global')
uci:section('olsrd2', 'global', 'global', olsr2Config)
uci:delete_all('olsrd2', 'telnet')
uci:section('olsrd2', 'telnet', 'telnet', {
})
uci:delete_all('olsrd2', 'http')
uci:section('olsrd2', 'http', 'http', {
})
if cfg.lan() then
lan = cfg.lan()
end
table.insert(addrs, '-127.0.0.1/8')
table.insert(addrs, '-::1/128')
table.insert(addrs, 'default_accept')
uci:set("olsrd2", config, "originator", addrs)
uci:set("olsrd2", config, "lan", lan)
if #intf.wired_mesh then
uci:section('olsrd2', 'interface', 'wired_mesh', {
ifname = intf.wired_mesh,
bindto = addrs,
})
end
if #intf.vpn_mesh then
uci:section('olsrd2', 'interface', 'vpn_mesh', {
ifname = intf.vpn_mesh,
bindto = addrs,
})
end
if #intf.radio_mesh then
uci:section('olsrd2', 'interface', 'radio_mesh', {
ifname = intf.radio_mesh,
bindto = addrs,
})
end
uci:section('olsrd2', 'interface', 'loopback', {
ifname = { 'loopback' },
bindto = addrs,
})
uci:section('firewall', 'rule', 'allow_olsr2_mesh', {
src = 'mesh',
dest_port = '269',
proto = 'udp',
target = 'ACCEPT',
})
else
-- site.mesh.olsrd.v2.enable false
os.execute('/etc/init.d/olsrd2 disable')
uci:delete('firewall', 'allow_olsr2_mesh')
end
uci:save('olsrd2')
uci:save('firewall')
uci:save('network')

View File

@ -0,0 +1,10 @@
#!/usr/bin/lua
local uci = require('simple-uci').cursor()
local util = require 'gluon.util'
local networks = uci:get_list('firewall', 'drop', 'network')
util.remove_from_set(networks, 'client')
uci:set_list('firewall', 'drop', 'network', networks)
uci:save('firewall')

View File

@ -219,7 +219,7 @@ static bool get_peer_connection(struct json_object **ret, struct json_object *co
struct json_object *peer, *connection, *established;
if (!json_object_object_get_ex(peers, key, &peer) ||
!json_object_object_get_ex(peer, "connection", &connection))
!json_object_object_get_ex(peer, "connection", &connection))
return false;
if (json_object_object_get_ex(connection, "established", &established)) {
@ -242,7 +242,7 @@ static struct json_object * get_peer_group(struct json_object *config, struct js
struct json_object *config_peers;
if (json_object_object_get_ex(config, "peers", &config_peers) &&
json_object_is_type(config_peers, json_type_object)) {
json_object_is_type(config_peers, json_type_object)) {
struct json_object *ret_peers = json_object_new_object();
json_object_object_foreach(config_peers, peername, peerconfig) {
@ -320,7 +320,7 @@ static struct json_object * get_mesh_vpn(void) {
ret = get_peer_group(mesh_vpn_fastd, peers);
end:
end:
json_object_put(site);
json_object_put(status);

View File

@ -6,7 +6,13 @@ include ../gluon.mk
define Package/gluon-mesh-vpn-wireguard
TITLE:=Support for connecting meshes via wireguard
DEPENDS:=+gluon-core +libgluonutil +gluon-mesh-vpn-core +wireguard-tools +wgpeerselector +libubus
DEPENDS:=+gluon-core +libgluonutil +gluon-mesh-vpn-core +wireguard-tools +wgpeerselector +libubox +libubus
endef
define Package/gluon-mesh-vpn-wireguard/install
$(Gluon/Build/Install)
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/gluon-hex-to-b64 $(1)/usr/sbin/
endef
$(eval $(call BuildPackageGluon,gluon-mesh-vpn-wireguard))

View File

@ -1,18 +1,63 @@
#!/usr/bin/lua
local uci = require('simple-uci').cursor()
local unistd = require 'posix.unistd'
local util = require('gluon.util')
local site = require 'gluon.site'
local sp = util.subprocess
local wait = require 'posix.sys.wait'
local private_key = uci:get("network_gluon-old", 'wg_mesh', "private_key")
local wg_private_key = uci:get("network_gluon-old", 'wg_mesh', "private_key")
if not private_key or not private_key:match("^" .. ("[%a%d+/]"):rep(42) .. "[AEIMQUYcgkosw480]=$") then
private_key = "generate"
local function valid_fastd_key(fastd_key)
return fastd_key and fastd_key:match(('%x'):rep(64))
end
local function valid_wireguard_key(wireguard_key)
return wireguard_key and wireguard_key:match("^" .. ("[%a%d+/]"):rep(42) .. "[AEIMQUYcgkosw480]=$")
end
local function migrate_from_fastd_secret(fastd_secret)
local options = {
stdin = sp.PIPE,
stdout = sp.PIPE,
}
local pid, pipe = sp.popen('gluon-hex-to-b64', {}, options)
if not pid then
return
end
local inw = pipe.stdin
local out = pipe.stdout
unistd.write(inw, string.format('%s\n', fastd_secret))
unistd.close(inw)
local wpid, status, code = wait.wait(pid)
if wpid and status == 'exited' and code == 0 then
local result = unistd.read(out, 44)
unistd.close(out)
return result
end
end
if not valid_wireguard_key(wg_private_key) then
local fastd_secret = uci:get('fastd', 'mesh_vpn', 'secret')
if valid_fastd_key(fastd_secret) then
wg_private_key = migrate_from_fastd_secret(fastd_secret)
end
end
if not valid_wireguard_key(wg_private_key) then
wg_private_key = "generate"
end
uci:section('network', 'interface', 'wg_mesh', {
proto = 'wireguard',
fwmark = 1,
private_key = private_key,
private_key = wg_private_key,
})
uci:section('network', 'interface', 'mesh_wg_mesh', {

View File

@ -1,6 +1,9 @@
all: respondd.so
all: respondd.so gluon-hex-to-b64
CFLAGS += -Wall -Werror-implicit-function-declaration
gluon-hex-to-b64: gluon-hex-to-b64.c
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -Wall -o $@ $^ $(LDLIBS) -lubox
respondd.so: respondd.c
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared -fPIC -D_GNU_SOURCE -o $@ $^ $(LDLIBS) -lgluonutil -lubus

View File

@ -0,0 +1,101 @@
// SPDX-FileCopyrightText: 2022 Jan-Niklas Burfeind <gluon@aiyionpri.me>
// SPDX-License-Identifier: BSD-2-Clause
// SPDX-FileContributor: read_hex() by Matthias Schiffer <mschiffer@universe-factory.net>
#include <libubox/utils.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**
* how many blocks should be encoded at once - can be configured
*/
#define BLOCK_AMOUNT 32
/**
* smallest possible block size to encode in b64 without further contex
* is three bytes - do not change
*/
#define CHUNK_SIZE (3*BLOCK_AMOUNT)
/** print usage info and exit as failed */
static void usage(void) {
fprintf(stderr, "Usage: gluon-hex-to-b64\n");
exit(1);
}
/**
* read a string of hexadecimal characters and return them as bytes
* return false in case any non-hexadecimal characters are provided
* return true on success
*/
static bool read_hex(uint8_t key[CHUNK_SIZE], const char *hexstr) {
if (strspn(hexstr, "0123456789abcdefABCDEF") != strlen(hexstr))
return false;
size_t i;
for (i = 0; i < CHUNK_SIZE; i++)
sscanf(&hexstr[2 * i], "%02hhx", &key[i]);
return true;
}
int main(int argc, char *argv[]) {
if (argc != 1)
usage();
unsigned char hex_input[CHUNK_SIZE * 2 + 1];
uint8_t as_bytes[CHUNK_SIZE];
int byte_count;
int b64_buflen = B64_ENCODE_LEN(CHUNK_SIZE);
int b64_return;
size_t ret;
char str[b64_buflen];
do {
ret = fread(hex_input, 1, sizeof(hex_input) - 1, stdin);
hex_input[ret] = '\0';
/* in case fread did not fill six characters */
if (ret != sizeof(hex_input)-1) {
/* drop newline by replacing it with a null character */
hex_input[strcspn(hex_input, "\n")] = 0;
/*
* count length of resulting string and make sure it's even,
* as bytes are represented using pairs of hex characters
*/
ret = strlen(hex_input);
if (ret % 2 == 1) {
fprintf(stderr, "Error: Incomplete hex representation of a byte.\n");
exit(EXIT_FAILURE);
}
}
byte_count = ret / 2;
b64_buflen = B64_ENCODE_LEN(byte_count);
/* in case read_hex fails due to invalid characters */
if (!read_hex(as_bytes, hex_input)) {
fprintf(stderr, "Error: Invalid hexadecimal input.\n");
exit(EXIT_FAILURE);
}
b64_return = b64_encode(as_bytes, byte_count, str, b64_buflen);
/* trailing '\0' is not counted by b64_encode(), so we subtract one character */
if (b64_buflen - 1 != b64_return) {
fprintf(stderr, "Error: Encoding bytes as b64 failed.\n");
exit(EXIT_FAILURE);
}
printf("%s", str);
/* repeat until a non full block is read */
} while (ret == sizeof(hex_input)-1);
printf("\n");
exit(EXIT_SUCCESS);
}

View File

@ -48,7 +48,7 @@ static struct json_object * stdout_read(const char *cmd, const char *skip, bool
if (oneword) {
for (int i = 0; i < len; i++) {
if (isspace(line[i])) {
line[i] = 0;
line[i] = 0;
}
}
}

View File

@ -61,7 +61,7 @@ void resize_recvbuffer(char **recvbuffer, size_t *recvbuffer_len, size_t recvlen
}
ssize_t recvtimeout(int socket, char **recvbuffer, size_t *recvbuffer_len,
const struct timeval *timeout) {
const struct timeval *timeout) {
struct timeval now, timeout_left;
ssize_t recvlen;
@ -84,8 +84,8 @@ ssize_t recvtimeout(int socket, char **recvbuffer, size_t *recvbuffer_len,
}
int request(const int sock, char **recvbuffer, size_t *recvbuffer_len,
const struct sockaddr_in6 *client_addr, const char *request,
const char *sse, double timeout, unsigned int max_count) {
const struct sockaddr_in6 *client_addr, const char *request,
const char *sse, double timeout, unsigned int max_count) {
ssize_t ret;
unsigned int count = 0;
@ -251,7 +251,7 @@ int main(int argc, char **argv) {
do {
ret = request(sock, &recvbuffer, &recvbuffer_len, &client_addr,
request_string, sse, timeout, max_count);
request_string, sse, timeout, max_count);
} while(loop);
if (sse)

View File

@ -59,10 +59,10 @@
#ifdef DEBUG
#define CHECK(stmt) \
if(!(stmt)) { \
fprintf(stderr, "check failed: " #stmt "\n"); \
goto check_failed; \
}
if(!(stmt)) { \
fprintf(stderr, "check failed: " #stmt "\n"); \
goto check_failed; \
}
#define DEBUG_MSG(msg, ...) fprintf(stderr, msg "\n", ##__VA_ARGS__)
#else
#define CHECK(stmt) if(!(stmt)) goto check_failed;
@ -78,8 +78,8 @@
#define foreach_safe(item, safe, list) \
for ((item) = (list); \
(item) && (((safe) = item->next) || 1); \
(item) = (safe))
(item) && (((safe) = item->next) || 1); \
(item) = (safe))
struct router {
struct router *next;
@ -103,7 +103,7 @@ static struct global {
};
static int fork_execvp_timeout(struct timespec *timeout, const char *file,
const char *const argv[]);
const char *const argv[]);
static void error_message(int status, int errnum, char *message, ...) {
va_list ap;
@ -120,7 +120,7 @@ static void error_message(int status, int errnum, char *message, ...) {
}
static int timespec_diff(struct timespec *tv1, struct timespec *tv2,
struct timespec *tvdiff)
struct timespec *tvdiff)
{
tvdiff->tv_sec = tv1->tv_sec - tv2->tv_sec;
if (tv1->tv_nsec < tv2->tv_nsec) {
@ -219,8 +219,8 @@ static int init_packet_socket(unsigned int ifindex) {
};
struct sock_fprog radv_filter = {
.len = ARRAY_SIZE(radv_filter_code),
.filter = radv_filter_code,
.len = ARRAY_SIZE(radv_filter_code),
.filter = radv_filter_code,
};
int sock = socket(AF_PACKET, SOCK_DGRAM|SOCK_CLOEXEC, htons(ETH_P_IPV6));
@ -382,7 +382,7 @@ static void expire_routers(void) {
}
static int parse_tt_global(struct nl_msg *msg,
void *arg __attribute__((unused)))
void *arg __attribute__((unused)))
{
static const enum batadv_nl_attrs mandatory[] = {
BATADV_ATTR_TT_ADDRESS,
@ -406,7 +406,7 @@ static int parse_tt_global(struct nl_msg *msg,
return NL_OK;
if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
genlmsg_len(ghdr), batadv_genl_policy)) {
genlmsg_len(ghdr), batadv_genl_policy)) {
return NL_OK;
}
@ -428,14 +428,14 @@ static int parse_tt_global(struct nl_msg *msg,
return NL_OK;
DEBUG_MSG("Found originator for " F_MAC ", it's " F_MAC,
F_MAC_VAR(router->src), F_MAC_VAR(mac_b));
F_MAC_VAR(router->src), F_MAC_VAR(mac_b));
router->originator = mac_b;
return NL_OK;
}
static int parse_originator(struct nl_msg *msg,
void *arg __attribute__((unused)))
void *arg __attribute__((unused)))
{
static const enum batadv_nl_attrs mandatory[] = {
@ -460,7 +460,7 @@ static int parse_originator(struct nl_msg *msg,
return NL_OK;
if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
genlmsg_len(ghdr), batadv_genl_policy)) {
genlmsg_len(ghdr), batadv_genl_policy)) {
return NL_OK;
}
@ -481,7 +481,7 @@ static int parse_originator(struct nl_msg *msg,
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);
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;
@ -490,7 +490,7 @@ static int parse_originator(struct nl_msg *msg,
}
static int parse_tt_local(struct nl_msg *msg,
void *arg __attribute__((unused)))
void *arg __attribute__((unused)))
{
static const enum batadv_nl_attrs mandatory[] = {
BATADV_ATTR_TT_ADDRESS,
@ -512,7 +512,7 @@ static int parse_tt_local(struct nl_msg *msg,
return NL_OK;
if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
genlmsg_len(ghdr), batadv_genl_policy)) {
genlmsg_len(ghdr), batadv_genl_policy)) {
return NL_OK;
}
@ -528,7 +528,7 @@ static int parse_tt_local(struct nl_msg *msg,
return NL_OK;
DEBUG_MSG("Found router " F_MAC " in transtable_local, assigning TQ %d",
F_MAC_VAR(router->src), LOCAL_TQ);
F_MAC_VAR(router->src), LOCAL_TQ);
router->tq = LOCAL_TQ;
if (router->tq > G.max_tq)
G.max_tq = router->tq;
@ -770,7 +770,7 @@ int main(int argc, char *argv[]) {
clock_gettime(CLOCK_MONOTONIC, &now);
if (G.routers != NULL &&
timespec_diff(&now, &next_update, &diff)) {
timespec_diff(&now, &next_update, &diff)) {
expire_routers();
// all routers could have expired, check again

View File

@ -15,7 +15,7 @@
&(var).ether_addr_octet[2], &(var).ether_addr_octet[3], \
&(var).ether_addr_octet[4], &(var).ether_addr_octet[5]
#define MAC2ETHER(_ether, _mac) memcpy((_ether).ether_addr_octet, \
(_mac), ETH_ALEN)
(_mac), ETH_ALEN)
#define ether_addr_equal(_a, _b) (memcmp((_a).ether_addr_octet, \
(_b).ether_addr_octet, ETH_ALEN) == 0)
(_b).ether_addr_octet, ETH_ALEN) == 0)

View File

@ -34,8 +34,8 @@ static struct json_object * get_wifi_neighbours(const char *ifname) {
char mac[18];
snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x",
entry->mac[0], entry->mac[1], entry->mac[2],
entry->mac[3], entry->mac[4], entry->mac[5]);
entry->mac[0], entry->mac[1], entry->mac[2],
entry->mac[3], entry->mac[4], entry->mac[5]);
json_object_object_add(neighbours, mac, obj);
}

View File

@ -112,7 +112,7 @@ static struct json_object * get_stat(void) {
if (!strcmp(label, "cpu")) {
int64_t user, nice, system, idle, iowait, irq, softirq;
if (sscanf(line, "%*s %"SCNd64" %"SCNd64" %"SCNd64" %"SCNd64" %"SCNd64" %"SCNd64" %"SCNd64,
&user, &nice, &system, &idle, &iowait, &irq, &softirq) != 7)
&user, &nice, &system, &idle, &iowait, &irq, &softirq) != 7)
goto invalid_stat_format;
struct json_object *cpu = json_object_new_object();
@ -253,7 +253,7 @@ static void count_stations(size_t *wifi24, size_t *wifi5, size_t *owe24, size_t
count_iface_stations(wifi24, wifi5, ifname);
}
end:
end:
uci_free_context(ctx);
}

View File

@ -9,7 +9,7 @@ include ../gluon.mk
define Package/gluon-setup-mode
TITLE:=Setup mode
DEPENDS:=+gluon-core +gluon-lock-password +ubus +dnsmasq
DEPENDS:=+gluon-core +gluon-lock-password +ubus +dnsmasq-full
endef
define Package/gluon-setup-mode/description

View File

@ -3,18 +3,26 @@
START=96
start() {
local custom_led
/etc/init.d/led start
. /etc/diag.sh
get_status_led 2> /dev/null
if [ -z $status_led ]; then
if [ -z "$status_led" ]; then
status_led="$running"
fi
if [ -z $status_led ]; then
if [ -z "$status_led" ]; then
status_led="$boot"
fi
custom_led="$(lua -e 'print(require("gluon.setup-mode").get_status_led() or "")')"
if [ -z "$status_led" ]; then
status_led="$custom_led"
fi
status_led_set_timer 1000 300
}

View File

@ -0,0 +1,14 @@
local platform = require 'gluon.platform'
local M = {}
function M.get_status_led()
if platform.match('ath79', 'nand', {
'glinet,gl-xe300',
}) then
return "green:wlan"
end
end
return M

View File

@ -10,116 +10,116 @@
#define XSTR(x) STR(x)
struct neigh_netlink_opts {
struct json_object *obj;
struct batadv_nlquery_opts query_opts;
struct json_object *obj;
struct batadv_nlquery_opts query_opts;
};
static const enum batadv_nl_attrs parse_orig_list_mandatory[] = {
BATADV_ATTR_ORIG_ADDRESS,
BATADV_ATTR_NEIGH_ADDRESS,
BATADV_ATTR_TQ,
BATADV_ATTR_HARD_IFINDEX,
BATADV_ATTR_LAST_SEEN_MSECS,
BATADV_ATTR_ORIG_ADDRESS,
BATADV_ATTR_NEIGH_ADDRESS,
BATADV_ATTR_TQ,
BATADV_ATTR_HARD_IFINDEX,
BATADV_ATTR_LAST_SEEN_MSECS,
};
static int parse_orig_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;
uint32_t hardif;
char ifname_buf[IF_NAMESIZE], *ifname;
struct neigh_netlink_opts *opts;
char mac1[18];
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;
uint32_t hardif;
char ifname_buf[IF_NAMESIZE], *ifname;
struct neigh_netlink_opts *opts;
char mac1[18];
opts = batadv_container_of(query_opts, struct neigh_netlink_opts, query_opts);
opts = batadv_container_of(query_opts, struct neigh_netlink_opts, query_opts);
if (!genlmsg_valid_hdr(nlh, 0))
return NL_OK;
if (!genlmsg_valid_hdr(nlh, 0))
return NL_OK;
ghdr = nlmsg_data(nlh);
ghdr = nlmsg_data(nlh);
if (ghdr->cmd != BATADV_CMD_GET_ORIGINATORS)
return NL_OK;
if (ghdr->cmd != BATADV_CMD_GET_ORIGINATORS)
return NL_OK;
if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
genlmsg_len(ghdr), batadv_genl_policy))
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)))
return NL_OK;
if (batadv_genl_missing_attrs(attrs, parse_orig_list_mandatory,
BATADV_ARRAY_SIZE(parse_orig_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]);
hardif = nla_get_u32(attrs[BATADV_ATTR_HARD_IFINDEX]);
orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]);
dest = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]);
tq = nla_get_u8(attrs[BATADV_ATTR_TQ]);
hardif = nla_get_u32(attrs[BATADV_ATTR_HARD_IFINDEX]);
if (memcmp(orig, dest, 6) != 0)
return NL_OK;
if (memcmp(orig, dest, 6) != 0)
return NL_OK;
ifname = if_indextoname(hardif, ifname_buf);
if (!ifname)
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]);
sprintf(mac1, "%02x:%02x:%02x:%02x:%02x:%02x",
orig[0], orig[1], orig[2], orig[3], orig[4], orig[5]);
struct json_object *neigh = json_object_new_object();
if (!neigh)
return NL_OK;
struct json_object *neigh = json_object_new_object();
if (!neigh)
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]));
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]));
json_object_object_add(opts->obj, mac1, neigh);
json_object_object_add(opts->obj, mac1, neigh);
return NL_OK;
return NL_OK;
}
static json_object *neighbours(void) {
struct neigh_netlink_opts opts = {
.query_opts = {
.err = 0,
},
};
int ret;
struct neigh_netlink_opts opts = {
.query_opts = {
.err = 0,
},
};
int ret;
opts.obj = json_object_new_object();
if (!opts.obj)
return NULL;
opts.obj = json_object_new_object();
if (!opts.obj)
return NULL;
ret = batadv_genl_query("bat0", BATADV_CMD_GET_ORIGINATORS,
parse_orig_list_netlink_cb, NLM_F_DUMP,
&opts.query_opts);
if (ret < 0) {
json_object_put(opts.obj);
return NULL;
}
ret = batadv_genl_query("bat0", BATADV_CMD_GET_ORIGINATORS,
parse_orig_list_netlink_cb, NLM_F_DUMP,
&opts.query_opts);
if (ret < 0) {
json_object_put(opts.obj);
return NULL;
}
return opts.obj;
return opts.obj;
}
int main(void) {
struct json_object *obj;
struct json_object *obj;
printf("Content-type: text/event-stream\n\n");
fflush(stdout);
printf("Content-type: text/event-stream\n\n");
fflush(stdout);
while (1) {
obj = neighbours();
if (obj) {
printf("data: %s\n\n", json_object_to_json_string_ext(obj, JSON_C_TO_STRING_PLAIN));
fflush(stdout);
json_object_put(obj);
}
sleep(10);
}
while (1) {
obj = neighbours();
if (obj) {
printf("data: %s\n\n", json_object_to_json_string_ext(obj, JSON_C_TO_STRING_PLAIN));
fflush(stdout);
json_object_put(obj);
}
sleep(10);
}
return 0;
return 0;
}

View File

@ -67,7 +67,7 @@
iface = lower:sub(pattern:len())
end
return unistd.access('/sys/class/net/' .. iface .. '/wireless') ~= nil
return unistd.access('/sys/class/net/' .. iface .. '/phy80211') ~= nil
end
local uconn = ubus.connect()

View File

@ -12,115 +12,115 @@
#define LOWERGLOB_SUFFIX "/lower_*"
static struct json_object *get_stations(const struct iwinfo_ops *iw, const char *ifname) {
int len;
char buf[IWINFO_BUFSIZE];
struct json_object *stations = json_object_new_object();
int len;
char buf[IWINFO_BUFSIZE];
struct json_object *stations = json_object_new_object();
if (iw->assoclist(ifname, buf, &len) == -1)
return stations;
if (iw->assoclist(ifname, buf, &len) == -1)
return stations;
// This is just: for entry in assoclist(ifname)
for (struct iwinfo_assoclist_entry *entry = (struct iwinfo_assoclist_entry *)buf;
(char*)(entry+1) <= buf + len; entry++) {
struct json_object *station = json_object_new_object();
// This is just: for entry in assoclist(ifname)
for (struct iwinfo_assoclist_entry *entry = (struct iwinfo_assoclist_entry *)buf;
(char*)(entry+1) <= buf + len; entry++) {
struct json_object *station = json_object_new_object();
json_object_object_add(station, "signal", json_object_new_int(entry->signal));
json_object_object_add(station, "noise", json_object_new_int(entry->noise));
json_object_object_add(station, "inactive", json_object_new_int(entry->inactive));
json_object_object_add(station, "signal", json_object_new_int(entry->signal));
json_object_object_add(station, "noise", json_object_new_int(entry->noise));
json_object_object_add(station, "inactive", json_object_new_int(entry->inactive));
char macstr[18];
char macstr[18];
snprintf(macstr, sizeof(macstr), "%02x:%02x:%02x:%02x:%02x:%02x",
entry->mac[0], entry->mac[1], entry->mac[2],
entry->mac[3], entry->mac[4], entry->mac[5]);
snprintf(macstr, sizeof(macstr), "%02x:%02x:%02x:%02x:%02x:%02x",
entry->mac[0], entry->mac[1], entry->mac[2],
entry->mac[3], entry->mac[4], entry->mac[5]);
json_object_object_add(stations, macstr, station);
}
json_object_object_add(stations, macstr, station);
}
return stations;
return stations;
}
static void badrequest() {
printf("Status: 400 Bad Request\n\n");
exit(1);
printf("Status: 400 Bad Request\n\n");
exit(1);
}
// recurse down to the lowest layer-2 interface
static int interface_get_lowest(const char *ifname, char *hwifname);
static int interface_get_lowest(const char *ifname, char *hwifname) {
glob_t globbuf;
char *fnamebuf = alloca(1 + strlen(VIRTIF_PREFIX) + IF_NAMESIZE +
strlen(LOWERGLOB_SUFFIX));
char *lowentry = NULL;
glob_t globbuf;
char *fnamebuf = alloca(1 + strlen(VIRTIF_PREFIX) + IF_NAMESIZE +
strlen(LOWERGLOB_SUFFIX));
char *lowentry = NULL;
sprintf(fnamebuf, "%s%s%s", VIRTIF_PREFIX, ifname, LOWERGLOB_SUFFIX);
glob(fnamebuf, GLOB_NOSORT | GLOB_NOESCAPE, NULL, &globbuf);
sprintf(fnamebuf, "%s%s%s", VIRTIF_PREFIX, ifname, LOWERGLOB_SUFFIX);
glob(fnamebuf, GLOB_NOSORT | GLOB_NOESCAPE, NULL, &globbuf);
if (globbuf.gl_pathc == 1) {
lowentry = alloca(1 + strlen(globbuf.gl_pathv[0]));
strncpy(lowentry, globbuf.gl_pathv[0], 1 + strlen(globbuf.gl_pathv[0]));
}
if (globbuf.gl_pathc == 1) {
lowentry = alloca(1 + strlen(globbuf.gl_pathv[0]));
strncpy(lowentry, globbuf.gl_pathv[0], 1 + strlen(globbuf.gl_pathv[0]));
}
globfree(&globbuf);
globfree(&globbuf);
if (!lowentry) {
char *path = alloca(1 + strlen(NETIF_PREFIX) + strlen(ifname));
sprintf(path, "%s%s", NETIF_PREFIX, ifname);
if (!lowentry) {
char *path = alloca(1 + strlen(NETIF_PREFIX) + strlen(ifname));
sprintf(path, "%s%s", NETIF_PREFIX, ifname);
if(access(path, F_OK) != 0)
return false;
if(access(path, F_OK) != 0)
return false;
strncpy(hwifname, ifname, IF_NAMESIZE - 1);
return true;
} else {
char buf[PATH_MAX];
ssize_t len;
strncpy(hwifname, ifname, IF_NAMESIZE - 1);
return true;
} else {
char buf[PATH_MAX];
ssize_t len;
if ((len = readlink(lowentry, buf, sizeof(buf)-1)) != -1)
buf[len] = '\0';
else
return false;
if ((len = readlink(lowentry, buf, sizeof(buf)-1)) != -1)
buf[len] = '\0';
else
return false;
if (strncmp(buf, "../", 3) == 0) {
return interface_get_lowest(strrchr(buf, '/') + 1, hwifname);
} else {
return false;
}
}
if (strncmp(buf, "../", 3) == 0) {
return interface_get_lowest(strrchr(buf, '/') + 1, hwifname);
} else {
return false;
}
}
}
int main(int argc, char *argv[]) {
if (argc != 2)
badrequest();
if (argc != 2)
badrequest();
const char *ifname = argv[1];
char hwifname[IF_NAMESIZE] = "";
const char *ifname = argv[1];
char hwifname[IF_NAMESIZE] = "";
if (strlen(ifname) >= IF_NAMESIZE)
badrequest();
if (strlen(ifname) >= IF_NAMESIZE)
badrequest();
if (strcspn(ifname, "/\\[]{}*?") != strlen(ifname))
badrequest();
if (strcspn(ifname, "/\\[]{}*?") != strlen(ifname))
badrequest();
if (!interface_get_lowest(ifname, hwifname))
badrequest();
if (!interface_get_lowest(ifname, hwifname))
badrequest();
const struct iwinfo_ops *iw = iwinfo_backend(hwifname);
const struct iwinfo_ops *iw = iwinfo_backend(hwifname);
if (iw == NULL)
badrequest();
if (iw == NULL)
badrequest();
printf("Content-type: text/event-stream\n\n");
printf("Content-type: text/event-stream\n\n");
while (true) {
struct json_object *obj;
obj = get_stations(iw, hwifname);
printf("data: %s\n\n", json_object_to_json_string_ext(obj, JSON_C_TO_STRING_PLAIN));
fflush(stdout);
json_object_put(obj);
usleep(150000);
}
while (true) {
struct json_object *obj;
obj = get_stations(iw, hwifname);
printf("data: %s\n\n", json_object_to_json_string_ext(obj, JSON_C_TO_STRING_PLAIN));
fflush(stdout);
json_object_put(obj);
usleep(150000);
}
return 0;
return 0;
}

View File

@ -6,7 +6,7 @@ include ../gluon.mk
define Package/gluon-wan-dnsmasq
TITLE:=Support for a secondary DNS server using the WAN interface
DEPENDS:=+gluon-core +libubus-lua +dnsmasq +libpacketmark
DEPENDS:=+gluon-core +libubus-lua +dnsmasq-full +libpacketmark
endef
define Package/gluon-wan-dnsmasq/description

View File

@ -0,0 +1,49 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2023-01-23 13:33+0100\n"
"Last-Translator: Tom Herbers <mail@tomherbers.de>\n"
"Language-Team: German\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "APN"
msgstr ""
msgid "Cellular"
msgstr ""
msgid "Enabled"
msgstr "Aktiviert"
msgid "IPv4"
msgstr ""
msgid "IPv4/IPv6"
msgstr ""
msgid "IPv6"
msgstr ""
msgid "Password"
msgstr "Passwort"
msgid "SIM PIN"
msgstr ""
msgid "Type"
msgstr "Typ"
msgid "Username"
msgstr "Nutzername"
msgid ""
"You can enable uplink via cellular service. If you decide so, the VPN "
"connection is established using the integrated WWAN modem."
msgstr ""
"Du kannst den Uplink über einen Mobilfunk Service aktivieren. Wenn du "
"dich dafür entscheidest, wird die VPN-Verbindung über das integrierte "
"Mobilfunk-Modem hergestellt."

View File

@ -0,0 +1,25 @@
<%
local br = self.orientation == "horizontal" and '&#160;&#160;&#160;' or '<br>'
local entries = self:entries()
local util = require 'gluon.util'
%>
<div>
<% for i, entry in pairs(entries) do %>
<label<%=
attr("data-index", i) ..
attr("data-depends", self:deplist(entry.deps))
%>>
<input data-update="click change" type="checkbox"<%=
attr("id", id.."."..entry.key) ..
attr("name", id) ..
attr("value", entry.key) ..
attr("checked", (util.contains(self:cfgvalue(), entry.key)) and "checked") ..
attr("data-exclusive-with", self.exclusions[entry.key]) ..
attr("data-update", "change")
%>>
<label<%= attr("for", id.."."..entry.key)%>></label>
<span class="gluon-multi-list-option-descr"><%|entry.value%></span>
</label>
<% if i ~= #entries then write(br) end %>
<% end %>
</div>

View File

@ -1,14 +1,14 @@
<%- if self.title or self.content then -%>
<%- if not self.hide then -%>
<div class="gluon-warning"<%=
attr("id", id) ..
attr("data-index", self.index) ..
attr("data-depends", self:deplist(self.deps))
%>>
<%- if self.content then -%>
<%=self.content%>
<%= self.content %>
<%- else -%>
<b><%=self.title%></b><br>
<%=self.description%>
<b><%= self.title %></b><br>
<%= self.description %>
<%- end -%>
</div>
<%- end -%>

View File

@ -1,19 +1,15 @@
/*
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008-2012 Jo-Philipp Wich <jow@openwrt.org>
Copyright 2017 Matthias Schiffer <mschiffer@universe-factory.net>
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 <steven@midlink.org>
SPDX-FileCopyrightText: 2008-2012, Jo-Philipp Wich <jow@openwrt.org>
SPDX-FileCopyrightText: 2017, Matthias Schiffer <mschiffer@universe-factory.net>
SPDX-FileCopyrightText: 2023, Leonardo Mörlein <me@irrelefant.net>
*/
/*
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
*/
@ -219,6 +215,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 exclusive_with = JSON.parse(node.getAttribute('data-exclusive-with'));
node.disabled = false;
for (var list_item of exclusive_with) {
var el = document.getElementById(node.name + '.' + list_item);
node.disabled ||= el.checked;
}
if (node.disabled)
node.checked = false;
}
if (state) {
update();
}

File diff suppressed because one or more lines are too long

View File

@ -1,8 +1,10 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2017-2018 Matthias Schiffer <mschiffer@universe-factory.net>
-- Licensed to the public under the Apache License 2.0.
-- SPDX-License-Identifier: Apache-2.0
-- SPDX-FileCopyrightText: 2008, Steven Barth <steven@midlink.org>
-- SPDX-FileCopyrightText: 2017-2018, Matthias Schiffer <mschiffer@universe-factory.net>
-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein <me@irrelefant.net>
local util = require "gluon.web.util"
local gluon_util = require "gluon.util"
local datatypes = require "gluon.web.model.datatypes"
local class = util.class
@ -361,6 +363,83 @@ 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
self.exclusions = {}
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
for key, exclusive_with in pairs(self.exclusions) do
if gluon_util.contains(self.data, key) then
for _, exclusion in ipairs(exclusive_with) do
if gluon_util.contains(self.data, exclusion) then
return false
end
end
end
end
return true
end
function MultiListValue:exclusive(a, b)
if not self.exclusions[a] then
self.exclusions[a] = {}
end
if not self.exclusions[b] then
self.exclusions[b] = {}
end
gluon_util.add_to_set(self.exclusions[a], b)
gluon_util.add_to_set(self.exclusions[b], a)
end
function MultiListValue:defaultvalue()
return self.default or {}
end
function MultiListValue:formvalue(http)
return http:formvaluetable(self:id())
end
local DynamicList = class(AbstractValue)
M.DynamicList = DynamicList
@ -429,6 +508,23 @@ function Element:__init__(template, kv, ...)
self.error = false
end
function Element:parse(http)
if not self.datatype then
self.state = M.FORM_VALID
return
end
return AbstractValue:parse(http)
end
function Element:validate()
if not self.datatype then
return true
end
AbstractValue:validate()
end
local Section = class(Node)
M.Section = Section

View File

@ -1,6 +1,6 @@
-- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org>
-- Copyright 2017 Matthias Schiffer <mschiffer@universe-factory.net>
-- Licensed to the public under the Apache License 2.0.
-- SPDX-License-Identifier: Apache-2.0
-- SPDX-FileCopyrightText: 2010, Jo-Philipp Wich <jow@openwrt.org>
-- SPDX-FileCopyrightText: 2017, Matthias Schiffer <mschiffer@universe-factory.net>
local M = {}

Some files were not shown because too many files have changed in this diff Show More