Developing lightweight computation at the DSG edge

qmpinfo.lua 3.26 KB
Newer Older
1
#!/usr/bin/lua
2
--[[
3
    Copyright (C) 2011 Fundacio Privada per a la Xarxa Oberta, Lliure i Neutral guifi.net
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

    The full GNU General Public License is included in this distribution in
    the file called "COPYING".
--]]
22
23
24
25
26
27
28
29
30
31
32
33

iwinfo = require "iwinfo"

qmpinfo = {}

function qmpinfo.get_modes(dev)
	local iw = iwinfo[iwinfo.type(dev)]
	local ma = "" -- modes avaiable
	return iw.hwmodelist(dev)
	
end

34
35
36
37
38
39
40
41
42
43
44
45

function qmpinfo.get_txpower(dev)
	local iw = iwinfo[iwinfo.type(dev)]
	local txp = iw.txpwrlist(dev)
	local txpower_supported = {}
	for _,v in ipairs(txp) do
		table.insert(txpower_supported,v.dbm)
	end
	return txpower_supported
	
end

46
function qmpinfo.get_channels(dev)
47
48
49
50
51
52
53
54
55
56
57
58
59
	local clist = {} -- output channel list      
	local iw = iwinfo[iwinfo.type(dev)]            
	local ch = {}                                            

	-- if there are not wireless cards, returning a dummy value                                                 
	if iw == nil then                            
		ch.channel=0                           
		ch.adhoc=false                       
		ch.ht40p=false                       
		ch.ht40m=false                       
		table.insert(clist,ch)                                                                                           
		return clist                         
	end                                          
60
             
61
62
63
64
65
	local freqs = iw.freqlist(dev) --freqs list
	local c -- current channel
	local nc = 0 -- next channel
	local pc = 0 -- previous channel
	local adhoc
66
67
	local ht40_support = qmpinfo.get_modes(dev).n
	
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114

	for i,f in ipairs(freqs) do
		c = f.channel
		ch = {}
		ch.channel = c
		ch.ht40p = false
		ch.ht40m = false
		ch.adhoc = false

		-- 2.4Ghz band
		if c < 15 then
			if c < 4 then 
				ch.ht40p = true
				ch.adhoc = true 
			
			elseif c < 10 then 
				ch.ht40m = true  
				ch.ht40p = true
				ch.adhoc = true
			else 
				ch.ht40m = true
				ch.adhoc = true
			end
		  
		-- 5Ghz band
		elseif c > 14 then
			if #freqs == i then nc = nil
			else nc = freqs[i+1].channel
			end

			if i == 1 then pc = nil
			else pc = freqs[i-1].channel
			end

			if nc ~= nil and nc-c == 4 then 
				ch.ht40p = true 
			end
	
			if pc ~= nil and c-pc == 4 then
				ch.ht40m = true
			end

			adhoc = os.execute("iw list | grep \"no IBSS\" | grep -v disabled | grep -q " .. f.mhz .. " 2>/dev/null")
			if adhoc ~= 0 then
				ch.adhoc = true
			end
		end
115
116
117
118
119
120
121

		-- If the device does not support ht40, both vars (+/-) are false
		if not ht40_support then
			ch.ht40p = false
			ch.ht40m = false
		end

122
		table.insert(clist,ch)
123

124
125
126
127
128
	end	
	return clist
end

return qmpinfo