2023-10-09 12:14:20 +08:00

50 lines
1.1 KiB
Lua
Executable File

#!/usr/bin/lua
-- Copyright (C) 2022 Tianling Shen <cnsztl@immortalwrt.org>
local util = require "luci.util"
local jsonc = require "luci.jsonc"
local eth_info = {}
local ifname, stat
for ifname, stat in pairs(util.ubus("network.device", "status")) do
if ifname:match("^(eth%d+)$") == ifname then
local status, speed, duplex
status = stat.carrier and "yes" or "no"
if status == "yes" and stat.speed == nil then
speed = "-"
elseif stat.speed == nil or stat.speed:sub(1, 1) == "-" then
speed = "-"
else
speed = stat.speed:sub(1, -2) .. "Mb/s"
end
if not stat.carrier then
duplex = "-"
elseif stat.speed == nil then
duplex = "-"
elseif stat.speed:sub(-1) == "F" then
duplex = "Full"
else
duplex = "Half"
end
eth_info[#eth_info + 1] = {
name = ifname,
status = status,
speed = speed,
duplex = duplex
}
end
end
table.sort(
eth_info,
function(a, b)
return a.name < b.name
end
)
print(jsonc.stringify(eth_info))