luci-0.10: merge r7919
[project/luci.git] / contrib / package / iwinfo / src / iwinfo.lua
index bbd2ff7..8110220 100755 (executable)
@@ -24,12 +24,33 @@ end
 
 function print_info(api, dev)
        local iw = iwinfo[api]
+       local enc = iw.encryption(dev)
+
+       local function hwmode()
+               local m = iw.hwmodelist(dev)
+               if m then
+                       local s = "802.11"
+                       if m.a then s = s.."a" end
+                       if m.b then s = s.."b" end
+                       if m.g then s = s.."g" end
+                       if m.n then s = s.."n" end
+                       return s
+               else
+                       return "?"
+               end
+       end
+
+       printf("%-9s ESSID: \"%s\"",
+               dev, s(iw.ssid(dev)))
+
+       printf("          Access Point: %s",
+               s(iw.bssid(dev)))
 
-       printf("%-9s Type: %s  ESSID: \"%s\"", dev, api, iw.ssid(dev))
-       printf("          Access Point: %s", iw.bssid(dev))
+       printf("          Type: %s  HW Mode(s): %s",
+               api, hwmode())
 
        printf("          Mode: %s  Channel: %d (%.3f GHz)",
-               iw.mode(dev), iw.channel(dev), n(iw.frequency(dev)) / 1000)
+               s(iw.mode(dev)), n(iw.channel(dev)), n(iw.frequency(dev)) / 1000)
 
        printf("          Tx-Power: %s dBm  Link Quality: %s/%s",
                s(iw.txpower(dev)), s(iw.quality(dev)), s(iw.quality_max(dev)))
@@ -41,7 +62,10 @@ function print_info(api, dev)
                n(iw.bitrate(dev)) / 1000)
 
        printf("          Encryption: %s",
-               iw.encryption(dev).description)
+               s(enc and enc.description or "None"))
+
+       printf("          Supports VAPs: %s",
+               iw.mbssid_support(dev) and "yes" or "no")
 
        print("")
 end
@@ -64,7 +88,7 @@ function print_scan(api, dev)
                                s(se.signal), n(se.quality), n(se.quality_max))
 
                        printf("          Encryption: %s",
-                               s(se.encryption.description))
+                               s(se.encryption.description or "None"))
 
                        print("")
                end
@@ -84,7 +108,7 @@ function print_txpwrlist(api, dev)
                for _, pe in ipairs(pl) do
                        printf("%s%3d dBm (%4d mW)",
                                (cp == pe.dbm) and "*" or " ",
-                               pe.dbm, pe.mw)
+                               n(pe.dbm), n(pe.mw))
                end
        else
                print("No TX power information available")
@@ -101,9 +125,10 @@ function print_freqlist(api, dev)
 
        if fl and #fl > 0 then
                for _, fe in ipairs(fl) do
-                       printf("%s %.3f GHz (Channel %d)",
+                       printf("%s %.3f GHz (Channel %d)%s",
                                (cc == fe.channel) and "*" or " ",
-                               n(fe.mhz) / 1000, n(fe.channel))
+                               n(fe.mhz) / 1000, n(fe.channel),
+                               fe.restricted and " [restricted]" or "")
                end
        else
                print("No frequency information available")
@@ -115,11 +140,13 @@ end
 function print_assoclist(api, dev)
        local iw = iwinfo[api]
        local al = iw.assoclist(dev)
+       local ns = iw.noise(dev)
        local ai, ae
 
        if al and next(al) then
                for ai, ae in pairs(al) do
-                       printf("%s  %s dBm", ai, s(ae.signal))
+                       printf("%s  %s dBm / %d dBm (SNR %d)",
+                               ai, s(ae.signal), ns, n(ae.signal) - ns)
                end
        else
                print("No client connected or no information available")
@@ -128,6 +155,25 @@ function print_assoclist(api, dev)
        print("")
 end
 
+function print_countrylist(api, dev)
+       local iw = iwinfo[api]
+       local cl = iw.countrylist(dev)
+       local cc = iw.country(dev)
+       local ce
+
+       if cl and #cl > 0 then
+               for _, ce in ipairs(cl) do
+                       printf("%s %4s  %s",
+                               (cc == ce.alpha2) and "*" or " ",
+                               ce.ccode, ce.name)
+               end
+       else
+               print("No country code information available")
+       end
+
+       print("")
+end
+
 
 if #arg ~= 2 then
        print("Usage:")
@@ -136,6 +182,7 @@ if #arg ~= 2 then
        print(" iwinfo <device> txpowerlist")
        print(" iwinfo <device> freqlist")
        print(" iwinfo <device> assoclist")
+       print(" iwinfo <device> countrylist")
        os.exit(1)
 end
 
@@ -162,6 +209,9 @@ elseif arg[2]:match("^f") then
 elseif arg[2]:match("^a") then
        print_assoclist(api, dev)
 
+elseif arg[2]:match("^c") then
+       print_countrylist(api, dev)
+
 else
        print("Unknown command: " .. arg[2])
 end