2017-04-21 6 views
0

OpenWrtを初めて使用しました。私はwifiをスキャンするためにiwinfo libを使用しています。私のコードで複数回スキャンするまでうまくいきました。最初はこのライブラリを使って間違っていると思うので、iwinfoライブラリからcliプログラムを修正して、それを2回スキャンさせようとしました。ここではcliコードの主な機能がありますが、これは一度しか動作しません。 print_scanlist関数の実装は、cliプログラムと同じです。iwinfoライブラリを使用したスキャン結果がありません

int main() { 
    const struct iwinfo_ops *iw = iwinfo_backend("wlan0"); 
    print_scanlist(iw, "wlan0"); 
    print_scanlist(iw, "wlan0"); 
    iwinfo_finish(); 
    return 0; 
} 

最初は、ハードウェアが短時間でスキャンすることができなかったからだと思います。しかし、プログラムを2回実行すると、最初の機能のために機能します。今私はなぜこれが起こっているのか分かりません、なぜ誰が知っていますか?

+0

印刷されるエラーとバックエンドはどちらですか?あなたは他のバックエンドからカードを試しましたか? – lossleader

答えて

0

バックエンドとしてnl80211を使用しているので、iwinfoのソースコードを掘り下げました。 WPAサプリカントを使用していることがわかりました。スキャン機能では、ファンクション名はnl80211_get_scanlist_wpactlと呼ばれ、WPAサプリカントに接続し、スキャンしてその結果を得ることを目的としています。

iwinfoの手順は、問題がiwinfoしたがって、あなたが何かを行うことができる習慣次回DETACHに電話をするのを忘れたです

send(sock, "ATTACH", 6, 0); 
send(sock, "SCAN", 4, 0); 
send(sock, "SCAN_RESULTS", 12, 0); 

です。だから私がsend(sock, "DETACH", 6, 0)を追加した後、私はそれを働かせました。ありがとうございます

0

これらのオプションのいずれか(多分両方)が動作するほとんどわからI`m:重要これは `

int main() { 
    const struct iwinfo_ops *iw = iwinfo_backend("wlan0"); 
    print_scanlist(iw, "wlan0"); 
    iwinfo_finish(); 
    print_scanlist(iw, "wlan0"); 
    iwinfo_finish(); 
    return 0; 
} 

int main() { 
    print_scanlist(iwinfo_backend("wlan0"), "wlan0"); 
    iwinfo_finish(); 
    print_scanlist(iwinfo_backend("wlan0"), "wlan0"); 
    iwinfo_finish(); 
    return 0; 
} 

iwはある種のハンドルではないことを理解するために、バックエンドライブラリに格納されている関数のリストへのポインタに過ぎません。リストはハードコードされており、実行時に変更することはできません。

関連する問題