Merge pull request #1956 from freifunk-gluon/primary-mac-cleanup
Primary MAC logic refactoring
This commit is contained in:
commit
cd09c95e60
@ -4,75 +4,136 @@ local sysconfig = require 'gluon.sysconfig'
|
|||||||
|
|
||||||
|
|
||||||
if sysconfig.primary_mac then
|
if sysconfig.primary_mac then
|
||||||
os.exit(0)
|
os.exit(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local util = require 'gluon.util'
|
|
||||||
local platform = require 'gluon.platform'
|
local platform = require 'gluon.platform'
|
||||||
|
local util = require 'gluon.util'
|
||||||
|
|
||||||
|
|
||||||
local try_files = {
|
local function sysfs(...)
|
||||||
'/sys/class/net/eth0/address'
|
local path = string.format(...)
|
||||||
|
return function()
|
||||||
|
local addr = util.readfile(path)
|
||||||
|
if addr then
|
||||||
|
return util.trim(addr)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function eth(index)
|
||||||
|
return sysfs('/sys/class/net/eth%d/address', index)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function phy(index)
|
||||||
|
return sysfs('/sys/class/ieee80211/phy%d/macaddress', index)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Entries are matched in the order they are listed
|
||||||
|
local primary_addrs = {
|
||||||
|
{eth(0), {
|
||||||
|
{'x86'},
|
||||||
|
{'brcm2708'},
|
||||||
|
{'ar71xx', 'generic', {
|
||||||
|
'a40',
|
||||||
|
'a60',
|
||||||
|
'archer-c25-v1',
|
||||||
|
'archer-c60-v2',
|
||||||
|
'archer-c7-v4',
|
||||||
|
'archer-c7-v5',
|
||||||
|
'carambola2',
|
||||||
|
'koala',
|
||||||
|
'mr600',
|
||||||
|
'mr600v2',
|
||||||
|
'mr900',
|
||||||
|
'mr900v2',
|
||||||
|
'mr1750',
|
||||||
|
'mr1750v2',
|
||||||
|
'om2p',
|
||||||
|
'om2pv2',
|
||||||
|
'om2pv4',
|
||||||
|
'om2p-hs',
|
||||||
|
'om2p-hsv2',
|
||||||
|
'om2p-hsv3',
|
||||||
|
'om2p-hsv4',
|
||||||
|
'om2p-lc',
|
||||||
|
'om5p',
|
||||||
|
'om5p-an',
|
||||||
|
'om5p-ac',
|
||||||
|
'om5p-acv2',
|
||||||
|
'unifi-outdoor-plus',
|
||||||
|
'unifiac-lite',
|
||||||
|
'unifiac-pro',
|
||||||
|
}},
|
||||||
|
{'ar71xx', 'mikrotik'},
|
||||||
|
{'ar71xx', 'nand', {
|
||||||
|
'hiveap-121',
|
||||||
|
}},
|
||||||
|
{'ath79', 'generic', {
|
||||||
|
'ocedo,raccoon',
|
||||||
|
}},
|
||||||
|
{'ipq40xx', 'generic', {
|
||||||
|
'avm,fritzbox-4040',
|
||||||
|
'openmesh,a42',
|
||||||
|
'openmesh,a62',
|
||||||
|
}},
|
||||||
|
{'mpc85xx', 'p1020', {
|
||||||
|
'aerohive,hiveap-330',
|
||||||
|
}},
|
||||||
|
{'ramips', 'mt7620', {
|
||||||
|
'miwifi-mini', 'tplink,c2-v1', 'c20-v1', 'c20i', 'c50',
|
||||||
|
}},
|
||||||
|
}},
|
||||||
|
{eth(1), {
|
||||||
|
{'ar71xx', 'generic', {
|
||||||
|
'archer-c5',
|
||||||
|
'archer-c58-v1',
|
||||||
|
'archer-c59-v1',
|
||||||
|
'archer-c60-v1',
|
||||||
|
'archer-c7',
|
||||||
|
}},
|
||||||
|
{'ipq806x', 'generic', {
|
||||||
|
'netgear,r7800',
|
||||||
|
}},
|
||||||
|
{'mpc85xx', 'p1020', {
|
||||||
|
'ocedo,panda',
|
||||||
|
}},
|
||||||
|
}},
|
||||||
|
{phy(1), {
|
||||||
|
{'ar71xx', 'generic', {
|
||||||
|
'tl-wdr3600',
|
||||||
|
'tl-wdr4300',
|
||||||
|
'tl-wr902ac-v1',
|
||||||
|
}},
|
||||||
|
{'ramips', 'mt7621', {
|
||||||
|
'dir-860l-b1',
|
||||||
|
}},
|
||||||
|
}},
|
||||||
|
-- phy0 default
|
||||||
|
{phy(0), {
|
||||||
|
{}, -- matches everything
|
||||||
|
}},
|
||||||
|
-- eth0 fallback when phy0 does not exist
|
||||||
|
{eth(0), {
|
||||||
|
{}, -- matches everything
|
||||||
|
}},
|
||||||
}
|
}
|
||||||
|
|
||||||
if not (
|
|
||||||
util.contains({'x86', 'brcm2708'}, platform.get_target()) or
|
for _, matcher in ipairs(primary_addrs) do
|
||||||
platform.match('ar71xx', 'mikrotik')
|
local f, matches = unpack(matcher)
|
||||||
) then
|
|
||||||
table.insert(try_files, 1, '/sys/class/ieee80211/phy0/macaddress')
|
for _, match in ipairs(matches) do
|
||||||
|
if platform.match(unpack(match)) then
|
||||||
|
local addr = f()
|
||||||
|
if addr then
|
||||||
|
sysconfig.primary_mac = addr
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if platform.match('ar71xx', 'generic', {'tl-wdr3600', 'tl-wdr4300',
|
error('no primary MAC address found')
|
||||||
'tl-wr902ac-v1'}) then
|
|
||||||
table.insert(try_files, 1, '/sys/class/ieee80211/phy1/macaddress')
|
|
||||||
elseif platform.match('ar71xx', 'generic', {'a40', 'a60',
|
|
||||||
'archer-c25-v1',
|
|
||||||
'archer-c60-v2',
|
|
||||||
'archer-c7-v4', 'archer-c7-v5',
|
|
||||||
'carambola2',
|
|
||||||
'koala',
|
|
||||||
'mr600', 'mr600v2',
|
|
||||||
'mr900', 'mr900v2',
|
|
||||||
'mr1750', 'mr1750v2',
|
|
||||||
'om2p', 'om2pv2', 'om2pv4',
|
|
||||||
'om2p-hs', 'om2p-hsv2', 'om2p-hsv3',
|
|
||||||
'om2p-hsv4',
|
|
||||||
'om2p-lc',
|
|
||||||
'om5p', 'om5p-an',
|
|
||||||
'om5p-ac', 'om5p-acv2',
|
|
||||||
'unifi-outdoor-plus',
|
|
||||||
'unifiac-lite', 'unifiac-pro'}) then
|
|
||||||
table.insert(try_files, 1, '/sys/class/net/eth0/address')
|
|
||||||
elseif platform.match('ar71xx', 'generic', {'archer-c5', 'archer-c58-v1',
|
|
||||||
'archer-c59-v1', 'archer-c60-v1',
|
|
||||||
'archer-c7'}) then
|
|
||||||
table.insert(try_files, 1, '/sys/class/net/eth1/address')
|
|
||||||
elseif platform.match('ar71xx', 'nand', {'hiveap-121'}) then
|
|
||||||
table.insert(try_files, 1, '/sys/class/net/eth0/address')
|
|
||||||
elseif platform.match('ath79', 'generic', {'ocedo,raccoon'}) then
|
|
||||||
table.insert(try_files, 1, '/sys/class/net/eth0/address')
|
|
||||||
elseif platform.match('ipq40xx', 'generic', {'avm,fritzbox-4040',
|
|
||||||
'openmesh,a42', 'openmesh,a62'}) then
|
|
||||||
table.insert(try_files, 1, '/sys/class/net/eth0/address')
|
|
||||||
elseif platform.match('ipq806x', 'generic', {'netgear,r7800'}) then
|
|
||||||
table.insert(try_files, 1, '/sys/class/net/eth1/address')
|
|
||||||
elseif platform.match('mpc85xx', 'p1020', {'aerohive,hiveap-330'}) then
|
|
||||||
table.insert(try_files, 1, '/sys/class/net/eth0/address')
|
|
||||||
elseif platform.match('mpc85xx', 'p1020', {'ocedo,panda'}) then
|
|
||||||
table.insert(try_files, 1, '/sys/class/net/eth1/address')
|
|
||||||
elseif platform.match('ramips', 'mt7620', {'miwifi-mini', 'tplink,c2-v1', 'c20-v1', 'c20i', 'c50'}) then
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
for _, file in ipairs(try_files) do
|
|
||||||
local addr = util.readfile(file)
|
|
||||||
|
|
||||||
if addr then
|
|
||||||
sysconfig.primary_mac = util.trim(addr)
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
@ -7,11 +7,11 @@ local M = setmetatable({}, {
|
|||||||
})
|
})
|
||||||
|
|
||||||
function M.match(target, subtarget, boards)
|
function M.match(target, subtarget, boards)
|
||||||
if M.get_target() ~= target then
|
if target and M.get_target() ~= target then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
if M.get_subtarget() ~= subtarget then
|
if subtarget and M.get_subtarget() ~= subtarget then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user