解决OpenWrt无线搜索错误bug

在升级TP-LINK 841n的OpenWrt系统到 Barrier Breaker r41988后,发现无线搜索功能失效。通过源码分析,定位到问题在于lua/luci/sys.lua模块中的iwinfo调用。修复方法包括重新编译iwinfo并更新到路由器,解决了iwinfo radio0 scan的问题,从而恢复了无线搜索功能。
摘要由CSDN通过智能技术生成

    TP-LINK 841n路由更新openwrt系统到Barrier Breaker r41988,“网络”-->“无线”-->“搜索”这个功能就不能用了,trunk版的也有这个问题。其实今年4、5月份玩HG255D路由就有这个问题,但当时的源码编译给TP-LINK 841n却没有这个问题。对这样的问题,确实比较头大,花了两天时间终于找到bug所在(只解决wr841n的,我的hg255d出问题了)。

    无线搜索bug截图(注意device参数radio0):

一番搜索后发现此页面的源码在系统的/usr/lib/lua/luci/view/admin_network/wifi_join.htm文件里,对应openwrt的源码路径为./feeds/luci/modules/admin-full/luasrc/view/admin_network/wifi_join.htm。终于要代码如下:

<%-

	local sys = require "luci.sys"
	local utl = require "luci.util"

	function guess_wifi_signal(info)
		local scale = (100 / (info.quality_max or 100) * (info.quality or 0))
		local icon

		if not info.bssid or info.bssid == "00:00:00:00:00:00" then
			icon = resource .. "/icons/signal-none.png"
		elseif scale < 15 then
			icon = resource .. "/icons/signal-0.png"
		elseif scale < 35 then
			icon = resource .. "/icons/signal-0-25.png"
		elseif scale < 55 then
			icon = resource .. "/icons/signal-25-50.png"
		elseif scale < 75 then
			icon = resource .. "/icons/signal-50-75.png"
		else
			icon = resource .. "/icons/signal-75-100.png"
		end

		return icon
	end

	function percent_wifi_signal(info)
		local qc = info.quality or 0
		local qm = info.quality_max or 0

		if info.bssid and qc > 0 and qm > 0 then
			return math.floor((100 / qm) * qc)
		else
			return 0
		end
	end

	function format_wifi_encryption(info)
		if info.wep == true then
			return "WEP"
		elseif info.wpa > 0 then
			return translatef("<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>",
				table.concat(info.pair_ciphers, ", "),
				table.concat(info.group_ciphers, ", "),
				(info.wpa == 3) and translate("mixed WPA/WPA2")
					or (info.wpa == 2 and "WPA2" or "WPA"),
				table.concat(info.auth_suites, ", ")
			)
		elseif info.enabled then
			return "<em>%s</em>" % translate("unknown")
		else
			return "<em>%s</em>" % translate("open")
		end
	end

	local dev = luci.http.formvalue("device")
	local iw = luci.sys.wifi.getiwinfo(dev)

	if not iw then
		luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless"))
		return
	end


	function scanlist(times)
		local i, k, v
		local l = { }
		local s = { }

		for i = 1, times do
			for k, v in ipairs(iw.scanlist or { }) do
				if not s[v.bssid] then
					l[#l+1] = v
					s[v.bssid] = true
				end
			end
		end

		return l
	end
-%>

<%+header%>

<h2><a 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值