您的位置:首页 > 运维架构

open部分内容4--mode=master

2014-03-18 14:49 190 查看
页面里模式显示不正确,如何修改

在wifi_overview.htm有:

'<strong><%:Mode%>:</strong> %s<br />' +

iw.ssid, iw.mode, iw.bssid,

<strong><%:Mode%>:</strong>显示内容对应feeds\luci\po\zh_CN、base.po

 iw.mode才是关键,即重点在于iw携带的信息,但在wifi_overview.htm里什么也没找到

那么找wifi.lua吧,有local iw = luci.sys.wifi.getiwinfo(arg[1])

继续搜getiwinfo,在sys.lua里有function wifi.getiwinfo(ifname)

但是这个函数看的不太懂,LUCI 网上资料太少了,语法介绍的也少,不够应对这个函数

这里面有关键的一句local stat, iwinfo = pcall(require, "iwinfo"),什么意思呢

pcall说明:

如果在Lua中需要处理错误,需要使用pcall函数封装你的代码。

假定你想运行一段Lua代码,这段代码运行过程中可以捕捉所有的异常和错误。

第一步:将这段代码封装在一个函数内

第二步:使用pcall调用这个函数

require说明:

Lua 提供一个名为 require 的函数来加载模块,使用也很简单,它只有一个参数,这个参数就是要指定加载的模块名,例如:

require("<模块名>")

 module.lua

然后会返回一个由模块常量或函数组成的 table,并且还会定义一个包含该 table 的全局变量。

或者给加载的模块定义一个别名变量,方便调用

大致推测就是跟iwinfo相关的信息都收集起来,有:

·/package/network/utils/iwinfo

./feeds/luci/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua

./feeds/luci/applications/luci-statistics/luasrc/model/cbi/luci_statistics/iwinfo.lua

但是后面两个iwinfo.lua又看不懂,郁闷,不过iwinfo文件夹里面的东西就是好东西了

简单分析一下iwinfo里面的内容,文件有点多,而且有些c文件里面的内容很相似,这个过程有点复杂

分析和学习到的知识:

来自http://blog.csdn.net/dickjtk/article/details/11862815有:

 Linux无线驱动接口有两种标准接口,wext(Wireless Extensions无线扩展接口)和nl80211接口

当时无线驱动的协议栈软件比较多,如开源项目hostap,madwifi,mac80211,ieee80211协议栈以及无线芯片厂商自己实现的协议栈,基本都使用wext接口。wext接口也逐渐成为一套标准的接口。在linux-2.6.18版本,wext和mac80211协议栈并入内核,成为linux kernel的一部分。wext接口随着802.11协议从802.11,802.11b,802.11a/g的发展,,其API也不断增加,伴随着就是其wext的版本号不断变化。

wext的接口实现上,应用层采用ioctl方式访问驱动,设置无线参数或者获取无线参数,配置无线驱动进行联网操作,但在linux-2.6.25(记得不是很清楚了,懒得确定了)之后,wext API接口版本停止在V22就不再进行更新了。而替代其的是nl80211接口

....
那么现在可以初步断定,wl wext madwifi  nl80211,这四个是无线驱动接口,那么到底用的死哪一个呢?

看Makefile ,有

ifneq ($(filter wl,$(IWINFO_BACKENDS)),)
IWINFO_CFLAGS  += -DUSE_WL
IWINFO_LIB_OBJ += iwinfo_wl.o
endif

ifneq ($(filter madwifi,$(IWINFO_BACKENDS)),)
IWINFO_CFLAGS  += -DUSE_MADWIFI
IWINFO_LIB_OBJ += iwinfo_madwifi.o
endif

ifneq ($(filter nl80211,$(IWINFO_BACKENDS)),)
IWINFO_CFLAGS      += -DUSE_NL80211
IWINFO_CLI_LDFLAGS += -lnl-tiny
IWINFO_LIB_LDFLAGS += -lnl-tiny
IWINFO_LIB_OBJ     += iwinfo_nl80211.o
endif


也没确定是哪一个,不过确认刚刚wl wext madwifi  nl80211,这四个是无线驱动接口,可能只用了其中一个。

再找相关资料有:

(Linux的网络架构,图片上传太麻烦了,不搞了)

再进一步实验修改,确认使用的wext的无线驱动接口

那么iwinfo_wext.c就很重要了有:

int wext_get_mode(const char *ifname, int *buf)
{
struct iwreq wrq;

if(wext_ioctl(ifname, SIOCGIWMODE, &wrq) >= 0)
{
switch(wrq.u.mode)
{
...
}}}
修改吧,OK

注意把makemenuconfig里的iwinfo选上,串口iwinfo也有打印信息出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: