summaryrefslogtreecommitdiffhomepage
path: root/libs/core/luasrc
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2011-10-09 22:02:46 +0000
committerJo-Philipp Wich <jow@openwrt.org>2011-10-09 22:02:46 +0000
commitc7a95b6683078c1800087446a1c1ca660bb1dec0 (patch)
treee8d191253d4eb7ade26b5c4d451e9d032515fe0c /libs/core/luasrc
parentce024e350a52d8e1520d10d3e5c648e44f63edfe (diff)
libs/core: add more heuristics to infer device name from switch name
Diffstat (limited to 'libs/core/luasrc')
-rw-r--r--libs/core/luasrc/model/network.lua25
1 files 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)