From 1ec71bbefe7689fecb1d3dfb4c0a37791f298712 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sun, 6 May 2012 18:04:45 +0000 Subject: [PATCH] modules/admin-full: add mac address suggestions to mac filter settings --- .../luasrc/model/cbi/admin_network/wifi.lua | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua index b007c8666..334d9f20f 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -105,6 +105,29 @@ local function txpower_current(pwr, list) return (list[#list] and list[#list].driver_dbm) or pwr or 0 end +local function arplist(opt) + local _, e, mac, ip, name + local arp = { } + + for _, e in ipairs(luci.sys.net.arptable()) do + arp[e["HW address"]:upper()] = { e["IP address"] } + end + + for e in io.lines("/etc/ethers") do + mac, ip = e:match("^([a-f0-9]%S+) (%S+)") + if mac and ip then arp[mac:upper()] = { ip } end + end + + for e in io.lines("/var/dhcp.leases") do + mac, ip, name = e:match("^%d+ (%S+) (%S+) (%S+)") + if mac and ip then arp[mac:upper()] = { ip, name ~= "*" and name } end + end + + for mac, e in luci.util.kspairs(arp) do + opt:value(mac, "%s (%s)" %{ mac, e[2] or e[1] }) + end +end + local iw = luci.sys.wifi.getiwinfo(arg[1]) local hw_modes = iw.hwmodelist or { } local tx_power_list = txpower_list(iw) @@ -437,6 +460,7 @@ if hwtype == "mac80211" then ml.datatype = "macaddr" ml:depends({macfilter="allow"}) ml:depends({macfilter="deny"}) + arplist(ml) mode:value("ap-wds", "%s (%s)" % {translate("Access Point"), translate("WDS")}) mode:value("sta-wds", "%s (%s)" % {translate("Client"), translate("WDS")}) @@ -536,6 +560,7 @@ if hwtype == "atheros" then ml.datatype = "macaddr" ml:depends({macpolicy="allow"}) ml:depends({macpolicy="deny"}) + arplist(ml) s:taboption("advanced", Value, "rate", translate("Transmission Rate")) s:taboption("advanced", Value, "mcast_rate", translate("Multicast Rate")) @@ -609,6 +634,7 @@ if hwtype == "prism2" then ml = s:taboption("macfilter", DynamicList, "maclist", translate("MAC-List")) ml:depends({macpolicy="allow"}) ml:depends({macpolicy="deny"}) + arplist(ml) s:taboption("advanced", Value, "rate", translate("Transmission Rate")) s:taboption("advanced", Value, "frag", translate("Fragmentation Threshold")) -- 2.25.1