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
Select Git revision
  • experimental
  • master
  • v2021.1.2-ffs
  • v2021.1.1-ffs
  • nrb/gluon-master-cpe510
  • v2021.1-ffs
  • v2020.2.3-ffs
  • nrbffs/fastd-remove-delay
  • v2020.2.2-ffs
  • v2020.2.1-ffs
  • v2020.2-ffs
  • v2020.2.x
  • v2020.1.3-ffs
  • v2020.1.1-ffs
  • v2020.1-ffs
  • v2019.1.2-ffs
  • v2019.1.1-ffs
  • nrb/test-radv-filter
  • v2019.1-ffs
  • nrbffs/netgear-ex6120
  • v2018.2.3-ffs
  • 0x4A6F-rpi4
  • 0x4A6F-master
  • v2018.2.2-ffs
  • v2018.2.x
  • v2016.2.4-batmanbug
  • radv-filterd
  • v2016.2.x
  • hoodselector
  • v2016.1.x
  • babel
  • v2015.1.x
  • 2014.4.x
  • 2014.3.x
  • v2014.1
  • v2014.2
  • v2014.3
  • v2014.3.1
  • v2014.4
  • v2015.1
  • v2015.1.1
  • v2015.1.2
  • v2016.1
  • v2016.1.1
  • v2016.1.2
  • v2016.1.3
  • v2016.1.4
  • v2016.1.5
  • v2016.1.6
  • v2016.2
  • v2016.2.1
  • v2016.2.2
  • v2016.2.3
  • v2016.2.4
  • v2016.2.5
  • v2016.2.6
  • v2016.2.7
  • v2017.1
  • v2017.1.1
  • v2017.1.2
  • v2017.1.3
  • v2017.1.4
  • v2017.1.5
  • v2017.1.6
  • v2017.1.7
  • v2017.1.8
  • v2018.1
  • v2018.1.1
  • v2018.1.2
  • v2018.1.3
  • v2018.1.4
  • v2018.2
  • v2018.2-ffs0.1
  • v2018.2.1
  • v2018.2.1-ffs0.1
  • v2018.2.2-ffs0.1
  • v2018.2.3-ffs0.1
  • v2019.1-ffs0.1
  • v2019.1.1-ffs0.1
  • v2019.1.2-ffs0.1
  • v2020.1-ffs0.1
  • v2020.1.1-ffs0.1
  • v2020.1.3-ffs0.1
  • v2020.2
  • v2020.2-ffs0.1
  • v2020.2.1-ffs0.1
  • v2020.2.2-ffs0.1
  • v2020.2.3-ffs0.1
  • v2020.2.3-ffs0.2
  • v2020.2.3-ffs0.3
  • v2020.2.x-ffs0.1
  • v2021.1-ffs0.1
  • v2021.1.1-ffs0.1
  • v2021.1.1-ffs0.2
  • v2021.1.1-ffs0.3
  • v2021.1.1-ffs0.4
  • v2021.1.2-ffs0.1
  • v2021.1.2-ffs0.2
98 results

Target

Select target project
No results found
Select Git revision
  • experimental
  • v2023.2.5-ffs
  • nrb/ex400-remove-wps
  • nrb/airmax-test
  • v2023.2.4-ffs
  • nrb/ar9344-reset-sequence
  • autinerd/experimental-openwrt-24.10
  • v2023.2.3-ffs
  • v2023.2.2-ffs
  • v2023.2-ffs
  • v2023.1-ffs
  • v2022.1.4-ffs
  • feature/addMikrotikwAP
  • v2022.1.3-ffs
  • v2021.1.2-ffs
  • v2022.1.1-ffs
  • master
  • v2021.1.1-ffs
  • nrb/gluon-master-cpe510
  • v2021.1-ffs
  • v2020.2.3-ffs
  • nrbffs/fastd-remove-delay
  • v2020.2.2-ffs
  • v2020.2.1-ffs
  • v2020.2-ffs
  • v2020.1.3-ffs
  • v2020.1.1-ffs
  • v2020.1-ffs
  • v2019.1.2-ffs
  • v2019.1.1-ffs
  • nrb/test-radv-filter
  • v2019.1-ffs
  • nrbffs/netgear-ex6120
  • v2018.2.3-ffs
  • 0x4A6F-rpi4
  • 0x4A6F-master
  • v2018.2.2-ffs
  • experimental-2022-09-24
  • experimental-2022-09-24-base
  • experimental-2023-03-11
  • experimental-2023-03-11-base
  • experimental-2023-03-12
  • experimental-2023-03-12-base
  • experimental-2023-03-16
  • experimental-2023-03-16-base
  • experimental-2023-03-20
  • experimental-2023-03-20-base
  • experimental-2023-03-23
  • experimental-2023-03-23-base
  • experimental-2023-03-25
  • experimental-2023-03-25-base
  • experimental-2023-03-26
  • experimental-2023-03-26-base
  • experimental-2023-03-30
  • experimental-2023-03-30-base
  • experimental-2023-03-31
  • experimental-2023-03-31-base
  • experimental-2023-04-01
  • experimental-2023-04-01-base
  • experimental-2023-04-08
  • experimental-2023-04-08-base
  • experimental-2023-04-10
  • experimental-2023-04-10-base
  • experimental-2023-04-13
  • experimental-2023-04-13-base
  • experimental-2023-04-15
  • experimental-2023-04-15-base
  • experimental-2023-04-16
  • experimental-2023-04-16-base
  • experimental-2023-04-18
  • experimental-2023-04-18-base
  • experimental-2023-04-20
  • experimental-2023-04-20-base
  • experimental-2023-04-26
  • experimental-2023-04-26-base
  • experimental-2023-04-28
  • experimental-2023-04-28-base
  • experimental-2023-04-30
  • experimental-2023-04-30-base
  • experimental-2023-05-02
  • experimental-2023-05-02-base
  • experimental-2023-05-03
  • experimental-2023-05-03-base
  • experimental-2023-05-12
  • experimental-2023-05-12-base
  • experimental-2023-05-21
  • experimental-2023-05-21-base
  • experimental-2023-05-25
  • experimental-2023-05-25-base
  • experimental-2023-07-02
  • experimental-2023-07-02-base
  • experimental-2023-07-04
  • experimental-2023-07-04-base
  • experimental-2023-07-12
  • experimental-2023-07-12-base
  • experimental-2023-07-16
  • experimental-2023-07-16-base
  • experimental-2023-08-04
  • experimental-2023-08-04-base
  • experimental-2023-08-10
  • experimental-2023-08-10-base
  • experimental-2023-09-08
  • experimental-2023-09-08-base
  • experimental-2023-09-09
  • experimental-2023-09-09-base
  • experimental-2023-09-10
  • experimental-2023-09-10-base
  • experimental-2023-09-11
  • experimental-2023-09-11-base
  • experimental-2023-09-12
  • experimental-2023-09-12-base
  • experimental-2023-09-13
  • experimental-2023-09-13-base
  • experimental-2023-09-15
  • experimental-2023-09-15-base
  • experimental-2023-09-16
  • experimental-2023-09-16-base
  • experimental-2023-09-18
  • experimental-2023-09-18-base
  • experimental-2023-09-20
  • experimental-2023-09-20-base
  • experimental-2023-09-27
  • experimental-2023-09-27-base
  • experimental-2023-09-28
  • experimental-2023-09-28-base
  • experimental-2023-09-29
  • experimental-2023-09-29-base
  • experimental-2023-10-02
  • experimental-2023-10-02-base
  • experimental-2023-10-13
  • experimental-2023-10-13-base
  • experimental-2023-10-14
  • experimental-2023-10-14-base
  • experimental-2023-10-16
  • experimental-2023-10-16-base
  • experimental-2023-10-23
  • experimental-2023-10-23-base
137 results
Show changes

