Compare commits

..

2 Commits

Author SHA1 Message Date
Martin Weinelt
726f02ba9d
gluon-status-page: Expose method for VPN peers 2023-04-15 15:41:06 +02:00
Martin Weinelt
bd285d9908
gluon-mesh-vpn-fastd: Expose negotiated method 2023-04-15 15:41:06 +02:00
41 changed files with 184 additions and 1292 deletions

View File

@ -29,7 +29,6 @@ files["package/**/check_site.lua"] = {
"need", "need",
"need_alphanumeric_key", "need_alphanumeric_key",
"need_array", "need_array",
"need_array_elements_exclusive",
"need_array_of", "need_array_of",
"need_boolean", "need_boolean",
"need_chanlist", "need_chanlist",
@ -51,7 +50,6 @@ files["package/**/check_site.lua"] = {
files["package/**/luasrc/lib/gluon/config-mode/*"] = { files["package/**/luasrc/lib/gluon/config-mode/*"] = {
globals = { globals = {
"MultiListValue",
"DynamicList", "DynamicList",
"Flag", "Flag",
"Form", "Form",

View File

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

View File

@ -1,30 +0,0 @@
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

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

View File

@ -5,6 +5,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \ ca-certificates \
file \ file \
git \ git \
subversion \
python3 \ python3 \
build-essential \ build-essential \
gawk \ gawk \

View File

@ -71,13 +71,6 @@ pygments_style = None
# Don't highlight code blocks unless requested explicitly # Don't highlight code blocks unless requested explicitly
highlight_language = 'none' 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 ------------------------------------------------- # -- Options for HTML output -------------------------------------------------

View File

@ -191,16 +191,6 @@ 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 comes into play, as the gateway still knows about the old timestamp of the gluon
node. 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 Gateway / Supernode Configuration
""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""

View File

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

View File

@ -1,136 +0,0 @@
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

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

View File

@ -448,8 +448,13 @@ interfaces \: optional
The ``client`` role requires exclusive control over an interface. When The ``client`` role requires exclusive control over an interface. When
the ``client`` role is assigned to an interface at the same time as other 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 roles (like ``'client', 'mesh'`` in the above example), the other roles take
precedence (enabling ``mesh``, but not ``client`` in the example). In that precedence (enabling ``mesh``, but not ``client`` in the example).
case, the ``client`` role is removed from the config of the interface.
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.
All interface settings are optional. If unset, the following defaults are All interface settings are optional. If unset, the following defaults are
used: used:

View File

@ -143,10 +143,6 @@ ath79-generic
ath79-nand ath79-nand
---------- ----------
* Aerohive
- HiveAP 121
* GL.iNet * GL.iNet
- GL-AR300M - GL-AR300M
@ -259,7 +255,6 @@ lantiq-xrx200
- FRITZ!Box 7412 [#eva_ramboot]_ - FRITZ!Box 7412 [#eva_ramboot]_
* TP-Link * TP-Link
- TD-W8970 (v1) [#lan_as_wan]_ - TD-W8970 (v1) [#lan_as_wan]_
lantiq-xway lantiq-xway
@ -360,9 +355,7 @@ ramips-mt7621
* Cudy * Cudy
- WR1300 (v1)
- WR2100 - WR2100
- X6 (v1, v2)
* D-Link * D-Link

View File

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

File diff suppressed because one or more lines are too long

View File

@ -273,10 +273,6 @@ input[type=checkbox] {
text-align: center; text-align: center;
font-size: 1.7em; font-size: 1.7em;
} }
&[disabled] + label {
background-color: #dcdcdc !important;
}
} }
input[type=radio] { input[type=radio] {
@ -370,13 +366,6 @@ input[type=password] {
min-width: 20em; min-width: 20em;
} }
.gluon-multi-list-option-descr {
display: inline-block;
vertical-align: top;
margin-top: 0.35em;
margin-left: 0.4em;
}
.gluon-button { .gluon-button {
@include button; @include button;

View File

@ -77,11 +77,7 @@ need_boolean(in_domain({'mesh', 'vxlan'}), false)
local interfaces_roles = {'client', 'uplink', 'mesh'} local interfaces_roles = {'client', 'uplink', 'mesh'}
for _, config in ipairs({'wan', 'lan', 'single'}) do for _, config in ipairs({'wan', 'lan', 'single'}) do
local default_roles = in_site({'interfaces', config, 'default_roles'}) need_array_of(in_site({'interfaces', config, 'default_roles'}), interfaces_roles, false)
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 end
obsolete({'mesh_on_wan'}, 'Use interfaces.wan.default_roles.') obsolete({'mesh_on_wan'}, 'Use interfaces.wan.default_roles.')

View File

@ -55,14 +55,6 @@ local function merge(a, b)
return m return m
end 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) local function path_to_string(path)
if path.is_value then if path.is_value then
@ -378,21 +370,6 @@ function M.need_array_of(path, array, required)
return M.need_array(path, function(e) M.need_one_of(e, array) end, required) return M.need_array(path, function(e) M.need_one_of(e, array) end, required)
end 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) function M.need_chanlist(path, channels, required)
local valid_chanlist = check_chanlist(channels) local valid_chanlist = check_chanlist(channels)
return M.need(path, valid_chanlist, required, return M.need(path, valid_chanlist, required,

View File

@ -63,19 +63,4 @@ for iface in pairs(interfaces) do
end end
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') uci:save('gluon')

View File

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

View File

@ -217,7 +217,7 @@ static bool get_peer_connection(struct json_object **ret, struct json_object *co
if (!key) if (!key)
return false; return false;
struct json_object *peer, *connection, *established; struct json_object *peer, *connection, *established, *method;
if (!json_object_object_get_ex(peers, key, &peer) || 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; return false;
@ -229,6 +229,10 @@ static bool get_peer_connection(struct json_object **ret, struct json_object *co
struct json_object *jso = json_object_new_double(established_time/1000.0); struct json_object *jso = json_object_new_double(established_time/1000.0);
json_object_set_serializer(jso, json_object_double_to_json_string, "%.3f", NULL); json_object_set_serializer(jso, json_object_double_to_json_string, "%.3f", NULL);
json_object_object_add(*ret, "established", jso); json_object_object_add(*ret, "established", jso);
if (json_object_object_get_ex(connection, "method", &method)) {
json_object_object_add(*ret, "method", json_object_get(method));
}
} }
else { else {
*ret = NULL; *ret = NULL;

View File

@ -6,13 +6,7 @@ include ../gluon.mk
define Package/gluon-mesh-vpn-wireguard define Package/gluon-mesh-vpn-wireguard
TITLE:=Support for connecting meshes via wireguard TITLE:=Support for connecting meshes via wireguard
DEPENDS:=+gluon-core +libgluonutil +gluon-mesh-vpn-core +wireguard-tools +wgpeerselector +libubox +libubus DEPENDS:=+gluon-core +libgluonutil +gluon-mesh-vpn-core +wireguard-tools +wgpeerselector +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 endef
$(eval $(call BuildPackageGluon,gluon-mesh-vpn-wireguard)) $(eval $(call BuildPackageGluon,gluon-mesh-vpn-wireguard))

View File

@ -1,63 +1,18 @@
#!/usr/bin/lua #!/usr/bin/lua
local uci = require('simple-uci').cursor() local uci = require('simple-uci').cursor()
local unistd = require 'posix.unistd'
local util = require('gluon.util')
local site = require 'gluon.site' local site = require 'gluon.site'
local sp = util.subprocess
local wait = require 'posix.sys.wait'
local wg_private_key = uci:get("network_gluon-old", 'wg_mesh', "private_key") local private_key = uci:get("network_gluon-old", 'wg_mesh', "private_key")
local function valid_fastd_key(fastd_key) if not private_key or not private_key:match("^" .. ("[%a%d+/]"):rep(42) .. "[AEIMQUYcgkosw480]=$") then
return fastd_key and fastd_key:match(('%x'):rep(64)) private_key = "generate"
end 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', { uci:section('network', 'interface', 'wg_mesh', {
proto = 'wireguard', proto = 'wireguard',
fwmark = 1, fwmark = 1,
private_key = wg_private_key, private_key = private_key,
}) })
uci:section('network', 'interface', 'mesh_wg_mesh', { uci:section('network', 'interface', 'mesh_wg_mesh', {

View File

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

View File

@ -1,101 +0,0 @@
// 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

@ -210,7 +210,8 @@
var td = document.createElement('td'); var td = document.createElement('td');
if (peer[1] && peer[1].established != null) if (peer[1] && peer[1].established != null)
td.textContent = _['connected'] + ' (' + formats.time(peer[1].established) + ')'; const method = peer[1].method ? ', ' + peer[1].method : '';
td.textContent = _['connected'] + ' (' + formats.time(peer[1].established) + method + ')';
else else
td.textContent = _['not connected']; td.textContent = _['not connected'];
tr.appendChild(td); tr.appendChild(td);

View File

@ -1,25 +0,0 @@
<%
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,15 +1,19 @@
/* /*
SPDX-License-Identifier: Apache-2.0 Copyright 2008 Steven Barth <steven@midlink.org>
SPDX-FileCopyrightText: 2008, Steven Barth <steven@midlink.org> Copyright 2008-2012 Jo-Philipp Wich <jow@openwrt.org>
SPDX-FileCopyrightText: 2008-2012, Jo-Philipp Wich <jow@openwrt.org> Copyright 2017 Matthias Schiffer <mschiffer@universe-factory.net>
SPDX-FileCopyrightText: 2017, Matthias Schiffer <mschiffer@universe-factory.net>
SPDX-FileCopyrightText: 2023, Leonardo Mörlein <me@irrelefant.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
*/ */
/* /*
Build using: Build using:
uglifyjs javascript/gluon-web-model.js -o javascript/gluon-web-model.min.js -c -m --ie uglifyjs javascript/gluon-web-model.js -o javascript/gluon-web-model.min.js -c -m --support-ie8
*/ */
@ -215,20 +219,6 @@
parent.parentNode.style.display = (parent.options.length <= 1) ? 'none' : ''; 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) { if (state) {
update(); update();
} }

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,8 @@
-- SPDX-License-Identifier: Apache-2.0 -- Copyright 2008 Steven Barth <steven@midlink.org>
-- SPDX-FileCopyrightText: 2008, Steven Barth <steven@midlink.org> -- Copyright 2017-2018 Matthias Schiffer <mschiffer@universe-factory.net>
-- SPDX-FileCopyrightText: 2017-2018, Matthias Schiffer <mschiffer@universe-factory.net> -- Licensed to the public under the Apache License 2.0.
-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein <me@irrelefant.net>
local util = require "gluon.web.util" local util = require "gluon.web.util"
local gluon_util = require "gluon.util"
local datatypes = require "gluon.web.model.datatypes" local datatypes = require "gluon.web.model.datatypes"
local class = util.class local class = util.class
@ -363,83 +361,6 @@ function ListValue:validate()
end 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) local DynamicList = class(AbstractValue)
M.DynamicList = DynamicList M.DynamicList = DynamicList

View File

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

View File

@ -28,6 +28,15 @@ msgstr "PoE-Passthrough aktivieren"
msgid "Enable PoE Power Port %s" msgid "Enable PoE Power Port %s"
msgstr "PoE-Ausgabe auf Port %s aktivieren" msgstr "PoE-Ausgabe auf Port %s aktivieren"
msgid "Enable meshing on the Ethernet interface"
msgstr "Mesh auf dem Ethernet-Port aktivieren"
msgid "Enable meshing on the LAN interface"
msgstr "Mesh auf dem LAN-Port aktivieren"
msgid "Enable meshing on the WAN interface"
msgstr "Mesh auf dem WAN-Port aktivieren"
msgid "Gateway" msgid "Gateway"
msgstr "Gateway" msgstr "Gateway"
@ -40,12 +49,6 @@ msgstr "IPv4"
msgid "IPv6" msgid "IPv6"
msgstr "IPv6" msgstr "IPv6"
msgid "Interface"
msgstr "Interface"
msgid "LAN Interfaces"
msgstr "LAN-Interfaces"
msgid "Netmask" msgid "Netmask"
msgstr "Netzmaske" msgstr "Netzmaske"
@ -58,8 +61,5 @@ msgstr "Statisch"
msgid "Static DNS servers" msgid "Static DNS servers"
msgstr "Statische DNS-Server" msgstr "Statische DNS-Server"
msgid "WAN Interfaces"
msgstr "WAN-Interfaces"
msgid "WAN connection" msgid "WAN connection"
msgstr "WAN-Verbindung" msgstr "WAN-Verbindung"

View File

@ -28,6 +28,15 @@ msgstr ""
msgid "Enable PoE Power Port %s" msgid "Enable PoE Power Port %s"
msgstr "" msgstr ""
msgid "Enable meshing on the Ethernet interface"
msgstr ""
msgid "Enable meshing on the LAN interface"
msgstr "Activer le réseau MESH sur le port LAN"
msgid "Enable meshing on the WAN interface"
msgstr "Activer le réseau MESH sur les ports WAN"
msgid "Gateway" msgid "Gateway"
msgstr "Passerelle" msgstr "Passerelle"

View File

@ -19,6 +19,15 @@ msgstr ""
msgid "Enable PoE Power Port %s" msgid "Enable PoE Power Port %s"
msgstr "" msgstr ""
msgid "Enable meshing on the Ethernet interface"
msgstr ""
msgid "Enable meshing on the LAN interface"
msgstr ""
msgid "Enable meshing on the WAN interface"
msgstr ""
msgid "Gateway" msgid "Gateway"
msgstr "" msgstr ""
@ -31,12 +40,6 @@ msgstr ""
msgid "IPv6" msgid "IPv6"
msgstr "" msgstr ""
msgid "Interface"
msgstr ""
msgid "LAN Interfaces"
msgstr ""
msgid "Netmask" msgid "Netmask"
msgstr "" msgstr ""
@ -49,8 +52,5 @@ msgstr ""
msgid "Static DNS servers" msgid "Static DNS servers"
msgstr "" msgstr ""
msgid "WAN Interfaces"
msgstr ""
msgid "WAN connection" msgid "WAN connection"
msgstr "" msgstr ""

View File

@ -1,14 +1,21 @@
-- SPDX-License-Identifier: Apache-2.0 --[[
-- SPDX-FileCopyrightText: 2014, Nils Schneider <nils@nilsschneider.net> Copyright 2014 Nils Schneider <nils@nilsschneider.net>
-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein <me@irrelefant.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
]]--
local uci = require("simple-uci").cursor() local uci = require("simple-uci").cursor()
local sysconfig = require 'gluon.sysconfig'
local util = require 'gluon.util'
local wan = uci:get_all("network", "wan") local wan = uci:get_all("network", "wan")
local wan6 = uci:get_all("network", "wan6") local wan6 = uci:get_all("network", "wan6")
local dns_static = uci:get_first("gluon-wan-dnsmasq", "static") local dns_static = uci:get_first("gluon-wan-dnsmasq", "static")
local f = Form(translate("WAN connection")) local f = Form(translate("WAN connection"))
local s = f:section(Section) local s = f:section(Section)
@ -69,30 +76,36 @@ end
s = f:section(Section) s = f:section(Section)
local pretty_ifnames = { local wired_mesh_help = {
["/wan"] = translate("WAN Interfaces"), single = translate('Enable meshing on the Ethernet interface'),
["/single"] = translate("Interface"), wan = translate('Enable meshing on the WAN interface'),
["/lan"] = translate("LAN Interfaces") lan = translate('Enable meshing on the LAN interface'),
} }
uci:foreach('gluon', 'interface', function(config) local function wired_mesh(iface)
local section_name = config['.name'] if not sysconfig[iface .. '_ifname'] then return end
local ifaces = s:option(MultiListValue, section_name, pretty_ifnames[config.name] or config.name) local iface_roles = uci:get_list('gluon', 'iface_' .. iface, 'role')
ifaces.orientation = 'horizontal' local option = s:option(Flag, 'mesh_' .. iface, wired_mesh_help[iface])
ifaces:value('uplink', 'Uplink') option.default = util.contains(iface_roles, 'mesh') ~= false
ifaces:value('mesh', 'Mesh')
ifaces:value('client', 'Client')
ifaces:exclusive('uplink', 'client')
ifaces:exclusive('mesh', 'client')
ifaces.default = config.role function option:write(data)
local roles = uci:get_list('gluon', 'iface_' .. iface, 'role')
if data then
util.add_to_set(roles, 'mesh')
else
util.remove_from_set(roles, 'mesh')
end
uci:set_list('gluon', 'iface_' .. iface, 'role', roles)
function ifaces:write(data) -- Reconfigure on next reboot
uci:set_list("gluon", section_name, "role", data) uci:set('gluon', 'core', 'reconfigure', true)
end end
end) end
wired_mesh('single')
wired_mesh('wan')
wired_mesh('lan')
local section local section
uci:foreach("system", "gpio_switch", function(si) uci:foreach("system", "gpio_switch", function(si)
@ -153,5 +166,4 @@ function f:write()
uci:commit('system') uci:commit('system')
end end
return f return f

View File

@ -41,206 +41,58 @@
__attribute__ ((visibility ("default"))) __attribute__ ((visibility ("default")))
struct nla_policy batadv_genl_policy[NUM_BATADV_ATTR] = { struct nla_policy batadv_genl_policy[NUM_BATADV_ATTR] = {
[BATADV_ATTR_VERSION] = { [BATADV_ATTR_VERSION] = { .type = NLA_STRING },
.type = NLA_STRING, [BATADV_ATTR_ALGO_NAME] = { .type = NLA_STRING },
}, [BATADV_ATTR_MESH_IFINDEX] = { .type = NLA_U32 },
[BATADV_ATTR_ALGO_NAME] = { [BATADV_ATTR_MESH_IFNAME] = { .type = NLA_STRING,
.type = NLA_STRING, .maxlen = IFNAMSIZ },
}, [BATADV_ATTR_MESH_ADDRESS] = { .type = NLA_UNSPEC,
[BATADV_ATTR_MESH_IFINDEX] = {
.type = NLA_U32,
},
[BATADV_ATTR_MESH_IFNAME] = {
.type = NLA_STRING,
.maxlen = IFNAMSIZ,
},
[BATADV_ATTR_MESH_ADDRESS] = {
.type = NLA_UNSPEC,
.minlen = ETH_ALEN, .minlen = ETH_ALEN,
.maxlen = ETH_ALEN, .maxlen = ETH_ALEN },
}, [BATADV_ATTR_HARD_IFINDEX] = { .type = NLA_U32 },
[BATADV_ATTR_HARD_IFINDEX] = { [BATADV_ATTR_HARD_IFNAME] = { .type = NLA_STRING,
.type = NLA_U32, .maxlen = IFNAMSIZ },
}, [BATADV_ATTR_HARD_ADDRESS] = { .type = NLA_UNSPEC,
[BATADV_ATTR_HARD_IFNAME] = {
.type = NLA_STRING,
.maxlen = IFNAMSIZ,
},
[BATADV_ATTR_HARD_ADDRESS] = {
.type = NLA_UNSPEC,
.minlen = ETH_ALEN, .minlen = ETH_ALEN,
.maxlen = ETH_ALEN, .maxlen = ETH_ALEN },
}, [BATADV_ATTR_ORIG_ADDRESS] = { .type = NLA_UNSPEC,
[BATADV_ATTR_ORIG_ADDRESS] = {
.type = NLA_UNSPEC,
.minlen = ETH_ALEN, .minlen = ETH_ALEN,
.maxlen = ETH_ALEN, .maxlen = ETH_ALEN },
}, [BATADV_ATTR_TPMETER_RESULT] = { .type = NLA_U8 },
[BATADV_ATTR_TPMETER_RESULT] = { [BATADV_ATTR_TPMETER_TEST_TIME] = { .type = NLA_U32 },
.type = NLA_U8, [BATADV_ATTR_TPMETER_BYTES] = { .type = NLA_U64 },
}, [BATADV_ATTR_TPMETER_COOKIE] = { .type = NLA_U32 },
[BATADV_ATTR_TPMETER_TEST_TIME] = { [BATADV_ATTR_PAD] = { .type = NLA_UNSPEC },
.type = NLA_U32, [BATADV_ATTR_ACTIVE] = { .type = NLA_FLAG },
}, [BATADV_ATTR_TT_ADDRESS] = { .type = NLA_UNSPEC,
[BATADV_ATTR_TPMETER_BYTES] = {
.type = NLA_U64,
},
[BATADV_ATTR_TPMETER_COOKIE] = {
.type = NLA_U32,
},
[BATADV_ATTR_PAD] = {
.type = NLA_UNSPEC,
},
[BATADV_ATTR_ACTIVE] = {
.type = NLA_FLAG,
},
[BATADV_ATTR_TT_ADDRESS] = {
.type = NLA_UNSPEC,
.minlen = ETH_ALEN, .minlen = ETH_ALEN,
.maxlen = ETH_ALEN, .maxlen = ETH_ALEN },
}, [BATADV_ATTR_TT_TTVN] = { .type = NLA_U8 },
[BATADV_ATTR_TT_TTVN] = { [BATADV_ATTR_TT_LAST_TTVN] = { .type = NLA_U8 },
.type = NLA_U8, [BATADV_ATTR_TT_CRC32] = { .type = NLA_U32 },
}, [BATADV_ATTR_TT_VID] = { .type = NLA_U16 },
[BATADV_ATTR_TT_LAST_TTVN] = { [BATADV_ATTR_TT_FLAGS] = { .type = NLA_U32 },
.type = NLA_U8, [BATADV_ATTR_FLAG_BEST] = { .type = NLA_FLAG },
}, [BATADV_ATTR_LAST_SEEN_MSECS] = { .type = NLA_U32 },
[BATADV_ATTR_TT_CRC32] = { [BATADV_ATTR_NEIGH_ADDRESS] = { .type = NLA_UNSPEC,
.type = NLA_U32,
},
[BATADV_ATTR_TT_VID] = {
.type = NLA_U16,
},
[BATADV_ATTR_TT_FLAGS] = {
.type = NLA_U32,
},
[BATADV_ATTR_FLAG_BEST] = {
.type = NLA_FLAG,
},
[BATADV_ATTR_LAST_SEEN_MSECS] = {
.type = NLA_U32,
},
[BATADV_ATTR_NEIGH_ADDRESS] = {
.type = NLA_UNSPEC,
.minlen = ETH_ALEN, .minlen = ETH_ALEN,
.maxlen = ETH_ALEN, .maxlen = ETH_ALEN },
}, [BATADV_ATTR_TQ] = { .type = NLA_U8 },
[BATADV_ATTR_TQ] = { [BATADV_ATTR_THROUGHPUT] = { .type = NLA_U32 },
.type = NLA_U8, [BATADV_ATTR_BANDWIDTH_UP] = { .type = NLA_U32 },
}, [BATADV_ATTR_BANDWIDTH_DOWN] = { .type = NLA_U32 },
[BATADV_ATTR_THROUGHPUT] = { [BATADV_ATTR_ROUTER] = { .type = NLA_UNSPEC,
.type = NLA_U32,
},
[BATADV_ATTR_BANDWIDTH_UP] = {
.type = NLA_U32,
},
[BATADV_ATTR_BANDWIDTH_DOWN] = {
.type = NLA_U32,
},
[BATADV_ATTR_ROUTER] = {
.type = NLA_UNSPEC,
.minlen = ETH_ALEN, .minlen = ETH_ALEN,
.maxlen = ETH_ALEN, .maxlen = ETH_ALEN },
}, [BATADV_ATTR_BLA_OWN] = { .type = NLA_FLAG },
[BATADV_ATTR_BLA_OWN] = { [BATADV_ATTR_BLA_ADDRESS] = { .type = NLA_UNSPEC,
.type = NLA_FLAG,
},
[BATADV_ATTR_BLA_ADDRESS] = {
.type = NLA_UNSPEC,
.minlen = ETH_ALEN, .minlen = ETH_ALEN,
.maxlen = ETH_ALEN, .maxlen = ETH_ALEN },
}, [BATADV_ATTR_BLA_VID] = { .type = NLA_U16 },
[BATADV_ATTR_BLA_VID] = { [BATADV_ATTR_BLA_BACKBONE] = { .type = NLA_UNSPEC,
.type = NLA_U16,
},
[BATADV_ATTR_BLA_BACKBONE] = {
.type = NLA_UNSPEC,
.minlen = ETH_ALEN, .minlen = ETH_ALEN,
.maxlen = ETH_ALEN, .maxlen = ETH_ALEN },
}, [BATADV_ATTR_BLA_CRC] = { .type = NLA_U16 },
[BATADV_ATTR_BLA_CRC] = {
.type = NLA_U16,
},
[BATADV_ATTR_DAT_CACHE_IP4ADDRESS] = {
.type = NLA_U32,
},
[BATADV_ATTR_DAT_CACHE_HWADDRESS] = {
.type = NLA_UNSPEC,
.minlen = ETH_ALEN,
.maxlen = ETH_ALEN,
},
[BATADV_ATTR_DAT_CACHE_VID] = {
.type = NLA_U16,
},
[BATADV_ATTR_MCAST_FLAGS] = {
.type = NLA_U32,
},
[BATADV_ATTR_MCAST_FLAGS_PRIV] = {
.type = NLA_U32,
},
[BATADV_ATTR_VLANID] = {
.type = NLA_U16,
},
[BATADV_ATTR_AGGREGATED_OGMS_ENABLED] = {
.type = NLA_U8,
},
[BATADV_ATTR_AP_ISOLATION_ENABLED] = {
.type = NLA_U8,
},
[BATADV_ATTR_ISOLATION_MARK] = {
.type = NLA_U32,
},
[BATADV_ATTR_ISOLATION_MASK] = {
.type = NLA_U32,
},
[BATADV_ATTR_BONDING_ENABLED] = {
.type = NLA_U8,
},
[BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED] = {
.type = NLA_U8,
},
[BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED] = {
.type = NLA_U8,
},
[BATADV_ATTR_FRAGMENTATION_ENABLED] = {
.type = NLA_U8,
},
[BATADV_ATTR_GW_BANDWIDTH_DOWN] = {
.type = NLA_U32,
},
[BATADV_ATTR_GW_BANDWIDTH_UP] = {
.type = NLA_U32,
},
[BATADV_ATTR_GW_MODE] = {
.type = NLA_U8,
},
[BATADV_ATTR_GW_SEL_CLASS] = {
.type = NLA_U32,
},
[BATADV_ATTR_HOP_PENALTY] = {
.type = NLA_U8,
},
[BATADV_ATTR_LOG_LEVEL] = {
.type = NLA_U32,
},
[BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED] = {
.type = NLA_U8,
},
[BATADV_ATTR_NETWORK_CODING_ENABLED] = {
.type = NLA_U8,
},
[BATADV_ATTR_ORIG_INTERVAL] = {
.type = NLA_U32,
},
[BATADV_ATTR_ELP_INTERVAL] = {
.type = NLA_U32,
},
[BATADV_ATTR_THROUGHPUT_OVERRIDE] = {
.type = NLA_U32,
},
[BATADV_ATTR_MULTICAST_FANOUT] = {
.type = NLA_U32,
},
}; };
/** /**

View File

@ -1,7 +1,25 @@
/* SPDX-License-Identifier: MIT */ /* SPDX-License-Identifier: MIT */
/* Copyright (C) B.A.T.M.A.N. contributors: /* Copyright (C) 2016-2017 B.A.T.M.A.N. contributors:
* *
* Matthias Schiffer * Matthias Schiffer
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/ */
#ifndef _UAPI_LINUX_BATMAN_ADV_H_ #ifndef _UAPI_LINUX_BATMAN_ADV_H_
@ -9,7 +27,6 @@
#define BATADV_NL_NAME "batadv" #define BATADV_NL_NAME "batadv"
#define BATADV_NL_MCAST_GROUP_CONFIG "config"
#define BATADV_NL_MCAST_GROUP_TPMETER "tpmeter" #define BATADV_NL_MCAST_GROUP_TPMETER "tpmeter"
/** /**
@ -69,72 +86,11 @@ enum batadv_tt_client_flags {
/** /**
* @BATADV_TT_CLIENT_TEMP: this global client has been detected to be * @BATADV_TT_CLIENT_TEMP: this global client has been detected to be
* part of the network but no node has already announced it * part of the network but no nnode has already announced it
*/ */
BATADV_TT_CLIENT_TEMP = (1 << 11), BATADV_TT_CLIENT_TEMP = (1 << 11),
}; };
/**
* enum batadv_mcast_flags_priv - Private, own multicast flags
*
* These are internal, multicast related flags. Currently they describe certain
* multicast related attributes of the segment this originator bridges into the
* mesh.
*
* Those attributes are used to determine the public multicast flags this
* originator is going to announce via TT.
*
* For netlink, if BATADV_MCAST_FLAGS_BRIDGED is unset then all querier
* related flags are undefined.
*/
enum batadv_mcast_flags_priv {
/**
* @BATADV_MCAST_FLAGS_BRIDGED: There is a bridge on top of the mesh
* interface.
*/
BATADV_MCAST_FLAGS_BRIDGED = (1 << 0),
/**
* @BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS: Whether an IGMP querier
* exists in the mesh
*/
BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS = (1 << 1),
/**
* @BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS: Whether an MLD querier
* exists in the mesh
*/
BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS = (1 << 2),
/**
* @BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING: If an IGMP querier
* exists, whether it is potentially shadowing multicast listeners
* (i.e. querier is behind our own bridge segment)
*/
BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING = (1 << 3),
/**
* @BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING: If an MLD querier
* exists, whether it is potentially shadowing multicast listeners
* (i.e. querier is behind our own bridge segment)
*/
BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING = (1 << 4),
};
/**
* enum batadv_gw_modes - gateway mode of node
*/
enum batadv_gw_modes {
/** @BATADV_GW_MODE_OFF: gw mode disabled */
BATADV_GW_MODE_OFF,
/** @BATADV_GW_MODE_CLIENT: send DHCP requests to gw servers */
BATADV_GW_MODE_CLIENT,
/** @BATADV_GW_MODE_SERVER: announce itself as gateway server */
BATADV_GW_MODE_SERVER,
};
/** /**
* enum batadv_nl_attrs - batman-adv netlink attributes * enum batadv_nl_attrs - batman-adv netlink attributes
*/ */
@ -316,171 +272,6 @@ enum batadv_nl_attrs {
*/ */
BATADV_ATTR_BLA_CRC, BATADV_ATTR_BLA_CRC,
/**
* @BATADV_ATTR_DAT_CACHE_IP4ADDRESS: Client IPv4 address
*/
BATADV_ATTR_DAT_CACHE_IP4ADDRESS,
/**
* @BATADV_ATTR_DAT_CACHE_HWADDRESS: Client MAC address
*/
BATADV_ATTR_DAT_CACHE_HWADDRESS,
/**
* @BATADV_ATTR_DAT_CACHE_VID: VLAN ID
*/
BATADV_ATTR_DAT_CACHE_VID,
/**
* @BATADV_ATTR_MCAST_FLAGS: Per originator multicast flags
*/
BATADV_ATTR_MCAST_FLAGS,
/**
* @BATADV_ATTR_MCAST_FLAGS_PRIV: Private, own multicast flags
*/
BATADV_ATTR_MCAST_FLAGS_PRIV,
/**
* @BATADV_ATTR_VLANID: VLAN id on top of soft interface
*/
BATADV_ATTR_VLANID,
/**
* @BATADV_ATTR_AGGREGATED_OGMS_ENABLED: whether the batman protocol
* messages of the mesh interface shall be aggregated or not.
*/
BATADV_ATTR_AGGREGATED_OGMS_ENABLED,
/**
* @BATADV_ATTR_AP_ISOLATION_ENABLED: whether the data traffic going
* from a wireless client to another wireless client will be silently
* dropped.
*/
BATADV_ATTR_AP_ISOLATION_ENABLED,
/**
* @BATADV_ATTR_ISOLATION_MARK: the isolation mark which is used to
* classify clients as "isolated" by the Extended Isolation feature.
*/
BATADV_ATTR_ISOLATION_MARK,
/**
* @BATADV_ATTR_ISOLATION_MASK: the isolation (bit)mask which is used to
* classify clients as "isolated" by the Extended Isolation feature.
*/
BATADV_ATTR_ISOLATION_MASK,
/**
* @BATADV_ATTR_BONDING_ENABLED: whether the data traffic going through
* the mesh will be sent using multiple interfaces at the same time.
*/
BATADV_ATTR_BONDING_ENABLED,
/**
* @BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED: whether the bridge loop
* avoidance feature is enabled. This feature detects and avoids loops
* between the mesh and devices bridged with the soft interface
*/
BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED,
/**
* @BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED: whether the distributed
* arp table feature is enabled. This feature uses a distributed hash
* table to answer ARP requests without flooding the request through
* the whole mesh.
*/
BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED,
/**
* @BATADV_ATTR_FRAGMENTATION_ENABLED: whether the data traffic going
* through the mesh will be fragmented or silently discarded if the
* packet size exceeds the outgoing interface MTU.
*/
BATADV_ATTR_FRAGMENTATION_ENABLED,
/**
* @BATADV_ATTR_GW_BANDWIDTH_DOWN: defines the download bandwidth which
* is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set
* to 'server'.
*/
BATADV_ATTR_GW_BANDWIDTH_DOWN,
/**
* @BATADV_ATTR_GW_BANDWIDTH_UP: defines the upload bandwidth which
* is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set
* to 'server'.
*/
BATADV_ATTR_GW_BANDWIDTH_UP,
/**
* @BATADV_ATTR_GW_MODE: defines the state of the gateway features.
* Possible values are specified in enum batadv_gw_modes
*/
BATADV_ATTR_GW_MODE,
/**
* @BATADV_ATTR_GW_SEL_CLASS: defines the selection criteria this node
* will use to choose a gateway if gw_mode was set to 'client'.
*/
BATADV_ATTR_GW_SEL_CLASS,
/**
* @BATADV_ATTR_HOP_PENALTY: defines the penalty which will be applied
* to an originator message's tq-field on every hop and/or per
* hard interface
*/
BATADV_ATTR_HOP_PENALTY,
/**
* @BATADV_ATTR_LOG_LEVEL: bitmask with to define which debug messages
* should be send to the debug log/trace ring buffer
*/
BATADV_ATTR_LOG_LEVEL,
/**
* @BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED: whether multicast
* optimizations should be replaced by simple broadcast-like flooding
* of multicast packets. If set to non-zero then all nodes in the mesh
* are going to use classic flooding for any multicast packet with no
* optimizations.
*/
BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED,
/**
* @BATADV_ATTR_NETWORK_CODING_ENABLED: whether Network Coding (using
* some magic to send fewer wifi packets but still the same content) is
* enabled or not.
*/
BATADV_ATTR_NETWORK_CODING_ENABLED,
/**
* @BATADV_ATTR_ORIG_INTERVAL: defines the interval in milliseconds in
* which batman sends its protocol messages.
*/
BATADV_ATTR_ORIG_INTERVAL,
/**
* @BATADV_ATTR_ELP_INTERVAL: defines the interval in milliseconds in
* which batman emits probing packets for neighbor sensing (ELP).
*/
BATADV_ATTR_ELP_INTERVAL,
/**
* @BATADV_ATTR_THROUGHPUT_OVERRIDE: defines the throughput value to be
* used by B.A.T.M.A.N. V when estimating the link throughput using
* this interface. If the value is set to 0 then batman-adv will try to
* estimate the throughput by itself.
*/
BATADV_ATTR_THROUGHPUT_OVERRIDE,
/**
* @BATADV_ATTR_MULTICAST_FANOUT: defines the maximum number of packet
* copies that may be generated for a multicast-to-unicast conversion.
* Once this limit is exceeded distribution will fall back to broadcast.
*/
BATADV_ATTR_MULTICAST_FANOUT,
/* add attributes above here, update the policy in netlink.c */ /* add attributes above here, update the policy in netlink.c */
/** /**
@ -509,14 +300,10 @@ enum batadv_nl_commands {
BATADV_CMD_UNSPEC, BATADV_CMD_UNSPEC,
/** /**
* @BATADV_CMD_GET_MESH: Get attributes from softif/mesh * @BATADV_CMD_GET_MESH_INFO: Query basic information about batman-adv
* device
*/ */
BATADV_CMD_GET_MESH, BATADV_CMD_GET_MESH_INFO,
/**
* @BATADV_CMD_GET_MESH_INFO: Alias for @BATADV_CMD_GET_MESH
*/
BATADV_CMD_GET_MESH_INFO = BATADV_CMD_GET_MESH,
/** /**
* @BATADV_CMD_TP_METER: Start a tp meter session * @BATADV_CMD_TP_METER: Start a tp meter session
@ -534,15 +321,9 @@ enum batadv_nl_commands {
BATADV_CMD_GET_ROUTING_ALGOS, BATADV_CMD_GET_ROUTING_ALGOS,
/** /**
* @BATADV_CMD_GET_HARDIF: Get attributes from a hardif of the * @BATADV_CMD_GET_HARDIFS: Query list of hard interfaces
* current softif
*/ */
BATADV_CMD_GET_HARDIF, BATADV_CMD_GET_HARDIFS,
/**
* @BATADV_CMD_GET_HARDIFS: Alias for @BATADV_CMD_GET_HARDIF
*/
BATADV_CMD_GET_HARDIFS = BATADV_CMD_GET_HARDIF,
/** /**
* @BATADV_CMD_GET_TRANSTABLE_LOCAL: Query list of local translations * @BATADV_CMD_GET_TRANSTABLE_LOCAL: Query list of local translations
@ -580,39 +361,6 @@ enum batadv_nl_commands {
*/ */
BATADV_CMD_GET_BLA_BACKBONE, BATADV_CMD_GET_BLA_BACKBONE,
/**
* @BATADV_CMD_GET_DAT_CACHE: Query list of DAT cache entries
*/
BATADV_CMD_GET_DAT_CACHE,
/**
* @BATADV_CMD_GET_MCAST_FLAGS: Query list of multicast flags
*/
BATADV_CMD_GET_MCAST_FLAGS,
/**
* @BATADV_CMD_SET_MESH: Set attributes for softif/mesh
*/
BATADV_CMD_SET_MESH,
/**
* @BATADV_CMD_SET_HARDIF: Set attributes for hardif of the
* current softif
*/
BATADV_CMD_SET_HARDIF,
/**
* @BATADV_CMD_GET_VLAN: Get attributes from a VLAN of the
* current softif
*/
BATADV_CMD_GET_VLAN,
/**
* @BATADV_CMD_SET_VLAN: Set attributes for VLAN of the
* current softif
*/
BATADV_CMD_SET_VLAN,
/* add new commands above here */ /* add new commands above here */
/** /**
@ -675,30 +423,4 @@ enum batadv_tp_meter_reason {
BATADV_TP_REASON_TOO_MANY = 133, BATADV_TP_REASON_TOO_MANY = 133,
}; };
/**
* enum batadv_ifla_attrs - batman-adv ifla nested attributes
*/
enum batadv_ifla_attrs {
/**
* @IFLA_BATADV_UNSPEC: unspecified attribute which is not parsed by
* rtnetlink
*/
IFLA_BATADV_UNSPEC,
/**
* @IFLA_BATADV_ALGO_NAME: routing algorithm (name) which should be
* used by the newly registered batadv net_device.
*/
IFLA_BATADV_ALGO_NAME,
/* add attributes above here, update the policy in soft-interface.c */
/**
* @__IFLA_BATADV_MAX: internal use
*/
__IFLA_BATADV_MAX,
};
#define IFLA_BATADV_MAX (__IFLA_BATADV_MAX - 1)
#endif /* _UAPI_LINUX_BATMAN_ADV_H_ */ #endif /* _UAPI_LINUX_BATMAN_ADV_H_ */

View File

@ -3,7 +3,7 @@ Date: Sun, 5 Jun 2022 23:43:38 +0200
Subject: ramips-mt7621: make DSA images swconfig upgradable Subject: ramips-mt7621: make DSA images swconfig upgradable
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index ab0ff95f7529aa43e69e67a4e3a303242c9b2605..4c3a38db442f06d6c1acf77fb729d93a67e2d52a 100644 index c3e2291a9d91bae234707b1d81277b645bdd6920..64e02a53d30b71144ef4158a06c3a791f8d91f90 100644
--- a/target/linux/ramips/image/mt7621.mk --- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk +++ b/target/linux/ramips/image/mt7621.mk
@@ -180,7 +180,6 @@ endef @@ -180,7 +180,6 @@ endef
@ -14,7 +14,7 @@ index ab0ff95f7529aa43e69e67a4e3a303242c9b2605..4c3a38db442f06d6c1acf77fb729d93a
DEVICE_VENDOR := ASUS DEVICE_VENDOR := ASUS
DEVICE_MODEL := RT-AC57U DEVICE_MODEL := RT-AC57U
DEVICE_ALT0_VENDOR := ASUS DEVICE_ALT0_VENDOR := ASUS
@@ -1286,7 +1285,6 @@ endef @@ -1271,7 +1270,6 @@ endef
TARGET_DEVICES += mts_wg430223 TARGET_DEVICES += mts_wg430223
define Device/netgear_ex6150 define Device/netgear_ex6150
@ -22,7 +22,7 @@ index ab0ff95f7529aa43e69e67a4e3a303242c9b2605..4c3a38db442f06d6c1acf77fb729d93a
$(Device/uimage-lzma-loader) $(Device/uimage-lzma-loader)
DEVICE_VENDOR := NETGEAR DEVICE_VENDOR := NETGEAR
DEVICE_MODEL := EX6150 DEVICE_MODEL := EX6150
@@ -1299,7 +1297,6 @@ endef @@ -1284,7 +1282,6 @@ endef
TARGET_DEVICES += netgear_ex6150 TARGET_DEVICES += netgear_ex6150
define Device/netgear_sercomm_nand define Device/netgear_sercomm_nand
@ -30,7 +30,7 @@ index ab0ff95f7529aa43e69e67a4e3a303242c9b2605..4c3a38db442f06d6c1acf77fb729d93a
$(Device/uimage-lzma-loader) $(Device/uimage-lzma-loader)
BLOCKSIZE := 128k BLOCKSIZE := 128k
PAGESIZE := 2048 PAGESIZE := 2048
@@ -1482,7 +1479,6 @@ endef @@ -1467,7 +1464,6 @@ endef
TARGET_DEVICES += netgear_wax202 TARGET_DEVICES += netgear_wax202
define Device/netgear_wndr3700-v5 define Device/netgear_wndr3700-v5
@ -38,7 +38,7 @@ index ab0ff95f7529aa43e69e67a4e3a303242c9b2605..4c3a38db442f06d6c1acf77fb729d93a
$(Device/netgear_sercomm_nor) $(Device/netgear_sercomm_nor)
$(Device/uimage-lzma-loader) $(Device/uimage-lzma-loader)
IMAGE_SIZE := 15232k IMAGE_SIZE := 15232k
@@ -1819,7 +1815,6 @@ endef @@ -1804,7 +1800,6 @@ endef
TARGET_DEVICES += tplink_tl-wpa8631p-v3 TARGET_DEVICES += tplink_tl-wpa8631p-v3
define Device/ubnt_edgerouter_common define Device/ubnt_edgerouter_common
@ -46,7 +46,7 @@ index ab0ff95f7529aa43e69e67a4e3a303242c9b2605..4c3a38db442f06d6c1acf77fb729d93a
$(Device/uimage-lzma-loader) $(Device/uimage-lzma-loader)
DEVICE_VENDOR := Ubiquiti DEVICE_VENDOR := Ubiquiti
IMAGE_SIZE := 256768k IMAGE_SIZE := 256768k
@@ -2235,7 +2230,6 @@ endef @@ -2220,7 +2215,6 @@ endef
TARGET_DEVICES += zbtlink_zbt-wg2626 TARGET_DEVICES += zbtlink_zbt-wg2626
define Device/zbtlink_zbt-wg3526-16m define Device/zbtlink_zbt-wg3526-16m
@ -54,7 +54,7 @@ index ab0ff95f7529aa43e69e67a4e3a303242c9b2605..4c3a38db442f06d6c1acf77fb729d93a
$(Device/uimage-lzma-loader) $(Device/uimage-lzma-loader)
IMAGE_SIZE := 16064k IMAGE_SIZE := 16064k
DEVICE_VENDOR := Zbtlink DEVICE_VENDOR := Zbtlink
@@ -2248,7 +2242,6 @@ endef @@ -2233,7 +2227,6 @@ endef
TARGET_DEVICES += zbtlink_zbt-wg3526-16m TARGET_DEVICES += zbtlink_zbt-wg3526-16m
define Device/zbtlink_zbt-wg3526-32m define Device/zbtlink_zbt-wg3526-32m

View File

@ -1,115 +0,0 @@
From: David Bauer <mail@david-bauer.net>
Date: Tue, 15 Nov 2022 15:25:40 +0100
Subject: ath79: combine OCEDO dual firmware-partitions
In order to maximize the available space on OCEDO boards using a
dual-image partition layout, combine the two OS partitions into a single
partition.
This allows users to access more usable space for additional packages.
Don't limit the usable image size to the size of a single OS partition.
The initial installation has to be done with an older version of OpenWrt
in case the generated image exceeds the space of a single OS
partition in the future.
Signed-off-by: David Bauer <mail@david-bauer.net>
(cherry picked from commit eded295cd7fd53bfa5afcb67a1b91cfda0523ba6)
diff --git a/target/linux/ath79/dts/ar9344_ocedo_raccoon.dts b/target/linux/ath79/dts/ar9344_ocedo_raccoon.dts
index 0bbeb2b533b3fbbdcce53e094412d459ee762d85..3ecd20e2aa8fe04164cddbc84e0eb800e049c011 100644
--- a/target/linux/ath79/dts/ar9344_ocedo_raccoon.dts
+++ b/target/linux/ath79/dts/ar9344_ocedo_raccoon.dts
@@ -91,15 +91,10 @@
};
partition@50000 {
+ /* Dual-Flash layout combined */
compatible = "denx,uimage";
label = "firmware";
- reg = <0x050000 0x740000>;
- };
-
- partition@790000 {
- label = "vendor";
- reg = <0x790000 0x740000>;
- read-only;
+ reg = <0x050000 0xe80000>;
};
partition@ed0000 {
diff --git a/target/linux/ath79/dts/qca9558_ocedo_koala.dts b/target/linux/ath79/dts/qca9558_ocedo_koala.dts
index 66f8c6589b20221edc41a2f882b28229ff8633b9..de9e1bc19c4d03707f5b921ee5e9fe7422f461bb 100644
--- a/target/linux/ath79/dts/qca9558_ocedo_koala.dts
+++ b/target/linux/ath79/dts/qca9558_ocedo_koala.dts
@@ -88,15 +88,10 @@
};
partition@50000 {
+ /* Dual-Flash layout combined */
compatible = "denx,uimage";
label = "firmware";
- reg = <0x050000 0x740000>;
- };
-
- partition@790000 {
- label = "vendor";
- reg = <0x790000 0x740000>;
- read-only;
+ reg = <0x050000 0xe80000>;
};
partition@ed0000 {
diff --git a/target/linux/ath79/dts/qca9558_ocedo_ursus.dts b/target/linux/ath79/dts/qca9558_ocedo_ursus.dts
index 2dc4c07e918c50eb522100eb7f72c8804d5ba5fb..f8b3681bb7f143a498d5cb64897af335b970c43b 100644
--- a/target/linux/ath79/dts/qca9558_ocedo_ursus.dts
+++ b/target/linux/ath79/dts/qca9558_ocedo_ursus.dts
@@ -59,15 +59,10 @@
};
partition@50000 {
+ /* Dual-Flash layout combined */
compatible = "denx,uimage";
label = "firmware";
- reg = <0x050000 0x740000>;
- };
-
- partition@790000 {
- label = "vendor";
- reg = <0x790000 0x740000>;
- read-only;
+ reg = <0x050000 0xe80000>;
};
partition@ed0000 {
diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
index f1542e4e38f7540dd9facf4c40f0b271b9ea1e45..87d01a42eda274f9197f3382d955b87ecf615f7d 100644
--- a/target/linux/ath79/image/generic.mk
+++ b/target/linux/ath79/image/generic.mk
@@ -1803,7 +1803,7 @@ define Device/ocedo_koala
DEVICE_MODEL := Koala
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca988x-ct
SUPPORTED_DEVICES += koala
- IMAGE_SIZE := 7424k
+ IMAGE_SIZE := 14848k
endef
TARGET_DEVICES += ocedo_koala
@@ -1811,7 +1811,7 @@ define Device/ocedo_raccoon
SOC := ar9344
DEVICE_VENDOR := Ocedo
DEVICE_MODEL := Raccoon
- IMAGE_SIZE := 7424k
+ IMAGE_SIZE := 14848k
endef
TARGET_DEVICES += ocedo_raccoon
@@ -1820,7 +1820,7 @@ define Device/ocedo_ursus
DEVICE_VENDOR := Ocedo
DEVICE_MODEL := Ursus
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca988x-ct
- IMAGE_SIZE := 7424k
+ IMAGE_SIZE := 14848k
endef
TARGET_DEVICES += ocedo_ursus

View File

@ -1,55 +0,0 @@
From: David Bauer <mail@david-bauer.net>
Date: Thu, 17 Nov 2022 22:53:33 +0100
Subject: ath79: combine UniFi AC dual firmware-partitions
In order to maximize the available space on UniFi AC boards using a
dual-image partition layout, combine the two OS partitions into a single
partition.
This allows users to access more usable space for additional packages.
Don't limit the usable image size to the size of a single OS partition.
The initial installation has to be done with an older version of OpenWrt
in case the generated image exceeds the space of a single kernel
partition in the future.
Signed-off-by: David Bauer <mail@david-bauer.net>
(cherry picked from commit e4a76673ff4f655ba0698d9edb9efbacd0f82fff)
diff --git a/target/linux/ath79/dts/qca9563_ubnt_unifiac.dtsi b/target/linux/ath79/dts/qca9563_ubnt_unifiac.dtsi
index 2e407c348642cf5145f79c15288856fa141b0512..6704ec983b0beed5421a59f663cf8db6d650f559 100644
--- a/target/linux/ath79/dts/qca9563_ubnt_unifiac.dtsi
+++ b/target/linux/ath79/dts/qca9563_ubnt_unifiac.dtsi
@@ -69,17 +69,12 @@
};
partition@70000 {
+ /* Combine kernel0 & kernel1 */
label = "firmware";
- reg = <0x070000 0x790000>;
+ reg = <0x070000 0xf20000>;
compatible = "denx,uimage";
};
- partition@800000 {
- label = "kernel1";
- reg = <0x800000 0x790000>;
- read-only;
- };
-
partition@f90000 {
label = "bs";
reg = <0xf90000 0x020000>;
diff --git a/target/linux/ath79/image/generic-ubnt.mk b/target/linux/ath79/image/generic-ubnt.mk
index 7642c59e02848741996d6f9dcaf923d5dbaf6880..d6898c79d6b4d51d19813781e086db8086537318 100644
--- a/target/linux/ath79/image/generic-ubnt.mk
+++ b/target/linux/ath79/image/generic-ubnt.mk
@@ -221,7 +221,7 @@ TARGET_DEVICES += ubnt_unifi
define Device/ubnt_unifiac
DEVICE_VENDOR := Ubiquiti
SOC := qca9563
- IMAGE_SIZE := 7744k
+ IMAGE_SIZE := 15488k
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca988x-ct
endef

View File

@ -9,11 +9,6 @@ local ATH10K_PACKAGES_QCA9887 = {
local ATH10K_PACKAGES_QCA9888 = {} local ATH10K_PACKAGES_QCA9888 = {}
-- Aerohive
device('aerohive-hiveap-121', 'aerohive_hiveap-121')
-- GL.iNet -- GL.iNet
device('gl.inet-gl-ar300m-nor', 'glinet_gl-ar300m-nor', { device('gl.inet-gl-ar300m-nor', 'glinet_gl-ar300m-nor', {

View File

@ -7,22 +7,10 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', {
-- Cudy -- Cudy
device('cudy-wr1300', 'cudy_wr1300', {
factory = false,
})
device('cudy-wr2100', 'cudy_wr2100', { device('cudy-wr2100', 'cudy_wr2100', {
factory = false, factory = false,
}) })
device('cudy-x6-v1', 'cudy_x6-v1', {
factory = false,
})
device('cudy-x6-v2', 'cudy_x6-v2', {
factory = false,
})
-- D-Link -- D-Link
@ -73,7 +61,6 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', {
}, },
}) })
-- TP-Link -- TP-Link
device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', { device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', {
@ -84,21 +71,18 @@ device('tp-link-re500-v1', 'tplink_re500-v1')
device('tp-link-re650-v1', 'tplink_re650-v1') device('tp-link-re650-v1', 'tplink_re650-v1')
-- Ubiquiti -- Ubiquiti
device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', { device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', {
factory = false, factory = false,
}) })
-- Wavlink -- Wavlink
device('wavlink-ws-wn572hp3-4g', 'wavlink_ws-wn572hp3-4g', { device('wavlink-ws-wn572hp3-4g', 'wavlink_ws-wn572hp3-4g', {
factory = false, factory = false,
}) })
-- Xiaomi -- Xiaomi
device('xiaomi-mi-router-4a-gigabit-edition', 'xiaomi_mi-router-4a-gigabit', { device('xiaomi-mi-router-4a-gigabit-edition', 'xiaomi_mi-router-4a-gigabit', {
@ -113,7 +97,6 @@ device('xiaomi-mi-router-3g-v2', 'xiaomi_mi-router-3g-v2', {
factory = false, factory = false,
}) })
-- ZBT -- ZBT
device('zbtlink-zbt-wg3526-16m', 'zbtlink_zbt-wg3526-16m', { device('zbtlink-zbt-wg3526-16m', 'zbtlink_zbt-wg3526-16m', {