Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • firmware/gluon
  • 0x4A6F/gluon
  • patrick/gluon
3 results
Show changes
Commits on Source (7)
Showing with 219 additions and 13 deletions
...@@ -21,7 +21,7 @@ the future development of Gluon. ...@@ -21,7 +21,7 @@ the future development of Gluon.
Please refrain from using the `master` branch for anything else but development purposes! Please refrain from using the `master` branch for anything else but development purposes!
Use the most recent release instead. You can list all releases by running `git tag` Use the most recent release instead. You can list all releases by running `git tag`
and switch to one by running `git checkout v2020.1.3 && make update`. and switch to one by running `git checkout v2020.2 && make update`.
If you're using the autoupdater, do not autoupdate nodes with anything but releases. If you're using the autoupdater, do not autoupdate nodes with anything but releases.
If you upgrade using random master commits the nodes *will break* eventually. If you upgrade using random master commits the nodes *will break* eventually.
......
...@@ -24,7 +24,7 @@ copyright = '2015-2020, Project Gluon' ...@@ -24,7 +24,7 @@ copyright = '2015-2020, Project Gluon'
author = 'Project Gluon' author = 'Project Gluon'
# The short X.Y version # The short X.Y version
version = '2020.1+' version = '2020.2'
# The full version, including alpha/beta/rc tags # The full version, including alpha/beta/rc tags
release = version release = version
......
...@@ -21,4 +21,6 @@ you can configure this via the uci section ``gluon-core.wireless``:: ...@@ -21,4 +21,6 @@ you can configure this via the uci section ``gluon-core.wireless``::
uci set gluon-core.@wireless[0].preserve_channels='1' uci set gluon-core.@wireless[0].preserve_channels='1'
When channels should be preserved, toggling the outdoor mode will have no effect on the channel settings.
Therefore, the Outdoor mode settings won't be displayed in config mode.
Keep in mind that nodes running wifi interfaces on custom channels can't mesh with default nodes anymore! Keep in mind that nodes running wifi interfaces on custom channels can't mesh with default nodes anymore!
...@@ -78,6 +78,7 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre ...@@ -78,6 +78,7 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre
:caption: Releases :caption: Releases
:maxdepth: 1 :maxdepth: 1
releases/v2020.2
releases/v2020.1.3 releases/v2020.1.3
releases/v2020.1.2 releases/v2020.1.2
releases/v2020.1.1 releases/v2020.1.1
......
Gluon 2020.2
============
Added hardware support
----------------------
ath79-generic
~~~~~~~~~~~~~
* GL.iNet
- GL-AR750S
* TP-Link
- CPE220 (v3)
ipq40xx-generic
~~~~~~~~~~~~~~~
* EnGenius
- ENS620EXT [#outdoor]_
* Linksys
- EA6350 (v3)
lantiq-xrx200
~~~~~~~~~~~~~
* TP-Link
- TD-W8970
lantiq-xway
~~~~~~~~~~~
* NETGEAR
- DGN3500B
ramips-mt76x8
~~~~~~~~~~~~~
* Cudy
- WR1000
x86-legacy [#newtarget]_
~~~~~~~~~~~~~~~~~~~~~~~~
* Devices older than the Pentium 4
.. [#newtarget]
This is a new target.
.. [#outdoor]
This device is supposed to be set up outdoors and will therefore have its outdoor mode flag automatically enabled.
Major changes
-------------
Device Classes
~~~~~~~~~~~~~~
Devices are now categorized into device classes. This device class can determine which features
as well as packages are installed on the device when building images.
Currently there are two classes used in Gluon, *tiny* and *standard*. All devices with less than 64M of RAM or
less than 7M of usable firmware space are assigned to the tiny class.
WPA3 support for Private WLAN
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The private WLAN now supports WPA3-SAE key exchange as well as management frame protection (802.11w).
For this to work, the firmware needs to be built with the *wireless-encryption-wpa3* feature.
OWE on Client Network
~~~~~~~~~~~~~~~~~~~~~
Gluon now allows to configure a VAP for the client network which supports opportunistic encryption on the
client network for devices which support the OWE security type (also known as Enhanced Open).
This encrypted VAP can be the only available access point or be configured in addition to an unencrypted VAP.
In the latter case, the transition mode can be enabled, which enables compatible devices to automatically
connect to the encrypted VAP while legacy devices continue to use the unencrypted connection.
There are issues with some devices running Android 9 when connecting to a transition mode enabled network. See the site documentation for more information.
SAE Encrypted Mesh Links
~~~~~~~~~~~~~~~~~~~~~~~~
Mesh links can now be operated in an encrypted mode using SAE authentication. For this to work, a common shared secret
has to be distributed to all participating nodes using the site.conf.
Responsive status page
~~~~~~~~~~~~~~~~~~~~~~
The status page design is now responsive and reflows better on mobile devices.
Primary domain code
~~~~~~~~~~~~~~~~~~~
The primary domain code is now visible on the node status page as well as in the respondd information
emitted by the node.
Logging
~~~~~~~
The new *gluon-logging* package allows to configure a remote syslog server using the site.conf.
This package can only be included when *gluon-web-logging* is excluded.
Peer cleanup in fastd
~~~~~~~~~~~~~~~~~~~~~
fastd peers and groups are now removed on update in case they do not exist in the new site configuration.
To preserve a custom peer across updates, add the *preserve* key to the peer's UCI configuration and set it to ``1``.
Bugfixes
--------
- The WAN MAC address now matches the one defined in OpenWrt if VXLAN is enabled for the selected domain.
- *gluon-reload* now reloads all relevant services.
- Disabling outdoor mode and enabling meshing in the config mode can now be performed in a single step.
- Fixed section visiblity with enabled outdoor mode in config mode.
Site changes
------------
site.mk
~~~~~~~
Starting with version 19.07 OpenWrt ships the urngd entropy daemon by default.
It replaces the haveged daemon, for which we removed the support in Gluon. Remove ``haveged`` from your package selection.
Internal
--------
Editorconfig
~~~~~~~~~~~~
Gluon now ships a *editorconfig* file to allow compatible editors to automatically apply key aspects of Gluon's code style.
Continuous Integration
~~~~~~~~~~~~~~~~~~~~~~
* Jenkins
- The CI now has a test stage to verify Gluons runtime functionality.
* GitHub Actions
- GitHub actions is now enabled for the Gluon project, build-testing all available targets.
Build system
~~~~~~~~~~~~
- Source code minification can now be skipped by enabling the GLUON_MINIFY flag.
- Enabling the GLUON_AUTOREMOVE flag will remove package build directories after they are built.
This reduces space consumption at the expense of subsequent builds being slower.
Known issues
------------
* Out of memory situations with high client count on ath9k.
(`#1768 <https://github.com/freifunk-gluon/gluon/issues/1768>`_)
* 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.
-- This is an example site configuration for Gluon v2020.1.3 -- This is an example site configuration for Gluon v2020.2
-- --
-- Take a look at the documentation located at -- Take a look at the documentation located at
-- https://gluon.readthedocs.io/ for details. -- https://gluon.readthedocs.io/ for details.
......
...@@ -8,7 +8,7 @@ Gluon's releases are managed using `Git tags`_. If you are just getting ...@@ -8,7 +8,7 @@ Gluon's releases are managed using `Git tags`_. If you are just getting
started with Gluon we recommend to use the latest stable release of Gluon. started with Gluon we recommend to use the latest stable release of Gluon.
Take a look at the `list of gluon releases`_ and notice the latest release, Take a look at the `list of gluon releases`_ and notice the latest release,
e.g. *v2020.1.3*. Always get Gluon using git and don't try to download it e.g. *v2020.2*. Always get Gluon using git and don't try to download it
as a Zip archive as the archive will be missing version information. as a Zip archive as the archive will be missing version information.
Please keep in mind that there is no "default Gluon" build; a site configuration Please keep in mind that there is no "default Gluon" build; a site configuration
...@@ -44,7 +44,7 @@ Building the images ...@@ -44,7 +44,7 @@ Building the images
------------------- -------------------
To build Gluon, first check out the repository. Replace *RELEASE* with the To build Gluon, first check out the repository. Replace *RELEASE* with the
version you'd like to checkout, e.g. *v2020.1.3*. version you'd like to checkout, e.g. *v2020.2*.
:: ::
......
return function(form, uci) return function(form, uci)
local platform = require 'gluon.platform' local platform = require 'gluon.platform'
local wireless = require 'gluon.wireless'
if not (platform.is_outdoor_device() and platform.device_uses_11a(uci)) then if not (platform.is_outdoor_device() and platform.device_uses_11a(uci)) then
-- only visible on wizard for outdoor devices -- only visible on wizard for outdoor devices
return return
end end
if wireless.preserve_channels(uci) then
-- Don't show if channel should be preserved
return
end
local pkg_i18n = i18n 'gluon-config-mode-outdoor' local pkg_i18n = i18n 'gluon-config-mode-outdoor'
local section = form:section(Section, nil, pkg_i18n.translate( local section = form:section(Section, nil, pkg_i18n.translate(
......
...@@ -54,7 +54,7 @@ end ...@@ -54,7 +54,7 @@ end
local function get_channel(radio, config) local function get_channel(radio, config)
local channel local channel
if uci:get_first('gluon-core', 'wireless', 'preserve_channels') then if wireless.preserve_channels(uci) then
-- preserved channel always wins -- preserved channel always wins
channel = radio.channel channel = radio.channel
elseif (radio.hwmode == '11a' or radio.hwmode == '11na') and is_outdoor() then elseif (radio.hwmode == '11a' or radio.hwmode == '11na') and is_outdoor() then
......
...@@ -96,4 +96,8 @@ function M.foreach_radio(uci, f) ...@@ -96,4 +96,8 @@ function M.foreach_radio(uci, f)
end end
end end
function M.preserve_channels(uci)
return uci:get_first('gluon-core', 'wireless', 'preserve_channels')
end
return M return M
...@@ -559,14 +559,13 @@ static int parse_tt_local(struct nl_msg *msg, ...@@ -559,14 +559,13 @@ static int parse_tt_local(struct nl_msg *msg,
} }
static void update_tqs(void) { static void update_tqs(void) {
static const struct ether_addr unspec = {};
struct router *router; struct router *router;
bool update_originators = false; bool update_originators = false;
struct ether_addr unspec;
struct batadv_nlquery_opts opts; struct batadv_nlquery_opts opts;
int ret; int ret;
// reset TQs // reset TQs
memset(&unspec, 0, sizeof(unspec));
foreach(router, G.routers) { foreach(router, G.routers) {
router->tq = 0; router->tq = 0;
if (ether_addr_equal(router->originator, unspec)) if (ether_addr_equal(router->originator, unspec))
...@@ -609,12 +608,12 @@ static void update_tqs(void) { ...@@ -609,12 +608,12 @@ static void update_tqs(void) {
foreach(router, G.routers) { foreach(router, G.routers) {
if (router->tq == 0) { if (router->tq == 0) {
if (ether_addr_equal(router->originator, unspec)) if (ether_addr_equal(router->originator, unspec))
fprintf(stderr, DEBUG_MSG(
"Unable to find router " F_MAC " in transtable_{global,local}\n", "Unable to find router " F_MAC " in transtable_{global,local}",
F_MAC_VAR(router->src)); F_MAC_VAR(router->src));
else else
fprintf(stderr, DEBUG_MSG(
"Unable to find TQ for originator " F_MAC " (router " F_MAC ")\n", "Unable to find TQ for originator " F_MAC " (router " F_MAC ")",
F_MAC_VAR(router->originator), F_MAC_VAR(router->originator),
F_MAC_VAR(router->src)); F_MAC_VAR(router->src));
} }
......
#pragma once
#include <stdint.h> #include <stdint.h>
#include <string.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#define F_MAC "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx" #define F_MAC "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx"
......
...@@ -142,7 +142,7 @@ uci:foreach('wireless', 'wifi-device', function(config) ...@@ -142,7 +142,7 @@ uci:foreach('wireless', 'wifi-device', function(config)
end) end)
if has_5ghz_radio() then if has_5ghz_radio() and not wireless.preserve_channels(uci) then
local r = f:section(Section, translate("Outdoor Installation"), translate( local r = f:section(Section, translate("Outdoor Installation"), translate(
"Configuring the node for outdoor use tunes the 5 GHz radio to a frequency " "Configuring the node for outdoor use tunes the 5 GHz radio to a frequency "
.. "and transmission power that conforms with the local regulatory requirements. " .. "and transmission power that conforms with the local regulatory requirements. "
......