Commits on Source 66

  • Ralf Jung's avatar
  • Matthias Schiffer's avatar
  • Matthias Schiffer's avatar
    gluon-config-mode-geo-location: fix source/i18n mismatch · a152a6e0
    Matthias Schiffer authored
    The text was changed in the i18n files, but the corresponding change in the
    Lua sources seemingly got lost during a rebase.
    
    Closes #1611
    
    (cherry picked from commit 2aa324ecf7f38ea2a59aee0eaf745c54c50858bb)
    a152a6e0
  • Martin Weinelt's avatar
    gluon-status-page: rebuild status-page.js after 02dfc664 · b4a37a44
    Martin Weinelt authored
    The original commit only applied its changes to the source file and did
    not rebuild the minified file, therefore the change never went live.
    b4a37a44
  • David Bauer's avatar
    gluon-core: distribute dualband radios (#1606) · 4b236263
    David Bauer authored
    
    This commit distributes dualband radios evenly on 2.4 GHz and 5GHz with
    2.4 GHz being prioritised higher than 5 GHz. This means in case a device
    has only a single radio and this radio supports operation in both bands,
    it will be set to 2.4 GHz.
    
    Tested-by: default avatarMartin Weinelt <martin@darmstadt.freifunk.net>
    Signed-off-by: default avatarDavid Bauer <mail@david-bauer.net>
    4b236263
  • Martin Weinelt's avatar
  • Martin Weinelt's avatar
    modules: update OpenWrt · 17d22a56
    Martin Weinelt authored
    939fa07b04 kernel: bump 4.14 to 4.14.93
    cae263227f kernel: bump 4.9 to 4.9.150
    f34ad1a8f0 mt76: update to the latest version
    d58c6aedb6 tools/firmware-utils: fix sysupgrade typo in mkdapimg2
    0cef35f096 tools/firmware-utils: fix sysupgrade typo in mkdapimg
    0d6eaa0ba5 octeon: fix typo in platform.sh
    069fda746e fstools: update to the latest master branch
    3b4e779e93 fstools: update to git HEAD
    d7275c0312 fstools: filter unknown action in mount.hotplug script
    e0daa62af6 fstools: Install mount.hotplug and 10-fstab.defaults as 600
    4c0e15fc16 base-files: install missing /etc/iproute2/ematch_map
    c3fef269d6 cns3xxx: use actual size reads for PCIe
    367ccf7a2d kernel: bump 4.14 to 4.14.91
    b9dcf2de5f kernel: bump 4.9 to 4.9.148
    a8cc06c537 mac80211: brcmfmac: backport firmware loading changes & fix memory bugs
    c5c20f510a odhcpd: noop to fix PKG_SOURCE_DATE
    62ddfaff32 odhcpd: filter routes based on prefix_filter
    8a9b0b95df apm821xx: switch MX60(W)'s recovery images to multi-image method
    afcdf099b7 kernel: fix f2fs on big endian machines
    016a71a18a odhcpd: backport prefix filter/NETEV_ADDR6LIST_CHANGE event fixes
    806b570a35 ath10k: update QCA4019 firmware
    baa00b2182 brcm2708-gpu-fw: update to git HEAD
    5af6b7976f bcm53xx: backport DTS changes queued for the 4.21
    dbbba84ed4 bcm53xx: rename dts backport patches changing their prefixes
    
    Compile-tested: ar71xx, ramips-{mt7621,mt76x8}, x86-64
    Runtime-tested: ramips-mt7621 (D-Link DIR860L)
    17d22a56
  • Manu.WTF's avatar
    ramips-mt7620: add support for Nexx WT3020 (8M) · dc7ec574
    Manu.WTF authored
    dc7ec574
  • Malte Moeller's avatar
    change device identifier to match machine identifier · 657e2e47
    Malte Moeller authored
    this matches the output of
    lua -e 'print(require(platform_info).get_image_name())'
    
    This way the manifest file is accepted by the autoupdater
    657e2e47
  • Martin Weinelt's avatar
  • Martin Weinelt's avatar
    gluon-core: fix unifiac-{lite,pro} primary mac selection · 35b34e2d
    Martin Weinelt authored
    fixes #1629
    35b34e2d
  • Martin Weinelt's avatar
    modules: update OpenWrt · f845cd98
    Martin Weinelt authored
    6e16dd1234 mt76: update to the latest version
    76037756d0 kernel: bump 4.14 to 4.14.94
    455bfd1065 kernel: bump 4.9 to 4.9.151
    fafd7691e6 opkg: update to latest Git head
    e789bd2243 opkg: drop argument from check_signature in opkg.conf
    3603c2321d ramips: mt7621: fix 5GHz WiFi LED on ZBT WG3526
    7f98cd8d50 odhcpd: fix onlink IA check (FS#2060)
    abd0f7995e kmod-sched-cake: bump to latest cake
    
    Compile-tested: ar71xx-{tiny,generic}, ramips-mt7621, x86-64
    f845cd98
  • Martin Weinelt's avatar
    modules: update routing · 1ae362f8
    Martin Weinelt authored
    ea345d1 Merge pull request #442 from ecsv/batadv-18.06
    0231308 batman-adv: Merge bugfixes from 2019.0
    
    Compile-tested: ar71xx-{tiny,generic}, ramips-mt7621, x86-64
    Runtime-tested: ar71xx-generic (TP-Link TL-WR1043NDv2)
    1ae362f8
  • Martin Weinelt's avatar
    modules: update OpenWrt · fcb08eaa
    Martin Weinelt authored
    13eeee7b2b mt76: update to the latest version
    ac1ce25671 OpenWrt v18.06.2: revert to branch defaults
    a02809f61b OpenWrt v18.06.2: adjust config defaults
    cddd7b4c77 base-files: config_get: prevent filename globbing
    e6162b2127 dnsmasq: backport missing braces fix
    d4178c8f47 build: fix umask detection bashism
    b98b55a64f build: fix STAGING_DIR cleaning for packages
    e6c2f3feb1 ar71xx: use correct wan mac address for the TP-Link Archer C7 v4
    2c7a1ccaea ar71xx: Add usb drivers in Archer C7 v4/v5 images
    39c3b5139f openssl: bump to 1.0.2q
    80ed6ebc56 dnsmasq: backport upstream static lease fix
    4f2199f528 wireguard: bump to 0.0.20190123
    8c105c62e4 wireguard: Update to snapshot 0.0.20181218
    1447924c95 mbedtls: update to 2.14.1 for 18.06
    e5a0b6cde0 uhttpd: disable concurrent requests by default
    11bfb39e39 kernel: bump 4.14 to 4.14.95
    dd5fa217dc kernel: bump 4.9 to 4.9.152
    91d3b87353 uboot-fritz4040: fix crash caused by interaction with gcc 7.1+
    
    Compile-tested: ar71xx-generic, mpc85xx-generic, ramips-mt7621
    Runtime-tested: ramips-mt7621 (D-Link DIR860L)
    fcb08eaa
  • Martin Weinelt's avatar
    modules: update OpenWrt · c58f780e
    Martin Weinelt authored
    9b14c7d3d1 netifd: handle hotplug event socket errors
    e33612484a brcm63xx: HG655b: fix the imagetag at dts
    ef17edae3d kernel: bump 4.14 to 4.14.97
    21762fe9d6 kernel: bump 4.9 to 4.9.154
    ab41836321 mt76: update to the latest version
    026f08a610 kernel: bump 4.14 to 4.14.96
    1f1f421af6 kernel: bump 4.9 to 4.9.153
    
    Compile-tested: ar71xx-generic, ramips-mt7621, x86-64
    c58f780e
  • Martin Weinelt's avatar
  • oszilloskop's avatar
    ar71xx: fix incorrect gl-ar150 and gl-ar300m image names (#1640) · 30f9665d
    oszilloskop authored
    also added manifest aliases for gl-ar150, gl-ar300m, gl-ar750
    30f9665d
  • David Bauer's avatar
    ramips-mt76x8: remove broken flag (#1608) · 9d8045f0
    David Bauer authored
    This commit removes the broken flag from all devices in the mt76x8
    subtarget.
    
    The stability of the mt76 driver for the mt7628 and mt7612 has greatly
    improved in the last half-year. It might be still behind ath9k and
    ath10k but it is suitable for daily use.
    
    This affects the following devices:
    
     - GL.iNet MT300N v2
     - TP-Link Archer C50 v3
     - TP-Link TL-WR841 v13
    9d8045f0
  • Martin Weinelt's avatar
    b5152481
  • David Bauer's avatar
    ramips-mt76x8: add support for TP-Link Archer C50 v4 (#1641) · 49dff9ce
    David Bauer authored
    This backports the TP-Link Archer C50 v4.
    
    We are dropping the following upstream commits. They add support for the
    TP-Link recovery-flag which enabled the web-recovery. As they are not
    needed for the router to work, we drop them for now.
    
    28cd2ca base-files: sysupgrade: support additional mtd options
    1e06482 mtd: add logic for TP-Link ramips recovery magic
    49dff9ce
  • Sven Eckelmann's avatar
    ath10k/ath10k-ct: support multicast and management rate control · 39948de2
    Sven Eckelmann authored
    Drivers with software rate control can directly use the selected multicast
    rate for multicast/broadcast frames and the minimal basic rate for
    management frames. But drivers with offloaded rate control algorithms must
    be informed about such upper layer decisions to configure the
    hardware/firmware.
    
    A new BSS_CHANGED_MCAST_RATE is introduced in mac80211 to automatically
    inform all drivers. ath10k can detect this event and forward it via WMI to
    the driver. The already existing BSS_CHANGED_BASIC_RATES can be used to
    select the management rate.
    
    Without the WMI commands, a low rate (not necessarily one from the basic
    rates) is used for bcast/mcast/management frames. This means that the
    /etc/config/wireless settings basic_rate and mcast_rate would have no
    effect on the rates selected by this driver for the mentioned frames.
    39948de2
  • David Bauer's avatar
    gluon-scheduled-domain-switch: add package (#1555) · ed3d890b
    David Bauer authored
    This package allows to automatically switch to another domain, either
    at a given point in time or after the node was offline long enough.
    ed3d890b
  • Martin Weinelt's avatar
    modules: update OpenWrt · 2f0d32ee
    Martin Weinelt authored
    62feabecd8 kernel: bump 4.14 to 4.14.99
    9fb3710a8b kernel: bump 4.9 to 4.9.156
    e5ace80759 mt76: update to the latest version
    fbb2186fbd kernel: bump 4.14 to 4.14.98
    72870cc108 kernel: bump 4.9 to 4.9.155
    19a6c4b2b3 mac80211: brcmfmac: fix a possible NULL pointer dereference
    d997712c71 ath9k: register GPIO chip for OF targets
    
    Compile-tested: ipq40xx, ramips-mt7621
    Runtime-tested: none
    2f0d32ee
  • David Bauer's avatar
    f8b15a6f
  • Martin Weinelt's avatar
    2398dcb8
  • David Bauer's avatar
  • Martin Weinelt's avatar
    modules: update OpenWrt · f63f97aa
    Martin Weinelt authored
    1be6ff6dc0 kernel: bump 4.14 to 4.14.102
    e9cb40caa4 kernel: bump 4.9 to 4.9.159
    d32bbd7477 mac80211: brcmfmac: backport 5.0 & 5.1 important changes/fixes
    ce3a53c4f6 dnsmasq: prefer localuse over resolvfile guesswork
    87fb8aea87 dnsmasq: allow using dnsmasq as the sole resolver
    405840631c build: Accept BIN_DIR parameter for legacy-images
    bc3eb970ab ar71xx: Fix 5 GHz MAC address for Archer C60 v2
    20f1b7d3f5 kernel: bump 4.14 4.14.101
    d669be4654 kernel: bump 4.9 to 4.9.158
    
    Compile-tested: ramips-mt7621, ar71xx-generic
    Runtime-tested: ramips-mt7621 (D-Link DIR860L B1)
    f63f97aa
  • Martin Weinelt's avatar
    modules: update packages · 278108dd
    Martin Weinelt authored
    5de163d67 vallumd: bump to 0.1.4
    b8c2c2b1b mosquitto: update to 1.5.7
    8a2d56684 irssi: update to 1.2.0
    d0f5ae180 [18.06] python3: fix [CVE-2018-20406]
    dad217d34 shadowsocks-libev: flush ss rules on entry
    bbc2e68ed mosquitto: bump to 1.5.6
    9ffcfea19 mariadb: bump to 10.1.38
    09b794ecc stubby: update to version 0.2.4
    41c4f82f8 stubby: Remove iamperson347 from maintainer
    2cf2210d8 stubby: add Jonathan Underwood as co-maintainer (#7307)
    709a73604 stubby: add reload_config to documentation
    aa8380721 stubby: fix loading of config file
    6e2451dd0 stubby: add uci support to init file
    7a2b9df89 stubby: bump PKG_RELEASE
    304596d21 stubby: remove unnecessary core limit
    fd8505f76 stubby: add SPKI pin set for Cloudflare cert
    b77053d35 stubby: add Cloudflare 1.0.0.1 and ::1001 servers
    3f17c54f2 stubby: use EDNS client-subnet privacy by default
    935126632 stubby: fix config file definition
    d3b090a31 stubby: rearrange Makefile for clarity
    a3a73ef7b stubby: add missing dependency on ca-certificates
    ccf0c71ac getdns: update to version 1.5.0
    07e647645 getdns: Remove iamperson347 from maintainer
    ca7555e52 getdns: fix missing libbsd dependency
    cc8439566 acme: Fix loading credentials
    fb3dd71ef youtube-dl: update to version 2019.01.30.1
    4368783e9 python-idna: Add missing dependency on python(3)-codecs
    480e4d7e8 python/python3: Fix lib2to3 fixes search
    02dd97d14 libsndfile: update to 42132c543358cee9f7c3e9e9b15bb6c1063a608e
    34dec8190 python3: backport CVE-2018-14647 patch from upstream [18.06]
    3785db429 python: backport CVE-2018-14647 patches from upstream [18.06]
    8f41fa7f8 nut: Default to run as root but fix alt runas
    f7048b725 libsndfile: update to 8ddc442d539ca775d80cdbc7af17a718634a743f a/ulaw: fix multiple buffer overflows
    e3f32b75b python/python3: fix .dist-info missing for setuptools and pip
    
    Compile-tested: ramips-mt7621, ar71xx-generic
    278108dd
  • bobcanthelpyou's avatar
  • Sven Eckelmann's avatar
    ath10k/ath10k-ct: fix incorrect multicast/broadcast rate setting · ca69e9e3
    Sven Eckelmann authored
    If no mcast_rate is set for the wifi-iface then there is no rate_idx (0)
    set for the bss. This breaks for example 5GHz meshpoint interfaces because
    0 maps to a CCK rate (11Mbit/s).
    
    It must also be avoided that the ath10k-ct internal state for the rates is
    not synced with the mac80211 rates state. Otherwise, the user specified
    rate (e.g. a wifi-iface mcast_rate for a meshpoint interface) will only be
    set on startup. And a short while after that, ath10k-ct specific code in
    ath10k_check_apply_special_rates is missing a valid rate in its own
    structures and is then recalculating a new default rate. This default rate
    is in most situations not the requested rate.
    
    Fixes: a399b607357b ("ath10k/ath10k-ct: support multicast and management rate control")
    ca69e9e3
  • Martin Weinelt's avatar
    modules: update OpenWrt · 8890777d
    Martin Weinelt authored
    8de93ce745 mt76: update to the latest version
    85cb473f93 mac80211: add a fix to prevent unsafe queue wake calls during restart
    08db9397c9 mac80211: backport tx queue start/stop fix
    810ee3b84a kernel: bump 4.14 to 4.14.104
    5183df0dbf kernel: bump 4.9 to 4.9.161
    eea538204b kernel: fix refcnt leak in LED netdev trigger on interface rename
    f1803e3492 oxnas: add SoC restart driver for reboot
    1bfe1ce5c4 oxnas: cheery-pick DTS improvements from master
    9ee8c8daf4 kernel: bump 4.14 to 4.14.103
    e2ba7a4b47 kernel: bump 4.9 to 4.9.160
    
    Compile-tested: ramips-mt7621, ar71xx-generic
    8890777d
  • Martin Weinelt's avatar
    patches/openwrt: refresh... · c5c973b1
    Martin Weinelt authored
    patches/openwrt: refresh 0006-generic-vxlan-backport-support-for-VXLAN-over-link-local-IPv6-to-4.9.patch (#1663)
    
    c5c973b1
  • Martin Weinelt's avatar
    0a0da76b
  • Martin Weinelt's avatar
    docs: add v2018.2.1 release notes · 66f30e98
    Martin Weinelt authored
    66f30e98
  • Martin Weinelt's avatar
    docs, README: Gluon v2018.2.1 · d6cab552
    Martin Weinelt authored
    d6cab552
  • lrnzo's avatar
    docs: update upgrade.rst · de82e58c
    lrnzo authored
    small grammatical fix
    de82e58c
  • bobcanthelpyou's avatar
    docs: remove target ipq806x · c283f20d
    bobcanthelpyou authored
    was marked as broken by #1526 cause of #1505
    c283f20d
  • bobcanthelpyou's avatar
    docs: rename target sunxi to sunxi-cortexa7 · 015b0d68
    bobcanthelpyou authored
    renamed by 210d97c5
    015b0d68
  • bobcanthelpyou's avatar
    5161a62a
  • Tata's avatar
    gluon-config-mode-mesh-vpn: 0300-mesh-vpn.lua fix limit_ingress default value (#1682) · 96a821e0
    Tata authored
    
    in case of default disabled simple-tc for tunneldigger
    
    Signed-off-by: default avatarJan-Tarek Butt <tarek@ring0.de>
    96a821e0
  • Matthias Schiffer's avatar
    build: move hostapd-mini package from generic target to Makefile · 6229c599
    Matthias Schiffer authored
    By passing the package name through merge_packages, it becomes possible to
    override the package choice in GLUON_SITE_PACKAGES again, for example:
    
    	GLUON_SITE_PACKAGES += -hostapd-mini hostapd
    
    (cherry picked from commit 134a6460)
    6229c599
  • David Bauer's avatar
    ramips: fix R6120 factory image · eed810aa
    David Bauer authored
    The factory firmware omits the JFFS2 end-marker while flashing via
    web-interface. Add a 64k padding after the marker fixes this problem.
    
    When the end-marker is not present, OpenWRT won't save the overlayfs
    after initial flash.
    
    (cherry picked from commit dca50d2f)
    eed810aa
  • Sven Eckelmann's avatar
    gluon-mesh-batman-adv: Only use local TT to count non-wifi clients (#1676) · 0924074a
    Sven Eckelmann authored
    
    The amount of local wifi clients is currently counted by two different
    ways:
    
    * asking the kernel wifi layer for the number of of clients on 2.4GHz and
      5GHz band
    * asking batman-adv for the number of non-timed out entries in the local
      translation table with WiFi flag
    
    The number of wifi24+wifi5 and the number of TT wifi client counts are
    reported via respondd to various consumers. The ffrgb meshviewer is
    displaying these values as:
    
    * 2,4 GHz: wifi24
    * 5 GHz: wifi5
    * other: (TT local wifi+non-wifi clients) - (wifi24 + wifi5)
    
    But the local translation table is holding entries much longer than the
    wifi layer. It can therefore easily happen that a wifi client disappears in
    the kernel wifi layer and batman-adv still has the entry stored in the
    local TT.
    
    The ffrgb meshviewer would then show this count in the category "other".
    This often results in confusions because "other" is usually for ethernet
    clients. And nodes with a frequently disappearing larger group of clients
    (near bus stations or larger intersections) often show most clients under
    the group "other" even when this devices doesn't have a LAN ethernet port.
    
    It is better for presentation to calculate the number of total wifi clients
    by summing up wifi24 + wifi5. And getting the number of total clients (non
    wifi + wifi) by adding the result of the previous calculation to the sum of
    non-wifi client in the local batman-adv translation table.
    
    Fixes: 89a9d813 ("gluon-mesh-batman-adv-core: Announce client count by frequency")
    Reported-by: default avatarPascal Wettin <p.wettin@gmx.de>
    (cherry picked from commit b850fff7e4f4b938c512d81de31bfae872fa42e4)
    0924074a
  • bobcanthelpyou's avatar
    gluon-web: fix typos · 371bdf3e
    bobcanthelpyou authored
    (cherry picked from commit 3b55cbc1)
    371bdf3e
  • Matthias Schiffer's avatar
    gluon-site: add better error message for domain name conflicts · 2dc2dca7
    Matthias Schiffer authored
    When two domains alias the same name (or one aliases another), display a
    meaningful error message like:
    
        Failed to alias domain 'foo' as 'bar', name already taken by
        domain 'baz'.
    
    (cherry picked from commit c208fc4f)
    2dc2dca7
  • Martin Weinelt's avatar
    modules: update OpenWrt · 93be7ad5
    Martin Weinelt authored
    ca8b4d684b kernel: bump 4.14 to 4.14.109
    1ff4cd1ff1 kernel: bump 4.9 to 4.9.166
    22a3e65662 kernel: bump 4.14 to 4.14.108
    dac25a5f22 kernel: bump 4.9 to 4.9.165
    6c3ca1d1ea kernel: bump 4.14 to 4.14.107
    dcdf50956f kernel: bump 4.9 to 4.9.164
    4336cfda12 ramips: allow packets with ttl=0
    13eb73b278 mt76: update to latest openwrt-18.06 branch
    0a637c7f87 kernel: bump 4.14 to 4.14.106
    24f32072d2 kernel: bump 4.9 to 4.9.163
    dcfca830a8 ipq40xx: copy Fritz4040 UBoot to STAGING_DIR_IMAGE
    400601f0e3 tools/libelf: Add mirrors as main site is dead
    f87a1874ef mt76: update to latest openwrt-18.06 branch
    9f2cbcad6d busybox: add missing install dir
    4918fe0291 kernel: bump 4.14 to 4.14.105
    2b9d2f6624 kernel: bump 4.9 to 4.9.162
    
    Build-tested: ar71xx-generci, ramips-mt7621
    Runtime-tested: ramips-mt7621 (D-Link DIR-860L B1)
    (cherry picked from commit e79fce2c)
    93be7ad5
  • Martin Weinelt's avatar
    modules: update packages · bae72d9a
    Martin Weinelt authored
    b7bcf24a0 znc: backport CVE fixes to 1.6
    f91539e92 Merge pull request #7807 from D-Albers/openwrt-18.06
    550de2331 Merge pull request #8449 from micmac1/ssh2-1806-181
    16fcd6d38 mosquitto: bump to v1.5.8
    1a23db5b2 php7: Add PKG_CPE_ID for proper CVE tracking
    7aacf2423 php7: update to 7.2.16
    27433fc3e php7: fix cross compiling patch (fixes #8166)
    00f6119bd php7: update to 7.2.15
    ef57201aa php7: update to 7.2.14
    e9271cf27 php7: update to 7.2.13
    1308ba92c php7: update to 7.2.12
    9e330d6e9 php7: update to 7.2.11
    5e25be535 php7: update to 7.2.10
    85c616557 php7: adjust load priority for openssl (fixes #6893)
    31d279c96 nano: update to 4.0
    59aa52ccd libssh2: version bump/CVE fixes
    e47fe43ea Jinja2: Update to 2.10
    8d7e62d95 ruby: update to 2.5.5
    17a0279dd ruby: fix build for uclibc
    017b74d35 vpnc: fix IPv6-triggered inoperability
    563aafcee postgresql: Revert adding build dependency to zlib/host
    3323ebddf Merge pull request #8403 from BKPepe/transmission_openwrt-18.06
    c0293cd99 Merge pull request #8402 from BKPepe/netdata_openwrt-18.06
    9bb4bcc9b Merge pull request #8395 from EricLuehrsen/unbound_191_1806
    d444a910f transmission: update to version 2.94
    99c3670bb Netdata: update to version 1.12.2
    1e347beb3 libtalloc: Merge 2.1.14 from master (remove libbsd dependency)
    a476bf8d0 unbound: update to 1.9.1
    060e59a28 Merge pull request #8386 from wvdakker/openwrt-18.06
    86efe678a Shorewall6: Bump to 5.2.0.5.
    9cdc22eef Shorewall: Bump to 5.2.0.5.
    3669215b2 Shorewall6-lite: Bump to 5.2.0.5.
    762093fe7 Shorewall-lite: Bump to 5.2.0.5.
    1a97a8444 Shorewall-core: Bump to 5.2.0.5.
    121072523 postgresql: add HOST_BUILD_DEPENDS:=zlib/host
    daef6665b gnurl: update to version 7.64.0
    5fff80472 libgabe: add package
    cb253649a libpbc: add new package
    f03acaa39 Merge pull request #8346 from Cynerd/jinja2-missing-dep-18.06
    2324d341e Jinja2: add missing dependency on markupsafe
    0ba0e0d1b gnunet: revert accidentally applied libmicrohttpd changes
    799c409d3 gnunet-secushare: add package (replacing gnunet-social package)
    d70e35ba1 gnunet: GNUnet v0.11.0 release
    799f553b2 postgresql: update to version 9.6.12
    257dfbb55 libextractor: update to version 1.9
    6c2266acf gnurl: update to version 7.63.0
    3e6d392e0 openvswitch: bump to version 2.8.5
    931070c26 jool: Backport two fixes for newer kernels.
    
    (cherry picked from commit 23cc093b)
    bae72d9a
  • Martin Weinelt's avatar
    modules: update routing · cba3f090
    Martin Weinelt authored
    e5fe4b6 Merge pull request #462 from ecsv/batadv-18.06
    ee2d981 batman-adv: Merge bugfixes from 2019.1
    4d7a182 nodogsplash: fix invalid pointer bug when clock is turned back (#456)
    2ad165c Merge pull request #452 from dangowrt/openwrt-18.06
    71f9aae luci-app-bmx7: update to v0.1-alpha
    0e3d701 bmx7: update to git snapshot as of 2018-12-29
    42af835 batman-adv: Refresh patches
    
    (cherry picked from commit b6c4e06b)
    cba3f090
  • Matthias Schiffer's avatar
    Refresh openwrt patches · d039502f
    Matthias Schiffer authored
    (cherry picked from commit 6412177a)
    d039502f
  • Matthias Schiffer's avatar
    gluon-mesh-batman-adv: drop packets from mesh with next-node source or destination address (#1714) · c5042399
    Matthias Schiffer authored
    Fixes #1659
    
    (cherry picked from commit 09916f6e359114fdc6f9594f60b76a27e7352f1b)
    c5042399
  • Martin Weinelt's avatar
    modules: update OpenWrt · df142f75
    Martin Weinelt authored
    6761961919 openssl: update to 1.0.2s
    9591155737 kernel: Fix arc kernel 4.14 build
    dc1b578a4c curl: Fix multiple security problems
    40ed8389ef mbedtls: update to version 2.16.1
    7e07320dc4 kernel: bump 4.14 to 4.14.121
    054aecdf0b kernel: bump 4.9 to 4.9.178
    e9a7344550 uci: fix heap use after free (FS#2288)
    4b633affff brcm63xx: drop linux,part-probe usage where possible
    cfb72eed69 brcm63xx: drop own implementation of DT partitions in favour of upstream
    68a5e662c2 kernel: bump 4.14 to 4.14.120
    85294fc5e7 kernel: bump 4.9 to 4.9.177
    152755c9a2 kernel: bump 4.14 to 4.14.119
    82e4b4250d kernel: bump 4.9 to 4.9.176
    cf2aa873ea ar71xx: Fix network setup for TP-Link Archer C25 v1
    e6928e6b29 kernel: Fix arc kernel build
    3239f56136 uboot-fritz4040: Add host flags for host compiler
    b5ce5217e2 ramips: rt305x: Reduce size of a5-v11 image
    d3053b1bdc kernel: bump 4.14 to 4.14.118
    f053a8ce41 kernel: bump 4.9 to 4.9.175
    412d80cdb7 kernel: bump 4.14 to 4.14.115
    f105a9c35c kernel: bump 4.9 to 4.9.172
    4685bf1d2f kernel: bump 4.14 to 4.14.114
    2faceb1a39 kernel: bump 4.9 to 4.9.171
    e0505cc018 Revert "uhttpd: disable concurrent requests by default"
    24aefaec62 tools/pkg-config: Handle variable substitution of 'bindir' to redirect to STAGING_DIR/bin
    aaa34526c4 tools/pkg-config: pass arguments at the end
    3103bd54c5 kernel: bump 4.14 to 4.14.113
    a5c62c933b kernel: bump 4.9 to 4.9.170
    ac3b5f00e1 kernel: bump 4.14 to 4.14.112
    15a70d085d kernel: bump 4.9 to 4.9.169
    e6e5435c5b ar71xx: GL.iNet AR300M family: correct LED definitions
    ecfe0f1cc4 ca-certificates: update to version 20190110
    2d2e615dee mac80211: brcmfmac: really add early fw crash recovery
    02aed76968 mac80211: brcmfmac: early work on FullMAC firmware crash recovery
    1a6d7a651f lantiq: tdw89x0: Fix WLAN LED on TP-Link W8970 v1.2 (FS#2232)
    6ac061f319 ar71xx: Fix IMAGE_SIZE for TP-Link Archer C7 v5
    7268ebb1e4 ar71xx: Correct MAC address for WAN interface of Archer C7 v5
    c7eb679047 ar71xx: Add "info" partition for TP-Link Archer C7 v5
    9c4fa1bb5b ar71xx: Remove ath10k packages from archer-c7-v1 (fixes FS#1743)
    6c81f5fac6 kernel: bump 4.14 to 4.14.111
    aa0e6fc489 kernel: bump 4.9 to 4.9.168
    dad220a00c kernel: bump 4.14 to 4.14.110
    07bd5b7a81 kernel: bump 4.9 to 4.9.167
    4b4de23dfb openssl: update to 1.0.2r
    
    Build-tested: x86-64
    (cherry picked from commit f8bbdd96)
    df142f75
  • Martin Weinelt's avatar
    modules: update packages · d69426da
    Martin Weinelt authored
    5d3cb594e Merge pull request #9058 from micmac1/sqlite3-arm-endian-owrt18
    d13f831ba sqlite3: fix arm endian issue
    48687a581 Merge pull request #8966 from BKPepe/18.06-ytdl
    5387239ad youtube-dl: update to version 2019.05.11
    76ebe2be0 Merge pull request #8765 from BKPepe/1806-urllib3
    ec5e894ce Merge pull request #8954 from jonathanunderwood/openwrt-18.06-getdns-stubby-from-master
    54928eb69 nfs-kernel-server: use portmap, drop rpcbind
    09e18eef7 stubby: set PKG_SOURCE_VERSION using PKG_VERSION
    f8c8b96e7 stubby: remove PKG_SOURCE from Makefile
    28c328d66 stubby: add support for TLS configuration options
    eec23a91b stubby: add support for tls_port resolver config option (#8889)
    5415cc7b2 stubby: update to 0.2.6
    b1cc26adf getdns: update to version 1.5.2
    813d49c69 stubby: Update PKG_RELEASE
    3b498844a stubby: fix handling of pkis in config (#8888)
    95daecd81 stubby: fixed duplicate IPv6 address in stubby.yml; fixed typo in README.md
    eca82ce3d Merge pull request #8938 from lucize/doveup18
    2c87aeba1 dovecot: update to 2.2.36.1
    8459433eb python-urllib3: update to 1.24.3
    014106741 Merge pull request #8781 from neheb/pros
    41c85f8ef Merge pull request #8767 from neheb/cr2
    9e4966bd3 Merge pull request #8816 from neheb/lo
    55b505f82 Merge pull request #8815 from neheb/gr
    1663a0186 Merge pull request #8881 from micmac1/maria_10.1.39
    78328ebe3 libxslt: add PKG_CPE_ID for proper CVE tracking
    816c7aed6 Merge pull request #8882 from micmac1/xslt-cve-18
    2eb2a94da mariadb: bump to 10.1.39
    d03db02bc libxslt: backport patch for CVE-2019-11068
    d3c324d8b Merge pull request #8871 from neheb/ad
    fb9238b61 addrwatch: Add -std=gnu89 to fix compilation
    5fae371ab Merge pull request #8779 from neheb/libsec
    3ca88ff6d Merge pull request #8780 from neheb/apc
    1d44e408f Merge pull request #8770 from neheb/es
    759e83674 Merge pull request #8772 from neheb/oa
    ea1429f69 Merge pull request #8778 from neheb/liba
    46d30c221 Merge pull request #8850 from EricLuehrsen/unbound_dhcp_1806
    7f7fda67b add rpcbind
    80429e0a5 unbound: fix local dns synthesis corner cases
    1f77a0582 Merge pull request #8777 from neheb/sendm
    071a926dd Merge pull request #8817 from neheb/bonnnnn
    ddc48c3d5 bonnie++: Remove wrongly added patch during cherry-pick
    21de3c1ac loudmouth: Disable debug and fix compilation
    79e69bf41 grilo: Remove build dependency on perl-xml-parser
    c3f6660b8 nfs-kernel-server: fix missing libbsd dependency
    d2f254a72 nfs-kernel-server: update to 2.3.3
    dac119d49 nfs-kernel-server: Switch to xz tarball
    f1ab32ab6 nfs-kernel-server: switch to libtirpc, enable ipv6
    5ab569a06 nfs-kernel-server: fix missing host symbol res_querydomain/missing-include-dir
    20809ba6a nfs-kernel-server: add -Wno-error=format-security to TARGET_CFLAGS to a fix compily error
    2c137a7a5 nfs-kernel-server: update to 2.3.2
    765ae2798 libtirpc: enable host build
    9b3414fd1 znc: Clean up Makefile and fix compilation on PPC
    a8316a5c6 nano: update to 4.2
    f69a00efb Merge pull request #8764 from BKPepe/1806-youtubedl
    024543fb1 Merge pull request #8766 from neheb/qu
    c69c1aea4 Merge pull request #8768 from neheb/cmd
    d018e0946 Merge pull request #8776 from neheb/luas
    9f74ef0f8 luasec: cleanup Makefile
    bbfd71a59 luasec: use gcc to link instead of ld
    7059f9476 luasec: Replace -fPIC with $(FPIC)
    a3d99ad90 youtube-dl: update to version 2019.04.24
    9e532f225 Merge pull request #8773 from neheb/cla
    bcf889b36 intltool: Add patch to fix regular expressions and avoid warnings in perl 5.22 and later.
    2653eabd4 prosody: Change linker from LD to CC
    c15b779b8 prosody: Update prosody to 0.11.2 Update Fixes CVE-2018-10847
    9104a1f14 apcupsd: preset shutdown binary
    e484057d0 libseccomp: Update to 2.3.3
    f61ee11d0 libartnet: Fix compile with GCC7
    9d2bf88ec sendmail: link with gcc instead of ld
    dd2c1e03e Merge pull request #8769 from neheb/da
    3a478756f Merge pull request #8774 from neheb/psq
    cf4537574 psqlodbc: Update to 11.00.0000
    8ca29a4f3 psqlodbc: bump to 10.03.0000, fix --with-unixodbc
    81a6687a6 Merge pull request #8771 from neheb/pia
    fa060f40e clamsmtp: Really fix compilation
    850126c0d oath-toolkit: Add patch from Fedora to fix compilation
    fd52a3df0 pianod: Update to 174.09 release (removes BSD dependencies)
    a0ca3e308 espeak: Fix build issues. Cleanup patches
    d02a17b35 darkstat: Remove libbsd dependency
    0a4f26f3c cmdpad: Fix compile
    27af84f57 crtmpserver: Update to official git repo
    1a7d79d98 quassel-irc: Update to latest version
    873762ce2 quasselc: Update to latest commit
    c8c8c1a4a Merge pull request #8759 from neheb/bon2
    76132b044 bonnie++: Update to 1.98
    df7f21bcd Merge pull request #8718 from neheb/lcd
    588f971f0 Merge pull request #8716 from neheb/wifi
    4e0a836c5 Merge pull request #8717 from neheb/setser
    403d40d91 Merge pull request #8720 from neheb/iio
    03a4afe5f Merge pull request #8719 from neheb/unix
    d42547cd3 Merge pull request #8733 from jefferyto/openwrt-18.06-python-cve-2019-9636
    fbcac2d53 python,python3: Fix CVE-2019-9636 - urlsplit missing NFKC normalization
    01f90caa1 Merge pull request #8706 from nxhack/18_06_icu_support_reiwa
    e0bee26f4 libiio: add missing dependency to zlib
    7220dab75 unixodbc: save unixodbc_conf.h for host build
    01a2f4353 unixodbc: fix clean-build compilation
    bd380a3c7 unixodbc: Fix LIB_PREFIX in host build
    9b5b23f44 lcd4linux: Update to 1204
    c26a03a1d setserial: Don't build docs to remove nroff dependency
    2a85006ab wifidog: Change to use TLS above 1.0
    94b07876e icu: [openwrt-18.06] support for new Japanese era Reiwa
    c9aedd9a5 nano: update to 4.1
    49e759b28 Merge pull request #8638 from mwarning/zerotier
    890993d40 Merge pull request #8477 from BKPepe/openwrt-18.06_perl
    d6ed5c22b net/mosquitto: correct config file option name
    05e16dd22 zerotier: fix multiple instance handling and port setting
    59c6457ec zerotier: update to version 1.2.12
    4db102755 Merge pull request #8595 from EricLuehrsen/openwrt-18.06
    43c1d6c2a unbound: correct forward of root domain
    b8970833b perlmod: fix ability to build module out-of-feed
    
    (cherry picked from commit bbd52db5)
    d69426da
  • Martin Weinelt's avatar
    modules: update routing · c49e0474
    Martin Weinelt authored
    cad1fba Merge pull request #469 from ecsv/batadv-for-18.06
    145ba7f batman-adv: Merge bugfixes from 2019.2
    40b7519 batman-adv: Reorder patches
    
    (cherry picked from commit 832de861)
    c49e0474
  • Martin Weinelt's avatar
    modules: update routing · d3033163
    Martin Weinelt authored
    c07326c batman-adv: Fix duplicated OGMs on NETDEV_UP
    
    fixes #1446
    
    (cherry picked from commit 9e00ecd8)
    d3033163
  • Matthias Schiffer's avatar
    ar71xx: Onion Omega is BROKEN · d43dbdca
    Matthias Schiffer authored
    This device doesn't have an Ethernet port, and even with the Ethernet
    shield, eth0 is not configured.
    
    (cherry picked from commit a44a5dce)
    d43dbdca
  • Martin Weinelt's avatar
    modules: update Gluon packages · be967d8f
    Martin Weinelt authored
    524ae77 tunneldigger: update to newest upstream commit (#216)
    be967d8f
  • Matthias Schiffer's avatar
    gluon-mesh-vpn-core: don't consider tunneldigger when fastd is installed · 4ddde78b
    Matthias Schiffer authored
    None of our scripts can handle fastd and tunneldigger running at the same
    time. When both are installed, ignore tunneldigger.
    
    (cherry picked from commit f6df3b05)
    4ddde78b
  • Matthias Schiffer's avatar
    gluon-mesh-vpn-core: move common VPN config to gluon UCI package · b7bca404
    Matthias Schiffer authored
    We now keep the VPN enable state, bandwidth limit enable and actual limits
    in the core config to avoid having to recover "user intent" from different
    config files when the used VPN packages change.
    
    Fixes #1736
    
    (cherry picked from commit 818c31af)
    b7bca404
  • Martin Weinelt's avatar
    modules: update OpenWrt · bc55bb1d
    Martin Weinelt authored
    2999c342aa kernel: bump 4.14 to 4.14.127
    9de2f4d4ce kernel: bump 4.9 to 4.9.182
    5fe809d718 Revert "ipq806x: fix EA8500 switch control"
    e493230e84 kernel: bump 4.14 to 4.14.126
    c449130bb2 mvebu: fixes commit f63a1caf22cb
    6fa6f74e37 kernel: backport 4.18 patch adding DMI_PRODUCT_SKU
    2cd234d96b mac80211: brcmfmac: backport important fixes from kernel 5.2
    85eda6f61e kernel: mt29f_spinand: fix memory leak during page program
    a0543d8e70 uboot-fritz4040: update PKG_MIRROR_HASH
    f63a1caf22 kernel: bump 4.14 to 4.14.125
    40b1e899ba kernel: bump 4.9 to 4.9.181
    5dbac47426 kernel: re-add bridge allow reception on disabled port
    5d27e87de7 rpcd: fix init script reload action
    1867f10807 kernel: bump 4.14 to 4.14.123
    7fe1b4a4b2 kernel: bump 4.9 to 4.9.180
    6563e494a0 kernel: bump 4.14 to 4.14.122
    e3408d09b0 kernel: bump 4.9 to 4.9.179
    b2b1265a1d apm821xx: backport accepted linux-crypto patches
    
    Fixes: CVE-2019-11477, CVE-2019-11478, CVE-2019-11479
    
    Compile-tested: x86_64
    Runtime-tested: x86_64
    (cherry picked from commit 1b06a15b)
    bc55bb1d
  • Matthias Schiffer's avatar
    modules: update OpenWrt · 5cb69254
    Matthias Schiffer authored
    fc1dae5be797 brcm2708: Revert "staging: vc04_services: prevent integer overflow in create_pagelist()"
    84aba5796ea2 gemini: 4.14: Fix up DNS-313 compatible string
    9656f49ea009 base-files: fix uci led oneshot/timer trigger
    bd0c3988e742 kernel: bump 4.14 to 4.14.128
    
    (cherry picked from commit 99f344ba)
    5cb69254
  • Martin Weinelt's avatar
    docs: fix reference to #noibss in v2018.2.1 release notes · 3ae816d3
    Martin Weinelt authored
    Uncovered by sphinx-build:
    docs/releases/v2018.2.1.rst:19: WARNING: Too many autonumbered footnote references: only 0 corresponding footnotes available.
    docs/releases/v2018.2.1.rst:19: WARNING: Unknown target name: "noibss".
    docs/releases/v2018.2.1.rst:26: WARNING: Unknown target name: "noibss".
    docs/releases/v2018.2.1.rst:30: WARNING: Unknown target name: "noibss".
    docs/releases/v2018.2.1.rst:34: WARNING: Unknown target name: "noibss".
    docs/releases/v2018.2.1.rst:35: WARNING: Unknown target name: "noibss".
    3ae816d3
  • Vincent Wiemann's avatar
    docs: faq: add note for supported hardware (#1665) · c9858094
    Vincent Wiemann authored
    A table with hardware supported by Gluon can be found on the OpenWrt Wiki. This commit adds a corresponding FAQ entry.
    
    (cherry picked from commit deb020d3)
    c9858094
  • bobcanthelpyou's avatar
    docs: fix typos and small text improvements · 04f6d0a2
    bobcanthelpyou authored
    (cherry picked from commit ff7aeafad2a5bcae1b965e86cfb128dd24a78daa)
    04f6d0a2
  • bobcanthelpyou's avatar
    docs: add new <%| tag for escaped expressions (#1683) · eb46e5a9
    bobcanthelpyou authored
    the tag was added by dd23a805
    
    (cherry picked from commit cae79eb0)
    eb46e5a9
  • bobcanthelpyou's avatar
    docs: fix typos and common misspellings (#1668) · 0986ec7e
    bobcanthelpyou authored
    (cherry picked from commit 170c494f)
    0986ec7e
  • bobcanthelpyou's avatar
    docs: remove unavailable devices (#1667) · 75c8e00f
    bobcanthelpyou authored
    - A Picostation M5 never existed
    - TL-WR710N v1 and v2.1 are part of ar71xx-generic not ar71xx-tiny
    
    (cherry picked from commit e8b37b2d)
    75c8e00f
110 files
+ 3359
350
Compare changes
  • Side-by-side
  • Inline

Files

+3 −1
Original line number Original line Diff line number Diff line
@@ -106,6 +106,8 @@ list-targets: FORCE
	@$(foreach target,$(GLUON_TARGETS),echo '$(target)';)
	@$(foreach target,$(GLUON_TARGETS),echo '$(target)';)




GLUON_DEFAULT_PACKAGES := hostapd-mini

GLUON_FEATURE_PACKAGES := $(shell scripts/features.sh '$(GLUON_FEATURES)' || echo '__ERROR__')
GLUON_FEATURE_PACKAGES := $(shell scripts/features.sh '$(GLUON_FEATURES)' || echo '__ERROR__')
ifneq ($(filter __ERROR__,$(GLUON_FEATURE_PACKAGES)),)
ifneq ($(filter __ERROR__,$(GLUON_FEATURE_PACKAGES)),)
$(error Error while evaluating GLUON_FEATURES)
$(error Error while evaluating GLUON_FEATURES)
@@ -118,7 +120,7 @@ define merge_packages
    GLUON_PACKAGES := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$(GLUON_PACKAGES)) $(pkg))
    GLUON_PACKAGES := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$(GLUON_PACKAGES)) $(pkg))
  )
  )
endef
endef
$(eval $(call merge_packages,$(GLUON_FEATURE_PACKAGES) $(GLUON_SITE_PACKAGES)))
$(eval $(call merge_packages,$(GLUON_DEFAULT_PACKAGES) $(GLUON_FEATURE_PACKAGES) $(GLUON_SITE_PACKAGES)))


config: FORCE
config: FORCE
	@$(CheckExternal)
	@$(CheckExternal)
+4 −2
Original line number Original line Diff line number Diff line
@@ -4,7 +4,9 @@ https://gluon.readthedocs.io/.
If you're new to Gluon and ready to get your feet wet, have a look at the
If you're new to Gluon and ready to get your feet wet, have a look at the
[Getting Started Guide](https://gluon.readthedocs.io/en/latest/user/getting_started.html).
[Getting Started Guide](https://gluon.readthedocs.io/en/latest/user/getting_started.html).


**Gluon IRC channel: `#gluon` in [hackint](https://hackint.org/)**
Gluon's developers frequent an IRC chatroom at [#gluon](ircs://irc.hackint.org/#gluon)
on [hackint](https://hackint.org/). There is also a [webchat](https://webirc.hackint.org/#irc://irc.hackint.org/#gluon)
that allows for access from within your browser.


## Issues & Feature requests
## Issues & Feature requests


@@ -19,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 v2018.2 && make update`.
and switch to one by running `git checkout v2018.2.1 && 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.
+2 −2
Original line number Original line Diff line number Diff line
@@ -47,12 +47,12 @@ master_doc = 'index'


# General information about the project.
# General information about the project.
project = 'Gluon'
project = 'Gluon'
copyright = '2015-2018, Project Gluon'
copyright = '2015-2019, Project Gluon'


# The version info for the project you're documenting, acts as replacement for
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# |version| and |release|, also used in various other places throughout the
# built documents.
# built documents.
version = release = '2018.2'
version = release = '2018.2.1'


# The language for content autogenerated by Sphinx. Refer to documentation
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
# for a list of supported languages.
Original line number Original line Diff line number Diff line
@@ -15,9 +15,13 @@ The `main repo`_ does have issues enabled.
IRC
IRC
---
---


Gluon's developers frequent `#gluon on hackint`_. You're welcome to join us!
Gluon's developers frequent the IRC chatroom `#gluon`_ on `hackint`_.
There is a `webchat`_ that allows for easy access from within your
webbrowser. You're welcome to join us!


.. _#gluon on hackint: irc://irc.hackint.org/#gluon
.. _#gluon: ircs://irc.hackint.org/#gluon
.. _hackint: https://hackint.org/
.. _webchat: https://webirc.hackint.org/#irc://irc.hackint.org/#gluon




Working with repositories
Working with repositories
@@ -32,9 +36,9 @@ rerun


`make update` also applies the patches that can be found in the directories found in
`make update` also applies the patches that can be found in the directories found in
`patches`; the resulting branch will be called `patched`, while the commit specified in `modules`
`patches`; the resulting branch will be called `patched`, while the commit specified in `modules`
can be refered to by the branch `base`.
can be referred to by the branch `base`.


After new patches have been commited on top of the `patched` branch (or existing commits
After new patches have been committed on top of the `patched` branch (or existing commits
since the base commit have been edited or removed), the patch directories can be regenerated
since the base commit have been edited or removed), the patch directories can be regenerated
using
using


Original line number Original line Diff line number Diff line
@@ -31,14 +31,14 @@ can work::


    lua -e 'print(require("platform_info").get_image_name())'
    lua -e 'print(require("platform_info").get_image_name())'


While porting Gluon to a new device, it might happen that the profile name is un-
While porting Gluon to a new device, it might happen that the profile name is
known. Best practise is to generate an image first by using an arbitrary value
unknown. Best practise is to generate an image first by using an arbitrary value
and then executing the lua command on the device and use its output from then on.
and then executing the lua command on the device and use its output from then on.


The second parameter defines the name of the image files generated by OpenWrt. Usually,
The second parameter defines the name of the image files generated by OpenWrt. Usually,
it is also the OpenWrt profile name; for devices that still use the old image build
it is also the OpenWrt profile name; for devices that still use the old image build
code, a third parameter with the OpenWrt profile name can be passed. The profile names
code, a third parameter with the OpenWrt profile name can be passed. The profile names
can be found in the image Makefiles in ``lede/target/linux/<target>/image/Makefile``.
can be found in the image Makefiles in ``openwrt/target/linux/<target>/image/Makefile``.


Examples::
Examples::


@@ -99,7 +99,7 @@ target supports *per-default rootfs*).
Configuration
Configuration
'''''''''''''
'''''''''''''


The ``config`` command allows to add arbitary target-specific OpenWrt configuration
The ``config`` command allows to add arbitrary target-specific OpenWrt configuration
to be emitted to ``.config``.
to be emitted to ``.config``.


Notes
Notes
Original line number Original line Diff line number Diff line
@@ -74,7 +74,7 @@ Feature flags provide a convenient way to define package selections without
making it necessary to list each package explicitly.
making it necessary to list each package explicitly.


The main feature flag definition file is ``package/features``, but each package
The main feature flag definition file is ``package/features``, but each package
feed can provide additional defintions in a file called ``features`` at the root
feed can provide additional definitions in a file called ``features`` at the root
of the feed repository.
of the feed repository.


Each flag *$flag* without any explicit definition will simply include the package
Each flag *$flag* without any explicit definition will simply include the package
Original line number Original line Diff line number Diff line
@@ -11,7 +11,7 @@ from Lua scripts. Example:


The *site* object in this example does not directly represent the *site.conf* data structure;
The *site* object in this example does not directly represent the *site.conf* data structure;
instead, it is wrapped in a way that makes it more convenient to access deeply nested elements.
instead, it is wrapped in a way that makes it more convenient to access deeply nested elements.
To access the the underlying values, they must be unwrapped using the function call notation
To access the underlying values, they must be unwrapped using the function call notation
(the ``()`` after ``site.wifi24.ap.ssid`` in the example).
(the ``()`` after ``site.wifi24.ap.ssid`` in the example).


The wrapper objects have two advantages over simple Lua tables:
The wrapper objects have two advantages over simple Lua tables:
Original line number Original line Diff line number Diff line
@@ -23,7 +23,7 @@ Best practices
  This allows using the same code to create the initial configuration and upgrade configurations on upgrades.
  This allows using the same code to create the initial configuration and upgrade configurations on upgrades.


* If it is unavoidable to run different code during the initial installation, the ``sysconfig.gluon_version`` variable
* If it is unavoidable to run different code during the initial installation, the ``sysconfig.gluon_version`` variable
  can be checked. This variable is ``nil`` during the initial installation and contains the previously install Gluon
  can be checked. This variable is ``nil`` during the initial installation and contains the previously installed Gluon
  version otherwise.
  version otherwise.


Script ordering
Script ordering
Original line number Original line Diff line number Diff line
@@ -5,7 +5,7 @@ As the WAN port of a node will be connected to a user's private network, it
is essential that the node only uses the WAN when it is absolutely necessary.
is essential that the node only uses the WAN when it is absolutely necessary.
There are two cases in which the WAN port is used:
There are two cases in which the WAN port is used:


* Mesh VPN (package ``gluon-mesh-vpn-fastd``
* Mesh VPN (package ``gluon-mesh-vpn-fastd``)
* DNS to resolve the VPN servers' addresses (package ``gluon-wan-dnsmasq``)
* DNS to resolve the VPN servers' addresses (package ``gluon-wan-dnsmasq``)


After the VPN connection has been established, the node should be able to reach
After the VPN connection has been established, the node should be able to reach
Original line number Original line Diff line number Diff line
@@ -2,7 +2,7 @@ Config Mode
===========
===========


The `Config Mode` consists of several modules that provide a range of different
The `Config Mode` consists of several modules that provide a range of different
condiguration options:
configuration options:


gluon-config-mode-core
gluon-config-mode-core
    This modules provides the core functionality for the config mode.
    This modules provides the core functionality for the config mode.
Original line number Original line Diff line number Diff line
@@ -71,7 +71,7 @@ Useful functions:
    values for the given key.
    values for the given key.
  - *status* (*code*, *message*): Writes the HTTP status to the reply. Has no effect
  - *status* (*code*, *message*): Writes the HTTP status to the reply. Has no effect
    if a status has already been sent or non-header data has been written.
    if a status has already been sent or non-header data has been written.
  - *header* (*key*, *value*): Adds an HTTP header to the reply to be sent to to
  - *header* (*key*, *value*): Adds an HTTP header to the reply to be sent to
    the client. Has no effect when non-header data has already been written.
    the client. Has no effect when non-header data has already been written.
  - *prepare_content* (*mime*): Sets the *Content-Type* header to the given MIME
  - *prepare_content* (*mime*): Sets the *Content-Type* header to the given MIME
    type, potentially setting additional headers or modifying the MIME type to
    type, potentially setting additional headers or modifying the MIME type to
Original line number Original line Diff line number Diff line
@@ -51,14 +51,14 @@ Classes and methods


    - *Form:write* ()
    - *Form:write* ()


      Is called after the form has beed submitted (but only if the data is valid). It
      Is called after the form has been submitted (but only if the data is valid). It
      is called last (after all options' *write* methods) and is usually used
      is called last (after all options' *write* methods) and is usually used
      to commit changed UCI packages.
      to commit changed UCI packages.


      The default implementation of *write* doesn't do anything, but it can be
      The default implementation of *write* doesn't do anything, but it can be
      overridden.
      overridden.


  - *Section* (usually instanciated through *Form:section*)
  - *Section* (usually instantiated through *Form:section*)


    - *Section:option* (*type*, *id*, *title*, *description*)
    - *Section:option* (*type*, *id*, *title*, *description*)


Original line number Original line Diff line number Diff line
@@ -11,7 +11,9 @@ Views are partial HTML pages, with additional template tags that allow
to embed Lua code and translation strings. The following tags are defined:
to embed Lua code and translation strings. The following tags are defined:


  - ``<%`` ... ``%>`` evaluates the enclosed Lua expression.
  - ``<%`` ... ``%>`` evaluates the enclosed Lua expression.
  - ``<%=`` ... ``%>`` evaluates the enclosed Lua expression and prints its value.
  - ``<%|`` ... ``%>`` evaluates the enclosed Lua expression and prints its value.
  - ``<%=`` ... ``%>`` evaluates the enclosed Lua expression and prints its value
    *without escaping HTML entities*. This is useful when the value contains HTML code.
  - ``<%+`` ... ``%>`` includes another template.
  - ``<%+`` ... ``%>`` includes another template.
  - ``<%:`` ... ``%>`` translates the enclosed string using the loaded i18n catalog.
  - ``<%:`` ... ``%>`` translates the enclosed string using the loaded i18n catalog.
  - ``<%_`` ... ``%>`` translates the enclosed string *without escaping HTML entities*
  - ``<%_`` ... ``%>`` translates the enclosed string *without escaping HTML entities*
Original line number Original line Diff line number Diff line
@@ -39,8 +39,8 @@ A fully automated nightly build could use the following commands:
    make update
    make update
    make clean GLUON_TARGET=ar71xx-generic
    make clean GLUON_TARGET=ar71xx-generic
    NUM_CORES_PLUS_ONE=$(expr $(nproc) + 1)
    NUM_CORES_PLUS_ONE=$(expr $(nproc) + 1)
    make -j$NUM_CORES_PLUS_ONE GLUON_TARGET=ar71xx-generic GLUON_BRANCH=experimental
    make -j$NUM_CORES_PLUS_ONE GLUON_TARGET=ar71xx-generic GLUON_BRANCH=experimental GLUON_RELEASE=$GLUON_RELEASE
    make manifest GLUON_BRANCH=$GLUON_BRANCH GLUON_RELEASE=$GLUON_RELEASE
    make manifest GLUON_BRANCH=experimental GLUON_RELEASE=$GLUON_RELEASE
    contrib/sign.sh $SECRETKEY output/images/sysupgrade/experimental.manifest
    contrib/sign.sh $SECRETKEY output/images/sysupgrade/experimental.manifest


    rm -rf /where/to/put/this/experimental
    rm -rf /where/to/put/this/experimental
Original line number Original line Diff line number Diff line
@@ -15,7 +15,7 @@ Activating Config Mode


Config Mode is automatically entered at the first boot. You can re-enter
Config Mode is automatically entered at the first boot. You can re-enter
Config Mode by pressing and holding the RESET/WPS button for about three
Config Mode by pressing and holding the RESET/WPS button for about three
seconds. The device should reboot (all LEDs will turn of briefly) and 
seconds. The device should reboot (all LEDs will turn off briefly) and
Config Mode will be available.
Config Mode will be available.




Original line number Original line Diff line number Diff line
@@ -24,7 +24,7 @@ Information to be announced is currently split into three categories:
    interfaces. This data can be used to determine the network topology.
    interfaces. This data can be used to determine the network topology.


All categories will have a ``node_id`` key. It should be used to
All categories will have a ``node_id`` key. It should be used to
relate data of different catagories.
relate data of different categories.


Accessing Node Information
Accessing Node Information
--------------------------
--------------------------
@@ -117,7 +117,7 @@ The supported requests are:
gluon-neighbour-info
gluon-neighbour-info
~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~


The programm `gluon-neighbour-info` can be used to retrieve
The program `gluon-neighbour-info` can be used to retrieve
information from other nodes.
information from other nodes.


::
::
Original line number Original line Diff line number Diff line
@@ -161,7 +161,7 @@ site.conf only variables


   -  mesh_vpn.fastd.syslog_level
   -  mesh_vpn.fastd.syslog_level
   -  wifi*.supported_rates
   -  wifi*.supported_rates
   -  wifi*.basic_rates
   -  wifi*.basic_rate
   -  timezone
   -  timezone
   -  regdom
   -  regdom


@@ -193,8 +193,8 @@ domain.conf only variables
   -  prefix4
   -  prefix4
   -  extra_prefixes6
   -  extra_prefixes6


-  To prevent accidential bridging of different domains, all meshing
-  To prevent accidental bridging of different domains, all meshing
   technologies should be seperated:
   technologies should be separated:


   -  domain_seed (wired mesh)
   -  domain_seed (wired mesh)


Original line number Original line Diff line number Diff line
Private WLAN
Private WLAN
============
============


It is possible to set up a private WLAN that bridges the WAN port and is seperated from the mesh network.
It is possible to set up a private WLAN that bridges the WAN port and is separated from the mesh network.
Please note that you should not enable ``mesh_on_wan`` simultaneously.
Please note that you should not enable ``mesh_on_wan`` simultaneously.


The private WLAN can be enabled through the config mode if the package ``gluon-web-private-wifi`` is installed.
The private WLAN can be enabled through the config mode if the package ``gluon-web-private-wifi`` is installed.
@@ -19,7 +19,7 @@ You may also enable a private WLAN using the command line::
  uci set wireless.wan_radio$RID.ssid="$SSID"
  uci set wireless.wan_radio$RID.ssid="$SSID"
  uci set wireless.wan_radio$RID.key="$KEY"
  uci set wireless.wan_radio$RID.key="$KEY"
  uci set wireless.wan_radio$RID.disabled=0
  uci set wireless.wan_radio$RID.disabled=0
  uci set wireless.wan_radio$RID.macaddr="$($(echo "lua -e print(require('gluon.util').generate_mac(3+4*$RID))"))"
  uci set wireless.wan_radio$RID.macaddr=$(lua -e "print(require('gluon.util').generate_mac(3+4*$RID))")
  uci commit
  uci commit
  wifi
  wifi


+27 −17
Original line number Original line Diff line number Diff line
Welcome to Gluon
Welcome to Gluon
================
================


Gluon is a modular framework for creating OpenWrt-based firmwares for wireless mesh nodes.
Gluon is a modular framework for creating OpenWrt-based firmware images for wireless mesh nodes.
Several Freifunk communities in Germany use Gluon as the foundation of their Freifunk firmwares.
Several Freifunk communities in Germany use Gluon as the foundation of their Freifunk firmware.




.. toctree::
.. toctree::
@@ -63,6 +63,7 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre
   package/gluon-ebtables-limit-arp
   package/gluon-ebtables-limit-arp
   package/gluon-ebtables-source-filter
   package/gluon-ebtables-source-filter
   package/gluon-radv-filterd
   package/gluon-radv-filterd
   package/gluon-scheduled-domain-switch
   package/gluon-web-admin
   package/gluon-web-admin
   package/gluon-web-logging
   package/gluon-web-logging


@@ -70,6 +71,7 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre
   :caption: Releases
   :caption: Releases
   :maxdepth: 1
   :maxdepth: 1


   releases/v2018.2.1
   releases/v2018.2
   releases/v2018.2
   releases/v2018.1.4
   releases/v2018.1.4
   releases/v2018.1.3
   releases/v2018.1.3
@@ -135,6 +137,7 @@ ar71xx-generic
* AVM
* AVM


  - Fritz!Box 4020 [#avmflash]_
  - Fritz!Box 4020 [#avmflash]_
  - Fritz!WLAN Repeater 300E [#avmflash]_
  - Fritz!WLAN Repeater 450E [#avmflash]_
  - Fritz!WLAN Repeater 450E [#avmflash]_


* Buffalo
* Buffalo
@@ -171,10 +174,6 @@ ar71xx-generic


  - Koala [#ath10k]_
  - Koala [#ath10k]_


* Onion

  - Omega

* OpenMesh
* OpenMesh


  - A40
  - A40
@@ -221,7 +220,7 @@ ar71xx-generic
  - Loco M2/M5 XW
  - Loco M2/M5 XW
  - Nanostation M2/M5
  - Nanostation M2/M5
  - Nanostation M2/M5 XW
  - Nanostation M2/M5 XW
  - Picostation M2/M5
  - Picostation M2
  - Rocket M2/M5
  - Rocket M2/M5
  - Rocket M2/M5 Ti
  - Rocket M2/M5 Ti
  - Rocket M2/M5 XW
  - Rocket M2/M5 XW
@@ -282,7 +281,7 @@ ar71xx-tiny
  - TL-WA7210N (v2)
  - TL-WA7210N (v2)
  - TL-WA7510N (v1)
  - TL-WA7510N (v1)
  - TL-WR703N (v1)
  - TL-WR703N (v1)
  - TL-WR710N (v1, v2, v2.1)
  - TL-WR710N (v2)
  - TL-WR740N (v1, v3, v4, v5)
  - TL-WR740N (v1, v3, v4, v5)
  - TL-WR741N/ND (v1, v2, v4, v5)
  - TL-WR741N/ND (v1, v2, v4, v5)
  - TL-WR743N/ND (v1, v2)
  - TL-WR743N/ND (v1, v2)
@@ -328,13 +327,6 @@ ipq40xx
  - NBG6617 [#80211s]_
  - NBG6617 [#80211s]_
  - WRE6606 [#80211s]_
  - WRE6606 [#80211s]_


ipq806x
^^^^^^^

* TP-Link

  - Archer C2600 [#80211s]_

mpc85xx-generic
mpc85xx-generic
^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^


@@ -351,6 +343,10 @@ ramips-mt7620
  - GL-MT300N [#80211s]_
  - GL-MT300N [#80211s]_
  - GL-MT750 [#80211s]_
  - GL-MT750 [#80211s]_


* Nexx

  - WT3020AD/F/H

ramips-mt7621
ramips-mt7621
^^^^^^^^^^^^^
^^^^^^^^^^^^^


@@ -371,6 +367,20 @@ ramips-mt7621
ramips-mt76x8
ramips-mt76x8
^^^^^^^^^^^^^
^^^^^^^^^^^^^


* GL.iNet

  - GL-MT300N v2 [#80211s]_

* NETGEAR

  - R6120 [#80211s]_

* TP-Link

  - TL-WR841N v13 [#80211s]_
  - Archer C50 v3 [#80211s]_
  - Archer C50 v4 [#80211s]_

* VoCore
* VoCore


  - VoCore2 [#80211s]_
  - VoCore2 [#80211s]_
@@ -388,8 +398,8 @@ ramips-rt305x


  - VoCore (8M, 16M) [#80211s]_
  - VoCore (8M, 16M) [#80211s]_


sunxi
sunxi-cortexa7
^^^^^
^^^^^^^^^^^^^^


* LeMaker
* LeMaker


Original line number Original line Diff line number Diff line
@@ -5,7 +5,7 @@ the node will be placed in. If the selection has changed the upgrade scripts in
``/lib/gluon/upgrade/`` are triggered to update the nodes configuration.
``/lib/gluon/upgrade/`` are triggered to update the nodes configuration.


Hiding domains could be useful for default or testing domains, which should not
Hiding domains could be useful for default or testing domains, which should not
be accidentally selected by a node operater.
be accidentally selected by a node operator.


domains/\*.conf
domains/\*.conf
---------------
---------------
Original line number Original line Diff line number Diff line
@@ -11,7 +11,7 @@ Selected router
---------------
---------------


The router selection mechanism is independent from the batman-adv gateway mode.
The router selection mechanism is independent from the batman-adv gateway mode.
In contrast, the device originating the router advertisment could be any router
In contrast, the device originating the router advertisement could be any router
or client connected to the mesh, as radv-filterd captures all router
or client connected to the mesh, as radv-filterd captures all router
advertisements originating  from it. All nodes announcing router advertisement
advertisements originating  from it. All nodes announcing router advertisement
**with** a default lifetime greater than 0 are being considered as candidates.
**with** a default lifetime greater than 0 are being considered as candidates.
Original line number Original line Diff line number Diff line
gluon-scheduled-domain-switch
=============================

This package allows to switch a routers domain at a given point
in time. This is needed for switching between incompatible transport
protocols (e.g. 802.11s and IBSS or VXLAN).

Nodes will switch when the defined *switch-time* has passed. In case the node was
powered off while this was supposed to happen, it might not be able to acquire the
correct time. In this case, the node will switch after it has not seen any gateway
for a given period of time.

site.conf
---------
All those settings have to be defined exclusively in the domain, not the site.

domain_switch : optional (needed for domains to switch)
    target_domain :
        - target domain to switch to
    switch_after_offline_mins :
        - amount of time without reachable gateway to switch unconditionally
    switch_time :
        - UNIX epoch after which domain will be switched
    connection_check_targets :
        - array of IPv6 addresses which are probed to determine if the node is
	  connected to the mesh

Example::

  domain_switch = {
    target_domain = 'new_domain',
    switch_after_offline_mins = 120,
    switch_time = 1546344000, -- 01.01.2019 - 12:00 UTC
    connection_check_targets = {
      '2001:4860:4860::8888',
      '2001:4860:4860::8844',
    },
  },
Original line number Original line Diff line number Diff line
@@ -3,7 +3,7 @@ gluon-web-admin


This package allows the user to set options like the password for ssh access
This package allows the user to set options like the password for ssh access
within config mode. You can define in your ``site.conf`` whether it should be
within config mode. You can define in your ``site.conf`` whether it should be
possible to access the nodes via ssh with a password or not and what the mimimum
possible to access the nodes via ssh with a password or not and what the minimum
password length must be.
password length must be.


site.conf
site.conf
Original line number Original line Diff line number Diff line
@@ -31,7 +31,7 @@ and slowly increase to 1 until ``PRIORITY`` days have passed. From then, the pro
be configured in ``site.conf``. If the autoupdater is unable to determine the correct time, it will fall back to
be configured in ``site.conf``. If the autoupdater is unable to determine the correct time, it will fall back to
a behavior similar to the old implementation (i.e. hourly update attempts).
a behavior similar to the old implementation (i.e. hourly update attempts).


Seperation of announced data
Separation of announced data
----------------------------
----------------------------
The data announced by alfred has been split into two data types:
The data announced by alfred has been split into two data types:


@@ -73,7 +73,7 @@ which allows simple configuration of batman-adv on the WAN interface.


Site validators
Site validators
---------------
---------------
The content of the ``site.conf`` is now validated when the images are built to make it less likely to accidentially
The content of the ``site.conf`` is now validated when the images are built to make it less likely to accidentally
build broken images.
build broken images.


gluon-firewall
gluon-firewall
Original line number Original line Diff line number Diff line
@@ -43,7 +43,7 @@ See the *Site changes* section for details.


Experimental support for batman-adv compat 15
Experimental support for batman-adv compat 15
---------------------------------------------
---------------------------------------------
As batman-adv has broken compatiblity starting with batman-adv 2014.0
As batman-adv has broken compatibility starting with batman-adv 2014.0
(bumping the "compat level" to 15), Gluon users must decide which
(bumping the "compat level" to 15), Gluon users must decide which
batman-adv version to use. The package for the old batman-adv version
batman-adv version to use. The package for the old batman-adv version
``gluon-mesh-batman-adv`` has been renamed to ``gluon-mesh-batman-adv-14``,
``gluon-mesh-batman-adv`` has been renamed to ``gluon-mesh-batman-adv-14``,
Original line number Original line Diff line number Diff line
@@ -24,7 +24,7 @@ Bugfixes
~~~~~~~~
~~~~~~~~


* Fix download of OpenSSL during build because of broken OpenSSL download servers (again...)
* Fix download of OpenSSL during build because of broken OpenSSL download servers (again...)
* Fix another ABI incompatiblity with the upstream kernel modules which prevented loading some filesystem-related modules
* Fix another ABI incompatibility with the upstream kernel modules which prevented loading some filesystem-related modules
* Fix potential MAC address conflicts on x86 target when using mesh-on-wan/lan
* Fix potential MAC address conflicts on x86 target when using mesh-on-wan/lan
* Fix signal strength indicators on TP-LINK CPE210/510
* Fix signal strength indicators on TP-LINK CPE210/510
* Fix the model name string on some NETGEAR WNDR3700v2
* Fix the model name string on some NETGEAR WNDR3700v2
Original line number Original line Diff line number Diff line
@@ -82,7 +82,7 @@ All config and expert mode modules contain both English and German texts now. Th
locale should always be enabled in ``site.mk`` (as English is the fallback language),
locale should always be enabled in ``site.mk`` (as English is the fallback language),
German can be enabled in addition using the ``GLUON_LANGS`` setting.
German can be enabled in addition using the ``GLUON_LANGS`` setting.


The language shown is autmatically determined from the headers sent by the user's
The language shown is automatically determined from the headers sent by the user's
browser.
browser.


Mesh-on-LAN
Mesh-on-LAN
@@ -106,7 +106,7 @@ the WLAN adapters' transmission power can be changed in this package.
fastd "performance mode"
fastd "performance mode"
^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^
The new package `gluon-luci-mesh-vpn-fastd` allows the user to switch between the `security` and
The new package `gluon-luci-mesh-vpn-fastd` allows the user to switch between the `security` and
`performance` VPN settions. In `performance mode`, the method `null` will be prepended to the
`performance` VPN sections. In `performance mode`, the method `null` will be prepended to the
method list.
method list.


The new option ``configurable`` in the ``fastd_mesh_vpn`` section of ``site.conf`` must be set to `true`
The new option ``configurable`` in the ``fastd_mesh_vpn`` section of ``site.conf`` must be set to `true`
@@ -131,7 +131,7 @@ ffmap backend has been adjusted accordingly.
Nested peer groups
Nested peer groups
^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^
Nested peer groups for the `fastd-mesh-vpn-fastd` package can now be configured in ``site.conf``,
Nested peer groups for the `fastd-mesh-vpn-fastd` package can now be configured in ``site.conf``,
each with its own peer limit. This allows to add additional constaints, for example to connect
each with its own peer limit. This allows to add additional constraints, for example to connect
to 2 peers altogether, but only 1 peer in each data center.
to 2 peers altogether, but only 1 peer in each data center.


Autoupdater manual branch override
Autoupdater manual branch override
Original line number Original line Diff line number Diff line
@@ -19,8 +19,8 @@ Build


Don't overwrite the opkg repository key on each build.
Don't overwrite the opkg repository key on each build.


AirOS 5.6.x compatiblity
AirOS 5.6.x compatibility
^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^


Downgrading to AirOS 5.5.x before flashing Gluon on Airmax M XM/XW devices
Downgrading to AirOS 5.5.x before flashing Gluon on Airmax M XM/XW devices
(NanoStation, Bullet, ...) is not necessary anymore.
(NanoStation, Bullet, ...) is not necessary anymore.
@@ -28,9 +28,9 @@ Downgrading to AirOS 5.5.x before flashing Gluon on Airmax M XM/XW devices
Status page
Status page
^^^^^^^^^^^
^^^^^^^^^^^


* Fix purging of disappered neighbours from the list
* Fix purging of disappeared neighbours from the list
* Don't clear the signal graphs when scrolling in mobile browsers
* Don't clear the signal graphs when scrolling in mobile browsers
* Improve browser compability (don't assume the Internationalization API is available,
* Improve browser compatibility (don't assume the Internationalization API is available,
  fixes the display of numbers in Firefox for Android)
  fixes the display of numbers in Firefox for Android)


Config mode
Config mode
@@ -53,7 +53,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd/announced API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd/announced API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -22,7 +22,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -27,7 +27,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -30,7 +30,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -59,7 +59,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -48,7 +48,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -54,7 +54,7 @@ New features
Kernel module opkg repository
Kernel module opkg repository
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


We've not been able to keep ABI compatiblity with the kernel of the official OpenWrt images.
We've not been able to keep ABI compatibility with the kernel of the official OpenWrt images.
Therefore, Gluon now generates an opkg repository with modules itself.
Therefore, Gluon now generates an opkg repository with modules itself.


The repository can be found at `output/modules/` by default, the image output directory has
The repository can be found at `output/modules/` by default, the image output directory has
@@ -269,7 +269,7 @@ Known Issues
* batman-adv causes stability issues for both alfred and respondd/announced (`#177 <https://github.com/freifunk-gluon/gluon/issues/177>`_)
* batman-adv causes stability issues for both alfred and respondd/announced (`#177 <https://github.com/freifunk-gluon/gluon/issues/177>`_)
* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd/announced API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd/announced API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -45,7 +45,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -71,7 +71,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -55,7 +55,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -48,7 +48,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -29,7 +29,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -50,7 +50,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -24,7 +24,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -172,7 +172,7 @@ Known Issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -34,7 +34,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -71,7 +71,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -14,7 +14,7 @@ Bugfixes
  CVE-2017-14492, CVE-2017-14493, CVE-2017-14494, 2017-CVE-14495 and
  CVE-2017-14492, CVE-2017-14493, CVE-2017-14494, 2017-CVE-14495 and
  2017-CVE-14496
  2017-CVE-14496


  While many of the most severe (remote code execution) vulnarabilities are in
  While many of the most severe (remote code execution) vulnerabilities are in
  the DHCP component of dnsmasq, which is not active on a Gluon node unless in
  the DHCP component of dnsmasq, which is not active on a Gluon node unless in
  Config Mode, CVE-2017-14491 does affect us. An attacker can cause memory
  Config Mode, CVE-2017-14491 does affect us. An attacker can cause memory
  corruption and possibly remote code execution by deploying a malicious DNS
  corruption and possibly remote code execution by deploying a malicious DNS
@@ -52,7 +52,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -43,7 +43,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -41,7 +41,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -81,7 +81,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -24,7 +24,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -36,7 +36,7 @@ Bugfixes
  and a number of other minor issues)
  and a number of other minor issues)


  The listed bugs could lead to high rates of batman-adv management traffic
  The listed bugs could lead to high rates of batman-adv management traffic
  (causing considerable load), trigger warnings about packet checksum failues
  (causing considerable load), trigger warnings about packet checksum failures
  in certain non-standard interface configurations, and possibly other issues.
  in certain non-standard interface configurations, and possibly other issues.




@@ -61,7 +61,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -225,7 +225,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -40,7 +40,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -46,7 +46,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -17,7 +17,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -18,7 +18,7 @@ Bugfixes
* Fix unintended difference between autoupdater version comparison and dpkg/opkg
* Fix unintended difference between autoupdater version comparison and dpkg/opkg


  Alphanumeric characters were considered less than end-of-string, when the
  Alphanumeric characters were considered less than end-of-string, when the
  intended bahaviour (as implemented by dpkg and opkg) is that only ``~`` is
  intended behaviour (as implemented by dpkg and opkg) is that only ``~`` is
  less than end-of-string. This broke relations like the following:
  less than end-of-string. This broke relations like the following:


  * ``1.0`` < ``1.0a``
  * ``1.0`` < ``1.0a``
@@ -35,7 +35,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


Original line number Original line Diff line number Diff line
@@ -150,7 +150,7 @@ anymore.
Filtering IGMP/MLD queries directed towards the mesh ensures that each node becomes the multicast querier
Filtering IGMP/MLD queries directed towards the mesh ensures that each node becomes the multicast querier
for its own clients (unless there are other multicast-aware switches connected to the node), rather
for its own clients (unless there are other multicast-aware switches connected to the node), rather
than electing a single, basically arbitrary node in the mesh to become the querier. Overall,
than electing a single, basically arbitrary node in the mesh to become the querier. Overall,
this should significantly improve the reliablity of multicast in the mesh. This is especially
this should significantly improve the reliability of multicast in the mesh. This is especially
important for IPv6, as the IPv6 Neighbour Discovery Protocol (NDP) is based on local multicast.
important for IPv6, as the IPv6 Neighbour Discovery Protocol (NDP) is based on local multicast.


See also the documentation of the :ref:`site.conf mesh section <user-site-mesh>`.
See also the documentation of the :ref:`site.conf mesh section <user-site-mesh>`.
@@ -176,7 +176,7 @@ Public key in respondd data (optional)
======================================
======================================


If desired, the fastd public key of a node can be included in the respondd nodeinfo data,
If desired, the fastd public key of a node can be included in the respondd nodeinfo data,
faciliating the correlations of VPN peers and nodes. As the VPN key is transmitted unencrypted
facilitating the correlations of VPN peers and nodes. As the VPN key is transmitted unencrypted
in the fastd handshake, this would theoretically allow an ISP to determine which nodes
in the fastd handshake, this would theoretically allow an ISP to determine which nodes
are operated behind which internet line. Therefore, this feature must be enabled explicitly
are operated behind which internet line. Therefore, this feature must be enabled explicitly
by setting *mesh_vpn.pubkey_privacy* to ``false`` in *site.conf*.
by setting *mesh_vpn.pubkey_privacy* to ``false`` in *site.conf*.
@@ -389,7 +389,7 @@ Known issues


* 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>`_)
* 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 promicious mode is disallowed).
  This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)


+132 −0
Original line number Original line Diff line number Diff line
Gluon 2018.2.1
==============

Added hardware support
~~~~~~~~~~~~~~~~~~~~~~

ar71xx-generic
^^^^^^^^^^^^^^

* AVM

  - Fritz!WLAN Repeater 300E

ramips-mt7620
^^^^^^^^^^^^^

* Nexx

  - WT3020AD/F/H [#noibss]_

ramips-mt76x8
^^^^^^^^^^^^^

* Gl.iNet

  - MT300N (v2) [#noibss]_

* Netgear

  - R6120 [#noibss]_

* TP-Link

  - Archer C50 (v3, v4) [#noibss]_
  - TL-WR841N (v13) [#noibss]_

.. [#noibss]
  Device or target does not support AP+IBSS mode: This device or target will not be built
  when *GLUON_WLAN_MESH* is set to ``ibss``.

Bugfixes
~~~~~~~~

* Fixes a bug in the batman-adv respondd module that caused duplicate
  IPv6 addresses in nodeinfo replies (`#1615 <https://github.com/freifunk-gluon/gluon/issues/1615>`_)

  This was visible on the status page and several map implementations.
  The new implementation uses netlink instead of parsing `/proc/net/if_inet6`.

* Fixes a localization issue in gluon-config-mode-geo-location which 
  resulted in a partial translation of the wizard's location section
  text. (`#1611 <https://github.com/freifunk-gluon/gluon/issues/1611>`_)

* Fixes the display of the improved memory usage estimation in gluon-status-page

  This change was actually already merged in time for v2018.2 but the 
  JavaScript was not rebuilt.

* Fixes automatic updates for several devices by adding and updating 
  the autoupdater image names

  This affects the following devices:

  * GL.iNet GL-AR150, 
  * GL.iNet GL-AR300M
  * GL.iNet GL-AR750
  * Raspberry Pi Model B+ Rev 1.2

* Fixes the primary MAC address selection for Unifi AC 
  Lite/Mesh/Pro/Mesh Pro (`#1629 <https://github.com/freifunk-gluon/gluon/issues/1629>`_)

* Fixes low data rate selection for multicast and management frames on
  ath10k and ath10k-ct (`#1644 <https://github.com/freifunk-gluon/gluon/pull/1644>`_)

  A patchset has been backported that notifies these drivers of requested data rate changes

* Fixes the data rate selection in ath10k and ath10k-ct when no 
  `mcast_rate` is configured (`#1657 <https://github.com/freifunk-gluon/gluon/pull/1657>`_)

  Previously a missing mcast_rate could result in broken 5 GHz connectivity

New features
~~~~~~~~~~~~

Scheduled domain switch
^^^^^^^^^^^^^^^^^^^^^^^

Gluon has support for multiple domains since its v2018.1 release.
The scheduled domain switch allows for reliable migrations between 
domains at a preconfigured time.
This can be useful for communities that, among other things, plan to

  * migrate between IBSS and 802.11s
  * activate VXLAN encapsulation on wired mesh links

Improved frequency band distribution of dual-band radios
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

A new algorithm that improves the distribution of dual-band radios was
added. They will now be evenly distributed between the 2.4 and 5 GHz
band, with a preference towards 2.4 GHz. 

If a device has only a single dual-band radio, like the AVM FRITZ!WLAN
Repeater 300E, it will be configured for 2.4 GHz.

Known issues
~~~~~~~~~~~~

* 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.

* 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).

* Inconsistent respondd API
  (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)

  The current API is inconsistent and will be replaced eventually. The old API
  will still be supported for a while.

* Frequent reboots due to out-of-memory or high load due to memory pressure on
  weak hardware specially in larger meshes
  (`#1243 <https://github.com/freifunk-gluon/gluon/issues/1243>`_)

  Optimizations in Gluon 2018.1 have significantly improved memory usage.
  There are still known bugs leading to unreasonably high load that we hope to
  solve in future releases.
Original line number Original line Diff line number Diff line
@@ -81,6 +81,12 @@ ramips-mt7621 [#noibss]_
  AP+IBSS mode unsupported: This target is not built when *GLUON_WLAN_MESH* is
  AP+IBSS mode unsupported: This target is not built when *GLUON_WLAN_MESH* is
  set to ``ibss``.
  set to ``ibss``.


.. note::

    The *ramips-mt7628* target has been renamed to *ramips-mt76x8*, and the *sunxi*
    target has been renamed to *sunxi-cortexa7*. You might have to update your build
    scripts accordingly.

New features
New features
************
************


@@ -90,10 +96,11 @@ following larger new features:
OpenStreetMap-based map in config wizard
OpenStreetMap-based map in config wizard
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


When the features *web-wizard* and *web-osm* are enabled, the configuration
When the feature *config-mode-geo-location-osm* (package
wizard will try to load an OSM-based map to allow the user to specify the node
*gluon-config-mode-geo-location-osm*) is enabled, the configuration wizard will
location. Loading the map requires a working internet connection, for example
try to load an OSM-based map to allow the user to specify the node location.
via WLAN (while connected to the Gluon node via Ethernet).
Loading the map requires a working internet connection, for example via WLAN
(while connected to the Gluon node via Ethernet).


See the :ref:`config_mode <user-site-config_mode>` section for the *site.conf*
See the :ref:`config_mode <user-site-config_mode>` section for the *site.conf*
configuration of this feature.
configuration of this feature.
@@ -120,8 +127,12 @@ adding ``-gluon-ebtables-limit-arp`` to *GLUON_SITE_PACKAGES*.
Site changes
Site changes
************
************


No changes need to be made to *site.conf* or *site.mk* when upgrading from
If an opkg repository for ``lede`` was configured the key needs to be migrated
Gluon v2018.1.x.
to ``openwrt``. ``lede`` is ignored and without an ``openwrt`` key the default
OpenWrt repository is used.

No other changes need to be made to *site.conf* or *site.mk* when upgrading
from Gluon v2018.1.x.


Internals
Internals
*********
*********
@@ -141,7 +152,7 @@ Known issues
  disabled (`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
  disabled (`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)


  This may lead to issues in environments where a fixed MAC address is expected
  This may lead to issues in environments where a fixed MAC address is expected
  (like VMware when promicious mode is disallowed).
  (like VMware when promiscuous mode is disallowed).


* Inconsistent respondd API
* Inconsistent respondd API
  (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
  (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
Original line number Original line Diff line number Diff line
-- This is an example site configuration for Gluon v2018.2
-- This is an example site configuration for Gluon v2018.2.1
--
--
-- 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.
Original line number Original line Diff line number Diff line
Frequently Asked Questions
Frequently Asked Questions
==========================
==========================


.. _faq-hardware:

What hardware is supported?
~~~~~~~~~~~~~~~~~~~~~~~~~~~
A table with hardware supported by Gluon can be found on the `OpenWrt Wiki`_.
If you want to find out if your device can potentially be supported 
have a look at :doc:`../dev/hardware` for detailed hardware requirements.

.. _OpenWrt Wiki: https://openwrt.org/toh/views/toh_gluon_supported

.. _faq-dns:
.. _faq-dns:


DNS does not work on the nodes
Why does DNS not work on the nodes?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Gluon nodes will ignore the DNS server on the WAN port for everything except
Gluon nodes will ignore the DNS server on the WAN port for everything except
the mesh VPN, which can lead to confusion.
the mesh VPN, which can lead to confusion.
@@ -18,8 +28,8 @@ in this case, the *radvd* is only used to announce the DNS server.


.. _faq-mtu:
.. _faq-mtu:


What is a good MTU on the mesh-vpn
What is a good MTU on the mesh-vpn?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Setting the MTU on the transport interface requires careful consideration, as
Setting the MTU on the transport interface requires careful consideration, as
setting it too low will cause excessive fragmentation and setting it too high
setting it too low will cause excessive fragmentation and setting it too high
@@ -30,7 +40,7 @@ Consider these key values:
- Payload: Allow for the transport of IPv6 packets, by adhering to the minimum MTU
- Payload: Allow for the transport of IPv6 packets, by adhering to the minimum MTU
  of 1280 Byte specified in RFC 2460
  of 1280 Byte specified in RFC 2460
  - and configure `MSS clamping`_ accordingly,
  - and configure `MSS clamping`_ accordingly,
  - and announce your link MTU via Router Advertisments and DHCP
  - 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://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.cookbook.mtu-mss.html


@@ -48,7 +58,7 @@ For reference, the complete MTU stack looks like this:
Minimum MTU
Minimum MTU
-----------
-----------


Calculcate the minimum transport MTU by adding the encapsulation overhead to the
Calculate the minimum transport MTU by adding the encapsulation overhead to the
minimum payload MTU required. This is the lowest recommended value, since going
minimum payload MTU required. This is the lowest recommended value, since going
lower would cause unnecessary fragmentation for clients which respect the announced
lower would cause unnecessary fragmentation for clients which respect the announced
link MTU.
link MTU.
Original line number Original line Diff line number Diff line
@@ -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. *v2018.2*. Always get Gluon using git and don't try to download it
e.g. *v2018.2.1*. 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
-------------------
-------------------


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. *v2018.2*.
version you'd like to checkout, e.g. *v2018.2.1*.


::
::


@@ -172,7 +172,7 @@ GLUON_PRIORITY
GLUON_REGION
GLUON_REGION
  Some devices (at the moment the TP-Link Archer C7) contain a region code that restricts
  Some devices (at the moment the TP-Link Archer C7) contain a region code that restricts
  firmware installations. Set GLUON_REGION to ``eu`` or ``us`` to make the resulting
  firmware installations. Set GLUON_REGION to ``eu`` or ``us`` to make the resulting
  images installable from the respective stock firmwares.
  images installable from the respective stock firmware.


GLUON_RELEASE
GLUON_RELEASE
  Firmware release number: This string is displayed in the config mode, announced
  Firmware release number: This string is displayed in the config mode, announced
@@ -186,9 +186,6 @@ GLUON_TARGET
Special variables
Special variables
.................
.................


GLUON_BUILDDIR
  Working directory during build. Defaults to ``build``.

GLUON_IMAGEDIR
GLUON_IMAGEDIR
  Path where images will be stored. Defaults to ``$(GLUON_OUTPUTDIR)/images``.
  Path where images will be stored. Defaults to ``$(GLUON_OUTPUTDIR)/images``.


Original line number Original line Diff line number Diff line
@@ -24,7 +24,7 @@ site_code
domain_seed
domain_seed
    32 bytes of random data, encoded in hexadecimal, used to seed other random
    32 bytes of random data, encoded in hexadecimal, used to seed other random
    values specific to the mesh domain. It must be the same for all nodes of one
    values specific to the mesh domain. It must be the same for all nodes of one
    mesh, but should be different for firmwares that are not supposed to mesh with
    mesh, but should be different for firmware that is not supposed to mesh with
    each other.
    each other.


    The recommended way to generate a value for a new site is:
    The recommended way to generate a value for a new site is:
@@ -69,7 +69,7 @@ timezone
      -- Europe/Berlin
      -- Europe/Berlin
      timezone = 'CET-1CEST,M3.5.0,M10.5.0/3'
      timezone = 'CET-1CEST,M3.5.0,M10.5.0/3'


ntp_server
ntp_servers
    List of NTP servers available in your community or used by your community, e.g.:
    List of NTP servers available in your community or used by your community, e.g.:
    ::
    ::


@@ -152,7 +152,7 @@ wifi24 \: optional
    don't want users to connect to this mesh-SSID, so use a cryptic id that no
    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.
    one will accidentally mistake for the client WiFi.


    ``ibss`` requires two parametersr: ``ssid`` (a string) and ``bssid`` (a MAC).
    ``ibss`` requires two parameters: ``ssid`` (a string) and ``bssid`` (a MAC).
    An optional parameter ``vlan`` (integer) is supported.
    An optional parameter ``vlan`` (integer) is supported.


    Both ``mesh`` and ``ibss`` accept an optional ``mcast_rate`` (kbit/s) parameter for
    Both ``mesh`` and ``ibss`` accept an optional ``mcast_rate`` (kbit/s) parameter for
@@ -247,7 +247,7 @@ mesh
      throughput is at least 1500 kbit/s faster than the throughput of the
      throughput is at least 1500 kbit/s faster than the throughput of the
      currently selected gateway. 
      currently selected gateway. 


    For details on determining the threshhold, when to switch to a new gateway,
    For details on determining the threshold, when to switch to a new gateway,
    see `batctl manpage`_, section "gw_mode".
    see `batctl manpage`_, section "gw_mode".
    
    
    .. _batctl manpage: https://www.open-mesh.org/projects/batman-adv/wiki/Gateways
    .. _batctl manpage: https://www.open-mesh.org/projects/batman-adv/wiki/Gateways
@@ -661,7 +661,7 @@ Site modules
The file ``modules`` in the site repository is completely optional and can be used
The file ``modules`` in the site repository is completely optional and can be used
to supply additional package feeds from which packages are built. The git repositories
to supply additional package feeds from which packages are built. The git repositories
specified here are retrieved in addition to the default feeds when ``make update``
specified here are retrieved in addition to the default feeds when ``make update``
it called.
is called.


This file's format is very similar to the toplevel ``modules`` file of the Gluon
This file's format is very similar to the toplevel ``modules`` file of the Gluon
tree, with the important different that the list of feeds must be assigned to
tree, with the important different that the list of feeds must be assigned to
Original line number Original line Diff line number Diff line
@@ -19,8 +19,8 @@ The following targets for x86 images exist:
    * `virtualbox` (VDI image)
    * `virtualbox` (VDI image)
    * `vmware` (VMDK image)
    * `vmware` (VMDK image)


    These images only differ in the image file format, the content is the same. Therefore there is
    These images differ in the image file format, the content is the same. Therefore
    only a single `x86-generic` sysupgrade image instead of three.
    a single `x86-generic` sysupgrade image is provided, only.


`x86-geode`
`x86-geode`
    x86 image for Geode CPUs.
    x86 image for Geode CPUs.
+4 −4
Original line number Original line Diff line number Diff line
@@ -2,19 +2,19 @@ GLUON_FEEDS='packages routing luci gluon'


OPENWRT_REPO=https://git.openwrt.org/openwrt/openwrt.git
OPENWRT_REPO=https://git.openwrt.org/openwrt/openwrt.git
OPENWRT_BRANCH=openwrt-18.06
OPENWRT_BRANCH=openwrt-18.06
OPENWRT_COMMIT=eef6bd3393f406f73187a670fa34d5e6a228f9e8
OPENWRT_COMMIT=fc1dae5be797f54d45f5a61ae17fe548e108dd0d


PACKAGES_PACKAGES_REPO=https://github.com/openwrt/packages.git
PACKAGES_PACKAGES_REPO=https://github.com/openwrt/packages.git
PACKAGES_PACKAGES_BRANCH=openwrt-18.06
PACKAGES_PACKAGES_BRANCH=openwrt-18.06
PACKAGES_PACKAGES_COMMIT=d05b98c6c86da58db5cbda3c945007be09583609
PACKAGES_PACKAGES_COMMIT=5d3cb594e49132158ca7b41f4246421078e8f92a


PACKAGES_ROUTING_REPO=https://github.com/openwrt-routing/packages.git
PACKAGES_ROUTING_REPO=https://github.com/openwrt-routing/packages.git
PACKAGES_ROUTING_BRANCH=openwrt-18.06
PACKAGES_ROUTING_BRANCH=openwrt-18.06
PACKAGES_ROUTING_COMMIT=bc6e7f6903c8237c77131aedfc92dba40e1bc6ac
PACKAGES_ROUTING_COMMIT=7589804a56baac804421b492c93004c28a627abb


PACKAGES_LUCI_REPO=https://github.com/openwrt/luci.git
PACKAGES_LUCI_REPO=https://github.com/openwrt/luci.git
PACKAGES_LUCI_BRANCH=openwrt-18.06
PACKAGES_LUCI_BRANCH=openwrt-18.06
PACKAGES_LUCI_COMMIT=4ba85e3d82b684262c570e38a72d2dc3bb712a13
PACKAGES_LUCI_COMMIT=4ba85e3d82b684262c570e38a72d2dc3bb712a13


PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
PACKAGES_GLUON_COMMIT=a52d5ced54acfe399b3ac36b33d53034f341f06b
PACKAGES_GLUON_COMMIT=524ae77e9bb20002252af19b63e6607155b3af4d
Original line number Original line Diff line number Diff line
@@ -15,7 +15,7 @@ return function(form, uci)
	if not text then
	if not text then
		text = pkg_i18n.translate(
		text = pkg_i18n.translate(
			'If you want the location of your node to ' ..
			'If you want the location of your node to ' ..
			'be displayed on the map, you can enter its coordinates here.'
			'be displayed on public maps, you can enter its coordinates here.'
		)
		)
		if osm then
		if osm then
			text = text .. ' ' .. osm.help(i18n)
			text = text .. ' ' .. osm.help(i18n)
Original line number Original line Diff line number Diff line
@@ -24,51 +24,39 @@ return function(form, uci)
	local o
	local o


	local meshvpn = s:option(Flag, "meshvpn", pkg_i18n.translate("Use internet connection (mesh VPN)"))
	local meshvpn = s:option(Flag, "meshvpn", pkg_i18n.translate("Use internet connection (mesh VPN)"))
	meshvpn.default = uci:get_bool("fastd", "mesh_vpn", "enabled") or uci:get_bool("tunneldigger", "mesh_vpn", "enabled")
	meshvpn.default = uci:get_bool("gluon", "mesh_vpn", "enabled")
	function meshvpn:write(data)
	function meshvpn:write(data)
		if has_fastd then
		uci:set("gluon", "mesh_vpn", "enabled", data)
			uci:set("fastd", "mesh_vpn", "enabled", data)
		end
		if has_tunneldigger then
			uci:set("tunneldigger", "mesh_vpn", "enabled", data)
		end
	end
	end


	local limit = s:option(Flag, "limit_enabled", pkg_i18n.translate("Limit bandwidth"))
	local limit = s:option(Flag, "limit_enabled", pkg_i18n.translate("Limit bandwidth"))
	limit:depends(meshvpn, true)
	limit:depends(meshvpn, true)
	limit.default = uci:get_bool("simple-tc", "mesh_vpn", "enabled")
	limit.default = uci:get_bool("gluon", "mesh_vpn", "limit_enabled")
	function limit:write(data)
	function limit:write(data)
		uci:set("simple-tc", "mesh_vpn", "interface")
		uci:set("gluon", "mesh_vpn", "limit_enabled", data)
		uci:set("simple-tc", "mesh_vpn", "enabled", data)
		uci:set("simple-tc", "mesh_vpn", "ifname", "mesh-vpn")
		if not data and has_tunneldigger then
			uci:delete("tunneldigger", "mesh_vpn", "limit_bw_down")
		end
	end
	end


	o = s:option(Value, "limit_ingress", pkg_i18n.translate("Downstream (kbit/s)"))
	o = s:option(Value, "limit_ingress", pkg_i18n.translate("Downstream (kbit/s)"))
	o:depends(limit, true)
	o:depends(limit, true)
	if has_tunneldigger then
	o.default = uci:get("gluon", "mesh_vpn", "limit_ingress")
		o.default = uci:get("tunneldigger", "mesh_vpn", "limit_bw_down")
	else
		o.default = uci:get("simple-tc", "mesh_vpn", "limit_ingress")
	end
	o.datatype = "uinteger"
	o.datatype = "uinteger"
	function o:write(data)
	function o:write(data)
		if has_tunneldigger then
		uci:set("gluon", "mesh_vpn", "limit_ingress", data)
			uci:set("tunneldigger", "mesh_vpn", "limit_bw_down", data)
		else
			uci:set("simple-tc", "mesh_vpn", "limit_ingress", data)
		end
	end
	end


	o = s:option(Value, "limit_egress", pkg_i18n.translate("Upstream (kbit/s)"))
	o = s:option(Value, "limit_egress", pkg_i18n.translate("Upstream (kbit/s)"))
	o:depends(limit, true)
	o:depends(limit, true)
	o.default = uci:get("simple-tc", "mesh_vpn", "limit_egress")
	o.default = uci:get("gluon", "mesh_vpn", "limit_egress")
	o.datatype = "uinteger"
	o.datatype = "uinteger"
	function o:write(data)
	function o:write(data)
		uci:set("simple-tc", "mesh_vpn", "limit_egress", data)
		uci:set("gluon", "mesh_vpn", "limit_egress", data)
	end

	function s:handle()
		Section.handle(s)
		uci:save('gluon')
		os.execute('exec /lib/gluon/mesh-vpn/update-config')
	end
	end


	return {'fastd', 'tunneldigger', 'simple-tc'}
	return {'gluon', 'fastd', 'tunneldigger', 'simple-tc'}
end
end
Original line number Original line Diff line number Diff line
@@ -3,15 +3,6 @@ need_string(in_site({'site_name'}))


-- this_domain() returns nil when multidomain support is disabled
-- this_domain() returns nil when multidomain support is disabled
if this_domain() then
if this_domain() then
	function need_domain_name(path)
		need_string(path)
		need(path, function(default_domain)
			local f = io.open(os.getenv('IPKG_INSTROOT') .. '/lib/gluon/domains/' .. default_domain .. '.json')
			if not f then return false end
			f:close()
			return true
		end, nil, 'be a valid domain name')
	end
	need_domain_name(in_site({'default_domain'}))
	need_domain_name(in_site({'default_domain'}))


	need_table(in_domain({'domain_names'}), function(domain)
	need_table(in_domain({'domain_names'}), function(domain)
Original line number Original line Diff line number Diff line
@@ -26,10 +26,10 @@ end
if platform.match('ar71xx', 'generic', {'tl-wdr3600', 'tl-wdr4300',
if platform.match('ar71xx', 'generic', {'tl-wdr3600', 'tl-wdr4300',
                                        'tl-wr902ac-v1'}) then
                                        'tl-wr902ac-v1'}) then
  table.insert(try_files, 1, '/sys/class/ieee80211/phy1/macaddress')
  table.insert(try_files, 1, '/sys/class/ieee80211/phy1/macaddress')
elseif platform.match('ramips', 'mt7621', {'dir-860l-b1'}) then
elseif platform.match('ar71xx', 'generic', {'a40', 'a60',
  table.insert(try_files, 1, '/sys/class/ieee80211/phy1/macaddress')
                                            'archer-c7-v4', 'archer-c7-v5',
elseif platform.match('ar71xx', 'generic', {'unifi-outdoor-plus', 'carambola2',
                                            'carambola2',
                                            'a40', 'a60', 'koala',
                                            'koala',
                                            'mr600', 'mr600v2',
                                            'mr600', 'mr600v2',
                                            'mr900', 'mr900v2',
                                            'mr900', 'mr900v2',
                                            'mr1750', 'mr1750v2',
                                            'mr1750', 'mr1750v2',
@@ -39,7 +39,8 @@ elseif platform.match('ar71xx', 'generic', {'unifi-outdoor-plus', 'carambola2',
                                            'om2p-lc',
                                            'om2p-lc',
                                            'om5p', 'om5p-an',
                                            'om5p', 'om5p-an',
                                            'om5p-ac', 'om5p-acv2',
                                            'om5p-ac', 'om5p-acv2',
                                            'archer-c7-v4', 'archer-c7-v5'}) then
                                            'unifi-outdoor-plus',
                                            'unifiac-lite', 'unifiac-pro'}) then
  table.insert(try_files, 1, '/sys/class/net/eth0/address')
  table.insert(try_files, 1, '/sys/class/net/eth0/address')
elseif platform.match('ar71xx', 'generic', {'archer-c5', 'archer-c58-v1',
elseif platform.match('ar71xx', 'generic', {'archer-c5', 'archer-c58-v1',
                                            'archer-c59-v1', 'archer-c60-v1',
                                            'archer-c59-v1', 'archer-c60-v1',
@@ -48,6 +49,8 @@ elseif platform.match('ar71xx', 'generic', {'archer-c5', 'archer-c58-v1',
elseif platform.match('ipq40xx', nil, {'avm,fritzbox-4040',
elseif platform.match('ipq40xx', nil, {'avm,fritzbox-4040',
                                       'openmesh,a42', 'openmesh,a62'}) then
                                       'openmesh,a42', 'openmesh,a62'}) then
  table.insert(try_files, 1, '/sys/class/net/eth0/address')
  table.insert(try_files, 1, '/sys/class/net/eth0/address')
elseif platform.match('ramips', 'mt7621', {'dir-860l-b1'}) then
  table.insert(try_files, 1, '/sys/class/ieee80211/phy1/macaddress')
end
end




Original line number Original line Diff line number Diff line
@@ -10,6 +10,43 @@ local uci = require('simple-uci').cursor()
-- Initial
-- Initial
if not sysconfig.gluon_version then
if not sysconfig.gluon_version then
	uci:delete_all('wireless', 'wifi-iface')
	uci:delete_all('wireless', 'wifi-iface')

	-- First count all radios with a fixed frequency band.
	-- This is needed to distribute devices which have radios
	-- capable of operating in the 2.4 GHz and 5 GHz band need
	-- to be distributed evenly.
	local radio_band_count = {band24=0, band5=0}
	util.foreach_radio(uci, function(radio, index, config)
		local hwmodes = iwinfo.nl80211.hwmodelist(util.find_phy(radio))
		if (hwmodes.a or hwmodes.ac) and hwmodes.g then
			-- Dualband - do nothing in this step
		elseif hwmodes.g then
			-- 2.4 GHz
			radio_band_count["band24"] = radio_band_count["band24"] + 1
		elseif hwmodes.a or hwmodes.ac then
			-- 5 GHz
			radio_band_count["band5"] = radio_band_count["band5"] + 1
		end
	end)

	-- Use the number of all fixed 2.4G GHz and 5 GHz radios to
	-- distribute dualband radios in this step.
	util.foreach_radio(uci, function(radio, index, config)
		local radio_name = radio['.name']
		local hwmodes = iwinfo.nl80211.hwmodelist(util.find_phy(radio))
		if (hwmodes.a or hwmodes.ac) and hwmodes.g then
			-- Dualband radio
			if radio_band_count["band24"] <= radio_band_count["band5"] then
				-- Assign radio to 2.4GHz band
				radio_band_count["band24"] = radio_band_count["band24"] + 1
				uci:set('wireless', radio_name, 'hwmode', '11g')
			else
				-- Assign radio to 5GHz band
				radio_band_count["band5"] = radio_band_count["band5"] + 1
				uci:set('wireless', radio_name, 'hwmode', '11a')
			end
		end
	end)
end
end


local function get_channel(radio, config)
local function get_channel(radio, config)
Original line number Original line Diff line number Diff line
@@ -253,3 +253,12 @@ function foreach_radio(uci, f)
		end
		end
	end
	end
end
end

function get_uptime()
	local uptime_file = readfile("/proc/uptime")
	if uptime_file == nil then
		-- Something went wrong reading "/proc/uptime"
		return nil
	end
	return tonumber(uptime_file:match('^[^ ]+'))
end
Original line number Original line Diff line number Diff line
@@ -7,6 +7,9 @@ local macaddr = client_bridge.next_node_macaddr()
rule('FORWARD --logical-out br-client -i bat0 -o local-port -j DROP')
rule('FORWARD --logical-out br-client -i bat0 -o local-port -j DROP')
rule('FORWARD --logical-out br-client -i local-port -o bat0 -j DROP')
rule('FORWARD --logical-out br-client -i local-port -o bat0 -j DROP')


rule('PREROUTING --logical-in br-client -i bat0 -s ' .. macaddr .. ' -j DROP', 'nat')
rule('PREROUTING --logical-in br-client -i bat0 -d ' .. macaddr .. ' -j DROP', 'nat')

rule('FORWARD --logical-out br-client -o bat0 -d ' .. macaddr .. ' -j DROP')
rule('FORWARD --logical-out br-client -o bat0 -d ' .. macaddr .. ' -j DROP')
rule('OUTPUT --logical-out br-client -o bat0 -d ' .. macaddr .. ' -j DROP')
rule('OUTPUT --logical-out br-client -o bat0 -d ' .. macaddr .. ' -j DROP')
rule('FORWARD --logical-out br-client -o bat0 -s ' .. macaddr .. ' -j DROP')
rule('FORWARD --logical-out br-client -o bat0 -s ' .. macaddr .. ' -j DROP')
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@


#include <respondd.h>
#include <respondd.h>


#include <ifaddrs.h>
#include <iwinfo.h>
#include <iwinfo.h>
#include <json-c/json.h>
#include <json-c/json.h>
#include <libgluonutil.h>
#include <libgluonutil.h>
@@ -43,12 +44,16 @@
#include <net/if.h>
#include <net/if.h>
#include <netinet/in.h>
#include <netinet/in.h>


#include <netlink/netlink.h>
#include <netlink/genl/genl.h>

#include <sys/types.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/socket.h>


#include <linux/ethtool.h>
#include <linux/ethtool.h>
#include <linux/if_addr.h>
#include <linux/if_addr.h>
#include <linux/rtnetlink.h>
#include <linux/sockios.h>
#include <linux/sockios.h>


#include <batadv-genl.h>
#include <batadv-genl.h>
@@ -71,55 +76,73 @@ struct gw_netlink_opts {
};
};


struct clients_netlink_opts {
struct clients_netlink_opts {
	size_t total;
	size_t non_wifi;
	size_t wifi;
	struct batadv_nlquery_opts query_opts;
	struct batadv_nlquery_opts query_opts;
};
};


struct ip_address_information {
	unsigned int ifindex;
	struct json_object *addresses;
};


static struct json_object * get_addresses(void) {
static int get_addresses_cb(struct nl_msg *msg, void *arg) {
	FILE *f = fopen("/proc/net/if_inet6", "r");
	struct ip_address_information *info = (struct ip_address_information*) arg;
	if (!f)
		return NULL;


	char *line = NULL;
	struct nlmsghdr *nlh = nlmsg_hdr(msg);
	size_t len = 0;
	struct ifaddrmsg *msg_content = NLMSG_DATA(nlh);

	int remaining = nlh->nlmsg_len - NLMSG_LENGTH(sizeof(struct ifaddrmsg));
	struct json_object *ret = json_object_new_array();
	struct rtattr *hdr;

	while (getline(&line, &len, f) >= 0) {
		/* IF_NAMESIZE would be enough, but adding 1 here is simpler than subtracting 1 in the format string */
		char ifname[IF_NAMESIZE+1];
		unsigned int flags;
		struct in6_addr addr;
		char buf[INET6_ADDRSTRLEN];

		if (sscanf(line,
			   "%2"SCNx8"%2"SCNx8"%2"SCNx8"%2"SCNx8"%2"SCNx8"%2"SCNx8"%2"SCNx8"%2"SCNx8
			   "%2"SCNx8"%2"SCNx8"%2"SCNx8"%2"SCNx8"%2"SCNx8"%2"SCNx8"%2"SCNx8"%2"SCNx8
			   "  %*x %*x %*x %x %"STRINGIFY(IF_NAMESIZE)"s",
			   &addr.s6_addr[0], &addr.s6_addr[1], &addr.s6_addr[2], &addr.s6_addr[3],
			   &addr.s6_addr[4], &addr.s6_addr[5], &addr.s6_addr[6], &addr.s6_addr[7],
			   &addr.s6_addr[8], &addr.s6_addr[9], &addr.s6_addr[10], &addr.s6_addr[11],
			   &addr.s6_addr[12], &addr.s6_addr[13], &addr.s6_addr[14], &addr.s6_addr[15],
			   &flags, ifname) != 18)
			continue;


		if (strcmp(ifname, "br-client"))
	for (hdr = IFA_RTA(msg_content); RTA_OK(hdr, remaining); hdr = RTA_NEXT(hdr, remaining)) {
			continue;
		char addr_str_buf[INET6_ADDRSTRLEN];


		if (flags & (IFA_F_TENTATIVE|IFA_F_DEPRECATED))
		/* We are only interested in IP-addresses of br-client */
		if (hdr->rta_type != IFA_ADDRESS ||
			msg_content->ifa_index != info->ifindex ||
			msg_content->ifa_flags & (IFA_F_TENTATIVE|IFA_F_DEPRECATED)) {
			continue;
			continue;
		}

		if (inet_ntop(AF_INET6, (struct in6_addr *) RTA_DATA(hdr), addr_str_buf, INET6_ADDRSTRLEN)) {
			json_object_array_add(info->addresses, json_object_new_string(addr_str_buf));
		}
	}


		inet_ntop(AF_INET6, &addr, buf, sizeof(buf));
	return NL_OK;
}


		json_object_array_add(ret, json_object_new_string(buf));
static struct json_object *get_addresses(void) {
	struct ip_address_information info = {
		.ifindex = if_nametoindex("br-client"),
		.addresses = json_object_new_array(),
	};
	int err;

	/* Open socket */
	struct nl_sock *socket = nl_socket_alloc();
	if (!socket) {
		return info.addresses;
	}
	}


	fclose(f);
	err = nl_connect(socket, NETLINK_ROUTE);
	free(line);
	if (err < 0) {
		goto out_free;
	}


	return ret;
	/* Send message */
	struct ifaddrmsg rt_hdr = { .ifa_family = AF_INET6, };
	err = nl_send_simple(socket, RTM_GETADDR, NLM_F_REQUEST | NLM_F_ROOT, &rt_hdr, sizeof(struct ifaddrmsg));
	if (err < 0) {
		goto out_free;
	}

	/* Retrieve answer. Message is handled by get_addresses_cb */
	nl_socket_modify_cb(socket, NL_CB_VALID, NL_CB_CUSTOM, get_addresses_cb, &info);
	nl_recvmsgs_default(socket);

out_free:
	nl_socket_free(socket);
	return info.addresses;
}
}


static void add_if_not_empty(struct json_object *obj, const char *key, struct json_object *val) {
static void add_if_not_empty(struct json_object *obj, const char *key, struct json_object *val) {
@@ -529,26 +552,24 @@ static int parse_clients_list_netlink_cb(struct nl_msg *msg, void *arg)


	flags = nla_get_u32(attrs[BATADV_ATTR_TT_FLAGS]);
	flags = nla_get_u32(attrs[BATADV_ATTR_TT_FLAGS]);


	if (flags & BATADV_TT_CLIENT_NOPURGE)
	if (flags & (BATADV_TT_CLIENT_NOPURGE | BATADV_TT_CLIENT_WIFI))
		return NL_OK;
		return NL_OK;


	lastseen = nla_get_u32(attrs[BATADV_ATTR_LAST_SEEN_MSECS]);
	lastseen = nla_get_u32(attrs[BATADV_ATTR_LAST_SEEN_MSECS]);
	if (lastseen > MAX_INACTIVITY)
	if (lastseen > MAX_INACTIVITY)
		return NL_OK;
		return NL_OK;


	if (flags & BATADV_TT_CLIENT_WIFI)
	opts->non_wifi++;
		opts->wifi++;

	opts->total++;


	return NL_OK;
	return NL_OK;
}
}


static struct json_object * get_clients(void) {
static struct json_object * get_clients(void) {
	size_t wifi24 = 0, wifi5 = 0;
	size_t wifi24 = 0, wifi5 = 0;
	size_t total;
	size_t wifi;
	struct clients_netlink_opts opts = {
	struct clients_netlink_opts opts = {
		.total = 0,
		.non_wifi = 0,
		.wifi = 0,
		.query_opts = {
		.query_opts = {
			.err = 0,
			.err = 0,
		},
		},
@@ -559,10 +580,12 @@ static struct json_object * get_clients(void) {
			  &opts.query_opts);
			  &opts.query_opts);


	count_stations(&wifi24, &wifi5);
	count_stations(&wifi24, &wifi5);
	wifi = wifi24 + wifi5;
	total = wifi + opts.non_wifi;


	struct json_object *ret = json_object_new_object();
	struct json_object *ret = json_object_new_object();
	json_object_object_add(ret, "total", json_object_new_int(opts.total));
	json_object_object_add(ret, "total", json_object_new_int(total));
	json_object_object_add(ret, "wifi", json_object_new_int(opts.wifi));
	json_object_object_add(ret, "wifi", json_object_new_int(wifi));
	json_object_object_add(ret, "wifi24", json_object_new_int(wifi24));
	json_object_object_add(ret, "wifi24", json_object_new_int(wifi24));
	json_object_object_add(ret, "wifi5", json_object_new_int(wifi5));
	json_object_object_add(ret, "wifi5", json_object_new_int(wifi5));
	return ret;
	return ret;
Original line number Original line Diff line number Diff line
#!/usr/bin/lua

local uci = require('simple-uci').cursor()
local unistd = require 'posix.unistd'

local vpn
if unistd.access('/lib/gluon/mesh-vpn/fastd') then
	vpn = 'fastd'
elseif unistd.access('/lib/gluon/mesh-vpn/tunneldigger') then
	vpn = 'tunneldigger'
end

local vpn_config = {
	enabled = uci:get_bool('gluon', 'mesh_vpn', 'enabled'),
	limit_enabled = uci:get_bool('gluon', 'mesh_vpn', 'limit_enabled'),
	limit_egress = uci:get('gluon', 'mesh_vpn', 'limit_egress'),
	limit_ingress = uci:get('gluon', 'mesh_vpn', 'limit_ingress'),
}

uci:delete('simple-tc', 'mesh_vpn')
uci:section('simple-tc', 'interface', 'mesh_vpn', {
	ifname = 'mesh-vpn',
	enabled = vpn_config.limit_enabled,
	limit_egress = vpn_config.limit_egress,
})

if vpn == 'fastd' then
	uci:set('fastd', 'mesh_vpn', 'enabled', vpn_config.enabled)
	uci:set('simple-tc', 'mesh_vpn', 'limit_ingress', vpn_config.limit_ingress)
else
	uci:set('fastd', 'mesh_vpn', 'enabled', false)
end
uci:save('fastd')

if vpn == 'tunneldigger' then
	uci:set('tunneldigger', 'mesh_vpn', 'enabled', vpn_config.enabled)

	if vpn_config.limit_enabled then
		uci:set('tunneldigger', 'mesh_vpn', 'limit_bw_down', vpn_config.limit_ingress)
	else
		uci:delete('tunneldigger', 'mesh_vpn', 'limit_bw_down')
	end
else
	uci:set('tunneldigger', 'mesh_vpn', 'enabled', false)
end
uci:save('tunneldigger')

uci:save('simple-tc')
Original line number Original line Diff line number Diff line
@@ -24,16 +24,6 @@ if unistd.access('/etc/config/gluon-simple-tc') then
	os.rename('/etc/config/gluon-simple-tc', '/etc/config/simple-tc')
	os.rename('/etc/config/gluon-simple-tc', '/etc/config/simple-tc')
end
end


if not uci:get('simple-tc', 'mesh_vpn') then
	uci:section('simple-tc', 'interface', 'mesh_vpn', {
		ifname = 'mesh-vpn',
		enabled = site.mesh_vpn.bandwidth_limit.enabled(false),
		limit_ingress = site.mesh_vpn.bandwidth_limit.ingress(),
		limit_egress = site.mesh_vpn.bandwidth_limit.egress(),
	})
	uci:save('simple-tc')
end



-- The previously used user and group are removed, we now have a generic group
-- The previously used user and group are removed, we now have a generic group
users.remove_user('gluon-fastd')
users.remove_user('gluon-fastd')
@@ -49,18 +39,23 @@ uci:save('firewall')




-- VPN migration
-- VPN migration
local has_fastd = unistd.access('/lib/gluon/mesh-vpn/fastd')
if not uci:get('gluon', 'mesh_vpn') then
local fastd_enabled = uci:get('fastd', 'mesh_vpn', 'enabled')
	local vpn
	if unistd.access('/lib/gluon/mesh-vpn/fastd') then
		vpn = 'fastd'
	elseif unistd.access('/lib/gluon/mesh-vpn/tunneldigger') then
		vpn = 'tunneldigger'
	end


local has_tunneldigger = unistd.access('/lib/gluon/mesh-vpn/tunneldigger')
	local fastd_enabled = uci:get('fastd', 'mesh_vpn', 'enabled')
	local tunneldigger_enabled = uci:get('tunneldigger', 'mesh_vpn', 'enabled')
	local tunneldigger_enabled = uci:get('tunneldigger', 'mesh_vpn', 'enabled')


	local enabled
	local enabled


	-- If the installed VPN package has its enabled state set, keep the value
	-- If the installed VPN package has its enabled state set, keep the value
if has_fastd and fastd_enabled then
	if vpn == 'fastd' and fastd_enabled then
		enabled = fastd_enabled == '1'
		enabled = fastd_enabled == '1'
elseif has_tunneldigger and tunneldigger_enabled then
	elseif vpn == 'tunneldigger' and tunneldigger_enabled then
		enabled = tunneldigger_enabled == '1'
		enabled = tunneldigger_enabled == '1'
	-- Otherwise, migrate the other package's value if any is set
	-- Otherwise, migrate the other package's value if any is set
	elseif fastd_enabled or tunneldigger_enabled then
	elseif fastd_enabled or tunneldigger_enabled then
@@ -70,21 +65,33 @@ else
		enabled = site.mesh_vpn.enabled(false)
		enabled = site.mesh_vpn.enabled(false)
	end
	end


if has_fastd then

	uci:set('fastd', 'mesh_vpn', 'enabled', enabled)
	local limit_enabled = tonumber((uci:get('simple-tc', 'mesh_vpn', 'enabled')))
else
	if limit_enabled == nil then
	uci:delete('fastd', 'mesh_vpn')
		limit_enabled = site.mesh_vpn.bandwidth_limit.enabled(false)
	end
	end
uci:save('fastd')


	local limit_ingress = tonumber((uci:get('tunneldigger', 'mesh_vpn', 'limit_bw_down')))
if has_tunneldigger then
	if limit_ingress == nil then
	uci:set('tunneldigger', 'mesh_vpn', 'enabled', enabled)
		limit_ingress = tonumber((uci:get('simple-tc', 'mesh_vpn', 'limit_ingress')))
	if site.mesh_vpn.bandwidth_limit.enabled(false) then
		uci:set('tunneldigger', 'mesh_vpn', 'limit_bw_down', site.mesh_vpn.bandwidth_limit.ingress())
		uci:set('simple-tc', 'mesh_vpn', 'limit_ingress', 0)
		uci:save('simple-tc')
	end
	end
else
	if limit_ingress == nil then
	uci:delete('tunneldigger', 'mesh_vpn')
		limit_ingress = site.mesh_vpn.bandwidth_limit.ingress()
	end
	end
uci:save('tunneldigger')

	local limit_egress = tonumber((uci:get('simple-tc', 'mesh_vpn', 'limit_egress')))
	if limit_egress == nil then
		limit_egress = site.mesh_vpn.bandwidth_limit.egress()
	end


	uci:section('gluon', 'mesh_vpn', 'mesh_vpn', {
		enabled = enabled,
		limit_enabled = limit_enabled,
		limit_ingress = limit_ingress,
		limit_egress = limit_egress,
	})
	uci:save('gluon')
end

os.execute('exec /lib/gluon/mesh-vpn/update-config')
Original line number Original line Diff line number Diff line
include $(TOPDIR)/rules.mk

PKG_NAME:=gluon-scheduled-domain-switch
PKG_VERSION:=1

include ../gluon.mk

define Package/gluon-scheduled-domain-switch
  TITLE:=Allows scheduled migrations between domains
  DEPENDS:=+gluon-core @GLUON_MULTIDOMAIN
endef

$(eval $(call BuildPackageGluon,gluon-scheduled-domain-switch))
Original line number Original line Diff line number Diff line
if need_table(in_domain({'domain_switch'}), check_domain_switch, false) then
	need_domain_name(in_domain({'domain_switch', 'target_domain'}))
	need_number(in_domain({'domain_switch', 'switch_after_offline_mins'}))
	need_number(in_domain({'domain_switch', 'switch_time'}))
	need_string_array_match(in_domain({'domain_switch', 'connection_check_targets'}), '^[%x:]+$')
end
Original line number Original line Diff line number Diff line
#!/usr/bin/lua

local json = require 'jsonc'
local site = require 'gluon.site'
local unistd = require 'posix.unistd'

local cronfile = "/usr/lib/micron.d/gluon-scheduled-domain-switch"

-- Check if domain switch is scheduled
if site.domain_switch() == nil then
	-- In case no domain switch is scheduled, remove cronfile
	os.remove(cronfile)
	os.exit(0)
end

-- Only in case domain switch is scheduled
local f = io.open(cronfile, "w")
f:write("* * * * *  /usr/bin/gluon-check-connection\n")
f:write("*/5 * * * *  /usr/bin/gluon-switch-domain\n")
f:close()
Original line number Original line Diff line number Diff line
#!/usr/bin/lua

local unistd = require 'posix.unistd'
local util = require 'gluon.util'
local site = require 'gluon.site'

local offline_flag_file = "/tmp/gluon_offline"
local is_offline = true

-- Check if domain-switch is scheduled
if site.domain_switch() == nil then
	-- Switch not applicable for current domain
	os.exit(0)
end

-- Check reachability of pre-defined targets
for _, ip in ipairs(site.domain_switch.connection_check_targets()) do
	local exit_code = os.execute("ping -c 1 -w 10 " .. ip)
	if exit_code == 0 then
		is_offline = false
		break
	end
end

if is_offline then
	-- Check if we were previously offline
	if unistd.access(offline_flag_file) then
		os.exit(0)
	end
	-- Create offline flag
	local f = io.open(offline_flag_file, "w")
	f:write(tostring(util.get_uptime()))
	f:close()
else
	os.remove(offline_flag_file)
end
Original line number Original line Diff line number Diff line
#!/usr/bin/lua

local uci = require('simple-uci').cursor()
local unistd = require 'posix.unistd'
local util = require 'gluon.util'
local site = require 'gluon.site'

-- Returns true if node was offline long enough to perform domain switch
function switch_after_min_reached()
	if not unistd.access("/tmp/gluon_offline") then
		return false
	end

	local switch_after_sec = site.domain_switch.switch_after_offline_mins() * 60

	local current_uptime = util.get_uptime()
	if current_uptime == nil then
		return false
	end

	local f = util.readfile("/tmp/gluon_offline")
	if f == nil then
		return false
	end
	local offline_since = tonumber(f)

	local offline_time_sec = current_uptime - offline_since

	if offline_time_sec > switch_after_sec then
		return true
	end
	return false
end

-- Returns true in case switch time has passed
function switch_time_passed()
	local current_time = os.time()
	local switch_time = site.domain_switch.switch_time()

	return switch_time < current_time
end

if site.domain_switch() == nil then
	-- Switch not applicable for current domain
	print("No domain switch defined for the current domain.")
	os.exit(0)
end

local current_domain = uci:get("gluon", "core", "domain")
local target_domain = site.domain_switch.target_domain()

if target_domain == current_domain then
	-- Current and target domain are equal
	print("Domain '" .. target_domain .. "' equals current domain.")
	os.exit(1)
end

if not switch_after_min_reached() and not switch_time_passed() then
	-- Neither switch-time passed nor switch_after_min reached
	os.exit(0)
end

uci:set("gluon", "core", "domain", target_domain)
uci:commit("gluon")

os.execute("gluon-reconfigure")
os.execute("reboot")
Original line number Original line Diff line number Diff line
@@ -49,9 +49,16 @@ define Build/Compile
	$(foreach domain,$(patsubst $(GLUON_SITEDIR)/domains/%.conf,%,$(wildcard $(GLUON_SITEDIR)/domains/*.conf)),
	$(foreach domain,$(patsubst $(GLUON_SITEDIR)/domains/%.conf,%,$(wildcard $(GLUON_SITEDIR)/domains/*.conf)),
		[ ! -e '$(PKG_BUILD_DIR)/domains/$(domain).json' ]
		[ ! -e '$(PKG_BUILD_DIR)/domains/$(domain).json' ]
		$(call GenerateJSON,domains/$(domain))
		$(call GenerateJSON,domains/$(domain))
		lua ../../scripts/domain_aliases.lua '$(PKG_BUILD_DIR)/domains/$(domain).json' | while read alias; do \
		@lua ../../scripts/domain_aliases.lua '$(PKG_BUILD_DIR)/domains/$(domain).json' | while read alias; do \
			[ "$$$${alias}" != '$(domain)' ] || continue; \
			[ "$$$${alias}" != '$(domain)' ] || continue; \
			ln -s '$(domain).json' $(PKG_BUILD_DIR)/domains/$$$${alias}.json || exit 1; \
			link="$(PKG_BUILD_DIR)/domains/$$$${alias}.json"; \
			if ! ln -s '$(domain).json' "$$$$link"; then \
				other="$$$$(basename $$$$(readlink -f "$$$$link") .json)"; \
				if [ "$$$$other" ]; then \
					echo >&2 "Failed to alias domain '"'$(domain)'"' as '$$$$alias', name already taken by domain '$$$$other'."; \
				fi; \
				exit 1; \
			fi; \
		done
		done
	)
	)
  endif
  endif
Original line number Original line Diff line number Diff line
"use strict";!function(){var a=JSON.parse(document.body.getAttribute("data-translations"));function i(t,e){return t.toFixed(e).replace(/\./,a["."])}function o(t,e){e--;for(var n=t;10<=n&&0<e;n/=10)e--;return i(t,e)}function r(t){return function(t,e,n){var r=0;if(void 0===n)return"- ";for(;e<n&&r<t.length-1;)n/=e,r++;return(n=o(n,3))+" "+t[r]}(["","K","M","G","T"],1024,t)}String.prototype.sprintf=function(){var t=0,e=arguments;return this.replace(/%s/g,function(){return e[t++]})};var u={id:function(t){return t},decimal:function(t){return i(t,2)},percent:function(t){return a["%s used"].sprintf(o(100*t,3)+"%")},memory:function(t){var e=1-(t.free+t.buffers+t.cached)/t.total;return u.percent(e)},time:function(t){var e=Math.round(t/60),n=Math.floor(e/1440),r=Math.floor(e%1440/60);e=Math.floor(e%60);var i="";return 1===n?i+=a["1 day"]+", ":1<n&&(i+=a["%s days"].sprintf(n)+", "),i+=r+":",e<10&&(i+="0"),i+=e},packetsDiff:function(t,e,n){if(0<n)return r=(t-e)/n,a["%s packets/s"].sprintf(i(r,0));var r},bytesDiff:function(t,e,n){if(0<n)return r(8*((t-e)/n))+"bps"},bytes:function(t){return r(t)+"B"}};function f(e,t){return t.split("/").forEach(function(t){e&&(e=e[t])}),e}function l(t,n){var e=new EventSource(t),r={};e.onmessage=function(t){var e=JSON.parse(t.data);n(e,r),r=e},e.onerror=function(){e.close(),window.setTimeout(function(){l(t,n)},3e3)}}var y,C=document.body.getAttribute("data-node-address");try{y=JSON.parse(document.body.getAttribute("data-node-location"))}catch(t){}var t=document.querySelectorAll("[data-statistics]");l("/cgi-bin/dyn/statistics",function(o,c){var s=o.uptime-c.uptime;t.forEach(function(t){var e=t.getAttribute("data-statistics"),n=t.getAttribute("data-format"),r=f(c,e),i=f(o,e);try{var a=u[n](i,r,s);void 0!==a&&(t.textContent=a)}catch(t){console.error(t)}});try{!function(t){var e=document.getElementById("mesh-vpn");if(t){e.style.display="";for(var i=document.getElementById("mesh-vpn-peers");i.lastChild;)i.removeChild(i.lastChild);var n=function e(n,r){return Object.keys(r.peers||{}).forEach(function(t){n.push([t,r.peers[t]])}),Object.keys(r.groups||{}).forEach(function(t){e(n,r.groups[t])}),n}([],t);n.sort(),n.forEach(function(t){var e=document.createElement("tr"),n=document.createElement("th");n.textContent=t[0],e.appendChild(n);var r=document.createElement("td");t[1]?r.textContent=a.connected+" ("+u.time(t[1].established)+")":r.textContent=a["not connected"],e.appendChild(r),i.appendChild(e)})}else e.style.display="none"}(o.mesh_vpn)}catch(t){console.error(t)}});var c={};function w(a){var o=document.createElement("canvas"),c=o.getContext("2d"),s=null,u=1.2;return{canvas:o,highlight:!1,resize:function(t,e){try{c.getImageData(0,0,t,e)}catch(t){}o.width=t,o.height=e},draw:function(t,e){var n,r,i=e(s);c.clearRect(t,0,5,o.height),i&&(n=t,r=i,c.beginPath(),c.fillStyle=a,c.arc(n,r,u,0,2*Math.PI,!1),c.closePath(),c.fill())},set:function(t){s=t}}}function h(){var s=-100,u=0,n=0,r=[],f=document.createElement("canvas");f.className="signalgraph",f.height=200;var l=f.getContext("2d");function t(){f.width=f.clientWidth,r.forEach(function(t){t.resize(f.width,f.height)})}function i(){if(0!==f.clientWidth){f.width!==f.clientWidth&&t(),l.clearRect(0,0,f.width,f.height);var e=!1;r.forEach(function(t){t.highlight&&(e=!0)}),l.save(),r.forEach(function(t){e&&(l.globalAlpha=.2),t.highlight&&(l.globalAlpha=1),t.draw(n,function(t){return e=t,n=s,r=u,i=f.height,(1-(e-n)/(r-n))*i;var e,n,r,i}),l.drawImage(t.canvas,0,0)}),l.restore(),l.save(),l.beginPath(),l.strokeStyle="rgba(255, 180, 0, 0.15)",l.lineWidth=5,l.moveTo(n+2.5,0),l.lineTo(n+2.5,f.height),l.stroke(),function(){var t,e,n,r,i=Math.floor(f.height/40);l.save(),l.lineWidth=.5,l.strokeStyle="rgba(0, 0, 0, 0.25)",l.fillStyle="rgba(0, 0, 0, 0.5)",l.textAlign="end",l.textBaseline="bottom",l.beginPath();for(var a=0;a<i;a++){var o=f.height-40*a;l.moveTo(0,o-.5),l.lineTo(f.width,o-.5);var c=Math.round((t=o,e=s,n=u,r=f.height,(e*t+n*(r-t))/r))+" dBm";l.save(),l.strokeStyle="rgba(255, 255, 255, 0.9)",l.lineWidth=4,l.miterLimit=2,l.strokeText(c,f.width-5,o-2.5),l.fillText(c,f.width-5,o-2.5),l.restore()}l.stroke(),l.strokeStyle="rgba(0, 0, 0, 0.83)",l.lineWidth=1.5,l.strokeRect(.5,.5,f.width-1,f.height-1),l.restore()}()}}t(),window.addEventListener("resize",i);var a=0;return window.requestAnimationFrame(function t(e){40<e-a&&(i(),n=(n+1)%f.width,a=e),window.requestAnimationFrame(t)}),{el:f,addSignal:function(t){r.push(t),t.resize(f.width,f.height)},removeSignal:function(t){r.splice(r.indexOf(t),1)}}}function d(t,e,n,r){var i=t.table.firstElementChild,a=t.table.insertRow(),o=a.insertCell();if(t.wireless){var c=document.createElement("span");c.textContent="",c.style.color=n,o.appendChild(c)}var h=document.createElement("span");h.textContent=e,o.appendChild(h);var s,d,u,f,l,v={};function g(t){var e=t.getAttribute("data-key");if(e){var n=t.getAttribute("data-suffix")||"",r=a.insertCell();r.textContent="-",v[e]={td:r,suffix:n}}}for(var m=0;m<i.children.length;m++)g(i.children[m]);function p(){l&&window.clearTimeout(l),l=window.setTimeout(function(){f&&t.signalgraph.removeSignal(f),a.parentNode.removeChild(a),r()},6e4)}function b(t){var e=function(t){"::"==t.slice(0,2)&&(t="0"+t),"::"==t.slice(-2)&&(t+="0");var e=t.split(":"),n=e.length,r=[];return e.forEach(function(t,e){if(""===t)for(;n++<=8;)r.push(0);else{if(!/^[a-f0-9]{1,4}$/i.test(t))return;r.push(parseInt(t,16))}}),r}(t);if(e){var n="";return e.forEach(function(t){n+=("0000000000000000"+t.toString(2)).slice(-16)}),n}}return t.wireless&&((s=a.insertCell()).textContent="-",(d=a.insertCell()).textContent="-",(u=a.insertCell()).textContent="-",f=w(n),t.signalgraph.addSignal(f)),a.onmouseenter=function(){a.classList.add("highlight"),f&&(f.highlight=!0)},a.onmouseleave=function(){a.classList.remove("highlight"),f&&(f.highlight=!1)},p(),{update_nodeinfo:function(t){var e,n,r,i,a,o,c,s,u=function(t){var r=b(C);if(t&&t[0]){(t=t.map(function(t){var e=b(t);if(!e)return[-1];var n=0;return r&&(n=function(t,e){var n;for(n=0;n<t.length&&n<e.length&&t[n]===e[n];n++);return n}(r,e)),[n,e,t]})).sort(function(t,e){return t[0]<e[0]?1:t[0]>e[0]?-1:t[1]<e[1]?-1:t[1]>e[1]?1:0});var e=t[0][2];return e&&!/^fe80:/i.test(e)?e:void 0}}(t.network.addresses);if(u){if("span"===h.nodeName.toLowerCase()){var f=h;h=document.createElement("a"),f.parentNode.replaceChild(h,f)}h.href="http://["+u+"]/"}if(h.textContent=t.hostname,y&&t.location){var l=(e=y.latitude,n=y.longitude,r=t.location.latitude,i=t.location.longitude,a=Math.PI/180,o=(r*=a)-(e*=a),c=(i*=a)-(n*=a),s=Math.sin(o/2)*Math.sin(o/2)+Math.sin(c/2)*Math.sin(c/2)*Math.cos(e)*Math.cos(r),2*Math.asin(Math.sqrt(s))*6372.8);d.textContent=Math.round(1e3*l)+" m"}p()},update_mesh:function(n){Object.keys(v).forEach(function(t){var e=v[t];e.td.textContent=n[t]+e.suffix}),p()},update_wifi:function(t){s.textContent=t.signal,u.textContent=Math.round(t.inactive/1e3)+" s",a.classList.toggle("inactive",200<t.inactive),f.set(200<t.inactive?null:t.signal),p()}}}function s(t,e,n){var r,a={};n&&(r=h(),t.appendChild(r.el));var i={table:t.firstElementChild,signalgraph:r,ifname:e,wireless:n},o=!1,c={},s=[];function u(){if(!o){o=!0;var t=new EventSource("/cgi-bin/dyn/neighbours-nodeinfo?"+encodeURIComponent(e));t.addEventListener("neighbour",function(t){try{var n=JSON.parse(t.data);(e=n,r=[],i=e.network.mesh,Object.keys(i).forEach(function(t){var e=i[t].interfaces;Object.keys(e).forEach(function(t){e[t].forEach(function(t){r.push(t)})})}),r).forEach(function(t){var e=a[t];if(e){delete c[t];try{e.update_nodeinfo(n)}catch(t){console.error(t)}}})}catch(t){console.error(t)}var e,r,i},!1),t.onerror=function(){t.close(),o=!1,Object.keys(c).forEach(function(t){0<c[t]&&(c[t]--,u())})}}}function f(t){var e=a[t];return e||(c[t]=3,e=a[t]=d(i,t,(s[0]||(s=["#396AB1","#DA7C30","#3E9651","#CC2529","#535154","#6B4C9A","#922428","#948B3D"]),s.shift()),function(){delete c[t],delete a[t]}),u()),e}return n&&l("/cgi-bin/dyn/stations?"+encodeURIComponent(e),function(n){Object.keys(n).forEach(function(t){var e=n[t];f(t).update_wifi(e)})}),{get_neigh:f}}document.querySelectorAll("[data-interface]").forEach(function(t){var e=t.getAttribute("data-interface"),n=(t.getAttribute("data-interface-address"),!!t.getAttribute("data-interface-wireless"));c[e]=s(t,e,n)});var e=document.body.getAttribute("data-mesh-provider");e&&l(e,function(r){Object.keys(r).forEach(function(t){var e=r[t],n=c[e.ifname];n&&n.get_neigh(t).update_mesh(e)})})}();
"use strict";!function(){var a=JSON.parse(document.body.getAttribute("data-translations"));function r(t,e){return t.toFixed(e).replace(/\./,a["."])}function o(t,e){e--;for(var n=t;10<=n&&0<e;n/=10)e--;return r(t,e)}function i(t){return function(t,e,n){var i=0;if(void 0===n)return"- ";for(;e<n&&i<t.length-1;)n/=e,i++;return(n=o(n,3))+" "+t[i]}(["","K","M","G","T"],1024,t)}String.prototype.sprintf=function(){var t=0,e=arguments;return this.replace(/%s/g,function(){return e[t++]})};var u={id:function(t){return t},decimal:function(t){return r(t,2)},percent:function(t){return a["%s used"].sprintf(o(100*t,3)+"%")},memory:function(t){var e=1-t.available/t.total;return u.percent(e)},time:function(t){var e=Math.round(t/60),n=Math.floor(e/1440),i=Math.floor(e%1440/60);e=Math.floor(e%60);var r="";return 1===n?r+=a["1 day"]+", ":1<n&&(r+=a["%s days"].sprintf(n)+", "),r+=i+":",e<10&&(r+="0"),r+=e},packetsDiff:function(t,e,n){if(0<n)return i=(t-e)/n,a["%s packets/s"].sprintf(r(i,0));var i},bytesDiff:function(t,e,n){if(0<n)return i(8*((t-e)/n))+"bps"},bytes:function(t){return i(t)+"B"}};function l(e,t){return t.split("/").forEach(function(t){e&&(e=e[t])}),e}function f(t,n){var e=new EventSource(t),i={};e.onmessage=function(t){var e=JSON.parse(t.data);n(e,i),i=e},e.onerror=function(){e.close(),window.setTimeout(function(){f(t,n)},3e3)}}var y,C=document.body.getAttribute("data-node-address");try{y=JSON.parse(document.body.getAttribute("data-node-location"))}catch(t){}var t=document.querySelectorAll("[data-statistics]");f("/cgi-bin/dyn/statistics",function(o,c){var s=o.uptime-c.uptime;t.forEach(function(t){var e=t.getAttribute("data-statistics"),n=t.getAttribute("data-format"),i=l(c,e),r=l(o,e);try{var a=u[n](r,i,s);void 0!==a&&(t.textContent=a)}catch(t){console.error(t)}});try{!function(t){var e=document.getElementById("mesh-vpn");if(t){e.style.display="";for(var r=document.getElementById("mesh-vpn-peers");r.lastChild;)r.removeChild(r.lastChild);var n=function e(n,i){return Object.keys(i.peers||{}).forEach(function(t){n.push([t,i.peers[t]])}),Object.keys(i.groups||{}).forEach(function(t){e(n,i.groups[t])}),n}([],t);n.sort(),n.forEach(function(t){var e=document.createElement("tr"),n=document.createElement("th");n.textContent=t[0],e.appendChild(n);var i=document.createElement("td");t[1]?i.textContent=a.connected+" ("+u.time(t[1].established)+")":i.textContent=a["not connected"],e.appendChild(i),r.appendChild(e)})}else e.style.display="none"}(o.mesh_vpn)}catch(t){console.error(t)}});var c={};function w(a){var o=document.createElement("canvas"),c=o.getContext("2d"),s=null;return{canvas:o,highlight:!1,resize:function(t,e){try{c.getImageData(0,0,t,e)}catch(t){}o.width=t,o.height=e},draw:function(t,e){var n,i,r=e(s);c.clearRect(t,0,5,o.height),r&&(n=t,i=r,c.beginPath(),c.fillStyle=a,c.arc(n,i,1.2,0,2*Math.PI,!1),c.closePath(),c.fill())},set:function(t){s=t}}}function h(){var s=-100,u=0,n=0,i=[],l=document.createElement("canvas");l.className="signalgraph",l.height=200;var f=l.getContext("2d");function t(){l.width=l.clientWidth,i.forEach(function(t){t.resize(l.width,l.height)})}function r(){if(0!==l.clientWidth){l.width!==l.clientWidth&&t(),f.clearRect(0,0,l.width,l.height);var e=!1;i.forEach(function(t){t.highlight&&(e=!0)}),f.save(),i.forEach(function(t){e&&(f.globalAlpha=.2),t.highlight&&(f.globalAlpha=1),t.draw(n,function(t){return e=t,n=s,i=u,r=l.height,(1-(e-n)/(i-n))*r;var e,n,i,r}),f.drawImage(t.canvas,0,0)}),f.restore(),f.save(),f.beginPath(),f.strokeStyle="rgba(255, 180, 0, 0.15)",f.lineWidth=5,f.moveTo(n+2.5,0),f.lineTo(n+2.5,l.height),f.stroke(),function(){var t,e,n,i,r=Math.floor(l.height/40);f.save(),f.lineWidth=.5,f.strokeStyle="rgba(0, 0, 0, 0.25)",f.fillStyle="rgba(0, 0, 0, 0.5)",f.textAlign="end",f.textBaseline="bottom",f.beginPath();for(var a=0;a<r;a++){var o=l.height-40*a;f.moveTo(0,o-.5),f.lineTo(l.width,o-.5);var c=Math.round((t=o,e=s,n=u,i=l.height,(e*t+n*(i-t))/i))+" dBm";f.save(),f.strokeStyle="rgba(255, 255, 255, 0.9)",f.lineWidth=4,f.miterLimit=2,f.strokeText(c,l.width-5,o-2.5),f.fillText(c,l.width-5,o-2.5),f.restore()}f.stroke(),f.strokeStyle="rgba(0, 0, 0, 0.83)",f.lineWidth=1.5,f.strokeRect(.5,.5,l.width-1,l.height-1),f.restore()}()}}t(),window.addEventListener("resize",r);var a=0;return window.requestAnimationFrame(function t(e){40<e-a&&(r(),n=(n+1)%l.width,a=e),window.requestAnimationFrame(t)}),{el:l,addSignal:function(t){i.push(t),t.resize(l.width,l.height)},removeSignal:function(t){i.splice(i.indexOf(t),1)}}}function d(t,e,n,i){var r=t.table.firstElementChild,a=t.table.insertRow(),o=a.insertCell();if(t.wireless){var c=document.createElement("span");c.textContent="",c.style.color=n,o.appendChild(c)}var h=document.createElement("span");h.textContent=e,o.appendChild(h);var s,d,u,l,f,v={};function g(t){var e=t.getAttribute("data-key");if(e){var n=t.getAttribute("data-suffix")||"",i=a.insertCell();i.textContent="-",v[e]={td:i,suffix:n}}}for(var m=0;m<r.children.length;m++)g(r.children[m]);function p(){f&&window.clearTimeout(f),f=window.setTimeout(function(){l&&t.signalgraph.removeSignal(l),a.parentNode.removeChild(a),i()},6e4)}function b(t){var e=function(t){"::"==t.slice(0,2)&&(t="0"+t),"::"==t.slice(-2)&&(t+="0");var e=t.split(":"),n=e.length,i=[];return e.forEach(function(t,e){if(""===t)for(;n++<=8;)i.push(0);else{if(!/^[a-f0-9]{1,4}$/i.test(t))return;i.push(parseInt(t,16))}}),i}(t);if(e){var n="";return e.forEach(function(t){n+=("0000000000000000"+t.toString(2)).slice(-16)}),n}}return t.wireless&&((s=a.insertCell()).textContent="-",(d=a.insertCell()).textContent="-",(u=a.insertCell()).textContent="-",l=w(n),t.signalgraph.addSignal(l)),a.onmouseenter=function(){a.classList.add("highlight"),l&&(l.highlight=!0)},a.onmouseleave=function(){a.classList.remove("highlight"),l&&(l.highlight=!1)},p(),{update_nodeinfo:function(t){var e,n,i,r,a,o,c,s,u=function(t){var i=b(C);if(t&&t[0]){(t=t.map(function(t){var e=b(t);if(!e)return[-1];var n=0;return i&&(n=function(t,e){var n;for(n=0;n<t.length&&n<e.length&&t[n]===e[n];n++);return n}(i,e)),[n,e,t]})).sort(function(t,e){return t[0]<e[0]?1:t[0]>e[0]?-1:t[1]<e[1]?-1:t[1]>e[1]?1:0});var e=t[0][2];return e&&!/^fe80:/i.test(e)?e:void 0}}(t.network.addresses);if(u){if("span"===h.nodeName.toLowerCase()){var l=h;h=document.createElement("a"),l.parentNode.replaceChild(h,l)}h.href="http://["+u+"]/"}if(h.textContent=t.hostname,y&&t.location){var f=(e=y.latitude,n=y.longitude,i=t.location.latitude,r=t.location.longitude,a=Math.PI/180,o=(i*=a)-(e*=a),c=(r*=a)-(n*=a),s=Math.sin(o/2)*Math.sin(o/2)+Math.sin(c/2)*Math.sin(c/2)*Math.cos(e)*Math.cos(i),2*Math.asin(Math.sqrt(s))*6372.8);d.textContent=Math.round(1e3*f)+" m"}p()},update_mesh:function(n){Object.keys(v).forEach(function(t){var e=v[t];e.td.textContent=n[t]+e.suffix}),p()},update_wifi:function(t){s.textContent=t.signal,u.textContent=Math.round(t.inactive/1e3)+" s",a.classList.toggle("inactive",200<t.inactive),l.set(200<t.inactive?null:t.signal),p()}}}function s(t,e,n){var i,a={};n&&(i=h(),t.appendChild(i.el));var r={table:t.firstElementChild,signalgraph:i,ifname:e,wireless:n},o=!1,c={},s=[];function u(){if(!o){o=!0;var t=new EventSource("/cgi-bin/dyn/neighbours-nodeinfo?"+encodeURIComponent(e));t.addEventListener("neighbour",function(t){try{var n=JSON.parse(t.data);(e=n,i=[],r=e.network.mesh,Object.keys(r).forEach(function(t){var e=r[t].interfaces;Object.keys(e).forEach(function(t){e[t].forEach(function(t){i.push(t)})})}),i).forEach(function(t){var e=a[t];if(e){delete c[t];try{e.update_nodeinfo(n)}catch(t){console.error(t)}}})}catch(t){console.error(t)}var e,i,r},!1),t.onerror=function(){t.close(),o=!1,Object.keys(c).forEach(function(t){0<c[t]&&(c[t]--,u())})}}}function l(t){var e=a[t];return e||(c[t]=3,e=a[t]=d(r,t,(s[0]||(s=["#396AB1","#DA7C30","#3E9651","#CC2529","#535154","#6B4C9A","#922428","#948B3D"]),s.shift()),function(){delete c[t],delete a[t]}),u()),e}return n&&f("/cgi-bin/dyn/stations?"+encodeURIComponent(e),function(n){Object.keys(n).forEach(function(t){var e=n[t];l(t).update_wifi(e)})}),{get_neigh:l}}document.querySelectorAll("[data-interface]").forEach(function(t){var e=t.getAttribute("data-interface"),n=(t.getAttribute("data-interface-address"),!!t.getAttribute("data-interface-wireless"));c[e]=s(t,e,n)});var e=document.body.getAttribute("data-mesh-provider");e&&f(e,function(i){Object.keys(i).forEach(function(t){var e=i[t],n=c[e.ifname];n&&n.get_neigh(t).update_mesh(e)})})}();
 No newline at end of file
 No newline at end of file
Original line number Original line Diff line number Diff line
@@ -10,18 +10,18 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"


msgid "Node role"
msgstr "Verwendungszweck"

msgid "Role"
msgstr "Rolle"

msgid ""
msgid ""
"If this node has a special role within the mesh network you can specify this "
"If this node has a special role within the mesh network you can specify this "
"role here. Please find out about the available roles and their impact first. "
"role here. Please find out about the available roles and their impact first. "
"Only change the role if you know what you are doing."
"Only change the role if you know what you are doing."
msgstr ""
msgstr ""
"Wenn dein Knoten eine besondere Rolle im Mesh-Netzwerk einnimmt, "
"Wenn dein Knoten eine besondere Rolle im Mesh-Netzwerk einnimmt, kannst du "
"kannst du diese hier angeben. Bringe bitte zuvor in Erfahrung, welche "
"diese hier angeben. Bringe bitte zuvor in Erfahrung, welche Bedeutung die "
"Bedeutung die zur Verfügung stehenden Rollen haben. "
"zur Verfügung stehenden Rollen haben. Setze die Rolle nur, wenn du weißt, "
"Setze die Rolle nur, wenn du weißt, was du tust."
"was du tust."

msgid "Node role"
msgstr "Verwendungszweck"

msgid "Role"
msgstr "Rolle"
Original line number Original line Diff line number Diff line
@@ -10,18 +10,18 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"


msgid "Node role"
msgstr "Rôle du nœud"

msgid "Role"
msgstr "Rôle"

msgid ""
msgid ""
"If this node has a special role within the mesh network you can specify this "
"If this node has a special role within the mesh network you can specify this "
"role here. Please find out about the available roles and their impact first. "
"role here. Please find out about the available roles and their impact first. "
"Only change the role if you know what you are doing."
"Only change the role if you know what you are doing."
msgstr ""
msgstr ""
"Si votre nœud a un rôle spécial dans le réseau MESH, vous pouvez "
"Si votre nœud a un rôle spécial dans le réseau MESH, vous pouvez spécifier "
"spécifier ce rôle ici. Avant de changer, informez vous sur les rôles "
"ce rôle ici. Avant de changer, informez vous sur les rôles disponibles et "
"disponibles et sur leur impacts. Changez de rôle uniquement si vous "
"sur leur impacts. Changez de rôle uniquement si vous comprenez ce que vous "
"comprenez ce que vous faites."
"faites."

msgid "Node role"
msgstr "Rôle du nœud"

msgid "Role"
msgstr "Rôle"
Original line number Original line Diff line number Diff line
msgid ""
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgstr "Content-Type: text/plain; charset=UTF-8"


msgid "Node role"
msgid ""
"If this node has a special role within the mesh network you can specify this "
"role here. Please find out about the available roles and their impact first. "
"Only change the role if you know what you are doing."
msgstr ""
msgstr ""


msgid "Role"
msgid "Node role"
msgstr ""
msgstr ""


msgid ""
msgid "Role"
"If this node has a special role within the mesh network you can specify this role here. "
"Please find out about the available roles and their impact first. "
"Only change the role if you know what you are doing."
msgstr ""
msgstr ""
Original line number Original line Diff line number Diff line
local f, s, o
local f, s, o
local site = require 'gluon.site'
local site = require 'gluon.site'
local site_i18n = i18n 'gluon-site'
local uci = require("simple-uci").cursor()
local uci = require("simple-uci").cursor()
local config = 'gluon-node-info'
local config = 'gluon-node-info'


@@ -9,7 +10,7 @@ local role = uci:get(config, uci:get_first(config, "system"), "role")
f = Form(translate("Node role"))
f = Form(translate("Node role"))


s = f:section(Section, nil, translate(
s = f:section(Section, nil, translate(
	"If this node has a special role within the freifunk network you can specify this role here. "
	"If this node has a special role within the mesh network you can specify this role here. "
	.. "Please find out about the available roles and their impact first. "
	.. "Please find out about the available roles and their impact first. "
	.. "Only change the role if you know what you are doing."
	.. "Only change the role if you know what you are doing."
))
))
@@ -17,7 +18,7 @@ s = f:section(Section, nil, translate(
o = s:option(ListValue, "role", translate("Role"))
o = s:option(ListValue, "role", translate("Role"))
o.default = role
o.default = role
for _, role in ipairs(site.roles.list()) do
for _, role in ipairs(site.roles.list()) do
	o:value(role, translate('gluon-web-node-role:role:' .. role))
	o:value(role, site_i18n.translate('gluon-web-node-role:role:' .. role))
end
end


function o:write(data)
function o:write(data)
Original line number Original line Diff line number Diff line
@@ -17,7 +17,7 @@ msgid "Not Found"
msgstr "Nicht Gefunden"
msgstr "Nicht Gefunden"


msgid "Sorry, the object you requested was not found."
msgid "Sorry, the object you requested was not found."
msgstr "Entschuldigung, das anfgeforderte Objekt wurde nicht gefunden."
msgstr "Entschuldigung, das angeforderte Objekt wurde nicht gefunden."


msgid "Sorry, the server encountered an unexpected error."
msgid "Sorry, the server encountered an unexpected error."
msgstr ""
msgstr ""
Original line number Original line Diff line number Diff line
@@ -103,13 +103,13 @@ end
-- Content-Type. Stores all extracted data associated with its parameter name
-- Content-Type. Stores all extracted data associated with its parameter name
-- in the params table withing the given message object. Multiple parameter
-- in the params table withing the given message object. Multiple parameter
-- values are stored as tables, ordinary ones as strings.
-- values are stored as tables, ordinary ones as strings.
-- If an optional file callback function is given then it is feeded with the
-- If an optional file callback function is given then it is fed with the
-- file contents chunk by chunk and only the extracted file name is stored
-- file contents chunk by chunk and only the extracted file name is stored
-- within the params table. The callback function will be called subsequently
-- within the params table. The callback function will be called subsequently
-- with three arguments:
-- with three arguments:
--  o Table containing decoded (name, file) and raw (headers) mime header data
--  o Table containing decoded (name, file) and raw (headers) mime header data
--  o String value containing a chunk of the file data
--  o String value containing a chunk of the file data
--  o Boolean which indicates wheather the current chunk is the last one (eof)
--  o Boolean which indicates whether the current chunk is the last one (eof)
function mimedecode_message_body(src, msg, filecb)
function mimedecode_message_body(src, msg, filecb)


	if msg and msg.env.CONTENT_TYPE then
	if msg and msg.env.CONTENT_TYPE then
Original line number Original line Diff line number Diff line
@@ -58,7 +58,7 @@ return function(config, env)
		-- Now finally render the thing
		-- Now finally render the thing
		local stat, err = pcall(template)
		local stat, err = pcall(template)
		assert(stat, "Failed to execute template '" .. name .. "'.\n" ..
		assert(stat, "Failed to execute template '" .. name .. "'.\n" ..
			      "A runtime error occured: " .. tostring(err or "(nil)"))
			      "A runtime error occurred: " .. tostring(err or "(nil)"))
	end
	end


	--- Render a certain template.
	--- Render a certain template.
Original line number Original line Diff line number Diff line
@@ -235,7 +235,7 @@ static size_t validate_utf8(const unsigned char **s, size_t l, struct template_b
				break;
				break;
		}
		}


		/* advance beyound the last found valid continuation char */
		/* advance beyond the last found valid continuation char */
		o = v;
		o = v;
		ptr += v;
		ptr += v;
	}
	}
Original line number Original line Diff line number Diff line
@@ -182,10 +182,10 @@ index 0000000000000000000000000000000000000000..b38b9977bca192eafe9a0d9b8c36a120
+
+
diff --git a/target/linux/generic/backport-4.9/095-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch b/target/linux/generic/backport-4.9/095-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch
diff --git a/target/linux/generic/backport-4.9/095-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch b/target/linux/generic/backport-4.9/095-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch
new file mode 100644
new file mode 100644
index 0000000000000000000000000000000000000000..dcfd1ce7c2f015354d21a65f12f6ebd00331b629
index 0000000000000000000000000000000000000000..89523ac027b227a9f84b1130db06a7fc67ff68ce
--- /dev/null
--- /dev/null
+++ b/target/linux/generic/backport-4.9/095-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch
+++ b/target/linux/generic/backport-4.9/095-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch
@@ -0,0 +1,93 @@
@@ -0,0 +1,88 @@
+From 010b2b541d958e12d78ba1c79734c700f169610b Mon Sep 17 00:00:00 2001
+From 010b2b541d958e12d78ba1c79734c700f169610b Mon Sep 17 00:00:00 2001
+Message-Id: <010b2b541d958e12d78ba1c79734c700f169610b.1515533863.git.mschiffer@universe-factory.net>
+Message-Id: <010b2b541d958e12d78ba1c79734c700f169610b.1515533863.git.mschiffer@universe-factory.net>
+In-Reply-To: <f45ba82cd83d27b5d44d3dc417e0e480ba0d3703.1515533863.git.mschiffer@universe-factory.net>
+In-Reply-To: <f45ba82cd83d27b5d44d3dc417e0e480ba0d3703.1515533863.git.mschiffer@universe-factory.net>
@@ -209,11 +209,9 @@ index 0000000000000000000000000000000000000000..dcfd1ce7c2f015354d21a65f12f6ebd0
+ drivers/net/vxlan.c | 20 +++++++++++++++-----
+ drivers/net/vxlan.c | 20 +++++++++++++++-----
+ 1 file changed, 15 insertions(+), 5 deletions(-)
+ 1 file changed, 15 insertions(+), 5 deletions(-)
+
+
+diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
+index 863d9528b900..c28c6f34b3b3 100644
+--- a/drivers/net/vxlan.c
+--- a/drivers/net/vxlan.c
++++ b/drivers/net/vxlan.c
++++ b/drivers/net/vxlan.c
+@@ -917,16 +917,25 @@ static int vxlan_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
+@@ -917,16 +917,25 @@ out:
+  * Return true if packet is bogus and should be dropped.
+  * Return true if packet is bogus and should be dropped.
+  */
+  */
+ static bool vxlan_snoop(struct net_device *dev,
+ static bool vxlan_snoop(struct net_device *dev,
@@ -241,7 +239,7 @@ index 0000000000000000000000000000000000000000..dcfd1ce7c2f015354d21a65f12f6ebd0
+ 			return false;
+ 			return false;
+ 
+ 
+ 		/* Don't migrate static entries, drop packets */
+ 		/* Don't migrate static entries, drop packets */
+@@ -952,7 +961,7 @@ static bool vxlan_snoop(struct net_device *dev,
+@@ -952,7 +961,7 @@ static bool vxlan_snoop(struct net_devic
+ 					 NLM_F_EXCL|NLM_F_CREATE,
+ 					 NLM_F_EXCL|NLM_F_CREATE,
+ 					 vxlan->cfg.dst_port,
+ 					 vxlan->cfg.dst_port,
+ 					 vxlan->default_dst.remote_vni,
+ 					 vxlan->default_dst.remote_vni,
@@ -250,7 +248,7 @@ index 0000000000000000000000000000000000000000..dcfd1ce7c2f015354d21a65f12f6ebd0
+ 		spin_unlock(&vxlan->hash_lock);
+ 		spin_unlock(&vxlan->hash_lock);
+ 	}
+ 	}
+ 
+ 
+@@ -1223,6 +1232,7 @@ static bool vxlan_set_mac(struct vxlan_dev *vxlan,
+@@ -1223,6 +1232,7 @@ static bool vxlan_set_mac(struct vxlan_d
+ 			  struct sk_buff *skb)
+ 			  struct sk_buff *skb)
+ {
+ {
+ 	union vxlan_addr saddr;
+ 	union vxlan_addr saddr;
@@ -258,7 +256,7 @@ index 0000000000000000000000000000000000000000..dcfd1ce7c2f015354d21a65f12f6ebd0
+ 
+ 
+ 	skb_reset_mac_header(skb);
+ 	skb_reset_mac_header(skb);
+ 	skb->protocol = eth_type_trans(skb, vxlan->dev);
+ 	skb->protocol = eth_type_trans(skb, vxlan->dev);
+@@ -1244,7 +1254,7 @@ static bool vxlan_set_mac(struct vxlan_dev *vxlan,
+@@ -1244,7 +1254,7 @@ static bool vxlan_set_mac(struct vxlan_d
+ 	}
+ 	}
+ 
+ 
+ 	if ((vxlan->flags & VXLAN_F_LEARN) &&
+ 	if ((vxlan->flags & VXLAN_F_LEARN) &&
@@ -267,18 +265,15 @@ index 0000000000000000000000000000000000000000..dcfd1ce7c2f015354d21a65f12f6ebd0
+ 		return false;
+ 		return false;
+ 
+ 
+ 	return true;
+ 	return true;
+@@ -1932,7 +1942,7 @@ static void vxlan_encap_bypass(struct sk_buff *skb, struct vxlan_dev *src_vxlan,
+@@ -1939,7 +1949,7 @@ static void vxlan_encap_bypass(struct sk
+ 	}
+ 	}
+ 
+ 
+ 	if (dst_vxlan->flags & VXLAN_F_LEARN)
+ 	if (dst_vxlan->flags & VXLAN_F_LEARN)
+-		vxlan_snoop(skb->dev, &loopback, eth_hdr(skb)->h_source);
+-		vxlan_snoop(dev, &loopback, eth_hdr(skb)->h_source);
++		vxlan_snoop(skb->dev, &loopback, eth_hdr(skb)->h_source, 0);
++		vxlan_snoop(dev, &loopback, eth_hdr(skb)->h_source, 0);
+ 
+ 
+ 	u64_stats_update_begin(&tx_stats->syncp);
+ 	u64_stats_update_begin(&tx_stats->syncp);
+ 	tx_stats->tx_packets++;
+ 	tx_stats->tx_packets++;
+-- 
+2.15.1
+
diff --git a/target/linux/generic/backport-4.9/095-0004-vxlan-allow-multiple-VXLANs-with-same-VNI-for-IPv6-l.patch b/target/linux/generic/backport-4.9/095-0004-vxlan-allow-multiple-VXLANs-with-same-VNI-for-IPv6-l.patch
diff --git a/target/linux/generic/backport-4.9/095-0004-vxlan-allow-multiple-VXLANs-with-same-VNI-for-IPv6-l.patch b/target/linux/generic/backport-4.9/095-0004-vxlan-allow-multiple-VXLANs-with-same-VNI-for-IPv6-l.patch
new file mode 100644
new file mode 100644
index 0000000000000000000000000000000000000000..18ae230a3b04d2b57184109fa14f9533f0fb7192
index 0000000000000000000000000000000000000000..18ae230a3b04d2b57184109fa14f9533f0fb7192
Original line number Original line Diff line number Diff line
@@ -891,7 +891,7 @@ index 0000000000000000000000000000000000000000..d7f8c5955caee15d373a342b75c8c194
+	status = "okay";
+	status = "okay";
+};
+};
diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile
diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile
index 38600cf979242142aa08c30163e63d911f0ddb63..d1ee1004fddce6cf6007259229d8eee5b5b2ea3b 100644
index 90d9dfeff0c228765ac24247ce72dec497dc63f0..cb79baccd21b3fa7f35df543bfca1a7d6ba8f83f 100644
--- a/target/linux/ipq40xx/image/Makefile
--- a/target/linux/ipq40xx/image/Makefile
+++ b/target/linux/ipq40xx/image/Makefile
+++ b/target/linux/ipq40xx/image/Makefile
@@ -1,6 +1,8 @@
@@ -1,6 +1,8 @@
Original line number Original line Diff line number Diff line
@@ -267,7 +267,7 @@ index 640557532c8a02f37bc6f84ade8cb34e7172162d..4568b656219419e9ca1156c6716bd212
   # We cannot currently build a factory image. It is the sysupgrade image
   # We cannot currently build a factory image. It is the sysupgrade image
   # prefixed with a header (which is actually written into the MTD device).
   # prefixed with a header (which is actually written into the MTD device).
diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile
diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile
index d1ee1004fddce6cf6007259229d8eee5b5b2ea3b..5cd11cae237b4658906652967d8120bd0dc080a8 100644
index cb79baccd21b3fa7f35df543bfca1a7d6ba8f83f..a0f81f7d631b6c53a5612dee172e752a9fecd06d 100644
--- a/target/linux/ipq40xx/image/Makefile
--- a/target/linux/ipq40xx/image/Makefile
+++ b/target/linux/ipq40xx/image/Makefile
+++ b/target/linux/ipq40xx/image/Makefile
@@ -221,7 +221,7 @@ define Device/zyxel_nbg6617
@@ -221,7 +221,7 @@ define Device/zyxel_nbg6617
Original line number Original line Diff line number Diff line
From: Andreas Ziegler <dev@andreas-ziegler.de>
Date: Thu, 27 Dec 2018 15:02:41 +0100
Subject: ramips: mt7621: fix 5GHz WiFi LED on ZBT WG3526

This fixes the 5GHz WiFi LED which was previously not working.

Signed-off-by: Andreas Ziegler <dev@andreas-ziegler.de>

diff --git a/target/linux/ramips/dts/ZBT-WG3526.dtsi b/target/linux/ramips/dts/ZBT-WG3526.dtsi
index 104a51f8de7110c0f65f760af70033853f3da745..e42ec5e33de7fb69a9c668406f876f6443d2912b 100644
--- a/target/linux/ramips/dts/ZBT-WG3526.dtsi
+++ b/target/linux/ramips/dts/ZBT-WG3526.dtsi
@@ -101,6 +101,10 @@
 			mediatek,mtd-eeprom = <&factory 0x8000>;
 			ieee80211-freq-limit = <5000000 6000000>;
 		};
+
+		led {
+			led-sources = <2>;
+		};
 	};
 };
 
Original line number Original line Diff line number Diff line
From: David Bauer <mail@david-bauer.net>
Date: Wed, 28 Nov 2018 23:56:31 +0100
Subject: tools: mktplinkfw2: add split-uboot layout

This commit adds the split-uboot partition layout used by the
Archer C50 v4 to mktplinkfw2.

Signed-off-by: David Bauer <mail@david-bauer.net>

diff --git a/tools/firmware-utils/src/mktplinkfw2.c b/tools/firmware-utils/src/mktplinkfw2.c
index dead49e7af8839bac5d1dee7445cf8921208c970..35db848bbab9f8315526dfa24ed351ad58878dde 100644
--- a/tools/firmware-utils/src/mktplinkfw2.c
+++ b/tools/firmware-utils/src/mktplinkfw2.c
@@ -146,6 +146,12 @@ static struct flash_layout layouts[] = {
 		.kernel_la	= 0x80000000,
 		.kernel_ep	= 0x80000000,
 		.rootfs_ofs	= 0x140000,
+	}, {
+		.id		= "8MSUmtk", /* Split U-Boot OS */
+		.fw_max_len	= 0x770000,
+		.kernel_la	= 0x80000000,
+		.kernel_ep	= 0x80000000,
+		.rootfs_ofs	= 0x140000,
 	}, {
 		.id		= "8MLmtk",
 		.fw_max_len	= 0x7b0000,
Original line number Original line Diff line number Diff line
From: David Bauer <mail@david-bauer.net>
Date: Sun, 3 Feb 2019 00:23:18 +0100
Subject: ramips: add support for Archer C50 v4

This adds support for the TP-Link Archer C50 v4.
It uses the same hardware as the v3 variant, sharing the same FCC-ID.

CPU:   MediaTek MT7628 (580MHz)
RAM:   64M DDR2
FLASH: 8M SPI
WiFi:  2.4GHz 2x2 MT7628 b/g/n integrated
WiFI:  5GHz 2x2 MT7612 a/n/ac
ETH:   1x WAN 4x LAN
LED:   Power, WiFi2, WiFi5, LAN, WAN, WPS
BTN:   WPS/WiFi, RESET
UART:  Near ETH ports, 115200 8n1, TP-Link pinout

Create Factory image
--------------------
As all installation methods require a U-Boot to be integrated into the
Image (and we do not ship one with the image) we are not able to create
an image in the OpenWRT build-process.

Download a TP-Link image from their Wesite and a OpenWRT sysupgrade
image for the device and build yourself a factory image like following:

TP-Link image:             tpl.bin
OpenWRT sysupgrade image:  owrt.bin

 > dd if=tpl.bin of=boot.bin bs=131584 count=1
 > cat owrt.bin >> boot.bin

Installing via Web-UI
---------------------
Upload the boot.bin via TP-Links firmware upgrade tool in the
web-interface.

Installing via Recovery
-----------------------
Activate Web-Recovery by beginning the upgrade Process with a
Firmware-Image from TP-Link. After starting the Firmware Upgrade,
wait ~3 seconds (When update status is switching to 0%), then
disconnect the power supply from the device. Upgrade flag (which
activates Web-Recovery) is written before the OS-image is touched and
removed after write is succesfull, so this procedure should be safe.

Plug the power back in. It will come up in Recovery-Mode on 192.168.0.1.
When active, all LEDs but the WPS LED are off.
Remeber to assign yourself a static IP-address as DHCP is not active in
this mode.

The boot.bin can now be uploaded and flashed using the web-recovery.

Installing via TFTP
-------------------
Prepare an image like following (Filenames from factory image steps
apply here)

 > dd if=/dev/zero of=tp_recovery.bin bs=196608 count=1
 > dd if=tpl.bin of=tmp.bin bs=131584 count=1
 > dd if=tmp.bin of=boot.bin bs=512 skip=1
 > cat boot.bin >> tp_recovery.bin
 > cat owrt.bin >> tp_recovery.bin

Place tp_recovery.bin in root directory of TFTP server and listen on
192.168.0.66/24.

Connect router LAN ports with your computer and power up the router
while pressing the reset button. The router will download the image via
tftp and after ~1 Minute reboot into OpenWRT.

U-Boot CLI
----------
U-Boot CLI can be activated by holding down '4' on bootup.

Dual U-Boot
-----------
This is the first TP-Link MediaTek device to feature a split-uboot
design. The first (factory-uboot) provides recovery via TFTP and HTTP,
jumping straight into the second (firmware-uboot) if no recovery needs
to be performed. The firmware-uboot unpacks and executed the kernel.

Web-Recovery
------------
TP-Link integrated a new Web-Recovery like the one on the Archer C7v4 /
TL-WR1043v5. Stock-firmware sets a flag in the "romfile" partition
before beginning to write and removes it afterwards. If the router boots
with this flag set, bootloader will automatically start Web-recovery and
listens on 192.168.0.1. This way, the vendor-firmware or an OpenWRT
factory image can be written.

It is important to note that Web-Recovery is only based on this flag. It
can't detect e.g. a crashing kernel or other means. Once activated it
won't boot the OS before a recovery action (either via TFTP or HTTP) is
performed. This recovery-mode is indicated by an illuminated WPS-LED on
boot.

Signed-off-by: David Bauer <mail@david-bauer.net>

diff --git a/target/linux/ramips/base-files/etc/board.d/01_leds b/target/linux/ramips/base-files/etc/board.d/01_leds
index 6057275978591192e3b7799a8e6d97761c3e23a5..19386b9e139a25fd1ac29cd9a66b738b5b092cdf 100755
--- a/target/linux/ramips/base-files/etc/board.d/01_leds
+++ b/target/linux/ramips/base-files/etc/board.d/01_leds
@@ -410,7 +410,8 @@ tplink,c20-v4)
 	ucidef_set_led_switch "wan" "wan" "$boardname:green:wan" "switch0" "0x01"
 	ucidef_set_led_netdev "wlan2g" "wlan2g" "$boardname:green:wlan2g" "wlan0"
 	;;
-tplink,c50-v3)
+tplink,c50-v3|\
+tplink,c50-v4)
 	ucidef_set_led_switch "lan" "lan" "$boardname:green:lan" "switch0" "0x1e"
 	ucidef_set_led_switch "wan" "wan" "$boardname:green:wan" "switch0" "0x01"
 	ucidef_set_led_wlan "wlan2g" "wlan2g" "$boardname:green:wlan2g" "phy0tpt"
diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
index ebf40ad1fa874d324b43c8f0613bca53a19ab2d0..1c6cc6b0af745b43b81bbfffc9b5462c1b88defc 100755
--- a/target/linux/ramips/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/base-files/etc/board.d/02_network
@@ -205,6 +205,7 @@ ramips_setup_interfaces()
 	rt-n14u|\
 	tplink,c20-v4|\
 	tplink,c50-v3|\
+	tplink,c50-v4|\
 	tplink,tl-mr3420-v5|\
 	tplink,tl-wr842n-v5|\
 	tl-wr840n-v4|\
diff --git a/target/linux/ramips/base-files/etc/diag.sh b/target/linux/ramips/base-files/etc/diag.sh
index 2f51add331fef4693e997433a4ab0e665da80e02..6d021b6def2f1fe7b71a67f36749c440f3bad1d4 100644
--- a/target/linux/ramips/base-files/etc/diag.sh
+++ b/target/linux/ramips/base-files/etc/diag.sh
@@ -42,6 +42,7 @@ get_status_led() {
 	r6220|\
 	tplink,c20-v4|\
 	tplink,c50-v3|\
+	tplink,c50-v4|\
 	tplink,tl-mr3420-v5|\
 	tplink,tl-wr842n-v5|\
 	tplink,tl-wr902ac-v3|\
diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh
index ffdc5e73e0ede286c10396810954a230c8ea32fc..8055853508fc850a1826166c7e0cbdf443df27cb 100755
--- a/target/linux/ramips/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh
@@ -256,6 +256,7 @@ platform_check_image() {
 	tplink,c20-v1|\
 	tplink,c20-v4|\
 	tplink,c50-v3|\
+	tplink,c50-v4|\
 	tplink,tl-mr3420-v5|\
 	tplink,tl-wr842n-v5|\
 	tplink,tl-wr902ac-v3|\
diff --git a/target/linux/ramips/dts/ArcherC50V4.dts b/target/linux/ramips/dts/ArcherC50V4.dts
new file mode 100644
index 0000000000000000000000000000000000000000..bb4a65436fa435e5636aca3bf326b5a3ca61f7e3
--- /dev/null
+++ b/target/linux/ramips/dts/ArcherC50V4.dts
@@ -0,0 +1,93 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "TPLINK-8M-SPLIT-UBOOT.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	compatible = "tplink,c50-v4", "mediatek,mt7628an-soc";
+	model = "TP-Link Archer C50 v4";
+
+	keys {
+		compatible = "gpio-keys-polled";
+		poll-interval = <20>;
+
+		reset {
+			label = "reset";
+			gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+
+		rfkill {
+			label = "rfkill";
+			gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RFKILL>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_power: power {
+			label = "c50-v4:green:power";
+			gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
+		};
+
+		wlan2 {
+			label = "c50-v4:green:wlan2g";
+			gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
+		};
+
+		wlan5 {
+			label = "c50-v4:green:wlan5g";
+			gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
+		};
+
+		lan {
+			label = "c50-v4:green:lan";
+			gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
+		};
+
+		wan {
+			label = "c50-v4:green:wan";
+			gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
+		};
+
+		wan_orange {
+			label = "c50-v4:orange:wan";
+			gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
+		};
+
+		wps {
+			label = "c50-v4:green:wps";
+			gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&pinctrl {
+	state_default: pinctrl0 {
+		gpio {
+			ralink,group = "i2c", "p0led_an", "p1led_an", "p2led_an",
+				       "p3led_an", "p4led_an", "wdt", "wled_an";
+			ralink,function = "gpio";
+		};
+	};
+};
+
+&pcie {
+	status = "okay";
+
+	pcie-bridge {
+		mt76@0,0 {
+			reg = <0x0000 0 0 0 0>;
+			device_type = "pci";
+			mediatek,mtd-eeprom = <&radio 0x8000>;
+			ieee80211-freq-limit = <5000000 6000000>;
+			mtd-mac-address = <&rom 0xf100>;
+			mtd-mac-address-increment = <(-1)>;
+		};
+	};
+};
\ No newline at end of file
diff --git a/target/linux/ramips/dts/TPLINK-8M-SPLIT-UBOOT.dtsi b/target/linux/ramips/dts/TPLINK-8M-SPLIT-UBOOT.dtsi
new file mode 100644
index 0000000000000000000000000000000000000000..539f476dce6e1fe43769f3ed41ae94d5f6fbc2cc
--- /dev/null
+++ b/target/linux/ramips/dts/TPLINK-8M-SPLIT-UBOOT.dtsi
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+#include "mt7628an.dtsi"
+
+/ {
+	chosen {
+		bootargs = "console=ttyS0,115200";
+	};
+
+	memory@0 {
+		device_type = "memory";
+		reg = <0x0 0x4000000>;
+	};
+};
+
+&spi0 {
+	status = "okay";
+
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <10000000>;
+		m25p,chunked-io = <32>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "factory-uboot";
+				reg = <0x0 0x30000>;
+				read-only;
+			};
+
+			partition@30000 {
+				label = "boot";
+				reg = <0x30000 0x20000>;
+				read-only;
+			};
+
+			partition@50000 {
+				compatible = "tplink,firmware";
+				label = "firmware";
+				reg = <0x50000 0x770000>;
+			};
+
+			partition@7c0000 {
+				label = "config";
+				reg = <0x7c0000 0x10000>;
+				read-only;
+			};
+
+			rom: partition@7d0000 {
+				label = "rom";
+				reg = <0x7d0000 0x10000>;
+				read-only;
+			};
+
+			partition@7e0000 {
+				label = "romfile";
+				reg = <0x7e0000 0x10000>;
+			};
+
+			radio: partition@7f0000 {
+				label = "radio";
+				reg = <0x7f0000 0x10000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&ehci {
+	status = "disabled";
+};
+
+&ohci {
+	status = "disabled";
+};
+
+&wmac {
+	status = "okay";
+	mtd-mac-address = <&rom 0xf100>;
+	mediatek,mtd-eeprom = <&radio 0x0>;
+};
+
+&ethernet {
+	mtd-mac-address = <&rom 0xf100>;
+	mediatek,portmap = "llllw";
+};
diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
index 21c5357a089fdd0675afa6f131ff5b34a9a8f54d..34bd662f3a9490bdb0fd125af5ffa8a0f77c5f16 100644
--- a/target/linux/ramips/image/mt76x8.mk
+++ b/target/linux/ramips/image/mt76x8.mk
@@ -182,6 +182,20 @@ define Device/tplink_c50-v3
 endef
 TARGET_DEVICES += tplink_c50-v3
 
+define Device/tplink_c50-v4
+  $(Device/tplink)
+  DTS := ArcherC50V4
+  IMAGE_SIZE := 7616k
+  DEVICE_TITLE := TP-Link ArcherC50 v4
+  TPLINK_FLASHLAYOUT := 8MSUmtk
+  TPLINK_HWID := 0x001D589B
+  TPLINK_HWREV := 0x93
+  TPLINK_HWREVADD := 0x2
+  TPLINK_HVERSION := 3
+  IMAGES := sysupgrade.bin
+endef
+TARGET_DEVICES += tplink_c50-v4
+
 define Device/tplink_tl-mr3420-v5
   $(Device/tplink)
   DTS := TL-MR3420V5
Original line number Original line Diff line number Diff line
From: Sven Eckelmann <sven@narfation.org>
Date: Fri, 8 Feb 2019 21:20:20 +0100
Subject: mac80211: ath10k: support for multicast and management rate control

Drivers with software rate control can directly use the selected multicast
rate for multicast/broadcast frames and the minimal basic rate for
management frames. But drivers with offloaded rate control algorithms must
be informed about such upper layer decisions to configure the
hardware/firmware.

A new BSS_CHANGED_MCAST_RATE is introduced in mac80211 to automatically
inform all drivers. ath10k can detect this event and forward it via WMI to
the driver. The already existing BSS_CHANGED_BASIC_RATES can be used to
select the management rate.

Without the WMI commands, a low rate (not necessarily one from the basic
rates) is used for bcast/mcast/management frames. This means that the
/etc/config/wireless settings basic_rate and mcast_rate would have no
effect on the rates selected by this driver for the mentioned frames.

Signed-off-by: Sven Eckelmann <sven@narfation.org>

diff --git a/package/kernel/mac80211/patches/975-mac80211-notify-driver-for-change-in-multicast-rates.patch b/package/kernel/mac80211/patches/975-mac80211-notify-driver-for-change-in-multicast-rates.patch
new file mode 100644
index 0000000000000000000000000000000000000000..fb07fa23ecc0518d69eef1f5064328f5c5968360
--- /dev/null
+++ b/package/kernel/mac80211/patches/975-mac80211-notify-driver-for-change-in-multicast-rates.patch
@@ -0,0 +1,98 @@
+From: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
+Date: Thu, 22 Mar 2018 12:18:03 -0700
+Subject: [PATCH] mac80211: notify driver for change in multicast rates
+
+With drivers implementing rate control in driver or firmware
+rate_control_send_low() may not get called, and thus the
+driver needs to know about changes in the multicast rate.
+
+Add and use a new BSS change flag for this.
+
+Signed-off-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
+[rewrite commit message]
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+
+Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dcbe73ca55a42712bfd0e9966cd2d5a48355ace3
+---
+ include/net/mac80211.h | 3 +++
+ net/mac80211/cfg.c     | 2 ++
+ net/mac80211/ibss.c    | 2 +-
+ net/mac80211/mesh.c    | 3 ++-
+ net/mac80211/util.c    | 3 ++-
+ 5 files changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/include/net/mac80211.h b/include/net/mac80211.h
+index 885690fa39c8d8f4a48f2fa25447646d3d0a7856..48cfee4e26bdf3c7b7dbaaeecd6520492fa375a9 100644
+--- a/include/net/mac80211.h
++++ b/include/net/mac80211.h
+@@ -301,6 +301,8 @@ struct ieee80211_vif_chanctx_switch {
+  * @BSS_CHANGED_MU_GROUPS: VHT MU-MIMO group id or user position changed
+  * @BSS_CHANGED_KEEP_ALIVE: keep alive options (idle period or protected
+  *	keep alive) changed.
++ * @BSS_CHANGED_MCAST_RATE: Multicast Rate setting changed for this interface
++ *
+  */
+ enum ieee80211_bss_change {
+ 	BSS_CHANGED_ASSOC		= 1<<0,
+@@ -328,6 +330,7 @@ enum ieee80211_bss_change {
+ 	BSS_CHANGED_OCB                 = 1<<22,
+ 	BSS_CHANGED_MU_GROUPS		= 1<<23,
+ 	BSS_CHANGED_KEEP_ALIVE		= 1<<24,
++	BSS_CHANGED_MCAST_RATE		= 1<<25,
+ 
+ 	/* when adding here, make sure to change ieee80211_reconfig */
+ };
+diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
+index fb15d3b97cb214078f1533f880350fe280b57c69..0b1984b8e3ab4184b009b6423c73dd0b6959d777 100644
+--- a/net/mac80211/cfg.c
++++ b/net/mac80211/cfg.c
+@@ -2310,6 +2310,8 @@ static int ieee80211_set_mcast_rate(struct wiphy *wiphy, struct net_device *dev,
+ 	memcpy(sdata->vif.bss_conf.mcast_rate, rate,
+ 	       sizeof(int) * NUM_NL80211_BANDS);
+ 
++	ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_MCAST_RATE);
++
+ 	return 0;
+ }
+ 
+diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
+index e9c6aa3ed05b8ddb8cf03decce82c00e59b4c0a7..f4b0634b80dedecfc3c05998132bdb6dcd043ed1 100644
+--- a/net/mac80211/ibss.c
++++ b/net/mac80211/ibss.c
+@@ -1840,7 +1840,7 @@ int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
+ 		  IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED
+ 		| IEEE80211_HT_PARAM_RIFS_MODE;
+ 
+-	changed |= BSS_CHANGED_HT;
++	changed |= BSS_CHANGED_HT | BSS_CHANGED_MCAST_RATE;
+ 	ieee80211_bss_info_change_notify(sdata, changed);
+ 
+ 	sdata->smps_mode = IEEE80211_SMPS_OFF;
+diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
+index a550c707cd8a6130ef5756cedf2fa4738ae9a0e7..e9f5c2ae46a7bd83907d0b5ca1ceb0b8d6afd3fe 100644
+--- a/net/mac80211/mesh.c
++++ b/net/mac80211/mesh.c
+@@ -880,7 +880,8 @@ int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata)
+ 		      BSS_CHANGED_BEACON_ENABLED |
+ 		      BSS_CHANGED_HT |
+ 		      BSS_CHANGED_BASIC_RATES |
+-		      BSS_CHANGED_BEACON_INT;
++		      BSS_CHANGED_BEACON_INT |
++		      BSS_CHANGED_MCAST_RATE;
+ 
+ 	local->fif_other_bss++;
+ 	/* mesh ifaces must set allmulti to forward mcast traffic */
+diff --git a/net/mac80211/util.c b/net/mac80211/util.c
+index 6aef6793d05236c19afe00a51f4ddc91bc060a39..6594df0c3e7afe90cf103bac89580e0ad71ed045 100644
+--- a/net/mac80211/util.c
++++ b/net/mac80211/util.c
+@@ -1971,7 +1971,8 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+ 			  BSS_CHANGED_CQM |
+ 			  BSS_CHANGED_QOS |
+ 			  BSS_CHANGED_IDLE |
+-			  BSS_CHANGED_TXPOWER;
++			  BSS_CHANGED_TXPOWER |
++			  BSS_CHANGED_MCAST_RATE;
+ 
+ 		if (sdata->vif.mu_mimo_owner)
+ 			changed |= BSS_CHANGED_MU_GROUPS;
diff --git a/package/kernel/mac80211/patches/976-ath10k-support-for-multicast-rate-control.patch b/package/kernel/mac80211/patches/976-ath10k-support-for-multicast-rate-control.patch
new file mode 100644
index 0000000000000000000000000000000000000000..94bc108fb2e1a99f716135d842e0959f8c7cb602
--- /dev/null
+++ b/package/kernel/mac80211/patches/976-ath10k-support-for-multicast-rate-control.patch
@@ -0,0 +1,112 @@
+From: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
+Date: Wed, 25 Jul 2018 10:59:39 +0300
+Subject: [PATCH] ath10k: support for multicast rate control
+
+Issues a wmi command to firmware when multicast rate change is received with the
+new BSS_CHANGED_MCAST_RATE flag.  Also fixes the incorrect fixed_rate setting
+for CCK rates which got introduced with addition of ath10k_rates_rev2 enum.
+
+Tested on QCA9984 with firmware ver 10.4-3.6-00104
+
+Signed-off-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+
+Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cd93b83ad927b2c7979e0add0343ace59328b461
+---
+ drivers/net/wireless/ath/ath10k/mac.c | 54 +++++++++++++++++++++++++--
+ 1 file changed, 50 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
+index 5683f1a5330eedae677aad5bf2621a6232781346..1937526c8c18da85f7730429759391d47e12cf81 100644
+--- a/drivers/net/wireless/ath/ath10k/mac.c
++++ b/drivers/net/wireless/ath/ath10k/mac.c
+@@ -100,6 +100,8 @@ static struct ieee80211_rate ath10k_rates_rev2[] = {
+ #define ath10k_g_rates_rev2 (ath10k_rates_rev2 + 0)
+ #define ath10k_g_rates_rev2_size (ARRAY_SIZE(ath10k_rates_rev2))
+ 
++#define ath10k_wmi_legacy_rates ath10k_rates
++
+ static bool ath10k_mac_bitrate_is_cck(int bitrate)
+ {
+ 	switch (bitrate) {
+@@ -5389,8 +5391,12 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
+ {
+ 	struct ath10k *ar = hw->priv;
+ 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
+-	int ret = 0;
++	struct cfg80211_chan_def def;
+ 	u32 vdev_param, pdev_param, slottime, preamble;
++	u16 bitrate, hw_value;
++	u8 rate;
++	int rateidx, ret = 0;
++	enum nl80211_band band;
+ 
+ 	mutex_lock(&ar->conf_mutex);
+ 
+@@ -5558,6 +5564,44 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
+ 				    arvif->vdev_id, ret);
+ 	}
+ 
++	if (changed & BSS_CHANGED_MCAST_RATE &&
++	    !WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) {
++		band = def.chan->band;
++		rateidx = vif->bss_conf.mcast_rate[band] - 1;
++
++		if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
++			rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
++
++		bitrate = ath10k_wmi_legacy_rates[rateidx].bitrate;
++		hw_value = ath10k_wmi_legacy_rates[rateidx].hw_value;
++		if (ath10k_mac_bitrate_is_cck(bitrate))
++			preamble = WMI_RATE_PREAMBLE_CCK;
++		else
++			preamble = WMI_RATE_PREAMBLE_OFDM;
++
++		rate = ATH10K_HW_RATECODE(hw_value, 0, preamble);
++
++		ath10k_dbg(ar, ATH10K_DBG_MAC,
++			   "mac vdev %d mcast_rate %x\n",
++			   arvif->vdev_id, rate);
++
++		vdev_param = ar->wmi.vdev_param->mcast_data_rate;
++		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
++						vdev_param, rate);
++		if (ret)
++			ath10k_warn(ar,
++				    "failed to set mcast rate on vdev %i: %d\n",
++				    arvif->vdev_id,  ret);
++
++		vdev_param = ar->wmi.vdev_param->bcast_data_rate;
++		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
++						vdev_param, rate);
++		if (ret)
++			ath10k_warn(ar,
++				    "failed to set bcast rate on vdev %i: %d\n",
++				    arvif->vdev_id,  ret);
++	}
++
+ 	mutex_unlock(&ar->conf_mutex);
+ }
+ 
+@@ -6826,7 +6870,6 @@ ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
+ 					const struct cfg80211_bitrate_mask *mask,
+ 					u8 *rate, u8 *nss)
+ {
+-	struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
+ 	int rate_idx;
+ 	int i;
+ 	u16 bitrate;
+@@ -6836,8 +6879,11 @@ ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
+ 	if (hweight32(mask->control[band].legacy) == 1) {
+ 		rate_idx = ffs(mask->control[band].legacy) - 1;
+ 
+-		hw_rate = sband->bitrates[rate_idx].hw_value;
+-		bitrate = sband->bitrates[rate_idx].bitrate;
++		if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
++			rate_idx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
++
++		hw_rate = ath10k_wmi_legacy_rates[rate_idx].hw_value;
++		bitrate = ath10k_wmi_legacy_rates[rate_idx].bitrate;
+ 
+ 		if (ath10k_mac_bitrate_is_cck(bitrate))
+ 			preamble = WMI_RATE_PREAMBLE_CCK;
diff --git a/package/kernel/mac80211/patches/977-ath10k-add-support-for-configuring-management-packet.patch b/package/kernel/mac80211/patches/977-ath10k-add-support-for-configuring-management-packet.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4b2aa5effdb19141178a5bb71eb9488ee7575b93
--- /dev/null
+++ b/package/kernel/mac80211/patches/977-ath10k-add-support-for-configuring-management-packet.patch
@@ -0,0 +1,94 @@
+From: Sriram R <srirrama@codeaurora.org>
+Date: Mon, 10 Sep 2018 11:09:40 +0530
+Subject: [PATCH] ath10k: add support for configuring management packet rate
+
+By default the firmware uses 1Mbps and 6Mbps rate for management packets
+in 2G and 5G bands respectively. But when the user selects different
+basic rates from the userspace, we need to send the management
+packets at the lowest basic rate selected by the user.
+
+This change makes use of WMI_VDEV_PARAM_MGMT_RATE param for configuring the
+management packets rate to the firmware.
+
+Chipsets Tested : QCA988X, QCA9887, QCA9984
+FW Tested 	: 10.2.4-1.0-41, 10.4-3.6.104
+
+Signed-off-by: Sriram R <srirrama@codeaurora.org>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+
+Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f279294e9ee22a8f306fdc8e4181cf555e6f0f70
+---
+ drivers/net/wireless/ath/ath10k/mac.c | 45 +++++++++++++++++++++++++--
+ 1 file changed, 43 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
+index 1937526c8c18da85f7730429759391d47e12cf81..47e5992afcd7564743f513eb250b57381aba3233 100644
+--- a/drivers/net/wireless/ath/ath10k/mac.c
++++ b/drivers/net/wireless/ath/ath10k/mac.c
+@@ -155,6 +155,22 @@ u8 ath10k_mac_bitrate_to_idx(const struct ieee80211_supported_band *sband,
+ 	return 0;
+ }
+ 
++static int ath10k_mac_get_rate_hw_value(int bitrate)
++{
++	int i;
++	u8 hw_value_prefix = 0;
++
++	if (ath10k_mac_bitrate_is_cck(bitrate))
++		hw_value_prefix = WMI_RATE_PREAMBLE_CCK << 6;
++
++	for (i = 0; i < sizeof(ath10k_rates); i++) {
++		if (ath10k_rates[i].bitrate == bitrate)
++			return hw_value_prefix | ath10k_rates[i].hw_value;
++	}
++
++	return -EINVAL;
++}
++
+ static int ath10k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss)
+ {
+ 	switch ((mcs_map >> (2 * nss)) & 0x3) {
+@@ -5394,9 +5410,10 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
+ 	struct cfg80211_chan_def def;
+ 	u32 vdev_param, pdev_param, slottime, preamble;
+ 	u16 bitrate, hw_value;
+-	u8 rate;
+-	int rateidx, ret = 0;
++	u8 rate, basic_rate_idx;
++	int rateidx, ret = 0, hw_rate_code;
+ 	enum nl80211_band band;
++	const struct ieee80211_supported_band *sband;
+ 
+ 	mutex_lock(&ar->conf_mutex);
+ 
+@@ -5602,6 +5619,30 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
+ 				    arvif->vdev_id,  ret);
+ 	}
+ 
++	if (changed & BSS_CHANGED_BASIC_RATES) {
++		if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) {
++			mutex_unlock(&ar->conf_mutex);
++			return;
++		}
++
++	sband = ar->hw->wiphy->bands[def.chan->band];
++	basic_rate_idx = ffs(vif->bss_conf.basic_rates) - 1;
++	bitrate = sband->bitrates[basic_rate_idx].bitrate;
++
++	hw_rate_code = ath10k_mac_get_rate_hw_value(bitrate);
++	if (hw_rate_code < 0) {
++		ath10k_warn(ar, "bitrate not supported %d\n", bitrate);
++		mutex_unlock(&ar->conf_mutex);
++		return;
++	}
++
++	vdev_param = ar->wmi.vdev_param->mgmt_rate;
++	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
++					hw_rate_code);
++	if (ret)
++		ath10k_warn(ar, "failed to set mgmt tx rate %d\n", ret);
++	}
++
+ 	mutex_unlock(&ar->conf_mutex);
+ }
+ 
diff --git a/package/kernel/mac80211/patches/978-ath10k-fix-possible-out-of-bound-access-of-ath10k_ra.patch b/package/kernel/mac80211/patches/978-ath10k-fix-possible-out-of-bound-access-of-ath10k_ra.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b496332574f93b1f6474226e8c09970d6fe0e2fe
--- /dev/null
+++ b/package/kernel/mac80211/patches/978-ath10k-fix-possible-out-of-bound-access-of-ath10k_ra.patch
@@ -0,0 +1,70 @@
+From: Sriram R <srirrama@codeaurora.org>
+Date: Wed, 3 Oct 2018 08:43:50 +0530
+Subject: [PATCH] ath10k: fix possible out of bound access of ath10k_rates array
+
+While using 'ath10k_mac_get_rate_hw_value()' to obtain the hw value
+from the passed bitrate, there is a chance of out of bound array access
+when wrong bitrate is passed. This is fixed by comparing the bitrates
+within the correct size of the ath10k_rates array.
+
+Fixes commit f279294e9ee2 ("ath10k: add support for configuring management
+packet rate"). Also correction made to some indents used in the above commit.
+
+Signed-off-by: Sriram R <srirrama@codeaurora.org>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+
+Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e141eea7dd8525dd1ef7a925459e455b4d307f
+---
+ drivers/net/wireless/ath/ath10k/mac.c | 30 +++++++++++++--------------
+ 1 file changed, 15 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
+index 47e5992afcd7564743f513eb250b57381aba3233..e93b04c8e6fb2fa7968b910e0cc97ad8144bd7e8 100644
+--- a/drivers/net/wireless/ath/ath10k/mac.c
++++ b/drivers/net/wireless/ath/ath10k/mac.c
+@@ -163,7 +163,7 @@ static int ath10k_mac_get_rate_hw_value(int bitrate)
+ 	if (ath10k_mac_bitrate_is_cck(bitrate))
+ 		hw_value_prefix = WMI_RATE_PREAMBLE_CCK << 6;
+ 
+-	for (i = 0; i < sizeof(ath10k_rates); i++) {
++	for (i = 0; i < ARRAY_SIZE(ath10k_rates); i++) {
+ 		if (ath10k_rates[i].bitrate == bitrate)
+ 			return hw_value_prefix | ath10k_rates[i].hw_value;
+ 	}
+@@ -5625,22 +5625,22 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
+ 			return;
+ 		}
+ 
+-	sband = ar->hw->wiphy->bands[def.chan->band];
+-	basic_rate_idx = ffs(vif->bss_conf.basic_rates) - 1;
+-	bitrate = sband->bitrates[basic_rate_idx].bitrate;
++		sband = ar->hw->wiphy->bands[def.chan->band];
++		basic_rate_idx = ffs(vif->bss_conf.basic_rates) - 1;
++		bitrate = sband->bitrates[basic_rate_idx].bitrate;
+ 
+-	hw_rate_code = ath10k_mac_get_rate_hw_value(bitrate);
+-	if (hw_rate_code < 0) {
+-		ath10k_warn(ar, "bitrate not supported %d\n", bitrate);
+-		mutex_unlock(&ar->conf_mutex);
+-		return;
+-	}
++		hw_rate_code = ath10k_mac_get_rate_hw_value(bitrate);
++		if (hw_rate_code < 0) {
++			ath10k_warn(ar, "bitrate not supported %d\n", bitrate);
++			mutex_unlock(&ar->conf_mutex);
++			return;
++		}
+ 
+-	vdev_param = ar->wmi.vdev_param->mgmt_rate;
+-	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
+-					hw_rate_code);
+-	if (ret)
+-		ath10k_warn(ar, "failed to set mgmt tx rate %d\n", ret);
++		vdev_param = ar->wmi.vdev_param->mgmt_rate;
++		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
++						hw_rate_code);
++		if (ret)
++			ath10k_warn(ar, "failed to set mgmt tx rate %d\n", ret);
+ 	}
+ 
+ 	mutex_unlock(&ar->conf_mutex);
Original line number Original line Diff line number Diff line
From: Sven Eckelmann <sven@narfation.org>
Date: Fri, 8 Feb 2019 21:20:20 +0100
Subject: ath10k-ct: support for multicast and management rate control

Drivers with software rate control can directly use the selected multicast
rate for multicast/broadcast frames and the minimal basic rate for
management frames. But drivers with offloaded rate control algorithms must
be informed about such upper layer decisions to configure the
hardware/firmware.

A new BSS_CHANGED_MCAST_RATE is introduced in mac80211 to automatically
inform all drivers. ath10k-ct can detect this event and forward it via WMI
to the driver. The already existing BSS_CHANGED_BASIC_RATES can be used to
select the management rate.

Without the WMI commands, a low rate (not necessarily one from the basic
rates) is used for bcast/mcast/management frames. This means that the
/etc/config/wireless settings basic_rate and mcast_rate would have no
effect on the rates selected by this driver for the mentioned frames.

Signed-off-by: Sven Eckelmann <sven@narfation.org>

diff --git a/package/kernel/ath10k-ct/patches/976-ath10k-support-for-multicast-rate-control.patch b/package/kernel/ath10k-ct/patches/976-ath10k-support-for-multicast-rate-control.patch
new file mode 100644
index 0000000000000000000000000000000000000000..bd60bf317dec3a2eec1fd9263037acc30d272e39
--- /dev/null
+++ b/package/kernel/ath10k-ct/patches/976-ath10k-support-for-multicast-rate-control.patch
@@ -0,0 +1,112 @@
+From: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
+Date: Wed, 25 Jul 2018 10:59:39 +0300
+Subject: [PATCH] ath10k: support for multicast rate control
+
+Issues a wmi command to firmware when multicast rate change is received with the
+new BSS_CHANGED_MCAST_RATE flag.  Also fixes the incorrect fixed_rate setting
+for CCK rates which got introduced with addition of ath10k_rates_rev2 enum.
+
+Tested on QCA9984 with firmware ver 10.4-3.6-00104
+
+Signed-off-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+
+Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cd93b83ad927b2c7979e0add0343ace59328b461
+---
+ ath10k-4.13/mac.c | 54 +++++++++++++++++++++++++--
+ 1 file changed, 50 insertions(+), 4 deletions(-)
+
+diff --git a/ath10k-4.13/mac.c b/ath10k-4.13/mac.c
+index 5683f1a5330eedae677aad5bf2621a6232781346..1937526c8c18da85f7730429759391d47e12cf81 100644
+--- a/ath10k-4.13/mac.c
++++ b/ath10k-4.13/mac.c
+@@ -100,6 +100,8 @@ static struct ieee80211_rate ath10k_rates_rev2[] = {
+ #define ath10k_g_rates_rev2 (ath10k_rates_rev2 + 0)
+ #define ath10k_g_rates_rev2_size (ARRAY_SIZE(ath10k_rates_rev2))
+ 
++#define ath10k_wmi_legacy_rates ath10k_rates
++
+ static bool ath10k_mac_bitrate_is_cck(int bitrate)
+ {
+ 	switch (bitrate) {
+@@ -5389,8 +5391,12 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
+ {
+ 	struct ath10k *ar = hw->priv;
+ 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
+-	int ret = 0;
++	struct cfg80211_chan_def def;
+ 	u32 vdev_param, pdev_param, slottime, preamble;
++	u16 bitrate, hw_value;
++	u8 rate;
++	int rateidx, ret = 0;
++	enum nl80211_band band;
+ 
+ 	mutex_lock(&ar->conf_mutex);
+ 
+@@ -5558,6 +5564,44 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
+ 				    arvif->vdev_id, ret);
+ 	}
+ 
++	if (changed & BSS_CHANGED_MCAST_RATE &&
++	    !WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) {
++		band = def.chan->band;
++		rateidx = vif->bss_conf.mcast_rate[band] - 1;
++
++		if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
++			rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
++
++		bitrate = ath10k_wmi_legacy_rates[rateidx].bitrate;
++		hw_value = ath10k_wmi_legacy_rates[rateidx].hw_value;
++		if (ath10k_mac_bitrate_is_cck(bitrate))
++			preamble = WMI_RATE_PREAMBLE_CCK;
++		else
++			preamble = WMI_RATE_PREAMBLE_OFDM;
++
++		rate = ATH10K_HW_RATECODE(hw_value, 0, preamble);
++
++		ath10k_dbg(ar, ATH10K_DBG_MAC,
++			   "mac vdev %d mcast_rate %x\n",
++			   arvif->vdev_id, rate);
++
++		vdev_param = ar->wmi.vdev_param->mcast_data_rate;
++		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
++						vdev_param, rate);
++		if (ret)
++			ath10k_warn(ar,
++				    "failed to set mcast rate on vdev %i: %d\n",
++				    arvif->vdev_id,  ret);
++
++		vdev_param = ar->wmi.vdev_param->bcast_data_rate;
++		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
++						vdev_param, rate);
++		if (ret)
++			ath10k_warn(ar,
++				    "failed to set bcast rate on vdev %i: %d\n",
++				    arvif->vdev_id,  ret);
++	}
++
+ 	mutex_unlock(&ar->conf_mutex);
+ }
+ 
+@@ -6826,7 +6870,6 @@ ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
+ 					const struct cfg80211_bitrate_mask *mask,
+ 					u8 *rate, u8 *nss)
+ {
+-	struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
+ 	int rate_idx;
+ 	int i;
+ 	u16 bitrate;
+@@ -6836,8 +6879,11 @@ ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
+ 	if (hweight32(mask->control[band].legacy) == 1) {
+ 		rate_idx = ffs(mask->control[band].legacy) - 1;
+ 
+-		hw_rate = sband->bitrates[rate_idx].hw_value;
+-		bitrate = sband->bitrates[rate_idx].bitrate;
++		if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
++			rate_idx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
++
++		hw_rate = ath10k_wmi_legacy_rates[rate_idx].hw_value;
++		bitrate = ath10k_wmi_legacy_rates[rate_idx].bitrate;
+ 
+ 		if (ath10k_mac_bitrate_is_cck(bitrate))
+ 			preamble = WMI_RATE_PREAMBLE_CCK;
diff --git a/package/kernel/ath10k-ct/patches/977-ath10k-add-support-for-configuring-management-packet.patch b/package/kernel/ath10k-ct/patches/977-ath10k-add-support-for-configuring-management-packet.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6cc6df271fc73431b9467ac9878c360345e0754f
--- /dev/null
+++ b/package/kernel/ath10k-ct/patches/977-ath10k-add-support-for-configuring-management-packet.patch
@@ -0,0 +1,94 @@
+From: Sriram R <srirrama@codeaurora.org>
+Date: Mon, 10 Sep 2018 11:09:40 +0530
+Subject: [PATCH] ath10k: add support for configuring management packet rate
+
+By default the firmware uses 1Mbps and 6Mbps rate for management packets
+in 2G and 5G bands respectively. But when the user selects different
+basic rates from the userspace, we need to send the management
+packets at the lowest basic rate selected by the user.
+
+This change makes use of WMI_VDEV_PARAM_MGMT_RATE param for configuring the
+management packets rate to the firmware.
+
+Chipsets Tested : QCA988X, QCA9887, QCA9984
+FW Tested 	: 10.2.4-1.0-41, 10.4-3.6.104
+
+Signed-off-by: Sriram R <srirrama@codeaurora.org>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+
+Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f279294e9ee22a8f306fdc8e4181cf555e6f0f70
+---
+ ath10k-4.13/mac.c | 45 +++++++++++++++++++++++++--
+ 1 file changed, 43 insertions(+), 2 deletions(-)
+
+diff --git a/ath10k-4.13/mac.c b/ath10k-4.13/mac.c
+index 1937526c8c18da85f7730429759391d47e12cf81..47e5992afcd7564743f513eb250b57381aba3233 100644
+--- a/ath10k-4.13/mac.c
++++ b/ath10k-4.13/mac.c
+@@ -155,6 +155,22 @@ u8 ath10k_mac_bitrate_to_idx(const struct ieee80211_supported_band *sband,
+ 	return 0;
+ }
+ 
++static int ath10k_mac_get_rate_hw_value(int bitrate)
++{
++	int i;
++	u8 hw_value_prefix = 0;
++
++	if (ath10k_mac_bitrate_is_cck(bitrate))
++		hw_value_prefix = WMI_RATE_PREAMBLE_CCK << 6;
++
++	for (i = 0; i < sizeof(ath10k_rates); i++) {
++		if (ath10k_rates[i].bitrate == bitrate)
++			return hw_value_prefix | ath10k_rates[i].hw_value;
++	}
++
++	return -EINVAL;
++}
++
+ static int ath10k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss)
+ {
+ 	switch ((mcs_map >> (2 * nss)) & 0x3) {
+@@ -5394,9 +5410,10 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
+ 	struct cfg80211_chan_def def;
+ 	u32 vdev_param, pdev_param, slottime, preamble;
+ 	u16 bitrate, hw_value;
+-	u8 rate;
+-	int rateidx, ret = 0;
++	u8 rate, basic_rate_idx;
++	int rateidx, ret = 0, hw_rate_code;
+ 	enum nl80211_band band;
++	const struct ieee80211_supported_band *sband;
+ 
+ 	mutex_lock(&ar->conf_mutex);
+ 
+@@ -5602,6 +5619,30 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
+ 				    arvif->vdev_id,  ret);
+ 	}
+ 
++	if (changed & BSS_CHANGED_BASIC_RATES) {
++		if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) {
++			mutex_unlock(&ar->conf_mutex);
++			return;
++		}
++
++	sband = ar->hw->wiphy->bands[def.chan->band];
++	basic_rate_idx = ffs(vif->bss_conf.basic_rates) - 1;
++	bitrate = sband->bitrates[basic_rate_idx].bitrate;
++
++	hw_rate_code = ath10k_mac_get_rate_hw_value(bitrate);
++	if (hw_rate_code < 0) {
++		ath10k_warn(ar, "bitrate not supported %d\n", bitrate);
++		mutex_unlock(&ar->conf_mutex);
++		return;
++	}
++
++	vdev_param = ar->wmi.vdev_param->mgmt_rate;
++	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
++					hw_rate_code);
++	if (ret)
++		ath10k_warn(ar, "failed to set mgmt tx rate %d\n", ret);
++	}
++
+ 	mutex_unlock(&ar->conf_mutex);
+ }
+ 
diff --git a/package/kernel/ath10k-ct/patches/978-ath10k-fix-possible-out-of-bound-access-of-ath10k_ra.patch b/package/kernel/ath10k-ct/patches/978-ath10k-fix-possible-out-of-bound-access-of-ath10k_ra.patch
new file mode 100644
index 0000000000000000000000000000000000000000..cc13e547aa7e983fcff6137de9463e0b706651c5
--- /dev/null
+++ b/package/kernel/ath10k-ct/patches/978-ath10k-fix-possible-out-of-bound-access-of-ath10k_ra.patch
@@ -0,0 +1,70 @@
+From: Sriram R <srirrama@codeaurora.org>
+Date: Wed, 3 Oct 2018 08:43:50 +0530
+Subject: [PATCH] ath10k: fix possible out of bound access of ath10k_rates array
+
+While using 'ath10k_mac_get_rate_hw_value()' to obtain the hw value
+from the passed bitrate, there is a chance of out of bound array access
+when wrong bitrate is passed. This is fixed by comparing the bitrates
+within the correct size of the ath10k_rates array.
+
+Fixes commit f279294e9ee2 ("ath10k: add support for configuring management
+packet rate"). Also correction made to some indents used in the above commit.
+
+Signed-off-by: Sriram R <srirrama@codeaurora.org>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+
+Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e141eea7dd8525dd1ef7a925459e455b4d307f
+---
+ ath10k-4.13/mac.c | 30 +++++++++++++--------------
+ 1 file changed, 15 insertions(+), 15 deletions(-)
+
+diff --git a/ath10k-4.13/mac.c b/ath10k-4.13/mac.c
+index 47e5992afcd7564743f513eb250b57381aba3233..e93b04c8e6fb2fa7968b910e0cc97ad8144bd7e8 100644
+--- a/ath10k-4.13/mac.c
++++ b/ath10k-4.13/mac.c
+@@ -163,7 +163,7 @@ static int ath10k_mac_get_rate_hw_value(int bitrate)
+ 	if (ath10k_mac_bitrate_is_cck(bitrate))
+ 		hw_value_prefix = WMI_RATE_PREAMBLE_CCK << 6;
+ 
+-	for (i = 0; i < sizeof(ath10k_rates); i++) {
++	for (i = 0; i < ARRAY_SIZE(ath10k_rates); i++) {
+ 		if (ath10k_rates[i].bitrate == bitrate)
+ 			return hw_value_prefix | ath10k_rates[i].hw_value;
+ 	}
+@@ -5625,22 +5625,22 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
+ 			return;
+ 		}
+ 
+-	sband = ar->hw->wiphy->bands[def.chan->band];
+-	basic_rate_idx = ffs(vif->bss_conf.basic_rates) - 1;
+-	bitrate = sband->bitrates[basic_rate_idx].bitrate;
++		sband = ar->hw->wiphy->bands[def.chan->band];
++		basic_rate_idx = ffs(vif->bss_conf.basic_rates) - 1;
++		bitrate = sband->bitrates[basic_rate_idx].bitrate;
+ 
+-	hw_rate_code = ath10k_mac_get_rate_hw_value(bitrate);
+-	if (hw_rate_code < 0) {
+-		ath10k_warn(ar, "bitrate not supported %d\n", bitrate);
+-		mutex_unlock(&ar->conf_mutex);
+-		return;
+-	}
++		hw_rate_code = ath10k_mac_get_rate_hw_value(bitrate);
++		if (hw_rate_code < 0) {
++			ath10k_warn(ar, "bitrate not supported %d\n", bitrate);
++			mutex_unlock(&ar->conf_mutex);
++			return;
++		}
+ 
+-	vdev_param = ar->wmi.vdev_param->mgmt_rate;
+-	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
+-					hw_rate_code);
+-	if (ret)
+-		ath10k_warn(ar, "failed to set mgmt tx rate %d\n", ret);
++		vdev_param = ar->wmi.vdev_param->mgmt_rate;
++		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
++						hw_rate_code);
++		if (ret)
++			ath10k_warn(ar, "failed to set mgmt tx rate %d\n", ret);
+ 	}
+ 
+ 	mutex_unlock(&ar->conf_mutex);
Original line number Original line Diff line number Diff line
From: Ludwig Thomeczek <ledesrc@wxorx.net>
Date: Tue, 12 Jun 2018 21:17:23 +0200
Subject: ramips: add support for Netgear R6120

This patch adds support for the Netgear R6120, aka Netgear AC1200.

Specification:
- SoC: MediaTek MT7628 (580 MHz)
- Flash: 16 MiB
- RAM: 64 MiB
- Wireless: 2.4Ghz(builtin) and 5Ghz (MT7612E)
- LAN speed: 10/100
- LAN ports: 4
- WAN speed: 10/100
- WAN ports: 1
- Serial baud rate of Bootloader and factory firmware: 57600

To flash use nmrpflash with the provided factory.img.
Flashing via webinterface will not work, for now.

Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net>

diff --git a/target/linux/ramips/base-files/etc/board.d/01_leds b/target/linux/ramips/base-files/etc/board.d/01_leds
index 19386b9e139a25fd1ac29cd9a66b738b5b092cdf..4203773b4fa3ec771f07b7a8c414a416a0da0f20 100755
--- a/target/linux/ramips/base-files/etc/board.d/01_leds
+++ b/target/linux/ramips/base-files/etc/board.d/01_leds
@@ -301,6 +301,11 @@ mzk-ex750np)
 na930)
 	set_usb_led "$boardname:blue:status"
 	;;
+netgear,r6120)
+	ucidef_set_led_switch "lan" "lan" "$boardname:green:lan" "switch0" "0x0f"
+	ucidef_set_led_switch "wan" "wan" "$boardname:green:wan" "switch0" "0x10"
+	ucidef_set_led_wlan "wlan2g" "WiFi 2.4GHz" "$boardname:green:wlan2g" "phy0tpt"
+	;;
 newifi-d1)
 	set_usb_led "$boardname:red:status"
 	;;
diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
index 1c6cc6b0af745b43b81bbfffc9b5462c1b88defc..9424c7ddfd64f9149a24ff91e63b71990265d211 100755
--- a/target/linux/ramips/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/base-files/etc/board.d/02_network
@@ -301,6 +301,10 @@ ramips_setup_interfaces()
 			"0:lan" "1:lan" "2:lan" "3:lan" "6t@eth0"
 		ucidef_set_interface_wan "usb0"
 		;;
+	netgear,r6120)
+		ucidef_add_switch "switch0" \
+			"0:lan:4" "1:lan:3" "2:lan:2" "3:lan:1" "4:wan" "6@eth0"
+		;;
 	mzk-dp150n|\
 	vocore-8M|\
 	vocore-16M)
diff --git a/target/linux/ramips/base-files/etc/diag.sh b/target/linux/ramips/base-files/etc/diag.sh
index 6d021b6def2f1fe7b71a67f36749c440f3bad1d4..097cc6df569518f64dbfd641eeccc1a4b1b37a2b 100644
--- a/target/linux/ramips/base-files/etc/diag.sh
+++ b/target/linux/ramips/base-files/etc/diag.sh
@@ -38,6 +38,7 @@ get_status_led() {
 	mzk-w300nh2|\
 	nbg-419n|\
 	nbg-419n2|\
+	netgear,r6120|\
 	pwh2004|\
 	r6220|\
 	tplink,c20-v4|\
diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh
index 8055853508fc850a1826166c7e0cbdf443df27cb..7213b22d0c2734488bd96bc34e921f08649b8c2f 100755
--- a/target/linux/ramips/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh
@@ -129,6 +129,7 @@ platform_check_image() {
 	psr-680w|\
 	px-4885-4M|\
 	px-4885-8M|\
+	netgear,r6120|\
 	rb750gr3|\
 	re6500|\
 	rp-n53|\
diff --git a/target/linux/ramips/dts/R6120.dts b/target/linux/ramips/dts/R6120.dts
new file mode 100644
index 0000000000000000000000000000000000000000..a0df0072379a7d8f974ec8025483410d5f9f1da1
--- /dev/null
+++ b/target/linux/ramips/dts/R6120.dts
@@ -0,0 +1,142 @@
+/dts-v1/;
+
+#include "mt7628an.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	compatible = "netgear,r6120", "mediatek,mt7628an-soc";
+	model = "Netgear R6120";
+
+	memory@0 {
+		device_type = "memory";
+		reg = <0x0 0x4000000>;
+	};
+
+	gpio-keys-polled {
+		compatible = "gpio-keys-polled";
+		poll-interval = <20>;
+
+		reset {
+			label = "reset";
+			gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+
+	gpio-leds {
+		compatible = "gpio-leds";
+
+		lan {
+			label = "r6120:green:lan";
+			gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
+		};
+
+		led_power: power {
+			label = "r6120:green:power";
+			gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
+		};
+
+		wlan {
+			label = "r6120:green:wlan2g";
+			gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
+		};
+
+		wlan_orange {
+			label = "r6120:orange:wlan2g";
+			gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
+		};
+
+		wan {
+			label = "r6120:green:wan";
+			gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
+		};
+
+		wan_orange {
+			label = "r6120:orange:wan";
+			gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&pinctrl {
+	state_default: pinctrl0 {
+		gpio {
+			ralink,group = "p0led_an", "p1led_an", "p2led_an",
+				       "p3led_an", "p4led_an", "wdt", "wled_an";
+			ralink,function = "gpio";
+		};
+	};
+};
+
+&spi0 {
+	status = "okay";
+
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <10000000>;
+		m25p,chunked-io = <32>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x0 0x40000>;
+				read-only;
+			};
+
+			factory: partition@40000 {
+				label = "factory";
+				reg = <0x40000 0x20000>;
+				read-only;
+			};
+
+			partition@60000 {
+				label = "nvram";
+				reg = <0x60000 0x30000>;
+				read-only;
+			};
+
+			partition@90000 {
+				label = "firmware";
+				reg = <0x90000 0xf60000>;
+			};
+
+			partition@ff0000 {
+				label = "reserved";
+				reg = <0xff0000 0x10000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&wmac {
+	status = "okay";
+	mtd-mac-address = <&factory 0x4>;
+	mediatek,mtd-eeprom = <&factory 0x0>;
+};
+
+&ethernet {
+	mtd-mac-address = <&factory 0x4>;
+};
+
+&pcie {
+	status = "okay";
+
+	pcie-bridge {