リンクを踏んで適時補完...
1. iwlwifi の設定
こことかここを参考に.
- 無線関連のパラメータ一覧の表示
- # modinfo iwlwifi
- 現在のパラメータの表示
- # cat /sys/module/iwlwifi/parameters/11n_disable
- 上は,フレームアグリゲーションの有無
- parameters以下は,必要に応じて変更する
- パラメータの変更
例:フレームアグリゲーションの無効化 - # echo "options iwlwifi 11n_disable=1" > /etc/modprobe.d/iwlwifi.conf
- # reboot
- 必要に応じて iwlwifi.conf を編集,再起動する
- フレームアグリゲーションについて
ここを参考に.
- 使用するツール:trace-cmd
- # yum install trace-cmd
- 使用例
- # trace-cmd record -e iwlwifi_msg ping google.com -c 1
- ping 開始から終了時までのデバッグログを出力
- カレントディレクトリにtrace.dat が形成される
- # trace-cmd report trace.dat| less
- たくさんログが吐き出されるため,必要なものだけ抽出する
- trace-cmd report | grep "LONG\|SUCCESS\|retries" | less
- 送信完了処理で破棄するフレームの送信結果とMACヘッダのシーケンス番号を出力する
- FW,HW,ドライバのみデバッグするならば,trace-cmd で事が足りると思う.
→パケットの情報を見るならデフォルトのままでは不十分... - 送信時,送信完了時には,処理中のパケットのMACのシーケンス番号のみ出力される
- MACだけの情報だとSrc, Dst の端末でWiresharkを使ったときにパケットの対応付けが難しい(上位レイヤの情報が欲しい)
- Wireshark はEthernet以上の情報しか見れないため
- monitor mode とかOSXの診断ツール使えばIEEE802.11フレームもキャプチャ可
- モジュールに手を加えて必要な情報を取得する
→具体的には,ドライバの送信バッファ内のsk_buff 構造体からヘッダやデータなどの値を取得する - (準備) カーネルモジュールのコンパイル
- (準備) 全体をコンパイルする場合はこっち(Fedora 23)
→config を iwlwifi と mac80211のデバッグのために変更するならば以下の方法 - # su -
- # wget http://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.5.5.tar.gz
- # cat <<"EOF">> /etc/dnf/dnf.conf
- # exclude=kernel*
- EOF
- sudo cp /boot/config-4.5.5-300.fc23.x86_64 linux-4.5.5/.config
- dnf install -y openssl-devel ncurses-devel
- cd linux-4.5.5
- make menuconfig
- make
- make modules_install
- make install
- モジュールのコードを書き換える
- vi linux-4.5.5/driver/net/wireless/intel/iwlwifi/mvm/tx.c
- ここを書き換えるもしくは,マクロを新たに追加する
- 水平タブ(\t)の影響でノートPCだとログが改行して表示されるため\tを消す
- ほかにも出力される情報の中で冗長なものは,排除する
- retries :フレームのMAC層における再送回数(実際にはackが返ってくるまでに再送した回数?(15回でリセット?))
- TCPに関する情報を出力する
- シーケンス番号:ntohl(tcp_hdr(skb)->seq)
- ポート番号:忘れた
- パケット長:skb->len
- ヘッダ長:skb_headlen(skb)
- データ長:skb->data_len
- コンパイル・アンロード・ロード
- # make M=driver/net/wireless/intel/iwlwifi/
- # rmmod iwlmvm
- # insmod linux-4.5.5/driver/net/wireless/intel/iwlwifi/mvm/iwlmvm.ko
- 書き換えてから trace-cmd を再度実行
今回は,送信完了処理で呼ばれるデバッグ用の関数をヘッダ情報も出力させるように変更した.
毎回コンパイルが面倒ならばSystemTapとか使えば多少楽になるかも...
0 件のコメント:
コメントを投稿