ar71xx上WiFi探针的实现

1, 修改无线驱动mac80211文件夹中的rx.c文件,获取probe帧的mac。
vim build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/compat-wireless-2016-01-10/net/mac80211/rx.c

找到 static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
                                         struct sk_buff *skb)函数进行修改
ar71xx上WiFi探针的实现
上图红框中的代码是添加的,struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);用于获取sta设备状态,这里增加这行代码是为了获取status->signal,也就是信号强度。
get_maclist是我自己写的一个函数,用于处理hdr->addr2(probe帧中取得的mac)、status->signal。

2, mac80211文件夹下编写csx_netlink.c、csx_netlink.h两个文件,利用genetlink将mac数据由内核层传送到用户层(当然你也可以使用其他方法来实现),以下为主要部分代码:

初始化
ar71xx上WiFi探针的实现

数据接收与发送
ar71xx上WiFi探针的实现

3,修改mac80211文件夹中的 main.c,初始化时加入对csx_netlink的初始化
ar71xx上WiFi探针的实现

4,修改mac80211文件夹中的 Makefile,编译csx_netlink
ar71xx上WiFi探针的实现

PS:
1, genetlink的具体实现请参考上一篇文章
2, wifi驱动内核源码下载地址: http://download.csdn.net/download/caoshunxin01/9990463 (需要积分)
压缩包内容 :
  ar71xx上WiFi探针的实现
3, 用户空间示例程序:  https://gitee.com/caosx/maclist.git   (开源)

你可能感兴趣的:(openwrt)