diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/core/luasrc/model/network.lua | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/libs/core/luasrc/model/network.lua b/libs/core/luasrc/model/network.lua index a85def89a..0267bb437 100644 --- a/libs/core/luasrc/model/network.lua +++ b/libs/core/luasrc/model/network.lua @@ -20,6 +20,7 @@ limitations under the License. local type, next, pairs, ipairs, loadfile, table, tonumber, math, i18n = type, next, pairs, ipairs, loadfile, table, tonumber, math, luci.i18n +local error = error local require = require local nxo = require "nixio" @@ -449,6 +450,7 @@ function get_interfaces(self) local ifaces = { } local seen = { } local nfs = { } + local baseof = { } -- find normal interfaces _uci_real:foreach("network", "interface", @@ -470,9 +472,26 @@ function get_interfaces(self) -- find vlan interfaces _uci_real:foreach("network", "switch_vlan", function(s) - local base = s.device or "-" - if not base:match("^eth%d") then - base = "eth0" + if not s.device then + return + end + + local base = baseof[s.device] + if not base then + if not s.device:match("^eth%d") then + local l + for l in utl.execi("swconfig dev %q help 2>/dev/null" % s.device) do + if not base then + base = l:match("^%w+: (%w+)") + end + end + if not base or not base:match("^eth%d") then + base = "eth0" + end + else + base = s.device + end + baseof[s.device] = base end local vid = tonumber(s.vid or s.vlan) |