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
  • 0x4A6F-master
  • 0x4A6F-rpi4
  • autinerd/experimental-openwrt-24.10
  • experimental
  • feature/addMikrotikwAP
  • master
  • nrb/airmax-test
  • nrb/ar9344-reset-sequence
  • nrb/ex400-remove-wps
  • nrb/gluon-master-cpe510
  • nrb/test-radv-filter
  • nrbffs/fastd-remove-delay
  • nrbffs/netgear-ex6120
  • v2018.2.2-ffs
  • v2018.2.3-ffs
  • v2019.1-ffs
  • v2019.1.1-ffs
  • v2019.1.2-ffs
  • v2020.1-ffs
  • v2020.1.1-ffs
  • v2020.1.3-ffs
  • v2020.2-ffs
  • v2020.2.1-ffs
  • v2020.2.2-ffs
  • v2020.2.3-ffs
  • v2021.1-ffs
  • v2021.1.1-ffs
  • v2021.1.2-ffs
  • v2022.1.1-ffs
  • v2022.1.3-ffs
  • v2022.1.4-ffs
  • v2023.1-ffs
  • v2023.2-ffs
  • v2023.2.2-ffs
  • v2023.2.3-ffs
  • v2023.2.4-ffs
  • v2023.2.5-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

Target

Select target project
  • firmware/gluon
  • 0x4A6F/gluon
  • patrick/gluon
3 results
Select Git revision
  • 0x4A6F-master
  • 0x4A6F-rpi4
  • 2014.3.x
  • 2014.4.x
  • babel
  • experimental
  • hoodselector
  • master
  • nrb/gluon-master-cpe510
  • nrb/test-radv-filter
  • nrbffs/fastd-remove-delay
  • nrbffs/netgear-ex6120
  • radv-filterd
  • v2015.1.x
  • v2016.1.x
  • v2016.2.4-batmanbug
  • v2016.2.x
  • v2018.2.2-ffs
  • v2018.2.3-ffs
  • v2018.2.x
  • v2019.1-ffs
  • v2019.1.1-ffs
  • v2019.1.2-ffs
  • v2020.1-ffs
  • v2020.1.1-ffs
  • v2020.1.3-ffs
  • v2020.2-ffs
  • v2020.2.1-ffs
  • v2020.2.2-ffs
  • v2020.2.3-ffs
  • v2020.2.x
  • v2021.1-ffs
  • v2021.1.1-ffs
  • v2021.1.2-ffs
  • 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
