读书人

hostapd 收发速率及信号强度个人懂得

发布时间: 2012-09-02 21:00:34 作者: rapoo

hostapd 收发速率及信号强度,个人理解,请怀疑式阅读。


在hostapd中怎样能够截取到通过hostapd发送出去的数据的流量(KB/s)以及发射的功率。我在hostapd项目包下的/AP文件夹下的hostapd。h中看到了 hostapd的DATA—RATE 以及FRAME—INFO的结构体的封装,请问您怎么样把他们取出来呢?谢谢~


以上是一位网友的来信,

其实这些超出了我的涉猎范围, 我前两年做的主要是AAA方面的EAP,即backend server部分,相对简单,对于相当于nas的hostapd以及终端wpa_supplicant涉及很少,所以有些问题实难回答。


上面的DATA_RATE , FRAME_INFO 横杠分割的写法, 看着好不舒服。


我试着分析下代码,以下是个人理解, 请有需要的务必批判着看。


【1】收发数据的字节数及即时速率

关于收发数据的字节数及即时速率, 这个显然要从无线模块获取,即其驱动入手, 打开driver_hostap.c(其实其他也可,随便),看函数清单,瞄一眼就看到, 尚不确定, 看起实现中的rx_packets, tx_packets, rx_bytes, tx_bytes, 知道很有可能是他。


hostap_read_sta_data由struct wpa_driver_ops中的如下回调函数的实现:


至此收发字节数可知, 两次间的差值与时间即可计算收发速率。

另外也可参考下hostap_sta_driver_data中的 unsigned long current_tx_rate; 自己试验下吧。

int hostapd_get_hw_features(struct hostapd_iface *iface){struct hostapd_data *hapd = iface->bss[0];int ret = 0, i, j;u16 num_modes, flags;struct hostapd_hw_modes *modes;if (hostapd_drv_none(hapd))return -1;modes = hostapd_get_hw_feature_data(hapd, &num_modes, &flags);if (modes == NULL) {hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE80211,       HOSTAPD_LEVEL_DEBUG,       "Fetching hardware channel/rate support not "       "supported.");return -1;}iface->hw_flags = flags;hostapd_free_hw_features(iface->hw_features, iface->num_hw_features);iface->hw_features = modes;iface->num_hw_features = num_modes;for (i = 0; i < num_modes; i++) {struct hostapd_hw_modes *feature = &modes[i];/* set flag for channels we can use in current regulatory * domain */for (j = 0; j < feature->num_channels; j++) {/* * Disable all channels that are marked not to allow * IBSS operation or active scanning. In addition, * disable all channels that require radar detection, * since that (in addition to full DFS) is not yet * supported. */if (feature->channels[j].flag &    (HOSTAPD_CHAN_NO_IBSS |     HOSTAPD_CHAN_PASSIVE_SCAN |     HOSTAPD_CHAN_RADAR))feature->channels[j].flag |=HOSTAPD_CHAN_DISABLED;if (feature->channels[j].flag & HOSTAPD_CHAN_DISABLED)continue;wpa_printf(MSG_MSGDUMP, "Allowed channel: mode=%d "   "chan=%d freq=%d MHz max_tx_power=%d dBm",   feature->mode,   feature->channels[j].chan,   feature->channels[j].freq,   feature->channels[j].max_tx_power);}}return ret;}

这也是自己设置的些值吧, 毕竟是作为发射端, 值全靠设置及硬件支持。

我认为信号强度的即时值对终端才有意义, 譬如到ap的距离, 环境物体的反射等。


【4】代码中似乎还有扫描的其他ap的信息, 根据socket收发的frame进行解读, 没细看。


以上是个人理解, 请有需要的务必批判着看。

















读书人网 >操作系统

热点推荐