* ffluci.sys.net.hexip4: Added option for big endian support
authorSteven Barth <steven@midlink.org>
Tue, 22 Apr 2008 16:07:02 +0000 (16:07 +0000)
committerSteven Barth <steven@midlink.org>
Tue, 22 Apr 2008 16:07:02 +0000 (16:07 +0000)
* ffluci.cbi.TypedSection.cfgsections: Check whether there are any configuration sections before iterating
* ffluci.view.public_status.routes: Added "fix" for big endian systems

core/src/ffluci/cbi.lua
core/src/ffluci/sys.lua
module/public-core/src/view/public_status/routes.htm

index f09d48ad7a27c3eab7c02a645f8e5a6e5da55096..5b38d1b50a6e742247b3a671aca28cf0b24d2f25 100644 (file)
@@ -367,7 +367,12 @@ end
 -- Return all matching UCI sections for this TypedSection
 function TypedSection.cfgsections(self)
        local sections = {}
+       
        local map = self.map:get()
+       if not map[".order"] then
+               return sections
+       end
+       
        for i, k in pairs(map[".order"]) do
                if map[k][".type"] == self.sectiontype then
                        if self:checkscope(k) then
index c97017d8d039f5b381702225f7cf4e0264e23f31..44855f8ef392d12dce504dea882d1b3ddd1a7f87 100644 (file)
@@ -143,8 +143,8 @@ function net.routes()
        return _parse_delimited_table(io.lines("/proc/net/route"))
 end
 
--- Returns the numeric IP to a given hexstring
-function net.hexip4(hex)
+-- Returns the numeric IP to a given hexstring (little endian)
+function net.hexip4(hex, bigendian)
        if #hex ~= 8 then
                return nil
        end
@@ -152,10 +152,17 @@ function net.hexip4(hex)
        local hexdec = ffluci.bits.Hex2Dec
        
        local ip = ""
-       ip = ip .. tostring(hexdec(hex:sub(7,8))) .. "."
-       ip = ip .. tostring(hexdec(hex:sub(5,6))) .. "."
-       ip = ip .. tostring(hexdec(hex:sub(3,4))) .. "."
-       ip = ip .. tostring(hexdec(hex:sub(1,2)))
+       if bigendian then
+               ip = ip .. tostring(hexdec(hex:sub(1,2))) .. "."
+               ip = ip .. tostring(hexdec(hex:sub(3,4))) .. "."
+               ip = ip .. tostring(hexdec(hex:sub(5,6))) .. "."
+               ip = ip .. tostring(hexdec(hex:sub(7,8)))
+       else
+               ip = ip .. tostring(hexdec(hex:sub(7,8))) .. "."
+               ip = ip .. tostring(hexdec(hex:sub(5,6))) .. "."
+               ip = ip .. tostring(hexdec(hex:sub(3,4))) .. "."
+               ip = ip .. tostring(hexdec(hex:sub(1,2)))
+       end
        
        return ip
 end
index 046c789f91f5ad0215d7e086dd664d45851c36cf..156a0336fce77f9a3aec905cfb390780a270a8fa 100644 (file)
 <th><%:metric Metrik%></th>
 <th><%:iface Schnittstelle%></th>
 </tr>
-<% for i, r in pairs(ffluci.sys.net.routes()) do %>
+<%
+local routes = ffluci.sys.net.routes()
+
+-- UGLY hack is UGLY
+local be = (routes[1] and routes[1].Mask:sub(-2) == "00")
+
+for i, r in pairs(routes) do
+%>
 <tr>
-<td><%=ffluci.sys.net.hexip4(r.Destination)%></td>
-<td><%=ffluci.sys.net.hexip4(r.Mask)%></td>
-<td><%=ffluci.sys.net.hexip4(r.Gateway)%></td>
+<td><%=ffluci.sys.net.hexip4(r.Destination, be)%></td>
+<td><%=ffluci.sys.net.hexip4(r.Mask, be)%></td>
+<td><%=ffluci.sys.net.hexip4(r.Gateway, be)%></td>
 <td><%=r.Metric%></td>
 <td><%=r.Iface%></td>
 </tr>