ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

モバイルアドホックネットワークコミュのトレースファイル解析用スクリプト

  • mixiチェック
  • このエントリーをはてなブックマークに追加
今,卒研でNS-2を触ってます.
でも,アドホック(というか無線)向けのシナリオファイルの書き方とか,トレースファイルの解析の方法とかが示されたサイトってのもないものですね.

一応,シナリオファイルを解析するためのシェルスクリプトを書いてみました.
基本はgrepなので,シビアな使いかたをすると無理が祟るかもしれませんw
どんどん盛り上げましょうよ♪

ツッコミとかこうすれば良いよ!とか待ってます.

1. throughput.sh
使いかた:throughput.sh <トレースファイル> <ターゲットのノード> <シミュレーション時間>
※よくよく考えると,厳密ではないかもしれません
http://netlab.ce.nihon-u.ac.jp/~sue/を参考にしました

##### ソースここから #####
#!/bin/sh
#######################################
#
# 使用方法 : ./throughput.sh <logfile> <target-number> <simulation-time>
#
### エラー:引数が少ない
if [ $# -lt 3 ]
then
    echo "このスクリプトはスループットを計算します";
    echo "$0 <ログファイル> <ターゲットノード番号> <シミュレーション時間>";
    exit;
fi

### エラー:ログファイルが存在しない
### 存在する場合は正常動作
if [ -e $1 ]
then
    TRACE_LOG=$1
else
    echo "error: file $1 is not exist...";
    exit;
fi

### ターゲットノードが正しい値かどうかの検証は行われない
NODE=$2
### シミュレーション時間が正しい値かどうかの検証は行われない
TIME=$3

### 解析結果の説明


#######################################
#
# 主処理
#
# RP:recieved packets
#     パケットタイプがAODVでないことしか見ていないので注意
# SZ:packet size
#     パケットサイズは空白で区切られたCSV形式の9番目のフィールドにあることが前提である
# TP:throughput
#     スループットは以下の計算式で求められる
#     TP=RP*SZ*8 / TIME / 1000000[Mbps]
#     ※ 計算式はlinuxコマンド'bc'を参照のこと
#
RP=`cat ${TRACE_LOG} | grep "_$2_" | grep -i "^r" | grep -v "AODV" | wc -l`
SZ=`cat ${TRACE_LOG} | grep "_$2_" | grep -i "^r" | grep -v "AODV" | cut -f 9 -d ' ' | uniq`
TP=`echo "scale=3;${RP}*${SZ}*8/${TIME}/1000" | bc`
echo "通信速度は ${TP} [Kbps]"
##### ソースここまで #####




2. trace.sh
使いかた:trace.sh <トレースファイル> <調査したいノード番号の最大値>
※ノード数はシナリオファイルで指定したものを使ってください
※ (grepで見ているだけなので,無いノードはパケット数が0にしかなりません)
※パケット数はノード0から<調査したいノード番号の最大値>まで調査されます.
※throughput.shを作成する過程で生成されたものですが,ちょっとした確認に使える・・?


##### ソースここから #####
#!/bin/sh
#######################################
#
# 使用方法 : ./trace.sh <logfile>
#
### エラー:引数が少ない
if [ $# -lt 2 ]
then
   echo "$0 <ログファイル> <ノード数>";
   exit;
fi

### エラー:ログファイルが存在しない
### 存在する場合は正常動作
if [ -e $1 ]
then
   TRACE_LOG=$1
else
   echo "error: file $1 is not exist...";
   exit;
fi

### ノード数が正しい値かどうかの検証は行われない
NODE=$2

### 解析結果の説明
echo "RTR(Router Trace) : ネットワーク層のパケット";
echo "AGT(Agent Trace) : トランスポート層のパケット";

i=0
while test $i -le ${NODE};
do
   echo "-----analysis NODE_($i)-----"

   for LAYER in RTR AGT;
   do
       echo " ${LAYER} ::";
       R=`cat ${TRACE_LOG} | grep "_${i}_" | grep -i "^r" | grep "${LAYER}" | wc -l`
       echo "    recieved packets : ${R}";
       S=`cat ${TRACE_LOG} | grep "_${i}_" | grep -i "^s" | grep "${LAYER}" | wc -l`
       echo "    sent    packets : ${S}";
       D=`cat ${TRACE_LOG} | grep "_${i}_" | grep -i "^d" | grep "${LAYER}" | wc -l`
       echo "    drop    packets : ${D}";
       F=`cat ${TRACE_LOG} | grep "_${i}_" | grep -i "^f" | grep "${LAYER}" | wc -l`
       echo "    forward packets : ${F}";

       if [ ${LAYER} = RTR ]
       then
          RReq=`cat ${TRACE_LOG} | grep "_${i}_" | grep -i "^r" | grep -i "REQUEST" | wc -l`
          echo "       received REQUEST : $RReq";
          SReq=`cat ${TRACE_LOG} | grep "_${i}_" | grep -i "^s" | grep -i "REQUEST" | wc -l`
          echo "       sent    REQUEST : $SReq";
          RRep=`cat ${TRACE_LOG} | grep "_${i}_" | grep -i "^r" | grep -i "REPLY" | wc -l`
          echo "       received REPLY   : $RRep";
          SRep=`cat ${TRACE_LOG} | grep "_${i}_" | grep -i "^s" | grep -i "REPLY" | wc -l`
          echo "       sent    REPLY   : $SRep";
      fi
   done;

   i=`expr $i + 1`
done;
##### ソースここまで #####

コメント(3)

スレ主です.
コピペして使えるようにインデントとかも&nbsp;に変換して投稿したのですが,逆に見づらい部分がありますね・・

次のURLに置いておきますので,ご自由にどうぞ.
http://edu.hydrangeas.mydns.jp/w/index.php?plugin=attach&refer=test%2Fbase&openfile=throughput.sh
http://edu.hydrangeas.mydns.jp/w/index.php?plugin=attach&refer=test%2Fbase&openfile=trace.sh


#そろそろNS-3の時代だよなぁ・・
2: 闇鬼将軍・曹圭 さん

IPだと,トレースファイルの形式が違うと思いますが(違うよね?w),ちょこちょこいじれば使えると思います.
#反応があってよかったーw

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

モバイルアドホックネットワーク 更新情報

モバイルアドホックネットワークのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。