ht-post.pl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:15k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # Script parses trace file for hidden terminal.
  2. # It sets colors to nodes and packets depending on their
  3. # state.
  4. # While doing carrier sense, nodes turn green. 
  5. # When nodes backoff, they turn purple.
  6. # When there is a collision at the reciever, it turns red.
  7. sub usage {
  8. print STDERR "usage: $0 <Base Trace file> <Base nam trace file> <output nam trace file>n";
  9. exit;
  10. }
  11. #@ARGV[0] - source trace file
  12. #@ARGV[1] - source nam trace file
  13. #@ARGV[2] - output nam trace file
  14. open (Source, $ARGV[0]) or die "Cannot open $ARGV[0] : $!n";
  15. open (NamSource, $ARGV[1]) or die "Cannot open $ARGV[1] : $!n";
  16. open (Destination, ">$ARGV[2]") or die "Cannot open $ARGV[2]: $!n";
  17. $namline = <NamSource>;
  18. while ($namline) { 
  19. if ($namline =~ /-i 3 -n green/) {
  20. print Destination $namline;
  21. print Destination 'v -t 0.000 -e sim_annotation 0.0 1 COLOR LEGEND : ', "n";
  22. print Destination 'v -t 0.001 -e sim_annotation 0.001 2 Nodes turn green when they are sensing carrier ', "n";
  23. print Destination 'v -t 0.002 -e sim_annotation 0.002 3 Nodes turn purple when they backoff ', "n";
  24. print Destination 'v -t 0.003 -e sim_annotation 0.003 4 Nodes turn red when there is a collision ', "n";
  25. print Destination 'v -t 0.10000000 -e set_rate_ext 0.200ms 1', "n";
  26. last;
  27. }
  28. else
  29. {
  30. print Destination $namline;
  31. $namline = <NamSource>;
  32. }
  33. }
  34. $num_mov = 0;
  35. $i =5;
  36. $last_time = 0.1000;
  37. $line = <Source>;
  38. while ($line) {
  39. if ($line =~ /SENSING_CARRIER/) {  # parses the trace file in case of a Carrier Sense event.
  40. @fields = split ' ', $line;
  41. $next_line = <Source>;
  42. if ($next_line =~ /BACKING_OFF/) { # parses trace file in case of a BACK_OFF event.
  43. $other_node = 2;
  44. if (@fields[4] == 2)
  45. {
  46. $other_node = 0;
  47. }
  48. $t = @fields[2] +0.005;
  49. print Destination 'n -t ',@fields[2], ' -s ', @fields[4], ' -S COLOR -c green -o black -I black ', "n";
  50. print Destination 'n -t ',@fields[2], ' -s ',@fields[4],' -S DLABEL -l "Carrier sense" -L ""', "n";
  51. print Destination 'v -t ',@fields[2], ' -e sim_annotation ', @fields[2],' ',$i,' CASE 1 : NO CONTENTION ',"n";
  52. $last_time = @fields[2]+ 0.00005;
  53. $i++;
  54. print Destination 'v -t ',$last_time,' -e sim_annotation ', $last_time,' ', $i,' Only Node 2 is sending data packets and therefore no contention',"n";
  55. $last_time = $last_time+0.00005;
  56. $i++;
  57. $next_duration = @fields[2] + 0.01;
  58. print Destination 'n -t ', $next_duration, ' -s ', @fields[4], ' -S COLOR -c black -o green -i black -I green ', "n";
  59. print Destination 'n -t ', $next_duration, ' -s ', @fields[4], ' -S DLABEL -l "" -L ""', "n";
  60. print Destination '+ -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  61. print Destination '- -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  62. print Destination 'h -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  63. print Destination 'r -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  64. @fields[2] = $next_duration + 0.01;
  65. print Destination 'n -t ', @fields[2], ' -s ', @fields[4], ' -S COLOR -c green -o black -i green -I black ', "n";
  66. print Destination 'n -t ', @fields[2], ' -s ', @fields[4], ' -S DLABEL -l "Carrier sense" -L ""', "n";
  67. print Destination 'v -t ', @fields[2], ' -e sim_annotation ', @fields[2],' ', $i,' CASE 2 : BACKOFF ',"n";
  68. $last_time = @fields[2]+0.00005;
  69. $i++;
  70. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 0 and Node 2 are in range of each other, they do carrier sense at slightly different times',"n";
  71. $last_time = $last_time + 0.00005;
  72. $i++;
  73. print Destination 'v -t ', $last_time, ' -e sim_annotation ', $last_time,' ', $i,' so Node 0 finds the channel not free, and thus backs off', "n";
  74. $last_time = $last_time+0.00005;
  75. $i++;
  76. $next_duration = @fields[2] + 0.01;
  77. print Destination 'n -t ', $next_duration, ' -s ', $other_node, ' -S COLOR -c green -o black -i green -I black ', "n";
  78. print Destination 'n -t ', $next_duration, ' -s ', $other_node, ' -S DLABEL -l "Carrier Sense" -L ""', "n";
  79. print Destination 'n -t ', $next_duration,' -s ', @fields[4], ' -S COLOR -c black -o green -i black -I green ', "n";
  80. print Destination 'n -t ', $next_duration, ' -s ', @fields[4], ' -S DLABEL -l "" -L ""', "n";
  81. print Destination '+ -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  82. print Destination '- -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  83. print Destination 'h -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  84. print Destination 'r -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  85. $next_duration = $next_duration + 0.005;
  86. print Destination 'n -t ', $next_duration, ' -s ', $other_node, ' -S COLOR -c purple -o green -i purple -I green ', "n";
  87. print Destination 'n -t ', $next_duration, ' -s ', $other_node, ' -S DLABEL -l "Backing off" -L ""', "n";
  88. $next_duration = $next_duration + 0.005;
  89. print Destination 'n -t ',$next_duration,' -s ', $other_node,' -S COLOR -c green -o purple -i green -I purple ', "n";
  90. print Destination 'n -t ',$next_duration,' -s ', $other_node,' -S DLABEL -l "Carrier sense" -L ""', "n"; 
  91. $next_duration = $next_duration + 0.005;
  92. print Destination 'n -t ',$next_duration,' -s ', $other_node,' -S COLOR -c black -o green -i black -I green ', "n";
  93. print Destination 'n -t ',$next_duration,' -s ', $other_node,' -S DLABEL -l "" -L ""', "n";
  94. print Destination '+ -t ', $next_duration, ' -s ', $other_node, ' -d 1 -p message -e 2500 -a 1 ', "n";
  95. print Destination '- -t ', $next_duration, ' -s ', $other_node, ' -d 1 -p message -e 2500 -a 1 ', "n";
  96. print Destination 'h -t ', $next_duration, ' -s ', $other_node, ' -d 1 -p message -e 2500 -a 1 ', "n";
  97. print Destination 'r -t ', $next_duration, ' -s ', $other_node, ' -d 1 -p message -e 2500 -a 1 ', "n";
  98. $line = <Source>;
  99. }
  100. elsif (($next_line =~ /SENSING_CARRIER/) && ($num_mov == 0)) {
  101. @new_fields = split ' ', $next_line;
  102. print Destination 'n -t ', @new_fields[2] , ' -s 0 -S COLOR -c green -o black -i green -I black ',"n";
  103. print Destination 'n -t ', @new_fields[2], ' -s 0 -S DLABEL -l "Carrier sense" -L ""', "n";
  104. print Destination 'n -t ', @new_fields[2] , ' -s 2 -S COLOR -c green -o black -i green -I black ', "n";
  105. print Destination 'n -t ', @new_fields[2], ' -s 2 -S DLABEL -l "Carrier Sense" -L ""' , "n";
  106. print Destination 'v -t ', @new_fields[2], ' -e sim_annotation ', @new_fields[2],' ', $i,' CASE 3 : COLLISION WHEN NODES SEND AT SAME TIME  ',"n";
  107. $last_time = @new_fields[2]+0.00005;
  108. $i++;
  109. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Sender nodes are in range of each other but they do carrier sense at the same time,  ',"n";
  110. $last_time = $last_time+0.00005;
  111. $i++;
  112. print Destination 'v -t ', $last_time, ' -e sim_annotation ', $last_time, ' ',$i,' thus finding channel to be free , so they send packets at the same time and therefore result in collision at the receiver',"n";
  113. $i++;
  114. $last_time = $last_time +0.00005;
  115. $duration = @new_fields[2] + 0.01;
  116. print Destination 'n -t ', $duration, ' -s 0 -S COLOR -c black -o green -i black -I green ', "n";
  117. print Destination 'n -t ', $duration, ' -s 0 -S DLABEL -l "" -L ""', "n";
  118. print Destination 'n -t ', $duration, ' -s 2 -S COLOR -c black -o green -i black -I green ', "n";
  119. print Destination 'n -t ', $duration, ' -s 2 -S DLABEL -l "" -L ""', "n";
  120. print Destination '+ -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  121. print Destination '- -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  122. print Destination 'h -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  123. print Destination '+ -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  124. print Destination '- -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  125. print Destination 'h -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  126. $red_duration = $duration + 0.01;
  127. $red_end_duration = $red_duration + 0.01;
  128. print Destination 'n -t ', $red_duration, ' -s 1 -S COLOR -c red -o black -i red -I black ', "n";
  129. print Destination 'n -t ', $red_duration, ' -s 1 -S DLABEL -l "Collision " -L ""', "n";
  130. print Destination 'd -t ', $red_duration, ' -s 1 -d 2 -p message -e 5000 -a 8 ', "n";
  131. print Destination 'n -t ', $red_end_duration, ' -s 1 -S COLOR -c black -o red -i black -I red ', "n";
  132. print Destination 'n -t ', $red_end_duration, ' -s 1 -S DLABEL -l "" -L ""', "n";
  133. $line = <Source>;
  134. }
  135. elsif(($next_line !~ /SENSING_CARRIER/) && ($num_mov > 0)) {
  136. print Destination 'n -t ', @fields[2] , ' -s 0 -S COLOR -c green -o black -i green -I black ',"n";
  137. print Destination 'n -t ', @fields[2], ' -s 0 -S DLABEL -l "Carrier sense" -L ""', "n";
  138. @fields[2] = @fields[2] + 0.005;
  139. print Destination 'n -t ', @fields[2] , ' -s 2 -S COLOR -c green -o black -i green -I black ', "n";
  140. print Destination 'n -t ', @fields[2], ' -s 2 -S DLABEL -l "Carrier Sense" -L ""' , "n";
  141. print Destination 'v -t ', @fields[2], ' -e sim_annotation ', @fields[2],' ', $i,' CASE 4 : SUCCESSFUL TRANSMISSION WHEN NODES ARE OUT OF RANGE OF EACH OTHER',"n";
  142. $last_time = @fields[2]+0.00005;
  143. $i++;
  144. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Sender nodes are out of range of each other ', "n";
  145. $last_time = $last_time + 0.00005;
  146. $i++;
  147. print Destination 'v -t ', $last_time, ' -e sim_annotation ', $last_time,' ', $i, '  but they result in successful transmission since they send packets at different times',"n";
  148. $last_time = $last_time+0.00005;
  149. $i++;
  150. $duration = @fields[2] + 0.005;
  151. print Destination 'n -t ', $duration, ' -s 0 -S COLOR -c black -o green -i black -I green ', "n";
  152. print Destination 'n -t ', $duration, ' -s 0 -S DLABEL -l "" -L ""', "n";
  153. print Destination '+ -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  154. print Destination '- -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  155. print Destination 'h -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  156. $duration = $duration + 0.005;
  157. print Destination 'n -t ', $duration, ' -s 2 -S COLOR -c black -o green -i black -I green ', "n";
  158. print Destination 'n -t ', $duration, ' -s 2 -S DLABEL -l "" -L ""', "n";
  159. print Destination '+ -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  160. print Destination '- -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  161. print Destination 'h -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  162. $line = <Source>;
  163. $line = <Source>;
  164. $line = <Source>;
  165. }
  166. elsif(($next_line =~ /SENSING_CARRIER/) && ($num_mov > 0)) {
  167. print Destination 'n -t ', @fields[2] , ' -s 0 -S COLOR -c green -o black -i green -I black ',"n";
  168. print Destination 'n -t ', @fields[2], ' -s 0 -S DLABEL -l "Carrier sense" -L ""', "n";
  169. print Destination 'n -t ', @fields[2] , ' -s 2 -S COLOR -c green -o black -i green -I black ', "n";
  170. print Destination 'n -t ', @fields[2], ' -s 2 -S DLABEL -l "Carrier Sense" -L ""' , "n";
  171. print Destination 'v -t ', @fields[2], ' -e sim_annotation ', @fields[2],' ', $i,' CASE 5 : COLLISION IN A HIDDEN TERMINAL SCENARIO',"n";
  172. $last_time = @fields[2]+0.00005;
  173. $i++;
  174. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Sender nodes are out of range of each other ', "n";
  175. $last_time = $last_time + 0.00005;
  176. $i++;
  177. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ', $i,' even though they both do carrier sense, they cannot hear each other and thus find the channel free ', "n";
  178. $i++;
  179. $last_time = $last_time + 0.00005;
  180. print Destination 'v -t ', $last_time, ' -e sim_annotation ', $last_time,' ', $i,' and they send packets at the same time, thus resulting in a collision at the receiver. ',"n";
  181. $last_time = $last_time+0.00005;
  182. $i++;
  183. $duration = @fields[2] + 0.005;
  184. print Destination 'n -t ', $duration, ' -s 0 -S COLOR -c black -o green -i black -I green ', "n";
  185. print Destination 'n -t ', $duration, ' -s 0 -S DLABEL -l "" -L ""', "n";
  186. print Destination '+ -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  187. print Destination '- -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  188. print Destination 'h -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  189. print Destination 'n -t ', $duration, ' -s 2 -S COLOR -c black -o green -i black -I green ', "n";
  190. print Destination 'n -t ', $duration, ' -s 2 -S DLABEL -l "" -L ""', "n";
  191. print Destination '+ -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  192. print Destination '- -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  193. print Destination 'h -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  194. $red_duration = $duration + 0.01;
  195. $red_end_duration = $red_duration + 0.01;
  196. print Destination 'n -t ', $red_duration, ' -s 1 -S COLOR -c red -o black -i red -I black ', "n";
  197. print Destination 'n -t ', $red_duration, ' -s 1 -S DLABEL -l "Collision " -L ""', "n";
  198. print Destination 'd -t ', $red_duration, ' -s 1 -d 2 -p message -e 5000 -a 8 ', "n";
  199. print Destination 'n -t ', $red_end_duration, ' -s 1 -S COLOR -c black -o red -i black -I red ', "n";
  200. print Destination 'n -t ', $red_end_duration, ' -s 1 -S DLABEL -l "" -L ""', "n";
  201. $line = <Source>;
  202. $line = <Source>;
  203. $line = <Source>;
  204. }
  205. else {
  206. $line = <Source>;
  207. }
  208. elsif ($line =~ /^M/) {  # parses trace file when node moves.
  209. @fields = split ' ', $line;
  210. @fields[3] =~ m/(d+.d+)/;
  211. @fields[3] = $1;
  212. @fields[4] =~ m/(d+.d+)/;
  213. @fields[4] = $1;
  214. @fields[6] =~ m/(d+.d+)/;
  215. @fields[6] = $1;
  216. $t = (@fields[6] - @fields[3])/@fields[8];
  217. print Destination 'v -t ', @fields[1], ' -e sim_annotation ', @fields[1],' ', $i,' HIDDEN TERMINAL SCENARIO : Node 2 moves and hence is out of range of node 0',"n";
  218. $last_time = @fields[1]+0.00005;
  219. $i++;
  220. @fields[1] = @fields[1] + 0.005;
  221. print Destination 'n -t ', @fields[1], ' -s ', @fields[2], ' -x ', @fields[3], ' -y ', @fields[4], ' -U ',@fields[8], ' -V 0.00 -T ', $t,"n";
  222. @fields[1] = @fields[1] + 0.100000;
  223. $num_mov ++;
  224. $line = <Source>;
  225. }
  226. else {
  227. $line = <Source>;
  228. }
  229. }
  230. close Source;
  231. close NamSource;
  232. close Destination;