libs/sys: whitespace fix
[project/luci.git] / libs / sys / luasrc / sys.lua
index 2edb8f0..b7e374d 100644 (file)
@@ -142,7 +142,7 @@ end
 -- @return             String containing the contents of given the URL
 function httpget(url, stream, target)
        if not target then
-               local source = stream and io.open or luci.util.exec
+               local source = stream and io.popen or luci.util.exec
                return source("wget -qO- '"..url:gsub("'", "").."'")
        else
                return os.execute("wget -qO '%s' '%s'" %
@@ -175,27 +175,24 @@ end
 -- @return     String containing the memory used for buffering in kB
 -- @return     String containing the free memory amount in kB
 function sysinfo()
-       local c1 = "cat /proc/cpuinfo|grep system\\ typ|cut -d: -f2 2>/dev/null"
-       local c2 = "uname -m 2>/dev/null"
-       local c3 = "cat /proc/cpuinfo|grep model\\ name|cut -d: -f2 2>/dev/null"
-       local c4 = "cat /proc/cpuinfo|grep cpu\\ model|cut -d: -f2 2>/dev/null"
-       local c5 = "cat /proc/meminfo|grep MemTotal|awk {' print $2 '} 2>/dev/null"
-       local c6 = "cat /proc/meminfo|grep ^Cached|awk {' print $2 '} 2>/dev/null"
-       local c7 = "cat /proc/meminfo|grep MemFree|awk {' print $2 '} 2>/dev/null"
-       local c8 = "cat /proc/meminfo|grep Buffers|awk {' print $2 '} 2>/dev/null"
-
-       local system = luci.util.trim(luci.util.exec(c1))
+       local cpuinfo = luci.fs.readfile("/proc/cpuinfo")
+       local meminfo = luci.fs.readfile("/proc/meminfo")
+
+       local system = cpuinfo:match("system typ.-:%s*([^\n]+)")
        local model = ""
-       local memtotal = tonumber(luci.util.trim(luci.util.exec(c5)))
-       local memcached = tonumber(luci.util.trim(luci.util.exec(c6)))
-       local memfree = tonumber(luci.util.trim(luci.util.exec(c7)))
-       local membuffers = tonumber(luci.util.trim(luci.util.exec(c8)))
-
-       if system == "" then
-               system = luci.util.trim(luci.util.exec(c2))
-               model = luci.util.trim(luci.util.exec(c3))
+       local memtotal = tonumber(meminfo:match("MemTotal:%s*(%d+)"))
+       local memcached = tonumber(meminfo:match("\nCached:%s*(%d+)"))
+       local memfree = tonumber(meminfo:match("MemFree:%s*(%d+)"))
+       local membuffers = tonumber(meminfo:match("Buffers:%s*(%d+)"))
+
+       if not system then
+               system = posix.uname("%m")
+               model = cpuinfo:match("model name.-:%s*([^\n]+)")
+               if not model then
+                       model = cpuinfo:match("Processor.-:%s*([^\n]+)")
+               end
        else
-               model = luci.util.trim(luci.util.exec(c4))
+               model = cpuinfo:match("cpu model.-:%s*([^\n]+)")
        end
 
        return system, model, memtotal, memcached, membuffers, memfree
@@ -207,6 +204,12 @@ function syslog()
        return luci.util.exec("logread")
 end
 
+--- Retrieves the output of the "dmesg" command.
+-- @return     String containing the current log buffer
+function dmesg()
+       return luci.util.exec("dmesg")
+end
+
 --- Generates a random id with specified length.
 -- @param bytes        Number of bytes for the unique id
 -- @return             String containing hex encoded id
@@ -358,6 +361,53 @@ function net.routes()
        return _parse_delimited_table(io.lines("/proc/net/route"))
 end
 
+--- Returns the current ipv6 kernel routing table entries.
+-- @return     Table of tables with properties of the corresponding routes.
+--                     The following fields are defined for route entry tables:
+--                     { "src_ip", "src_prefix", "dst_ip", "dst_prefix", "nexthop_ip",
+--            "metric", "refcount", "usecount", "flags", "device" }
+function net.routes6()
+       local routes = { }
+
+       for line in io.lines("/proc/net/ipv6_route") do
+
+               local dst_ip, dst_prefix, src_ip, src_prefix, nexthop,
+                         metric, refcnt, usecnt, flags, dev = line:match(
+                       "([a-f0-9]+) ([a-f0-9]+) " ..
+                       "([a-f0-9]+) ([a-f0-9]+) " ..
+                       "([a-f0-9]+) ([a-f0-9]+) " ..
+                       "([a-f0-9]+) ([a-f0-9]+) " ..
+                       "([^%s]+) +([^%s]+)"
+               )
+
+               src_ip = luci.ip.Hex(
+                       src_ip, tonumber(src_prefix, 16),
+                       luci.ip.FAMILY_INET6, false
+               )
+
+               dst_ip = luci.ip.Hex(
+                       dst_ip, tonumber(dst_prefix, 16),
+                       luci.ip.FAMILY_INET6, false
+               )
+
+               nexthop = luci.ip.Hex( nexthop, 128, luci.ip.FAMILY_INET6, false )
+
+               routes[#routes+1] = {
+                       src_ip     = src_ip:host():string(),
+                       src_prefix = src_ip:prefix(),
+                       dst_ip     = dst_ip:host():string(),
+                       dst_prefix = dst_ip:prefix(),
+                       nexthop_ip = nexthop:string(),
+                       metric     = tonumber(metric, 16),
+                       refcount   = tonumber(refcnt, 16),
+                       usecount   = tonumber(usecnt, 16),
+                       flags      = tonumber(flags), -- hex?
+                       device     = dev
+               }
+       end
+
+       return routes
+end
 
 --- Tests whether the given host responds to ping probes.
 -- @param host String containing a hostname or IPv4 address