From c7a95b6683078c1800087446a1c1ca660bb1dec0 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sun, 9 Oct 2011 22:02:46 +0000 Subject: [PATCH] libs/core: add more heuristics to infer device name from switch name --- libs/core/luasrc/model/network.lua | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/libs/core/luasrc/model/network.lua b/libs/core/luasrc/model/network.lua index a85def89a2..0267bb437c 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) -- 2.30.2