Update network.lua
[project/luci.git] / modules / luci-base / luasrc / model / network.lua
index ce9259f..741daa4 100644 (file)
@@ -16,6 +16,7 @@ local utl = require "luci.util"
 local dsp = require "luci.dispatcher"
 local uci = require "luci.model.uci"
 local lng = require "luci.i18n"
 local dsp = require "luci.dispatcher"
 local uci = require "luci.model.uci"
 local lng = require "luci.i18n"
+local jsc = require "luci.jsonc"
 
 module "luci.model.network"
 
 
 module "luci.model.network"
 
@@ -473,6 +474,21 @@ function get_interface(self, i)
        end
 end
 
        end
 end
 
+local function swdev_from_board_json()
+       local boardinfo = jsc.parse(nfs.readfile("/etc/board.json") or "")
+       if type(boardinfo) == "table" and type(boardinfo.network) == "table" then
+               local net, val
+               for net, val in pairs(boardinfo.network) do
+                       if type(val) == "table" and type(val.ifname) == "string" and
+                          val.create_vlan == true
+                       then
+                               return val.ifname
+                       end
+               end
+       end
+       return nil
+end
+
 function get_interfaces(self)
        local iface
        local ifaces = { }
 function get_interfaces(self)
        local iface
        local ifaces = { }
@@ -514,7 +530,7 @@ function get_interfaces(self)
                                                end
                                        end
                                        if not base or not base:match("^eth%d") then
                                                end
                                        end
                                        if not base or not base:match("^eth%d") then
-                                               base = "eth0"
+                                               base = swdev_from_board_json() or "eth0"
                                        end
                                else
                                        base = s.device
                                        end
                                else
                                        base = s.device
@@ -650,8 +666,8 @@ function get_status_by_address(self, addr)
 end
 
 function get_wannet(self)
 end
 
 function get_wannet(self)
-       local net = self:get_status_by_route("0.0.0.0", 0)
-       return net and network(net)
+       local net, stat = self:get_status_by_route("0.0.0.0", 0)
+       return net and network(net, stat.proto)
 end
 
 function get_wandev(self)
 end
 
 function get_wandev(self)
@@ -660,8 +676,8 @@ function get_wandev(self)
 end
 
 function get_wan6net(self)
 end
 
 function get_wan6net(self)
-       local net = self:get_status_by_route("::", 0)
-       return net and network(net)
+       local net, stat = self:get_status_by_route("::", 0)
+       return net and network(net, stat.proto)
 end
 
 function get_wan6dev(self)
 end
 
 function get_wan6dev(self)