mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 14:23:38 +00:00
157 lines
3.9 KiB
Lua
157 lines
3.9 KiB
Lua
local uci = require "luci.model.uci".cursor()
|
|
local util = require "luci.util"
|
|
local fs = require "nixio.fs"
|
|
local pairs = pairs
|
|
local io = io
|
|
|
|
-- config
|
|
m = Map("accelerator")
|
|
m.title = translate("Leigod Device Config")
|
|
m.description = translate("Control Device Config")
|
|
|
|
-- get neigh info
|
|
neigh = m:section(NamedSection, "base", "system", translate("Neigh Device"))
|
|
neigh_tab = neigh:option(ListValue, "neigh", translate("acc interface"))
|
|
local sys_dir = util.exec("ls /sys/class/net")
|
|
if sys_dir ~= nil then
|
|
neigh_tab:value("br-lan")
|
|
for ifc in string.gmatch(sys_dir, "[^\n]+") do
|
|
neigh_tab:value(ifc)
|
|
end
|
|
end
|
|
|
|
-- range all device
|
|
device = m:section(NamedSection, "device", "hardware", translate("Device Info"))
|
|
device:tab("none_catalog", translate("None_Catalog"))
|
|
device:tab("phone_catalog", translate("Phone_Catalog"))
|
|
device:tab("pc_catalog", translate("PC_Catalog"))
|
|
device:tab("game_catalog", translate("Game_Catalog"))
|
|
device:tab("vr_catalog", translate("VR_Catalog"))
|
|
device:tab("unknown_catalog", translate("Unknown_Catalog"))
|
|
|
|
|
|
local dhcp_map = {}
|
|
-- check dhcp file
|
|
if fs.access("/tmp/dhcp.leases") then
|
|
for line in io.lines("/tmp/dhcp.leases") do
|
|
-- check if read empty line
|
|
if line == "" then
|
|
break
|
|
end
|
|
-- split line
|
|
local valueSl = string.gmatch(line, "[^ ]+")
|
|
-- read time
|
|
valueSl()
|
|
-- read mac
|
|
local mac = valueSl()
|
|
-- get ip
|
|
local ip = valueSl()
|
|
-- get host name
|
|
local hostname = valueSl()
|
|
-- key
|
|
local key = string.gsub(mac, ":", "")
|
|
-- store key
|
|
dhcp_map[key] = {
|
|
["key"] = key,
|
|
["mac"] = mac,
|
|
["ip"] = ip,
|
|
["name"] = hostname
|
|
}
|
|
end
|
|
end
|
|
|
|
ifc = uci:get("accelerator", "base", "neigh")
|
|
if ifc == nil then
|
|
ifc = "br-lan"
|
|
end
|
|
|
|
local arp_map = {}
|
|
-- check if arp exist
|
|
if fs.access("/proc/net/arp") then
|
|
-- read all item from arp
|
|
for line in io.lines("/proc/net/arp") do
|
|
-- check if line is not exist
|
|
if line == "" then
|
|
break
|
|
end
|
|
-- split item
|
|
local valueSl = string.gmatch(line, "[^ ]+")
|
|
-- get ip
|
|
local ip = valueSl()
|
|
-- get type
|
|
valueSl()
|
|
-- get flag
|
|
local flag = valueSl()
|
|
-- get mac
|
|
local mac = valueSl()
|
|
-- get mask
|
|
valueSl()
|
|
-- get device
|
|
local dev = valueSl()
|
|
-- get key
|
|
local key = string.gsub(mac, ":", "")
|
|
-- check if device and flag state
|
|
if dev == ifc and flag == "0x2" then
|
|
-- get current name
|
|
local name = mac
|
|
if dhcp_map[key] ~= nil and dhcp_map[key] ~= "*" then
|
|
name = dhcp_map[key].name
|
|
end
|
|
arp_map[key] = {
|
|
["key"] = key,
|
|
["mac"] = mac,
|
|
["ip"] = ip,
|
|
["name"] = name
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
-- get device config
|
|
for key, item in pairs(arp_map) do
|
|
local typ = uci:get("accelerator", "device", key)
|
|
-- get device catalog from type
|
|
local catalog = "none_catalog"
|
|
-- default to unknown device
|
|
if typ == nil then
|
|
typ = 9
|
|
else
|
|
typ = tonumber(typ)
|
|
end
|
|
|
|
if typ == nil then
|
|
catalog = "unknown_catalog"
|
|
elseif typ >= 1 and typ <= 3 then
|
|
catalog = "game_catalog"
|
|
elseif typ >= 4 and typ <= 6 then
|
|
catalog = "pc_catalog"
|
|
elseif typ >= 7 and typ <= 8 then
|
|
catalog = "phone_catalog"
|
|
elseif typ >= 20 and typ <= 21 then
|
|
catalog = "vr_catalog"
|
|
else
|
|
catalog = "unknown_catalog"
|
|
end
|
|
-- device type
|
|
device_typ = device:taboption(catalog, ListValue, key, item.name)
|
|
device_typ:value("0", "None")
|
|
device_typ:value("1", "XBox")
|
|
device_typ:value("2", "Switch")
|
|
device_typ:value("3", "Play Station")
|
|
device_typ:value("4", "Steam Deck")
|
|
device_typ:value("5", "Windows")
|
|
device_typ:value("6", "MacBook")
|
|
device_typ:value("7", "Android")
|
|
device_typ:value("8", "iPhone")
|
|
device_typ:value("20", "Oculus")
|
|
device_typ:value("21", "HTC Vive")
|
|
device_typ:value("22", "Pico")
|
|
device_typ:value("9", "Unknown")
|
|
end
|
|
|
|
-- set
|
|
device.write = function()
|
|
util.exec("/etc/init.d/acc restart")
|
|
end
|
|
|
|
return m |