README
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:12k
源码类别:

通讯编程

开发平台:

Visual C++

  1. Some notes on the test suite
  2. ---------------------------
  3. To run the test suites in this directory:
  4. ./test-all-red
  5. ./test-all-sack
  6. ./test-all-schedule
  7. ./test-all-tcp
  8. ./test-all-red-v1
  9. ./test-all-cbq-v1
  10. ./test-all-sack-v1
  11. ./test-all-v1
  12. ./test-all-mcast
  13. OR, just for validation purposes:
  14. ./test-all-red quiet
  15. ./test-all-sack quiet
  16. ./test-all-schedule quiet
  17. ./test-all-tcp quiet
  18. ./test-all-red-v1 quiet
  19. ./test-all-cbq-v1 quiet
  20. ./test-all-sack-v1 quiet  
  21. ./test-all-v1 quiet
  22. ./test-all-mcast
  23. ----------------------------
  24. Each of the test suites has been split off into three parts, two of
  25. which are common to all of them.  The common parts are:
  26. I)  The topologies library, stored in topologies.tcl
  27.     This contains a catalogue of topologies used in the test suite.
  28.     Currently, four topologies are defined (net0 through net3).
  29.     Variants of the topology are classified according to the following
  30.     criteria:
  31.     Name of Qs on Fall- Dynamic  Routing  MultiPath
  32.     Variant back links  Links? Protocol? Forwarding?
  33.   -----------------------------------------------------------------------------
  34.   <none>  DropTail    no  Static     NO
  35.   net#-  DropTail    yes  Static     NO
  36.   net#-Session  DropTail    yes  Session     NO
  37.   net#-DV  DropTail    yes    DV     NO
  38.   net#RED-Session   RED    yes  Session     NO
  39.   net#RED-DV     RED    yes    DV     NO
  40.   net#-DVm0  DropTail    no    DV     YES
  41.   net#-DVm1  DropTail    yes    DV     YES
  42.   net#RED-DVm0  DropTail    no    DV     YES
  43.   net#RED-DVm1  DropTail    yes    DV     YES
  44.     Note that the RED variants are only defined if the backbone links
  45.     themselves use RED queues.
  46. NOTE:  All tests that use dynamic links (otehr than net#-) use a
  47. tracefile to generate the dynamics events.  The variant net#- currently
  48. uses an Exponential distribution to decide link failure and recovery
  49. times.  It also writes out the trace file `dyn.tr' that is used by the
  50. other variants.
  51. The initialiser for each topology also invokes the instance procedure
  52. ``config''.  Each test-suite that is defined could individually
  53. reconfigure a particular topology to suite its needs.  As an example,
  54. this feature is used by the RED test suites to redefine ``linterm_''
  55. for the backbone links in the net2 topology.
  56. The class hierarchy for the topologies is:
  57.     SkelTopology
  58.     |
  59.     +-----  NodeTopology/4nodes
  60.     |       |
  61.     |       +-----  Topology/net0
  62.     |       |       |
  63.     |       |       +-----  Topology/net0-
  64.     |       |       +-----  Topology/net0-Session
  65.     |       |       .
  66.     |       .       .
  67.     |       .       +-----  Topology/net0-DVm1
  68.     |       .
  69.     |
  70.     +-----  NodeTopology/6nodes
  71.     |
  72.     |
  73.     .
  74.     .
  75.     .
  76. The base class for all topologies is the Class SkelTopology.  It
  77. provides one ``useful'' method: add-fallback-links.  The method 
  78. adds fallback paths between pairs of nodes, each link in the path
  79. having identical characteristics.
  80. Different node topology classes are derived from the skeleton topology
  81. class.  There are three currently defined, NodeTopology/4nodes,
  82. NodeTopology/6nodes, and NodeTopology/8nodes.  The node count
  83. indicates the number of nodes in the topology, less those used for
  84. alternate (fallback) paths.  The constructor for each class
  85. instantiates each of the nodes in that topology.
  86. Each topology is then derived from the appropriate NodeTopology.
  87. Four basic topologies are currently defined, Topology/net0 through
  88. Topology/net4. 
  89. 1.  net0:  Simple 4 node topology (+1 fallback node) shown as:
  90.    s1        __ b1 __
  91.            /  0.8Mb 
  92.       8Mb,5ms     /   100ms   
  93.         r1 ------------ k1
  94.               8Mb,5ms /    0.8Mb, 100ms
  95.      /
  96.    s2
  97. Queue limit on <r1, k1> = 6
  98.     Variants defined: net0-, net0-Session, net0-DV, net0-DVm0, and net0-DVm1.
  99.     Cost on link <r1, k1> = 2 for net0-DVm0 and net0-DVm1.
  100. 2.  net1:  Another simple 4 node topology (+1 fallback node) shown as:
  101.    s1        __ b1 __
  102.            /  1.5Mb 
  103.              10Mb,5ms     /   100ms   
  104.         r1 ------------ k1
  105.              10Mb,5ms /    1.5Mb, 100ms
  106.      /
  107.    s2
  108. Queue limit on <r1, k1> = 23
  109.     Variants defined: net1-, net1-Session, net1-DV, net1-DVm0, net1-DVm1.
  110.     Cost on link <r1, k1> = 2 for net1-DVm0 and net1-DVm1.
  111. 3.  net2: Simple 6 node topology (+1 fallback node) shown as:
  112.         s1       __b1__       s3
  113.                /1.5 Mb     /
  114.   10Mb,2ms    /  10ms     / 10Mb,4ms
  115.             r1 ---------- r2
  116.   10Mb,3ms /   1.5Mb 20ms    10Mb,5ms
  117.   /        RED       
  118.         s2                    s4 
  119.     Variants defined: net2-, net2-Session, net2-DV, net2-DVm0, net2-DVm1,
  120. net2RED-Session, net2RED-DV, net2RED-DVm0, net2RED-DVm1.
  121.     Cost on link <r1, r2> = 2 for *-DVm0, *-DVm1 topology variants.
  122.     Note that, unlike the earlier topologies, the delay on the fallback
  123.     path is the same as the main path,
  124.      i.e. delay(r1,b1) + delay(b1,r2) = delay(r1,r2).
  125. 4.  net3: Simple 8 node topology (+3 fallback nodes) shown as:
  126.             s1       __b1__        __b2__        __b3__       s3
  127.                    /1.5 Mb      /1.5 Mb      /1.5 Mb     /
  128.       10Mb,2ms    /  10ms      /  10ms      /  10ms     / 10Mb,4ms
  129.                 r1 ---------- r2 ---------- r3 ---------- r4
  130.       10Mb,3ms /   1.5Mb,20ms    1.5Mb 20ms    1.5Mb 20ms    10Mb,5ms
  131.       /        RED           RED           RED       
  132.             s2                                                s4 
  133.     Variants defined: net2-, net2-Session, net2-DV, net2-DVm0, net2-DVm1,
  134. net2RED-Session, net2RED-DV, net2RED-DVm0, net2RED-DVm1.
  135.     Cost on link <r1, r2>, <r2, r3>, <r3, r4> = 2 for *-DVm0, *-DVm1
  136. topology variants.
  137. II) misc.tcl defines the base class TestSuite for the tests.
  138. It also defines the routines common to all the test suites.
  139. The class hierarchy for TestSuite is:
  140. TestSuite
  141.     |
  142.     +-----  Test/tahoe
  143.     |
  144.     +-----  Test/phaseSack1
  145.     .
  146.     .
  147.     .
  148. The constructor instantiates the appropriate topology.  It will
  149. check that the test will run on the specified topology (or its
  150. variant).  The testName is set to "test:topology".  It also
  151. enables a global trace file, all.tr.
  152. Other routines defined includes the procedure finish.  Unlike in
  153. the ns-1 test suites, this routine does not process the trace
  154. file.  It is upto an external test suite driver to process the
  155. output traces appropriately.  This permits us to flexibly use
  156. either gnuplot, xgraph, or nam as desired.
  157. tcpDump and tcpDumpAll are identical to the ns-1 test suite.
  158. openTrace differs, only in that, it adds the line "v testName
  159. $testName_" to the trace file, out.tr.  Most of the tests gather
  160. traces at the node `r1'.
  161. New routines traceQueues, usage, and runTest are also defined.
  162. - traceQueues will trace the queues of all links incident on a
  163.   specified now.  This allows us to trace tcp acks, as well as
  164.   traffic through alternate paths conveniently.
  165. - usage is a global procedure that simple prints out the usage
  166.   relevant for the particular test suite being used.
  167. - runTest is a static (?) procedure that should be invoked by
  168.   the test suite.  It checks that the specified test and
  169.   topology are correctly defined.  It instantiates the test, and
  170.   then "run"s the test.
  171. In addition, misc.tcl will source tcl/test/redefines.tcl, if present.
  172. This allows us (allowed me) to selectively redefine procedures
  173. embedded in ns for debugging, or additional tracing.
  174. III) The test suites themselves are in individual files.  Currently,
  175. the three are routed, red, and sack.  `routed' is identical to the v2
  176. test suite.  Each of these define a series of tests.  The format of a
  177. test-suite file is:
  178. set dir [pwd]
  179. catch "cd tcl/test"
  180. source misc.tcl
  181. source topologies.tcl
  182. catch "cd $dir"
  183. define test 1
  184. define test 2
  185. .
  186. .
  187. .
  188. TestSuite runTest
  189. The template for a typical test is:
  190. ---------------------------------------------------------------------------
  191. Class Test/tahoe1 -superclass TestSuite
  192. Test/tahoe1 instproc init topo {
  193. $self instvar net_ defNet_ test_
  194. set net_ $topo ;# topology variant to run test on
  195. set defNet_ net0 ;# default topology, used in 2 ways
  196.  # 1.  topology used, if $topo == ""
  197.  # 2.  to verify that variant is derived 
  198.  #     from $defNet_
  199. set test_ tahoe ;# identity of test.  really an
  200.  # ns-1 compatibility artifact.
  201. $self next
  202. }
  203. Test/tahoe1 instproc run {} {
  204. $self instvar ns_ ;# handle for the simulator
  205. $self instvar node_ ;# array of nodes, key = name, val = handle
  206. $self instvar testName_ ;# usually $test_:$net_
  207. # various Transport configurations, elided for brevity.
  208. # See actual test suites for details.
  209. # Trace only the bottleneck link
  210. #
  211. # Actually, we now trace all activity at the node around the
  212. # bottleneck link.  This allows us to track acks, as well
  213. # packets taking any alternate paths around the bottleneck
  214. # link.
  215. #
  216. $self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  217. $ns_ run
  218. }
  219. ---------------------------------------------------------------------------
  220. STATUS OF THE CURRENT TEST SUITES:
  221. test-suite-routed.tcl This suite is identical to the basic ns-2 test
  222. suite.   This name is a very bad misnomer, as there is no
  223. separate routed test suite.
  224. The telnet test requires a TELNET source, therefore cannot
  225. currently run.  Hence, it is X'd out.
  226. test-suite-red.tcl This suite adds additional configuration to the
  227. net2 topology.  Queue plotting is still untested in ns-2.
  228. Unlike the finish routine, we have left the trace processing
  229. routines in plotQueue in the suite.  This suite also redefines
  230. the tcpDumpAll procedure for its use.
  231. Tests red_twoway, red_twowaybytes require the TELNET source.
  232. The flow tests have not even been converted into ns-2 format.
  233. The tests themselves have been X'd out.
  234. test-suite-sack.tcl The tests in this routing previously used a
  235. different tracing routine, openTraces.  It looks like this was
  236. done to gather traces of returning acks.  The new traceQueues
  237. procedure should supercede this routine?
  238. Tests delayedSack and timersSack are commented out.  Is this right?
  239. IV) In addition, there are driver routines to run these tests, or process
  240. the results.  
  241. 1.  ktest-all <suite> [<test> ...]
  242. Given a <suite>, ktest-all will run all the specified <test>s
  243. from test-suite-<suite>.tcl, against all the topologies
  244. defined in topologies in tcl.  If no test is specified, then
  245. it will run all the tests defined in test-suite-<suite>.tcl.
  246. The suite will compare the results of all.tr against a
  247. previously computed result stored in test-output-raw (The result
  248. is stored the first time the test is run). It will also plot
  249. the results stored in out.tr.  If $DISPLAY is set, then xgraph
  250. is used to show on the screen.  Otherwise, gnuplot is used to
  251. generate a postscript file that is stored in ps-files.
  252. The program also checks if a new result differs from the
  253. previously computed result.  Core dumps are saved in the crash
  254. subdirectory.
  255. 2.  rt <suite> <test> [<topology>]
  256. `rt' will run one <test> from test-suite-<suite>.tcl, for a
  257. particular <topology>.  If the topology is unspecified, the
  258. default topology applicable for that test will be used.
  259. The next set of programs are useful in processing trace files.
  260. 1.  getrc [-b] [-o outfile] -s node1 [-d node2] [tracefile] 
  261. Extract trace lines that match certain characteristics.
  262. -s node1 extract all packets from node1.
  263. -b -s node1 extract all packets to or from node1.
  264. -s node1 -d node2 extract packets on link <node1 -> node2>
  265. -b -s node1 -d node2 extract pkts. on link <node1 <-> node2>.
  266. 2.  raw2xg [-a] [tracefile]
  267. Translate the trace file into a format palatable to xgraph.
  268. The -a option will extract acks in addition to tcp traffic.
  269. The conversion algorithms used to be in the finish procedures
  270. of the ns-1 test suite.
  271. 3.  raw2gp [-a] [tracefile]
  272. Translate the trace file into a format palatable to gnuplot.
  273. The output data is placed into separate files called `packets',
  274. `drops', `acks', `link-fails', and `link-recovery'.  The output
  275. from raw2gp is a set of commands that can processed by gnuplot.
  276. Other useful aliases are:
  277. alias xg 'xgraph -bb -tk -nl -m -x time -y packets'
  278. alias raw2nam 'awk -f tcl/nam-demo/nstonam.awk'
  279. alias gvl 'ghostview -landscape -'
  280. As an example, 
  281. % getrc -s 2 -d 3 test-output-raw/tahoe | raw2xg | xg
  282. will generate the graph of tahoe1, similar to that produced by
  283. % ./ns test-suite.tcl tahoe1
  284. in the ns-1 test suites.