Show changes
Showing
with 1051 additions and 879 deletions
......@@ -15,6 +15,7 @@ else
exit 1
fi
# shellcheck disable=SC2181
[ "$?" -eq 0 ] || exit 1
echo "$ret" | awk '{ print $1 }'
#!/bin/sh
check_command() {
command -v "$1" >/dev/null 2>&1
}
if check_command sha512sum; then
ret="$(sha512sum "$@")"
elif check_command shasum; then
ret="$(shasum -a 512 "$@")"
elif check_command cksum; then
ret="$(cksum -q -a sha512 "$@")"
else
echo "$0: no suitable sha512sum implementation was found" >&2
exit 1
fi
[ "$?" -eq 0 ] || exit 1
echo "$ret" | awk '{ print $1 }'
local funcs = {}
local lib = dofile('scripts/target_config_lib.lua')
function funcs.config_message(config, _, ...)
config(...)
end
function funcs.config_package(config, pkg, value)
config('CONFIG_PACKAGE_%s=%s', pkg, value)
end
local lib = dofile('scripts/target_config_lib.lua')(funcs)
local output = {}
for config in pairs(lib.configs) do
table.insert(output, config)
end
-- The sort will make =y entries override =m ones
table.sort(output)
for _, line in ipairs(output) do
io.stdout:write(line, '\n')
for _, config in pairs(lib.configs) do
io.stdout:write(config:format(), '\n')
end
local ret = 0
local errors = false
local function fail(...)
if ret == 0 then
ret = 1
local function fail(msg)
if not errors then
errors = true
io.stderr:write('Configuration failed:', '\n')
end
io.stderr:write(' * ', string.format(...), '\n')
io.stderr:write(' * ', msg, '\n')
end
local function match_config(f)
for line in io.lines('openwrt/.config') do
if f(line) then
local function match_config(expected, actual)
if expected == actual then
return true
end
end
return false
end
local function check_config(pattern)
return match_config(function(line) return line == pattern end)
if expected:gsub('=m$', '=y') == actual then
return true
end
local function check_config_prefix(pattern)
return match_config(function(line) return string.sub(line, 1, -2) == pattern end)
return false
end
local funcs = {}
function funcs.config_message(_, message, ...)
local pattern = string.format(...)
if not check_config(pattern) then
fail('%s', message)
local function check_config(config)
for line in io.lines('openwrt/.config') do
if match_config(config, line) then
return true
end
end
function funcs.config_package(_, pkg, value)
local pattern = string.format('CONFIG_PACKAGE_%s=%s', pkg, value)
local res
if value == 'y' then
res = check_config(pattern)
else
res = check_config_prefix(string.sub(pattern, 1, -2))
return false
end
if not res then
fail("unable to enable package '%s'", pkg)
end
end
local lib = dofile('scripts/target_config_lib.lua')(funcs)
local lib = dofile('scripts/target_config_lib.lua')
for config, v in pairs(lib.configs) do
if v == 2 then
if not check_config(config) then
fail("unable to set '%s'", config)
for _, config in pairs(lib.configs) do
if config.required then
if not check_config(config:format()) then
fail(config.required)
end
end
end
os.exit(ret)
if errors then
os.exit(1)
end
return function(funcs)
local lib = dofile('scripts/target_lib.lua')
local feature_lib = dofile('scripts/feature_lib.lua')
local image_customization_lib = dofile('scripts/image_customization_lib.lua')
local env = lib.env
local target = env.GLUON_TARGET
assert(target)
assert(env.BOARD)
assert(env.SUBTARGET)
local target = arg[1]
local extra_packages = arg[2]
local openwrt_config_target
if env.SUBTARGET ~= '' then
openwrt_config_target = env.BOARD .. '_' .. env.SUBTARGET
......@@ -15,68 +16,189 @@ return function(funcs)
openwrt_config_target = env.BOARD
end
-- Initialize image-customization
image_customization_lib.init(env)
local function site_packages(image)
return lib.exec_capture_raw(string.format([[
MAKEFLAGS= make print _GLUON_IMAGE_=%s --no-print-directory -s -f - <<'END_MAKE'
include $(GLUON_SITEDIR)/site.mk
-- Split a string into words
local function split(s)
local ret = {}
for w in string.gmatch(s, '%S+') do
table.insert(ret, w)
end
return ret
end
print:
echo -n '$(GLUON_$(_GLUON_IMAGE_)_SITE_PACKAGES)'
END_MAKE
]], lib.escape(image)))
local feeds = split(lib.exec_capture_raw('. scripts/modules.sh; echo "$FEEDS"'))
-- Strip leading '-' character
local function strip_neg(s)
if string.sub(s, 1, 1) == '-' then
return string.sub(s, 2)
else
return s
end
end
lib.include('generic')
for pkg in string.gmatch(extra_packages, '%S+') do
lib.packages {pkg}
-- Add an element to a list, removing duplicate entries and handling negative
-- elements prefixed with a '-'
local function append_to_list(list, item, keep_neg)
local match = strip_neg(item)
local ret = {}
for _, el in ipairs(list) do
if strip_neg(el) ~= match then
table.insert(ret, el)
end
end
if keep_neg ~= false or string.sub(item, 1, 1) ~= '-' then
table.insert(ret, item)
end
return ret
end
lib.include(target)
lib.check_devices()
local function concat_list(a, b, keep_neg)
local ret = a
for _, el in ipairs(b) do
ret = append_to_list(ret, el, keep_neg)
end
return ret
end
local function compact_list(list, keep_neg)
return concat_list({}, list, keep_neg)
end
local function file_exists(file)
local f = io.open(file)
if not f then
return false
end
f:close()
return true
end
local function feature_packages(features)
local files = {'package/features'}
for _, feed in ipairs(feeds) do
local path = string.format('packages/%s/features', feed)
if file_exists(path) then
table.insert(files, path)
end
end
return feature_lib.get_packages(files, features)
end
local function site_specific_packages(dev_info)
local site_selections
local site_packages
local feature_inherited_pkgs
local site_features
-- Get all enabled selections from image-customization.lua
site_selections = image_customization_lib.get_selections(dev_info)
if not lib.opkg then
lib.config '# CONFIG_SIGNED_PACKAGES is not set'
lib.config 'CONFIG_CLEAN_IPKG=y'
lib.packages {'-opkg'}
-- First read enabled features from site
site_features = site_selections['features']
site_features = compact_list(site_features, false)
-- Create List from packages inherited from features
feature_inherited_pkgs = feature_packages(site_features)
-- Read list of packages from site
site_packages = site_selections['packages']
-- Concat feature-packages with site-packages
local pkgs = concat_list(feature_inherited_pkgs, site_packages)
-- Negations for the resulting package-list are dealt with in the calling function
return pkgs
end
local enabled_packages = {}
-- Arguments: package name and config value (true: y, nil: m, false: unset)
-- Ensures precedence of y > m > unset
local function config_package(pkg, v)
-- HACK: Handle virtual default packages
local subst = {
nftables = 'nftables-nojson'
}
if subst[pkg] then
pkg = subst[pkg]
end
local default_pkgs = ''
for _, pkg in ipairs(lib.target_packages) do
default_pkgs = default_pkgs .. ' ' .. pkg
if v == false then
if not enabled_packages[pkg] then
lib.try_config('PACKAGE_' .. pkg, false)
end
return
end
if v == true or not enabled_packages[pkg] then
lib.config('PACKAGE_' .. pkg, v, string.format("unable to enable package '%s'", pkg))
enabled_packages[pkg] = true
end
end
local function handle_target_pkgs(pkgs)
for _, pkg in ipairs(pkgs) do
if string.sub(pkg, 1, 1) == '-' then
lib.try_config('# CONFIG_PACKAGE_%s is not set', string.sub(pkg, 2))
config_package(string.sub(pkg, 2), false)
else
funcs.config_package(lib.config, pkg, 'y')
config_package(pkg, true)
end
end
end
for _, dev in ipairs(lib.devices) do
local profile = dev.options.profile or dev.name
local device_pkgs = default_pkgs
local function get_default_pkgs()
local targetinfo_target = string.gsub(openwrt_config_target, '_', '/', 1)
local target_matches = false
for line in io.lines('openwrt/tmp/.targetinfo') do
local target_match = string.match(line, '^Target: (.+)$')
if target_match then
target_matches = (target_match == targetinfo_target)
end
local function handle_pkg(pkg)
if string.sub(pkg, 1, 1) ~= '-' then
funcs.config_package(lib.config, pkg, 'm')
local default_packages_match = string.match(line, '^Default%-Packages: (.+)$')
if target_matches and default_packages_match then
return split(default_packages_match)
end
device_pkgs = device_pkgs .. ' ' .. pkg
end
for _, pkg in ipairs(dev.options.packages or {}) do
handle_pkg(pkg)
io.stderr:write('Error: unable to get default packages for OpenWrt target ', targetinfo_target, '\n')
os.exit(1)
end
lib.include('generic')
lib.include(target)
lib.check_devices()
handle_target_pkgs(concat_list(get_default_pkgs(), lib.target_packages))
for _, dev in ipairs(lib.devices) do
local device_pkgs = {}
local function handle_pkgs(pkgs)
for _, pkg in ipairs(pkgs) do
if string.sub(pkg, 1, 1) ~= '-' then
config_package(pkg, nil)
end
device_pkgs = append_to_list(device_pkgs, pkg)
end
for pkg in string.gmatch(site_packages(dev.image), '%S+') do
handle_pkg(pkg)
end
funcs.config_message(lib.config, string.format("unable to enable device '%s'", profile),
'CONFIG_TARGET_DEVICE_%s_DEVICE_%s=y', openwrt_config_target, profile)
lib.config('CONFIG_TARGET_DEVICE_PACKAGES_%s_DEVICE_%s="%s"',
openwrt_config_target, profile, device_pkgs)
handle_pkgs(lib.target_packages)
handle_pkgs(dev.options.packages or {})
handle_pkgs(site_specific_packages(dev))
local profile_config = string.format('%s_DEVICE_%s', openwrt_config_target, dev.name)
lib.config(
'TARGET_DEVICE_' .. profile_config, true,
string.format("unable to enable device '%s'", dev.name)
)
lib.config(
'TARGET_DEVICE_PACKAGES_' .. profile_config,
table.concat(device_pkgs, ' ')
)
end
return lib
end
local image_customization_lib = dofile('scripts/image_customization_lib.lua')
-- Functions for use in targets/*
local F = {}
......@@ -15,27 +17,24 @@ local env = setmetatable({}, {
})
F.env = env
local envtrue = setmetatable({}, {
__index = function(_, k) return (tonumber(os.getenv(k)) or 0) > 0 end
})
F.envtrue = envtrue
assert(env.GLUON_SITEDIR)
assert(env.GLUON_TARGETSDIR)
assert(env.GLUON_RELEASE)
assert(env.GLUON_DEPRECATED)
M.site_code = assert(assert(dofile('scripts/site_config.lua')('site.conf')).site_code)
M.site_code = assert(
dofile('scripts/site_config.lua')('site.conf').site_code, 'site_code missing in site.conf'
)
M.target_packages = {}
M.configs = {}
M.devices = {}
M.images = {}
M.opkg = true
-- Initialize image-customization
image_customization_lib.init(env)
local default_options = {
profile = false,
factory = '-squashfs-factory',
factory_ext = '.bin',
sysupgrade = '-squashfs-sysupgrade',
......@@ -44,6 +43,7 @@ local default_options = {
aliases = {},
manifest_aliases = {},
packages = {},
class = 'standard',
deprecated = false,
broken = false,
}
......@@ -55,24 +55,47 @@ for dev in string.gmatch(env.GLUON_DEVICES or '', '%S+') do
unknown_devices[dev] = true
end
local function want_device(dev, options)
if options.broken and not envtrue.BROKEN then
return false
function F.istrue(v)
return (tonumber(v) or 0) > 0
end
if options.deprecated and env.GLUON_DEPRECATED == '0' then
local function device_broken(device_info, overrides)
if F.istrue(env.BROKEN) then
return false
end
if (env.GLUON_DEVICES or '') == '' then
if overrides['broken'] ~= nil then
return overrides['broken'] == true
elseif device_info.options.broken then
return true
end
unknown_devices[dev] = nil
return gluon_devices[dev]
return false
end
local full_deprecated = env.GLUON_DEPRECATED == 'full'
local function want_device(device_info)
local overrides = image_customization_lib.device_overrides(device_info)
-- Check if device is disabled via image-customization.lua in site
if overrides['disabled'] then
return false
end
if device_broken(device_info, overrides) then
return false
end
if device_info.options.deprecated and env.GLUON_DEPRECATED == '0' then
return false
end
if (env.GLUON_DEVICES or '') == '' then
return true
end
unknown_devices[device_info.image] = nil
return gluon_devices[device_info.image]
end
local function merge(a, b)
local ret = {}
......@@ -98,7 +121,10 @@ function F.escape(s)
end
local function escape_command(command, raw)
local ret = 'exec'
local ret = ''
if not raw then
ret = 'exec'
end
for _, arg in ipairs(command) do
ret = ret .. ' ' .. F.escape(arg)
end
......@@ -142,17 +168,56 @@ local image_mt = {
}
local function add_image(image)
table.insert(M.images, setmetatable(image, image_mt))
local device = image.image
M.images[device] = M.images[device] or {}
table.insert(M.images[device], setmetatable(image, image_mt))
end
function F.try_config(...)
M.configs[string.format(...)] = 1
local function format_config(k, v)
local format
if type(v) == 'string' then
format = '%s=%q'
elseif v == true then
format = '%s=y'
elseif v == nil then
format = '%s=m'
elseif v == false then
format = '# %s is not set'
else
format = '%s=%d'
end
return string.format(format, 'CONFIG_' .. k, v)
end
function F.config(...)
M.configs[string.format(...)] = 2
local config_mt = {
__index = {
format = function(config)
return format_config(config.key, config.value)
end,
}
}
local function do_config(k, v, required)
M.configs[k] = setmetatable({
key = k,
value = v,
required = required,
}, config_mt)
end
function F.try_config(k, v)
do_config(k, v)
end
function F.config(k, v, message)
if not message then
message = string.format("unable to set '%s'", format_config(k, v))
end
do_config(k, v, message)
end
function F.packages(pkgs)
for _, pkg in ipairs(pkgs) do
table.insert(M.target_packages, pkg)
......@@ -160,18 +225,41 @@ function F.packages(pkgs)
end
M.packages = F.packages
function F.device(image, name, options)
options = merge(default_options, options)
local function as_table(v)
if type(v) == 'table' then
return v
else
return {v}
end
end
if not want_device(image, options) then
return
local function disable_factory_image(device_info)
if device_info.options.deprecated and env.GLUON_DEPRECATED ~= 'full' then
return true
end
local overrides = image_customization_lib.device_overrides(device_info)
if overrides["disable_factory"] then
return true
end
return false
end
table.insert(M.devices, {
function F.device(image, name, options)
options = merge(default_options, options)
local device_info = {
image = image,
name = name,
options = options,
})
}
if not want_device(device_info) then
return
end
table.insert(M.devices, device_info)
if options.sysupgrade then
add_image {
......@@ -186,22 +274,23 @@ function F.device(image, name, options)
}
end
if options.deprecated and not full_deprecated then
if disable_factory_image(device_info) then
return
end
if options.factory then
for _, ext in ipairs(as_table(options.factory_ext)) do
add_image {
image = image,
name = name,
subdir = 'factory',
in_suffix = options.factory,
out_suffix = '',
extension = options.factory_ext,
extension = ext,
aliases = options.aliases,
manifest_aliases = options.manifest_aliases,
}
end
end
for _, extra_image in ipairs(options.extra_images) do
add_image {
image = image,
......@@ -211,55 +300,8 @@ function F.device(image, name, options)
out_suffix = extra_image[2],
extension = extra_image[3],
aliases = options.aliases,
manifest_aliases = options.manifest_aliases,
}
end
end
function F.factory_image(image, name, ext, options)
options = merge(default_options, options)
if not want_device(image, options) then
return
end
if options.deprecated and not full_deprecated then
return
end
add_image {
image = image,
name = name,
subdir = 'factory',
in_suffix = '',
out_suffix = '',
extension = ext,
aliases = options.aliases,
manifest_aliases = options.manifest_aliases,
}
end
function F.sysupgrade_image(image, name, ext, options)
options = merge(default_options, options)
if not want_device(image, options) then
return
end
add_image {
image = image,
name = name,
subdir = 'sysupgrade',
in_suffix = '',
out_suffix = '-sysupgrade',
extension = ext,
aliases = options.aliases,
manifest_aliases = options.manifest_aliases,
}
end
function F.no_opkg()
M.opkg = false
end
function F.defaults(options)
......
#!/bin/sh -e
make --no-print-directory list-targets BROKEN=1 | ./contrib/actions/generate-target-filters.py > .github/filters.yml
#!/usr/bin/env bash
# shellcheck enable=check-unassigned-uppercase
set -eo pipefail
# move to basedir, in case the script is not executed via `make update-modules`
cd "$(dirname "$0")/.." || exit 1
# shellcheck source=./modules
source ./modules
git diff --quiet ./modules || {
1>&2 echo "Your modules file is dirty, aborting."
exit 1
}
LOCAL_BRANCH=$(git branch --show-current)
[[ $LOCAL_BRANCH != *-updates ]] && LOCAL_BRANCH+=-updates
for MODULE in "OPENWRT" ${GLUON_FEEDS}; do
if [[ $MODULE != "OPENWRT" ]]; then
MODULE=PACKAGES_${MODULE^^}
fi
_REMOTE_URL=${MODULE}_REPO
_REMOTE_BRANCH=${MODULE}_BRANCH
_LOCAL_HEAD=${MODULE}_COMMIT
REMOTE_URL="${!_REMOTE_URL}"
REMOTE_BRANCH="${!_REMOTE_BRANCH}"
LOCAL_HEAD="${!_LOCAL_HEAD}"
# get default branch name if none is set
[ -z "${REMOTE_BRANCH}" ] && {
REMOTE_BRANCH=$(git ls-remote --symref "${REMOTE_URL}" HEAD | awk '/^ref:/ { sub(/refs\/heads\//, "", $2); print $2 }')
}
# fetch the commit id for the HEAD of the module
REMOTE_HEAD=$(git ls-remote "${REMOTE_URL}" "${REMOTE_BRANCH}" | awk '{ print $1 }')
# skip ahead if the commit id did not change
[ "$LOCAL_HEAD" == "$REMOTE_HEAD" ] && continue 1
# switch to local working branch, if we found changes
[ "$(git branch --show-current)" != "${LOCAL_BRANCH}" ] && {
git switch -c "${LOCAL_BRANCH}" || git switch "${LOCAL_BRANCH}"
}
CHECKOUT=$(mktemp -d)
# clone the target branch
git clone --bare "${REMOTE_URL}" --branch="${REMOTE_BRANCH}" "${CHECKOUT}"
# prepare the commit message
# shellcheck disable=SC2001
MODULE=$(echo "${MODULE,,}" | sed 's/packages_//')
TITLE="modules: update ${MODULE}"
MESSAGE="$(mktemp)"
{
echo "${TITLE}"
printf '\n\n'
git -C "${CHECKOUT}" log --oneline --no-decorate --no-merges "${LOCAL_HEAD}..${REMOTE_HEAD}" | cat
} > "$MESSAGE"
# modify modules file
sed -i "s/${LOCAL_HEAD}/${REMOTE_HEAD}/" ./modules
git add ./modules
git commit -F "${MESSAGE}"
# remove the checkout
rm -fr "${CHECKOUT}"
done
#!/bin/bash
#!/usr/bin/env bash
# shellcheck enable=check-unassigned-uppercase
set -e
shopt -s nullglob
......@@ -21,6 +22,7 @@ for module in $GLUON_MODULES; do
for commit in $(git rev-list --reverse --no-merges base..patched); do
(( ++n ))
mkdir -p "${GLUON_PATCHESDIR}/$module"
git -c core.abbrev=40 show --pretty=format:'From: %an <%ae>%nDate: %aD%nSubject: %B' --no-renames --binary "$commit" > "${GLUON_PATCHESDIR}/$module/$(printf '%04u' $n)-$(git show -s --pretty=format:%f "$commit").patch"
echo "Updating: $(git log --format=%s -n 1 "$commit")"
git -c core.abbrev=40 show --pretty=format:'From: %an <%ae>%nDate: %aD%nSubject: %B' --no-renames --binary "$commit" > "${GLUON_PATCHESDIR}/$module/$(printf '%04u' "$n")-$(git show -s --pretty=format:%f "$commit").patch"
done
done
#!/bin/bash
#!/usr/bin/env bash
set -e
......@@ -9,10 +9,14 @@ GLUONDIR="$(pwd)"
for module in $GLUON_MODULES; do
echo "--- Updating module '$module' ---"
var=$(echo "$module" | tr '[:lower:]/' '[:upper:]_')
eval 'repo=${'"${var}"'_REPO}'
eval 'branch=${'"${var}"'_BRANCH}'
eval 'commit=${'"${var}"'_COMMIT}'
var=${module//\//_}
_remote_url=${var^^}_REPO
_remote_branch=${var^^}_BRANCH
_remote_commit=${var^^}_COMMIT
repo=${!_remote_url}
branch=${!_remote_branch}
commit=${!_remote_commit}
mkdir -p "$GLUONDIR/$module"
cd "$GLUONDIR/$module"
......
config 'CONFIG_GLUON_SPECIALIZE_KERNEL=y'
config 'CONFIG_TARGET_SQUASHFS_BLOCK_SIZE=64'
local ATH10K_PACKAGES = {
'kmod-ath10k',
'-kmod-ath10k-ct',
'ath10k-firmware-qca988x',
'-ath10k-firmware-qca988x-ct',
}
local ATH10K_PACKAGES_QCA9887 = {
'kmod-ath10k',
'-kmod-ath10k-ct',
'ath10k-firmware-qca9887',
'-ath10k-firmware-qca9887-ct',
}
local ATH10K_PACKAGES_QCA9888 = {
'kmod-ath10k',
'-kmod-ath10k-ct',
'ath10k-firmware-qca9888',
'-ath10k-firmware-qca9888-ct',
}
-- 8devices
device('8devices-carambola2-board', 'carambola2', {
factory = false,
})
-- ALFA NETWORK
device('alfa-network-ap121f', 'ap121f', {
factory = false,
})
-- Allnet
device('allnet-all0315n', 'all0315n', {
profile = 'ALL0315N',
factory = false,
})
-- AVM
device('avm-fritz-box-4020', 'fritz4020', {
factory = false,
})
device('avm-fritz-wlan-repeater-300e', 'fritz300e', {
factory = false,
})
device('avm-fritz-wlan-repeater-450e', 'fritz450e', {
factory = false,
})
-- Buffalo
device('buffalo-wzr-hp-g300nh', 'wzr-hp-g300nh', {
profile = 'WZRHPG300NH',
})
device('buffalo-wzr-hp-g300nh2', 'wzr-hp-g300nh2', {
profile = 'WZRHPG300NH2',
})
device('buffalo-wzr-hp-g450h', 'wzr-hp-g450h', {
profile = 'WZRHPG450H',
})
device('buffalo-wzr-hp-ag300h', 'wzr-hp-ag300h', {
profile = 'WZRHPAG300H',
sysupgrade = false,
})
device('buffalo-wzr-600dhp', 'wzr-600dhp', {
profile = 'WZR600DHP',
sysupgrade = false,
})
sysupgrade_image('buffalo-wzr-hp-ag300h-wzr-600dhp', 'wzr-hp-ag300h-squashfs-sysupgrade', '.bin')
-- D-Link
device('d-link-dap-1330-rev-a1', 'dap-1330-a1', {
factory_ext = '.img',
})
device('d-link-dir-505-rev-a1', 'dir-505-a1', {
profile = 'DIR505A1',
aliases = {'d-link-dir-505-rev-a2'},
})
device('d-link-dir-825-rev-b1', 'dir-825-b1', {
profile = 'DIR825B1',
factory = false,
})
-- GL Innovations
device('gl-inet-6408a-v1', 'gl-inet-6408A-v1')
device('gl-inet-6416a-v1', 'gl-inet-6416A-v1')
device('gl.inet-gl-ar150', 'gl-ar150', {
factory = false,
manifest_aliases = {'gl-ar150'},
})
device('gl.inet-gl-ar300m', 'gl-ar300m', {
factory = false,
manifest_aliases = {'gl-ar300m'},
})
device('gl.inet-gl-ar750', 'gl-ar750', {
factory = false,
manifest_aliases = {'gl-ar750'},
packages = ATH10K_PACKAGES_QCA9887,
})
-- Linksys by Cisco
device('linksys-wrt160nl', 'wrt160nl', {
profile = 'WRT160NL',
})
-- Meraki
device('meraki-mr12', 'mr12', {
factory = false,
aliases = {'meraki-mr62'},
broken = true, -- MAC address uniqueness issues
})
device('meraki-mr16', 'mr16', {
factory = false,
aliases = {'meraki-mr66'},
broken = true, -- MAC address uniqueness issues
})
-- Netgear
device('netgear-wndr3700', 'wndr3700', {
factory_ext = '.img',
})
device('netgear-wndr3700v2', 'wndr3700v2', {
factory_ext = '.img',
})
device('netgear-wndr3800', 'wndr3800', {
aliases = {'netgear-wndr3800chmychart'},
factory_ext = '.img',
})
device('netgear-wndrmacv2', 'wndrmacv2', {
factory_ext = '.img',
})
device('netgear-wndrmac', 'wndrmac', {
factory_ext = '.img',
broken = true, -- untested
})
-- BROKEN: Untested
device('netgear-wnr2200', 'wnr2200', {
profile = 'WNR2200',
factory_ext = '.img',
broken = true, -- untested
})
-- OCEDO
device('ocedo-koala', 'koala', {
factory = false,
packages = ATH10K_PACKAGES,
})
-- Onion
device('onion-omega', 'onion-omega', {
broken = true, -- no Ethernet
})
-- OpenMesh
device('openmesh-a60', 'a60', {
profile = 'A60',
aliases = {'openmesh-a40'},
packages = ATH10K_PACKAGES,
})
device('openmesh-mr1750', 'mr1750', {
profile = 'MR1750',
aliases = {'openmesh-mr1750v2'},
packages = ATH10K_PACKAGES,
})
device('openmesh-mr600', 'mr600', {
profile = 'MR600',
aliases = {'openmesh-mr600v2'},
})
device('openmesh-mr900', 'mr900', {
profile = 'MR900',
aliases = {'openmesh-mr900v2'},
})
device('openmesh-om2p', 'om2p', {
profile = 'OM2P',
aliases = {
'openmesh-om2pv2',
'openmesh-om2pv4',
'openmesh-om2p-hs',
'openmesh-om2p-hsv2',
'openmesh-om2p-hsv3',
'openmesh-om2p-hsv4',
'openmesh-om2p-lc',
},
})
device('openmesh-om5p', 'om5p', {
profile = 'OM5P',
aliases = {'openmesh-om5p-an'},
})
device('openmesh-om5p-ac', 'om5pac', {
profile = 'OM5PAC',
aliases = {'openmesh-om5p-acv2'},
packages = ATH10K_PACKAGES,
})
-- TP-Link
local tplink_region_suffix = ''
if (env.GLUON_REGION or '') ~= '' then
tplink_region_suffix = '-' .. env.GLUON_REGION
end
device('tp-link-cpe210-v1.0', 'cpe210-220-v1', {
aliases = {'tp-link-cpe210-v1.1', 'tp-link-cpe220-v1.1'},
})
device('tp-link-cpe210-v2.0', 'cpe210-v2')
device('tp-link-cpe210-v3.0', 'cpe210-v3')
device('tp-link-cpe510-v1.0', 'cpe510-520-v1', {
aliases = {'tp-link-cpe510-v1.1', 'tp-link-cpe520-v1.1'},
})
device('tp-link-wbs210-v1.20', 'wbs210-v1')
device('tp-link-wbs510-v1.20', 'wbs510-v1')
device('tp-link-tl-wr710n-v1', 'tl-wr710n-v1', {
packages = { 'zram-swap' },
})
device('tp-link-tl-wr710n-v2.1', 'tl-wr710n-v2.1', {
packages = { 'zram-swap' },
})
device('tp-link-tl-wr810n-v1', 'tl-wr810n-v1')
device('tp-link-tl-wr842n-nd-v1', 'tl-wr842n-v1', {
packages = { 'zram-swap' },
})
device('tp-link-tl-wr842n-nd-v2', 'tl-wr842n-v2', {
packages = { 'zram-swap' },
})
device('tp-link-tl-wr842n-nd-v3', 'tl-wr842n-v3')
device('tp-link-tl-wr1043n-nd-v1', 'tl-wr1043nd-v1', {
packages = { 'zram-swap' },
})
device('tp-link-tl-wr1043n-nd-v2', 'tl-wr1043nd-v2')
device('tp-link-tl-wr1043n-nd-v3', 'tl-wr1043nd-v3')
device('tp-link-tl-wr1043n-nd-v4', 'tl-wr1043nd-v4')
device('tp-link-tl-wr1043n-v5', 'tl-wr1043n-v5')
device('tp-link-tl-wdr3500-v1', 'tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tl-wdr3600-v1')
device('tp-link-tl-wdr4300-v1', 'tl-wdr4300-v1')
device('tp-link-tl-wr2543n-nd-v1', 'tl-wr2543-v1')
device('tp-link-archer-c5-v1', 'archer-c5-v1', {
packages = ATH10K_PACKAGES,
})
device('tp-link-archer-c7-v2', 'archer-c7-v2', {
packages = ATH10K_PACKAGES,
factory = '-squashfs-factory' .. tplink_region_suffix,
})
device('tp-link-archer-c7-v4', 'archer-c7-v4', {
packages = ATH10K_PACKAGES,
})
device('tp-link-archer-c7-v5', 'archer-c7-v5', {
packages = ATH10K_PACKAGES,
})
device('tp-link-archer-c25-v1', 'archer-c25-v1', {
packages = ATH10K_PACKAGES_QCA9887,
broken = true, -- OOM with 5GHz enabled in most environments
})
device('tp-link-archer-c58-v1', 'archer-c58-v1', {
packages = ATH10K_PACKAGES_QCA9888,
broken = true, -- OOM with 5GHz enabled in most environments
})
device('tp-link-archer-c59-v1', 'archer-c59-v1', {
packages = ATH10K_PACKAGES_QCA9888,
})
device('tp-link-archer-c60-v1', 'archer-c60-v1', {
packages = ATH10K_PACKAGES_QCA9888,
broken = true, -- OOM with 5GHz enabled in most environments
})
device('tp-link-archer-c60-v2', 'archer-c60-v2', {
packages = ATH10K_PACKAGES_QCA9888,
broken = true, -- OOM with 5GHz enabled in most environments
})
device('tp-link-re355', 're355-v1', {
packages = ATH10K_PACKAGES,
broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant
})
device('tp-link-tl-wr902ac-v1', 'tl-wr902ac-v1', {
packages = ATH10K_PACKAGES_QCA9887,
broken = true, -- OOM due to insufficient RAM for ath10k expected
})
device('tp-link-re450', 're450-v1', {
packages = ATH10K_PACKAGES,
})
-- Ubiquiti
device('ubiquiti-airgateway', 'ubnt-air-gateway', {
aliases = {'ubiquiti-airgateway-lr'},
})
device('ubiquiti-airgateway-pro', 'ubnt-air-gateway-pro')
device('ubiquiti-airrouter', 'ubnt-airrouter')
device('ubiquiti-bullet-m', 'ubnt-bullet-m', {
aliases = {
'ubiquiti-nanostation-loco-m2',
'ubiquiti-nanostation-loco-m5',
'ubiquiti-bullet-m2',
'ubiquiti-bullet-m5',
'ubiquiti-picostation-m2',
},
packages = { 'zram-swap' },
})
device('ubiquiti-rocket-m', 'ubnt-rocket-m', {
aliases = {
'ubiquiti-rocket-m2',
'ubiquiti-rocket-m5',
},
})
device('ubiquiti-nanostation-m', 'ubnt-nano-m', {
aliases = {
'ubiquiti-nanostation-m2',
'ubiquiti-nanostation-m5',
},
packages = { 'zram-swap' },
})
device('ubiquiti-loco-m-xw', 'ubnt-loco-m-xw', {
aliases = {
'ubiquiti-nanostation-loco-m2-xw',
'ubiquiti-nanostation-loco-m5-xw',
-- 'ubiquiti-nanobeam-m5', -- untested
},
})
device('ubiquiti-nanostation-m-xw', 'ubnt-nano-m-xw', {
aliases = {
'ubiquiti-nanostation-m2-xw',
'ubiquiti-nanostation-m5-xw',
},
})
device('ubiquiti-rocket-m-xw', 'ubnt-rocket-m-xw', {
aliases = {
'ubiquiti-rocket-m2-xw',
'ubiquiti-rocket-m5-xw',
},
})
device('ubiquiti-rocket-m-ti', 'ubnt-rocket-m-ti', {
aliases = {
'ubiquiti-rocket-m2-ti',
'ubiquiti-rocket-m5-ti',
},
})
device('ubiquiti-unifi', 'ubnt-unifi', {
aliases = {
'ubiquiti-unifi-ap',
'ubiquiti-unifi-ap-lr',
},
})
device('ubiquiti-unifi-ap-pro', 'ubnt-uap-pro')
device('ubiquiti-unifiap-outdoor', 'ubnt-unifi-outdoor')
device('ubiquiti-unifiap-outdoor+', 'ubnt-unifi-outdoor-plus')
device('ubiquiti-ls-sr71', 'ubnt-ls-sr71', {
broken = true, -- untested
})
device('ubiquiti-unifi-ac-lite', 'ubnt-unifiac-lite', {
factory = false,
packages = ATH10K_PACKAGES,
aliases = {'ubiquiti-unifi-ac-lite-mesh'},
})
device('ubiquiti-unifi-ac-lr', 'ubnt-unifiac-lr', {
factory = false,
packages = ATH10K_PACKAGES,
})
device('ubiquiti-unifi-ac-pro', 'ubnt-unifiac-pro', {
factory = false,
packages = ATH10K_PACKAGES,
})
device('ubiquiti-unifi-ac-mesh', 'ubnt-unifiac-mesh', {
factory = false,
packages = ATH10K_PACKAGES,
})
device('ubiquiti-unifi-ac-mesh-pro', 'ubnt-unifiac-mesh-pro', {
factory = false,
packages = ATH10K_PACKAGES,
})
-- Western Digital
device('wd-my-net-n600', 'mynet-n600')
device('wd-my-net-n750', 'mynet-n750')
-- ZyXEL
device('zyxel-nbg6616', 'NBG6616', {
packages = ATH10K_PACKAGES,
})
config 'CONFIG_GLUON_SPECIALIZE_KERNEL=y'
defaults {
factory = false,
}
device('mikrotik-rb-nor-flash-16M', 'rb-nor-flash-16M')
device('mikrotik-rb-nor-flash-16M-ac', 'rb-nor-flash-16M-ac')
device('mikrotik-nand-64m', 'nand-64m')
device('mikrotik-nand-large', 'nand-large')
device('mikrotik-nand-large-ac', 'nand-large-ac')
config 'CONFIG_GLUON_SPECIALIZE_KERNEL=y'
local ATH10K_PACKAGES = {'kmod-ath10k', '-kmod-ath10k-ct', 'ath10k-firmware-qca988x', '-ath10k-firmware-qca988x-ct'}
defaults {
sysupgrade_ext = '.tar',
}
-- Aerohive
device('aerohive-hiveap-121', 'hiveap-121')
-- Netgear
device('netgear-wndr3700v4', 'wndr3700v4', {
profile = 'WNDR3700V4',
factory = '-ubi-factory',
factory_ext = '.img',
})
device('netgear-wndr4300', 'wndr4300', {
profile = 'WNDR4300V1',
factory = '-ubi-factory',
factory_ext = '.img',
})
-- ZyXEL
device('zyxel-nbg6716', 'nbg6716', {
profile = 'NBG6716',
packages = ATH10K_PACKAGES,
})
config 'CONFIG_GLUON_SPECIALIZE_KERNEL=y'
no_opkg()
packages {
'-uboot-envtools',
'-kmod-usb-core',
'-kmod-usb-ohci',
'-kmod-usb2',
'-kmod-usb-ledtrig-usbport',
}
defaults {
deprecated = true, -- 4/32
}
-- D-Link
device('d-link-dir-615-rev-c1', 'dir-615-c1', {
profile = 'DIR615C1',
})
-- TP-Link
local tplink_region_suffix = ''
if (env.GLUON_REGION or '') ~= '' then
tplink_region_suffix = '-' .. env.GLUON_REGION
end
device('tp-link-tl-wa701n-nd-v1', 'tl-wa701nd-v1')
device('tp-link-tl-wa701n-nd-v2', 'tl-wa701nd-v2')
device('tp-link-tl-wa7210n-v2', 'tl-wa7210n-v2')
device('tp-link-tl-wa7510n-v1', 'tl-wa7510n-v1')
device('tp-link-tl-wr703n-v1', 'tl-wr703n-v1')
device('tp-link-tl-wr710n-v2', 'tl-wr710n-v2')
device('tp-link-tl-wr740n-nd-v1', 'tl-wr740n-v1')
device('tp-link-tl-wr740n-nd-v3', 'tl-wr740n-v3')
device('tp-link-tl-wr740n-nd-v4', 'tl-wr740n-v4')
device('tp-link-tl-wr740n-nd-v5', 'tl-wr740n-v5')
device('tp-link-tl-wr741n-nd-v1', 'tl-wr741nd-v1')
device('tp-link-tl-wr741n-nd-v2', 'tl-wr741nd-v2')
device('tp-link-tl-wr741n-nd-v4', 'tl-wr741nd-v4')
device('tp-link-tl-wr741n-nd-v5', 'tl-wr741nd-v5')
device('tp-link-tl-wr743n-nd-v1', 'tl-wr743nd-v1')
device('tp-link-tl-wr743n-nd-v2', 'tl-wr743nd-v2')
device('tp-link-tl-wa801n-nd-v1', 'tl-wa801nd-v1')
device('tp-link-tl-wa801n-nd-v2', 'tl-wa801nd-v2')
device('tp-link-tl-wa801n-nd-v3', 'tl-wa801nd-v3')
device('tp-link-tl-wr802n-v1', 'tl-wr802n-v1', {
broken = true, -- untested
})
device('tp-link-tl-wr840n-v2', 'tl-wr840n-v2')
device('tp-link-tl-wr841n-nd-v3', 'tl-wr841-v3')
device('tp-link-tl-wr841n-nd-v5', 'tl-wr841-v5')
device('tp-link-tl-wr841n-nd-v7', 'tl-wr841-v7')
device('tp-link-tl-wr841n-nd-v8', 'tl-wr841-v8')
device('tp-link-tl-wr841n-nd-v9', 'tl-wr841-v9')
device('tp-link-tl-wr841n-nd-v10', 'tl-wr841-v10')
device('tp-link-tl-wr841n-nd-v11', 'tl-wr841-v11', {
factory = '-squashfs-factory' .. tplink_region_suffix,
})
device('tp-link-tl-wr841n-nd-v12', 'tl-wr841-v12', {
factory = '-squashfs-factory' .. tplink_region_suffix,
})
device('tp-link-tl-wr843n-nd-v1', 'tl-wr843nd-v1')
device('tp-link-tl-wr941n-nd-v2', 'tl-wr941nd-v2')
device('tp-link-tl-wr941n-nd-v3', 'tl-wr941nd-v3')
device('tp-link-tl-wr941n-nd-v4', 'tl-wr941nd-v4', {
aliases = {'tp-link-tl-wr940n-v1'},
})
device('tp-link-tl-wr941n-nd-v5', 'tl-wr941nd-v5', {
aliases = {'tp-link-tl-wr940n-v2'},
})
device('tp-link-tl-wr941n-nd-v6', 'tl-wr941nd-v6', {
aliases = {'tp-link-tl-wr940n-v3'},
})
device('tp-link-tl-wr940n-v4', 'tl-wr940n-v4', {
factory = '-squashfs-factory' .. tplink_region_suffix,
aliases = {'tp-link-tl-wr940n-v5'},
})
device('tp-link-tl-wr940n-v6', 'tl-wr940n-v6', {
factory = '-squashfs-factory' .. tplink_region_suffix,
})
device('tp-link-tl-wa730re-v1', 'tl-wa730re-v1')
device('tp-link-tl-wa750re-v1', 'tl-wa750re-v1')
device('tp-link-tl-wa830re-v1', 'tl-wa830re-v1')
device('tp-link-tl-wa830re-v2', 'tl-wa830re-v2')
device('tp-link-tl-wa850re-v1', 'tl-wa850re-v1')
device('tp-link-tl-wa860re-v1', 'tl-wa860re-v1')
device('tp-link-tl-wa901n-nd-v1', 'tl-wa901nd-v1')
device('tp-link-tl-wa901n-nd-v2', 'tl-wa901nd-v2')
device('tp-link-tl-wa901n-nd-v3', 'tl-wa901nd-v3')
device('tp-link-tl-wa901n-nd-v4', 'tl-wa901nd-v4')
device('tp-link-tl-wa901n-nd-v5', 'tl-wa901nd-v5')
device('tp-link-tl-mr13u-v1', 'tl-mr13u-v1')
device('tp-link-tl-mr3020-v1', 'tl-mr3020-v1')
device('tp-link-tl-mr3040-v1', 'tl-mr3040-v1')
device('tp-link-tl-mr3040-v2', 'tl-mr3040-v2')
device('tp-link-tl-mr3220-v1', 'tl-mr3220-v1')
device('tp-link-tl-mr3220-v2', 'tl-mr3220-v2')
device('tp-link-tl-mr3420-v1', 'tl-mr3420-v1')
device('tp-link-tl-mr3420-v2', 'tl-mr3420-v2')
include 'armsr.inc'
device('armsr-armv7', 'generic')
include 'armsr.inc'
device('armsr-armv8', 'generic')
-- We do not use the ext4 images, so we do not want to build them.
config('TARGET_ROOTFS_EXT4FS', false)
defaults {
factory = '-squashfs-combined-efi',
factory_ext = '.img.gz',
sysupgrade = '-squashfs-combined-efi',
sysupgrade_ext = '.img.gz',
}
-- enforce mainline ath10k kmod/firmware over openwrt default ath10k-ct usage
-- ath10k-ct is unstable/broken with 11s meshing, works only wave2 chipsets
local ATH10K_PACKAGES_QCA9880 = {
'kmod-ath10k',
'-kmod-ath10k-ct',
'-kmod-ath10k-ct-smallbuffers',
'ath10k-firmware-qca988x',
'-ath10k-firmware-qca988x-ct',
}
local ATH10K_PACKAGES_QCA9888 = {
local ATH10K_PACKAGES_QCA9887 = {
'kmod-ath10k',
'-kmod-ath10k-ct',
'-kmod-ath10k-ct-smallbuffers',
'ath10k-firmware-qca9887',
'-ath10k-firmware-qca9887-ct',
}
local ATH10K_PACKAGES_QCA9984 = {
'kmod-ath10k',
'-kmod-ath10k-ct',
'ath10k-firmware-qca9888',
'-ath10k-firmware-qca9888-ct',
'-kmod-ath10k-ct-smallbuffers',
'ath10k-firmware-qca9984',
'-ath10k-firmware-qca9984-ct',
}
-- enforce mainline ath10k-smallbuffers kmod, fixes 5GHz-OOM for low memory devices
local ATH10K_PACKAGES_SMALLBUFFERS_QCA9880 = {
'kmod-ath10k-smallbuffers',
'-kmod-ath10k-ct',
'-kmod-ath10k-ct-smallbuffers',
'ath10k-firmware-qca988x',
'-ath10k-firmware-qca988x-ct',
}
local ATH10K_PACKAGES_SMALLBUFFERS_QCA9887 = {
'kmod-ath10k-smallbuffers',
'-kmod-ath10k-ct',
'-kmod-ath10k-ct-smallbuffers',
'ath10k-firmware-qca9887',
'-ath10k-firmware-qca9887-ct',
}
local ATH10K_PACKAGES_QCA9888 = {}
-- ALFA Network
device('alfa-network-ap121f', 'alfa-network_ap121f', {
factory = false,
})
-- AVM
device('avm-fritz-box-4020', 'avm_fritz4020', {
factory = false,
})
device('avm-fritz-wlan-repeater-300e', 'avm_fritz300e', {
factory = false,
})
device('avm-fritz-wlan-repeater-450e', 'avm_fritz450e', {
factory = false,
})
device('avm-fritz-wlan-repeater-1750e', 'avm_fritz1750e', {
packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880,
factory = false,
broken = true, -- OOM with 5GHz enabled in most environments
class = 'tiny', -- 64M ath9k + ath10k
})
-- Buffalo
device('buffalo-wzr-hp-ag300h', 'buffalo_wzr-hp-ag300h')
device('buffalo-wzr-600dhp', 'buffalo_wzr-600dhp')
device('buffalo-wzr-hp-g300nh-rtl8366s', 'buffalo_wzr-hp-g300nh-s')
-- devolo
device('devolo-dlan-pro-1200+-wifi-ac', 'devolo_dlan-pro-1200plus-ac', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
broken = true, -- no power led
})
device('devolo-wifi-pro-1200e', 'devolo_dvl1200e', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
......@@ -44,15 +122,469 @@ device('devolo-wifi-pro-1750x', 'devolo_dvl1750x', {
factory = false,
})
-- D-Link
device('d-link-dap-1330-a1', 'dlink_dap-1330-a1')
device('d-link-dap-1365-a1', 'dlink_dap-1365-a1')
device('d-link-dap-2660-a1', 'dlink_dap-2660-a1', {
factory_ext = '.img',
packages = ATH10K_PACKAGES_QCA9880,
})
device('d-link-dap-2680-a1', 'dlink_dap-2680-a1', {
factory_ext = '.img',
packages = ATH10K_PACKAGES_QCA9984,
})
device('d-link-dap-2695-a1', 'dlink_dap-2695-a1', {
factory_ext = '.img',
packages = ATH10K_PACKAGES_QCA9880,
})
device('d-link-dir-505', 'dlink_dir-505', {
factory = false,
})
device('d-link-dir825b1', 'dlink_dir-825-b1', {
factory = false,
})
device('d-link-dir-825-c1', 'dlink_dir-825-c1', {
factory = false,
manifest_aliases = {
'd-link-dir-825-rev-c1', -- Upgrade from OpenWrt 19.07
},
})
-- Enterasys
device('enterasys-ws-ap3705i', 'enterasys_ws-ap3705i', {
factory = false,
})
-- Extreme Networks
device('extreme-networks-ws-ap3805i', 'extreme-networks_ws-ap3805i', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
-- GL.iNet
device('gl.inet-6416', 'glinet_6416', {
factory = false,
})
device('gl.inet-gl-ar150', 'glinet_gl-ar150', {
factory = false,
})
device('gl.inet-gl-ar300m-lite', 'glinet_gl-ar300m-lite', {
factory = false,
})
device('gl.inet-gl-ar300m16', 'glinet_gl-ar300m16', {
factory = false,
})
device('gl.inet-gl-ar750', 'glinet_gl-ar750', {
factory = false,
packages = ATH10K_PACKAGES_QCA9887,
})
device('gl.inet-gl-usb150', 'glinet_gl-usb150', {
factory = false,
})
-- Joy-IT
device('joy-it-jt-or750i', 'joyit_jt-or750i', {
packages = ATH10K_PACKAGES_QCA9887,
factory = false,
})
-- LibreRouter
-- lacks support for additional radios
device('librerouter-v1', 'librerouter_librerouter-v1', {
factory = false,
})
-- NETGEAR
device('netgear-wndr3700', 'netgear_wndr3700', {
factory_ext = '.img',
})
device('netgear-wndr3700-v2', 'netgear_wndr3700-v2', {
factory_ext = '.img',
})
device('netgear-wndr3800', 'netgear_wndr3800', {
factory_ext = '.img',
})
device('netgear-wndr3800ch', 'netgear_wndr3800ch', {
factory_ext = '.img',
})
device('netgear-wnr2200-8m', 'netgear_wnr2200-8m', {
factory_ext = '.img',
})
device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', {
factory_ext = '.img',
})
device('netgear-wndrmac-v2', 'netgear_wndrmac-v2', {
factory_ext = '.img',
})
-- OCEDO
device('ocedo-koala', 'ocedo_koala', {
factory = false,
packages = ATH10K_PACKAGES_QCA9880,
})
device('ocedo-raccoon', 'ocedo_raccoon', {
factory = false,
})
-- Onion
-- modular/optional "ethernet expansion board" recommended for config mode
-- setup via integrated (USB-)tty is possible as well
device('onion-omega', 'onion_omega')
-- OpenMesh
device('openmesh-a40', 'openmesh_a40', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
device('openmesh-a60', 'openmesh_a60', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
device('openmesh-mr600-v1', 'openmesh_mr600-v1', {
factory = false,
})
device('openmesh-mr600-v2', 'openmesh_mr600-v2', {
factory = false,
})
device('openmesh-mr900-v1', 'openmesh_mr900-v1', {
factory = false,
})
device('openmesh-mr900-v2', 'openmesh_mr900-v2', {
factory = false,
})
device('openmesh-mr1750-v1', 'openmesh_mr1750-v1', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
device('openmesh-mr1750-v2', 'openmesh_mr1750-v2', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
device('openmesh-om2p-v1', 'openmesh_om2p-v1', {
factory = false,
})
device('openmesh-om2p-v2', 'openmesh_om2p-v2', {
factory = false,
})
device('openmesh-om2p-v4', 'openmesh_om2p-v4', {
factory = false,
})
device('openmesh-om2p-hs-v1', 'openmesh_om2p-hs-v1', {
factory = false,
})
device('openmesh-om2p-hs-v2', 'openmesh_om2p-hs-v2', {
factory = false,
})
device('openmesh-om2p-hs-v3', 'openmesh_om2p-hs-v3', {
factory = false,
})
device('openmesh-om2p-hs-v4', 'openmesh_om2p-hs-v4', {
factory = false,
})
device('openmesh-om2p-lc', 'openmesh_om2p-lc', {
factory = false,
})
device('openmesh-om5p', 'openmesh_om5p', {
factory = false,
})
device('openmesh-om5p-ac-v1', 'openmesh_om5p-ac-v1', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
device('openmesh-om5p-ac-v2', 'openmesh_om5p-ac-v2', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
device('openmesh-om5p-an', 'openmesh_om5p-an', {
factory = false,
})
-- Plasma Cloud
device('plasma-cloud-pa300', 'plasmacloud_pa300')
device('plasma-cloud-pa300e', 'plasmacloud_pa300e')
-- Siemens
device('siemens-ws-ap3610', 'siemens_ws-ap3610', {
factory = false,
})
-- Sophos
device('sophos-ap15', 'sophos_ap15', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
broken = true, -- no button and no external console port
})
device('sophos-ap15c', 'sophos_ap15c', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
device('sophos-ap100', 'sophos_ap100', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
device('sophos-ap100c', 'sophos_ap100c', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
device('sophos-ap55', 'sophos_ap55', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
device('sophos-ap55c', 'sophos_ap55c', {
packages = ATH10K_PACKAGES_QCA9880,
factory = false,
})
-- Teltonika
device('teltonika-rut230-v1', 'teltonika_rut230-v1')
-- TP-Link
device('tp-link-archer-c6-v2', 'tplink_archer-c6-v2', {
local tplink_region_suffix = ''
if (env.GLUON_REGION or '') ~= '' then
tplink_region_suffix = '-' .. env.GLUON_REGION
end
device('tp-link-archer-a7-v5', 'tplink_archer-a7-v5', {
packages = ATH10K_PACKAGES_QCA9880,
})
device('tp-link-archer-c2-v3', 'tplink_archer-c2-v3', {
packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
class = 'tiny',
broken = true, -- 64M ath9k + ath10k
})
device('tp-link-archer-c25-v1', 'tplink_archer-c25-v1', {
packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
broken = true, -- OOM with 5GHz enabled in most environments
class = 'tiny', -- 64M ath9k + ath10k
})
device('tp-link-archer-c5-v1', 'tplink_archer-c5-v1', {
packages = ATH10K_PACKAGES_QCA9880,
})
device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', {
packages = ATH10K_PACKAGES_QCA9888,
broken = true, -- OOM with 5GHz enabled in most environments
class = 'tiny', -- 64M ath9k + ath10k
})
device('tp-link-archer-c6-v2-eu-ru-jp', 'tplink_archer-c6-v2', {
packages = ATH10K_PACKAGES_QCA9888,
})
device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', {
packages = ATH10K_PACKAGES_QCA9880,
factory = '-squashfs-factory' .. tplink_region_suffix,
})
device('tp-link-archer-c7-v4', 'tplink_archer-c7-v4', {
packages = ATH10K_PACKAGES_QCA9880,
})
device('tp-link-archer-c7-v5', 'tplink_archer-c7-v5', {
packages = ATH10K_PACKAGES_QCA9880,
})
device('tp-link-archer-c59-v1', 'tplink_archer-c59-v1', {
packages = ATH10K_PACKAGES_QCA9888,
})
device('tp-link-archer-c60-v1', 'tplink_archer-c60-v1', {
packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880,
factory = false,
})
device('tp-link-archer-d50-v1', 'tplink_archer-d50-v1', {
packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880,
factory = false,
broken = true, -- 64M ath9k + ath10k & power LED not working
})
device('tp-link-cpe210-v1', 'tplink_cpe210-v1')
device('tp-link-cpe210-v2', 'tplink_cpe210-v2')
device('tp-link-cpe210-v3', 'tplink_cpe210-v3')
device('tp-link-cpe220-v3', 'tplink_cpe220-v3')
device('tp-link-cpe510-v1', 'tplink_cpe510-v1')
device('tp-link-cpe510-v2', 'tplink_cpe510-v2')
device('tp-link-cpe510-v3', 'tplink_cpe510-v3')
device('tp-link-cpe710-v1', 'tplink_cpe710-v1')
device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
packages = ATH10K_PACKAGES_QCA9888,
})
device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', {
packages = ATH10K_PACKAGES_QCA9888,
})
device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1')
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1')
device('tp-link-tl-wr810n-v1', 'tplink_tl-wr810n-v1')
device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3')
device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', {
packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887,
broken = true, -- OOM with 5GHz enabled in most environments
class = 'tiny', -- 64M ath9k + ath10k
})
device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2')
device('tp-link-tl-wr1043nd-v3', 'tplink_tl-wr1043nd-v3')
device('tp-link-tl-wr1043nd-v4', 'tplink_tl-wr1043nd-v4')
device('tp-link-tl-wr1043n-v5', 'tplink_tl-wr1043n-v5')
device('tp-link-tl-wr2543n-nd', 'tplink_tl-wr2543-v1')
device('tp-link-wbs210-v1', 'tplink_wbs210-v1')
device('tp-link-wbs210-v2', 'tplink_wbs210-v2')
device('tp-link-wbs510-v1', 'tplink_wbs510-v1')
-- Ubiquiti
device('ubiquiti-nanobeam-ac-gen1-xc', 'ubnt_nanobeam-ac-xc', {
packages = ATH10K_PACKAGES_QCA9880,
})
device('ubiquiti-nanostation-loco-m-xw', 'ubnt_nanostation-loco-m-xw', {
aliases = {
'ubiquiti-nanobeam-m5-xw',
},
})
device('ubiquiti-nanostation-m-xw', 'ubnt_nanostation-m-xw')
device('ubiquiti-unifi-ac-lite', 'ubnt_unifiac-lite', {
factory = false,
packages = ATH10K_PACKAGES_QCA9880,
})
device('ubiquiti-unifi-ac-lr', 'ubnt_unifiac-lr', {
factory = false,
packages = ATH10K_PACKAGES_QCA9880,
})
device('ubiquiti-unifi-ac-mesh', 'ubnt_unifiac-mesh', {
factory = false,
packages = ATH10K_PACKAGES_QCA9880,
})
device('ubiquiti-unifi-ac-mesh-pro', 'ubnt_unifiac-mesh-pro', {
factory = false,
packages = ATH10K_PACKAGES_QCA9880,
})
device('ubiquiti-unifi-ac-pro', 'ubnt_unifiac-pro', {
factory = false,
packages = ATH10K_PACKAGES_QCA9880,
})
device('ubiquiti-unifi-ap', 'ubnt_unifi-ap', {
aliases = {
'ubiquiti-unifi-ap-lr',
},
manifest_aliases = {
'ubiquiti-unifi', -- Upgrade from OpenWrt 22.03
},
})
device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus')
device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro')
device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', {
factory = false,
packages = ATH10K_PACKAGES_QCA9880,
})
include 'mikrotik.inc'
device('mikrotik-routerboard-951ui-2nd-hap', 'mikrotik_routerboard-951ui-2nd')
device('mikrotik-routerboard-wapr-2nd', 'mikrotik_routerboard-wapr-2nd')
local ATH10K_PACKAGES_QCA9880 = {
'kmod-ath10k',
'-kmod-ath10k-ct',
'-kmod-ath10k-ct-smallbuffers',
'ath10k-firmware-qca988x',
'-ath10k-firmware-qca988x-ct',
}
local ATH10K_PACKAGES_QCA9887 = {
'kmod-ath10k',
'-kmod-ath10k-ct',
'-kmod-ath10k-ct-smallbuffers',
'ath10k-firmware-qca9887',
'-ath10k-firmware-qca9887-ct',
}
local ATH10K_PACKAGES_QCA9888 = {}
-- Aerohive
device('aerohive-hiveap-121', 'aerohive_hiveap-121')
-- GL.iNet
device('gl.inet-gl-ar300m-nor', 'glinet_gl-ar300m-nor', {
factory = false,
})
device('gl.inet-gl-ar750s-nor', 'glinet_gl-ar750s-nor', {
factory = false,
packages = ATH10K_PACKAGES_QCA9887,
})
device('gl.inet-gl-e750', 'glinet_gl-e750', {
broken = true, -- the display is not showing status and there are no LEDs
factory = false,
packages = ATH10K_PACKAGES_QCA9887,
})
device('gl.inet-gl-xe300', 'glinet_gl-xe300', {
factory = false,
})
-- NETGEAR
device('netgear-wndr3700-v4', 'netgear_wndr3700-v4', {
factory_ext = '.img',
})
device('netgear-wndr4300', 'netgear_wndr4300', {
factory_ext = '.img',
})
-- ZTE
device('zte-mf281', 'zte_mf281', {
broken = true, -- case must be opened to install
packages = ATH10K_PACKAGES_QCA9888,
})
-- Zyxel
device('zyxel-nbg6716', 'zyxel_nbg6716', {
packages = ATH10K_PACKAGES_QCA9880,
sysupgrade_ext = '.tar',
})