Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gluon-core: lua: wireless: use libiwinfo-lua for find_phy() #3223

Merged
merged 1 commit into from
Mar 26, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 2 additions & 51 deletions package/gluon-core/luasrc/usr/lib/lua/gluon/wireless.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,62 +3,13 @@ local site = require 'gluon.site'
local util = require 'gluon.util'

local unistd = require 'posix.unistd'
local dirent = require 'posix.dirent'

local iwinfo = require 'iwinfo'

local M = {}

local function find_phy_by_path(path)
local device_path, phy_offset = string.match(path, "^(.+)%+(%d+)$")

-- Special handling required for multi-phy devices
if device_path == nil then
device_path = path
phy_offset = '0'
end

-- Find the device path. Either it's located at /sys/devices or /sys/devices/platform
local path_prefix = ''
if not unistd.access('/sys/devices/' .. device_path .. '/ieee80211') then
path_prefix = 'platform/'
end

-- Get all available PHYs of the device and determine the one with the lowest index
local phy_names = dirent.dir('/sys/devices/' .. path_prefix .. device_path .. '/ieee80211')
local device_phy_idxs = {}
for _, v in ipairs(phy_names) do
local phy_idx = v:match('^phy(%d+)$')

if phy_idx ~= nil then
table.insert(device_phy_idxs, tonumber(phy_idx))
end
end

table.sort(device_phy_idxs)

-- Index starts at 1
return 'phy' .. device_phy_idxs[tonumber(phy_offset) + 1]
end

local function find_phy_by_macaddr(macaddr)
local addr = macaddr:lower()
for _, file in ipairs(util.glob('/sys/class/ieee80211/*/macaddress')) do
if util.trim(util.readfile(file)) == addr then
return file:match('([^/]+)/macaddress$')
end
end
end

function M.find_phy(config)
if not config or config.type ~= 'mac80211' then
return nil
elseif config.path then
return find_phy_by_path(config.path)
elseif config.macaddr then
return find_phy_by_macaddr(config.macaddr)
else
return nil
end
return iwinfo.nl80211.phyname(config['.name'])
end

local function get_addresses(radio)
Expand Down
Loading