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

通讯编程

开发平台:

Visual C++

  1. ."
  2. ." Copyright (c) 1994-1995 Regents of the University of California.
  3. ." All rights reserved.
  4. ."
  5. ." Redistribution and use in source and binary forms, with or without
  6. ." modification, are permitted provided that the following conditions
  7. ." are met:
  8. ." 1. Redistributions of source code must retain the above copyright
  9. ."    notice, this list of conditions and the following disclaimer.
  10. ." 2. Redistributions in binary form must reproduce the above copyright
  11. ."    notice, this list of conditions and the following disclaimer in the
  12. ."    documentation and/or other materials provided with the distribution.
  13. ." 3. All advertising materials mentioning features or use of this software
  14. ."    must display the following acknowledgment:
  15. ." This product includes software developed by the Computer Systems
  16. ." Engineering Group at Lawrence Berkeley Laboratory.
  17. ." 4. Neither the name of the University nor of the Laboratory may be used
  18. ."    to endorse or promote products derived from this software without
  19. ."    specific prior written permission.
  20. ."
  21. ." THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. ." ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. ." IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. ." ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. ." FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. ." DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. ." OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. ." HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. ." LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. ." OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. ." SUCH DAMAGE.
  32. ."
  33. .TH NS 1 "25 July 1997"
  34. .de HD
  35. .sp 1.5
  36. .B
  37. ..
  38. .SH NAME
  39. ns - network simulator (version 2)
  40. .SH SYNOPSIS
  41. .na
  42. .B ns
  43. [
  44. .I file
  45. [
  46. .I arg arg ...
  47. ]
  48. ]
  49. .ad
  50. .SH DESCRIPTION
  51. .I ns 
  52. is an event-driven network simulator.
  53. An extensible simulation engine 
  54. is implemented in C++ 
  55. that uses MIT's Object Tool Command Language, OTcl
  56. (an object oriented version of Tcl)
  57. as the command and configuration interface.
  58. A previous version of the simulator 
  59. i.e. ns version 1 used
  60. the Tool Command Language, Tcl 
  61. as the configuration language.
  62. The current version still supports
  63. simulation scripts written in Tcl
  64. meant for the ns version 1 simulator.
  65. .LP
  66. This manual page documents some of the interfaces
  67. for ns.  For much more complete documentation, please
  68. see "ns Notes and Documentation" [13], available in the distribution
  69. and on the web.
  70. .LP
  71. The simulator is invoked via the
  72. .I ns
  73. interpreter, an extension of the vanilla
  74. .I otclsh
  75. command shell.
  76. A simulation is defined by a OTcl script.
  77. The scripts use the Simulator Class
  78. as the principal interface 
  79. to the simulation engine.
  80. Using the methods defined in this class, 
  81. a network topology is defined, 
  82. traffic sources and sinks are configured, 
  83. the simulation is invoked,
  84. and the statistics are collected.
  85. By building upon a fully functional language, arbitrary actions
  86. can be programmed into the configuration.  
  87. .LP
  88. The first step in the simulation 
  89. is to acquire
  90. an instance of the Simulator class.
  91. Instances of objects in classes 
  92. are created and destroyed in ns using the
  93. .I new
  94. and
  95. .I delete
  96. methods.
  97. For example, 
  98. an instance of the Simulator object is
  99. created by the following command:
  100. .nf
  101. e.g. set ns [new Simulator]
  102. .fi
  103. A network topology is realized 
  104. using three primitive building blocks:
  105. nodes, links, and agents.  
  106. The Simulator class has methods to create/
  107. configure each of these building blocks.
  108. Nodes are created with the
  109. .I node
  110. Simulator method
  111. that automatically assigns
  112. an unique address to each node.
  113. Links are created between nodes
  114. to form a network topology with the
  115. .I simplex-link 
  116. and 
  117. .I duplex-link
  118. methods that set up 
  119. unidirectional and bidirectional links respectively.
  120. Agents are the objects that
  121. actively drive the simulation.
  122. .I Agents 
  123. can be thought of as the
  124. processes and/or transport entities that
  125. run on 
  126. .I nodes
  127. that may be end hosts or routers.
  128. Traffic sources
  129. and sinks, dynamic routing modules
  130. and the various protocol modules
  131. are all examples of agents.
  132. Agents are created by
  133. instantiating objects 
  134. in the subclass of class Agent i.e., 
  135. .I Agent/type
  136. where type specifies 
  137. the nature of the agent.
  138. For example, a TCP agent
  139. is created using the command:
  140. .br
  141. .nf
  142. set tcp [new Agent/TCP]
  143. .fi
  144. .LP
  145. Once the agents are created,
  146. they are
  147. attached to nodes
  148. with the 
  149. .I attach-agent
  150. Simulator method.
  151. Each agent is automatically assigned a port number unique across
  152. all agents on a given node (analogous to a tcp or udp port).
  153. Some types of agents may
  154. have sources attached to them 
  155. while others may generate their own data.  
  156. For example, 
  157. you can attach ``ftp'' and ``telnet'' sources
  158. to ``tcp'' agents 
  159. but ``constant bit-rate'' agents generate their own data.
  160. Applications are attached to agents
  161. using the
  162. .I attach-app
  163. method.
  164. .LP
  165. Each object has
  166. some configuration parameters associated with it
  167. that can be modified.
  168. Configuration parameters are 
  169. instance variables of the object.
  170. These parameters are initialized
  171. during startup to default values
  172. that can simply be read from the 
  173. instance variables of the object.
  174. For example,
  175. .I $tcp set window_
  176. returns the default window size for the tcp object.
  177. The default values for that object
  178. can be explicitly overridden by simple assignment
  179. either before a simulation begins,
  180. or dynamically, while the simulation is in progress.
  181. For example the window-size for a particular TCP session 
  182. can be changed in the
  183. following manner.
  184. .br
  185. .nf
  186. $tcp set window_ 25
  187. .fi
  188. The default values for the 
  189. configuration parameters
  190. of all the class objects
  191. subsequently created
  192. can also be changed by simple assignment.
  193. For example, we can say
  194. .br
  195. .nf
  196. Agent/TCP set window_ 30
  197. .fi
  198. to make all future tcp agent creations default to a window size of 30.
  199. .LP
  200. Events are scheduled in ns
  201. using the
  202. .I at
  203. Simulator method
  204. that allows OTcl procedures to be invoked
  205. at arbitrary points in simulation time.
  206. These OTcl callbacks provide a flexible simulation
  207. mechanism -- they can be used to start or stop
  208. sources, dump statistics, instantiate link failures,
  209. reconfigure the network topology etc.
  210. The simulation is started via the
  211. .I run
  212. method and continues until there are no more
  213. events to be processed.
  214. At this time,
  215. the original invocation of the
  216. .I run
  217. command returns 
  218. and the Tcl script can exit or invoke another
  219. simulation run after possible reconfiguration.
  220. Alternatively, the simulation can be prematurely halted 
  221. by invoking the
  222. .I stop
  223. command or by exiting the script with Tcl's standard
  224. .I exit
  225. command.
  226. .LP
  227. Packets are forwarded along the shortest path route from
  228. a source to a destination, where the distance metric is
  229. the sum of costs of the links traversed from
  230. the source to the destination.
  231. The cost of a link is 1 by default;
  232. the distance metric is
  233. simply the hop count
  234. in this case.
  235. The cost of a link can be changed with the
  236. .I cost
  237. Simulator method.
  238. A static topology model
  239. is used as the default in ns
  240. in which
  241. the states of nodes/links
  242. do not change during the course of a simulation.
  243. Network Dynamics could be specified
  244. using methods described in NETWORK DYNAMICS METHODS section.
  245. Also static unicast routing is the default 
  246. in which the routes are pre-computed over the
  247. entire topology once prior to
  248. starting the simulation.
  249. Methods to enable and configure 
  250. dynamic unicast and multicast routing
  251. are described in the 
  252. UNICAST ROUTING METHODS and
  253. MULTICAST ROUTING METHODS sections respectively.
  254. .SH "NS COMMANDS"
  255. This section describes the basic commands 
  256. to create the building blocks
  257. of the simulation
  258. (i.e. the node, link and agent objects)
  259. and to run the simulation.
  260. .LP
  261. The first step in running a simulation
  262. as stated before 
  263. is to acquire an instance of the
  264. Simulator class that has
  265. methods to configure and run the simulation.
  266. Throughout this section 
  267. the object variable name $ns 
  268. is used to imply a 
  269. Simulator object.
  270. .IP "fB$ns nodefP"
  271. Create a new node object and return a handle to it.
  272. .IP "fB$ns all-nodes-listfP"
  273. Returns a list of all the node objects defined in the simulation.
  274. .IP "fB$ns simplex-linkfI node1 node2 bw delay typefP"
  275. Create a new unidirectional link between
  276. .I node1
  277. and
  278. .I node2
  279. with bandwidth
  280. .I bw
  281. in bits per second
  282. and link propagation delay
  283. .I delay
  284. in seconds.
  285. .I node1
  286. and
  287. .I node2
  288. must have already been created with the
  289. .I node
  290. method.
  291. .I bw
  292. and
  293. .I delay
  294. default to
  295. 1.5 Mbits/sec and 100 ms respectively.
  296. The defaults can be changed by modifying 
  297. the relevant configuration parameters of the 
  298. DelayLink Object (see DELAYLINK OBJECTS section).
  299. .I node1
  300. and
  301. .I node2
  302. must have already been created with the
  303. .I node
  304. method.
  305. The queuing discipline of the link is specified by
  306. .I type,
  307. which may be
  308. .B DropTail,
  309. .B FQ,
  310. .B SFQ,
  311. .B DRR,
  312. .B RED,
  313. .B CBQ,
  314. or 
  315. .B CBQ/WRR.
  316. A DropTail link is a simple FIFO queue which drops the last packet
  317. in the queue when the queue overflows.
  318. A FQ link is for Fair Queuing (for details see [?]).
  319. A SFQ link is for Stochastic Fair Queuing (for details see [?]).
  320. A DRR link is for deficit round robin scheduling (for details see [9]).
  321. A RED link is a random-early drop queue (for details see [2]).
  322. A CBQ link is for class-based queuing using a packet-by-packet round-robin
  323. scheduler (for details see [3]).
  324. A CBQ/WRR link is for class-based queuing with a weighted round robin scheduler.
  325. If multicast routing is used
  326. links with interface labels are required.
  327. Such links are created by 
  328. setting Simulator NumberInterfaces_ variable to 1.
  329. All the subsequently created links will have interface labels.
  330. To disable creation of interfaces simply reset NumberInterfaces_ to 0
  331. (this is the default).
  332. .IP "fB$ns duplex-linkfI node1 node2 bw delay typefP"
  333. Create a new bidirectional link between
  334. .I node1
  335. and
  336. .I node2
  337. with bandwidth
  338. .I bw
  339. in bits per second
  340. and link propagation delay
  341. .I delay
  342. in seconds.
  343. .I node1
  344. and
  345. .I node2
  346. must have already been created with the
  347. .I node
  348. method.
  349. .I bw
  350. and
  351. .I delay
  352. default to
  353. 1.5 Mbits/sec and 100 ms respectively.
  354. The defaults can be changed by modifying 
  355. the relevant configuration parameters of the 
  356. DelayLink Object (see DELAYLINK OBJECTS section).
  357. The queuing discipline of the link is specified by
  358. .I type,
  359. which may be
  360. .B DropTail,
  361. .B FQ
  362. .B SFQ,
  363. .B DRR,
  364. .B RED,
  365. .B CBQ,
  366. or 
  367. .B CBQ/WRR.
  368. A DropTail link is a simple FIFO queue which drops the last packet
  369. in the queue when the queue overflows.
  370. A FQ link is for Fair Queuing (for details see [?]).
  371. A SFQ link is for Stochastic Fair Queuing (for details see [?]).
  372. A DRR link is for deficit round robin scheduling (for details see [9]).
  373. A RED link is a random-early drop queue (for details see [2]).
  374. A CBQ link is for class-based queuing using a packet-by-packet round-robin
  375. scheduler (for details see [3]).
  376. A CBQ/WRR link is for class-based queuing with a weighted round robin scheduler.
  377. If multicast routing is used
  378. links with interface labels are required.
  379. Such links are created by 
  380. setting Simulator NumberInterfaces_ variable to 1.
  381. All the subsequently created links will have interface labels.
  382. To disable creation of interfaces simply reset NumberInterfaces_ to 0
  383. (this is the default).
  384. .IP "fB$ns linkfI node1 node2fP"
  385. Returns a reference to the link connecting nodes
  386. .I node1
  387. and
  388. .I node2.
  389. This is useful for 
  390. setting link configuration parameters
  391. and to invoke tracing methods (see LINK OBJECTS section).
  392. .IP "fB$ns queue-limitfI node1 node2 queue-limitfP"
  393. Set the maximum number of packets
  394. that can be queued on the link
  395. in the direction from
  396. .I node1
  397. to 
  398. .I node2
  399. to
  400. .I queue-limit.
  401. The link between node1 and node2
  402. should have already been created.
  403. .IP "fB$ns delayfI node1 node2 time-intervalfP"
  404. Set the latency of the link
  405. in the direction from
  406. .I node1
  407. to
  408. .I node2 
  409. to 
  410. .I time-interval
  411. seconds.
  412. The link between node1 and node2
  413. should have already been created.
  414. .IP "fB$ns cost fI node1 node2 cost-valfP"
  415. Assign the cost
  416. .I cost-val
  417. to the link between nodes
  418. .I node1
  419. and
  420. .I node2.
  421. The costs assigned to links
  422. are used in unicast route computations.
  423. All the links default
  424. to a cost of 1.
  425. .IP "fB$ns multi-linkfI node-list bw delay typefP"
  426. Connects the nodes specified in
  427. .I node-list
  428. by a mesh of duplex links
  429. (to simulate a broadcast LAN)
  430. with bandwidth
  431. .I bw
  432. in bits per second
  433. and link propagation delay
  434. .I delay
  435. in seconds.
  436. .I node-list
  437. is a list of node object handles
  438. that have already been created with the
  439. .I node
  440. method.
  441. .I bw
  442. and
  443. .I delay
  444. default to
  445. 1.5 Mbits/sec and 100 ms respectively.
  446. The defaults can be changed by modifying 
  447. the relevant configuration parameters of the 
  448. DelayLink Object (see DELAYLINK OBJECTS section).
  449. The queuing discipline of the link is specified by
  450. .I type,
  451. which may be
  452. .B DropTail,
  453. .B FQ
  454. .B SFQ,
  455. .B DRR,
  456. .B RED,
  457. .B CBQ,
  458. or 
  459. .B CBQ/WRR.
  460. A DropTail link is a simple FIFO queue which drops the last packet
  461. in the queue when the queue overflows.
  462. A FQ link is for Fair Queuing (for details see [?]).
  463. A SFQ link is for Stochastic Fair Queuing (for details see [?]).
  464. A DRR link is for deficit round robin scheduling (for details see [9]).
  465. A RED link is a random-early drop queue (for details see [2]).
  466. A CBQ link is for class-based queuing using a packet-by-packet round-robin
  467. scheduler (for details see [3]).
  468. A CBQ/WRR link is for class-based queuing with a weighted round robin scheduler.
  469. .IP "fB$ns multi-link-of-interfacesfI node-list bw delay typefP"
  470. Connects the nodes specified in
  471. .I node-list
  472. by a mesh of duplex links with interfaces
  473. (to simulate a broadcast LAN)
  474. with bandwidth
  475. .I bw
  476. in bits per second
  477. and link propagation delay
  478. .I delay
  479. in seconds.
  480. .I node-list
  481. is a list of node object handles
  482. that have already been created with the
  483. .I node
  484. method.
  485. .I bw
  486. and
  487. .I delay
  488. default to
  489. 1.5 Mbits/sec and 100 ms respectively.
  490. The defaults can be changed by modifying 
  491. the relevant configuration parameters of the 
  492. DelayLink Object (see DELAYLINK OBJECTS section).
  493. The queuing discipline of the link is specified by
  494. .I type,
  495. which may be
  496. .B DropTail,
  497. .B FQ
  498. .B SFQ,
  499. .B DRR,
  500. .B RED,
  501. .B CBQ,
  502. or 
  503. .B CBQ/WRR.
  504. A DropTail link is a simple FIFO queue which drops the last packet
  505. in the queue when the queue overflows.
  506. A FQ link is for Fair Queuing (for details see [?]).
  507. A SFQ link is for Stochastic Fair Queuing (for details see [?]).
  508. A DRR link is for deficit round robin scheduling (for details see [9]).
  509. A RED link is a random-early drop queue (for details see [2]).
  510. A CBQ link is for class-based queuing using a packet-by-packet round-robin
  511. scheduler (for details see [3]).
  512. A CBQ/WRR link is for class-based queuing with a weighted round robin scheduler.
  513. .IP "fBnew Agent/fItypefP"
  514. Create an Agent
  515. of type
  516. .I type
  517. which may be:
  518. .nf
  519.   Null                  - Traffic Sink
  520.   LossMonitor           - Traffic Sink that monitors loss parameters
  521.   TCP                   - BSD Tahoe TCP
  522.   TCP/FullTcp           - Full Reno TCP with two-way connections [11]
  523.   TCP/Reno              - BSD Reno TCP
  524.   TCP/Newreno           - a modified version of BSD Reno TCP
  525.   TCP/Vegas             - Vegas TCP (from U. Arizonia via USC)
  526.   TCP/Sack1             - BSD Reno TCP with selective ACKs
  527.   TCP/Fack              - BSD Reno TCP with forward ACKs
  528.   TCPSink               - standard TCP sink
  529.   TCPSink/DelAck        - TCP sink that generates delayed ACKs
  530.   TCPSink/Sack1         - TCP sink that generates selective ACKs
  531.   TCPSink/Sack1/DelAck  - delayed-ack TCP sink with selective ACKs
  532.   UDP                   - UDP Transport
  533.   RTP                   - RTP agent
  534.   Session/RTP           - 
  535.   RTCP                  - RTCP agent
  536.   IVS/Source            - 
  537.   IVS/Receiver          - 
  538.   SRM                   - 
  539. .fi
  540. The methods, configuration parameters 
  541. and the relevant state variables
  542. associated with these objects
  543. are discussed in detail in later sections.
  544. Note that some agents e.g. TCP or SRM
  545. do not generate their own data.
  546. Such agents need sources attached to them
  547. to generate data
  548. (see attach-source and attach-traffic methods 
  549. in AGENT OBJECTS section).
  550. .IP "fB$ns attach-agent fInode agentfP"
  551. Attach the agent object
  552. .I agent
  553. to
  554. .I node.  
  555. The
  556. .I agent
  557. and
  558. .I node
  559. objects should have already been created.
  560. .IP "fB$ns detach-agent fInode agentfP"
  561. Detach the agent object
  562. .I agent
  563. from
  564. .I node.
  565. .IP "fB$ns connect fIsrc dstfP"
  566. Establish a two-way connection between the agent
  567. .I src
  568. and the agent
  569. .I dst.
  570. Returns the handle to
  571. .I src
  572. agent.
  573. A helper method
  574. has been defined to 
  575. facilitate creating and attaching an agent
  576. to each of two nodes
  577. and establishing a two-way connection between them.
  578. (see BUILTINS section).
  579. .IP "fB$ns use-scheduler fItypefP"
  580. Use an event scheduler of type
  581. .I type
  582. in the simulations.
  583. .I type
  584. is one of List, Heap, Calendar, RealTime.
  585. The List scheduler is the default. 
  586. A Heap scheduler uses a heap for event queueing.
  587. A Calendar scheduler uses a calendar queue to keep track of events.
  588. RealTime scheduler is used in emulation mode when the simulator
  589. interacts with an external agent.
  590. .IP "fB$ns atfI time procedurefP"
  591. Evaluate
  592. .I procedure
  593. at simulation time
  594. .I time.
  595. The procedure could be a globally accessible function (proc) or an object
  596. method (instproc).
  597. This command can be used 
  598. to start and stop sources, 
  599. dynamically reconfigure the simulator,
  600. dump statistics at specified intervals, etc.
  601. Returns an event id.
  602. .IP "fB$ns cancel fIeidfP"
  603. Remove the event specified by the event id
  604. .I eid
  605. from the event queue.
  606. .IP "fB$ns nowfP"
  607. Return the current simulation time.
  608. .IP "fB$ns gen-mapfP"
  609. Walks through the simulation topology
  610. and lists all the objects
  611. that have been created
  612. and the way they are hooked up to each other.
  613. This is useful to debug simulation scripts.
  614. .IP "fBns-versionfP"
  615. Return a string identifying the version of ns currently running. 
  616. This method is executed in 
  617. the global context 
  618. by the interpreter.
  619. .IP "fBns-randomfI [ seed ]fP"
  620. If
  621. .I seed
  622. is not present,
  623. return a pseudo-random integer between 0 and 2^31-1.
  624. Otherwise, seed the pseudo-random number generator with
  625. .I seed
  626. and return the seed used.
  627. If
  628. .I seed
  629. is 0, choose an initial seed heuristically (which varies
  630. on successive invocations).
  631. This method is executed in
  632. the global context
  633. by the interpreter.
  634. .LP
  635. Ns has other facilities for random number generation;
  636. please see documentation for details [13].
  637. .SH "OBJECT HIERARCHY"
  638. A brief description of 
  639. the object hierarchy in
  640. .I ns
  641. is presented in this section.
  642. This description is
  643. not intended to be complete.
  644. It has been provided to depict
  645. how the methods and configuration parameters
  646. associated with the various objects
  647. are inherited.
  648. For more complete information
  649. see "ns notes & documentation"
  650. and the automatically generated class library information
  651. on the ns web page.
  652. .LP
  653. Objects are associated with 
  654. configuration parameters that can be
  655. dynamically set and queried,
  656. and state variables that can be queried 
  657. (usually modified only when the state variables need to be reset for
  658. another simulation run).
  659. .LP
  660. Configuration parameters represent simulation parameters
  661. that are usually fixed during the entire simulation (like a
  662. link bandwidth), but can be changed dynamically if desired.
  663. State variables represent values that are specific to a
  664. given object and that object's implementation.
  665. .LP
  666. The following diagram depicts a portion the object hierarchy:
  667. .nf
  668.     Simulator
  669.           MultiSim
  670.     Node
  671.     Link
  672.           SimpleLink
  673.                CBQLink
  674.           DummyLink     
  675.     DelayLink
  676.     Queue
  677.           DropTail
  678.           FQ
  679.           SFQ
  680.           DRR
  681.           RED
  682.           CBQ
  683.           CBQ/WRR
  684.     QueueMonitor
  685.           ED
  686.                Flowmon
  687.                Flow
  688.     rtObject
  689.     RouteLogic
  690.     Agent
  691.           rtProto
  692.                Static
  693.                Session
  694.                DV 
  695.                Direct
  696.           Null
  697.           LossMonitor
  698.           TCP
  699.                FullTcp
  700.                Reno
  701.                Newreno
  702.                Sack1
  703.                Fack
  704.           TCPSink
  705.                DelAck
  706.                Sack1
  707.                    DelAck
  708.           UDP
  709.           RTP
  710.           RTCP
  711.           IVS
  712.                Source
  713.                Receiver
  714.           SRM
  715.           Session
  716.                RTP [how is this diff from Agent/CBR/RTP]
  717.     Appplication 
  718.           FTP
  719.           Telnet
  720.           Traffic
  721.                Expoo
  722.                Pareto
  723.                CBR
  724.                Trace
  725.     Integrator
  726.     Samples
  727. .fi
  728. .LP
  729. For a complete, automatically generated, object hierarchy,
  730. see the link "class hierarchy" (which points to
  731. http://www-sop.inria.fr/rodeo/personnel/Antoine.Clerget/ns/)
  732. on the ns web pages.  (Thanks to Antoine Clerget for maintaining
  733. this!)
  734. .LP
  735. For example, any method that is supported by a
  736. .I TCP
  737. agent is also supported by a
  738. .I Reno
  739. or a
  740. .I Sack1
  741. agent.
  742. Default configuration parameters are also inherited.
  743. For example, 
  744. .I $tcp set window_ 20
  745. where $tcp is a TCP agent
  746. defines the default TCP window size for both
  747. .I TCP
  748. and
  749. .I Reno
  750. objects.
  751. .SH "OBJECT METHODS"
  752. The following sections document the methods, configuration parameters
  753. and state variables associated with the various objects 
  754. as well as those to enable
  755. Network dynamics, Unicast routing, Multicast routing and
  756. Trace and Monitoring support.
  757. The object class is specified implicitly by the object
  758. variable name in the description.   
  759. For example,
  760. .B $tcp
  761. implies the tcp object class and all of its child classes.
  762. .SH "NODE OBJECTS"
  763. [NOTE: This section has not been verified to be up-to-date with the release.]
  764. .IP "fB$node idfP"
  765. Returns the node id.
  766. .IP "fB$node neighborsfP"
  767. Returns a list of the neighbour node objects.
  768. .IP "fB$node attach fIagentfP"
  769. Attach an agent of type
  770. .I agent
  771. to this node.
  772. .IP "fB$node detach fIagentfP"
  773. Detach an agent of type
  774. .I agent
  775. from this node.
  776. .IP "fB$node agent fIportfP"
  777. Return a handle to the agent attached to port
  778. .I port
  779. on this node.  Returns an empty string if the port is not in use.
  780. .IP "fB$node reset"
  781. Reset all agents attached to this node.
  782. This would re-initialize the state variables
  783. associated with the various agents
  784. at this node.
  785. .IP "fB$node rtObject?fP"
  786. Returns a handle to rtObject
  787. if there exists an instance
  788. of the object at that node.
  789. Only nodes that take part in
  790. a dynamic unicast routing protocol
  791. will have this object 
  792. (see UNICAST ROUTING METHODS and RTOBJECT OBJECTS section).
  793. .IP "fB$node join-group fIagent groupfP"
  794. Add the agent specified by the object handle
  795. .I agent
  796. to the multicast host group identified by the address
  797. .I group.
  798. This causes the group membership protocol to arrange for the appropriate
  799. multicast traffic to reach this agent.
  800. Multicast group address should be 
  801. in the range 0x8000 - 0xFFFF.
  802. .IP "fB$node allocaddrfP"
  803. Returns multicast group address
  804. in ascending order 
  805. on each invocation
  806. starting from 0x8000
  807. and ending at 0xFFFF.
  808. ."
  809. .IP "fB$node shape fIshapefP"
  810. Set the shape of the node to "fIshapefP". When called before the 
  811. simulator starts to run, it changes the default shape of 
  812. the node in the nam trace file. The default shape of a node is """circle"""
  813. ."
  814. .IP "fB$node color fIcolorfP"
  815. Set the color of the node to fIcolorfP. It can be called anytime to change 
  816. the current color of the node in nam trace file, if there is one.
  817. ."
  818. .IP "fB$node get-attribute fInamefP"
  819. Get the specified attribute fInamefP of the node. Currently a Node object
  820. has two attributes: fICOLORfP and fISHAPEfP. Note: these letters must be 
  821. capital.
  822. .IP "fB$node add-mark fIname color shapefP"
  823. Add a mark (in nam trace file) with fIcolorfP and fIshapefP around
  824. the node. The shape can be """circle""", """hexagon""" and """square""" (case
  825. sensitive). The added mark will be identified by fInamefP.
  826. .IP "fB$node delete-mark fInamefP"
  827. Delete the mark with fInamefP in the given node. 
  828. .LP
  829. There are no state variables or configuration parameters
  830. specific to the node class.
  831. .SH "LINK OBJECTS"
  832. [NOTE: This section has not been verified to be up-to-date with the release.]
  833. .IP "fB$link trace-dynamics fIns fileIDfP"
  834. Trace the dynamics of this link
  835. and write the output to
  836. .I fileID
  837. filehandle.
  838. .I ns
  839. is an instance of the Simulator or MultiSim object
  840. that was created to invoke the simulation
  841. (see TRACE AND MONITORING METHODS section 
  842. for the output trace format).
  843. ."
  844. .IP "fB$link trace-callback fIns cmdfP"
  845. Trace all packets on the link with the callback fIcmdfP.
  846. Cmd is invoked for each trace event (enqueue, dequeue, drop)
  847. with the text that would be logged as parameters.
  848. (See the description of the log file for this information.)
  849. A demo of trace callbacks is in 
  850. the program tcl/ex/callback_demo.tcl
  851. in the distribution.
  852. ."
  853. .IP "fB$link color fIcolorfP"
  854. Set the color of the Link object. It can be called anytime to change 
  855. the current color of the link in nam trace file, if there is one.
  856. ."
  857. .IP "fB$link get-attribute fInamefP"
  858. Get the specified attribute fInamefP of the Link. Currently a Link object
  859. has three attributes: fICOLORfP, fIORIENTATIONfP, and fIQUEUE_POSfP.
  860. ."
  861. .LP
  862. Currently the following two functions should not be directly called. Use
  863. fB$ns duplex-link-opfP instead. Refer to the corresponding section in this 
  864. man page.
  865. ."
  866. .IP "fB$link orient fIorifP"
  867. Set the orientation of the link to fIorifP. When called before the simulator 
  868. starts to run, it changes the default orientation of the link in nam trace 
  869. file, if there is one. If orientation is unspecified for any link(s), nam will
  870. use automatic layout. The default orientation of a Link object is unspecified.
  871. ."
  872. .IP "fB$link queuePos fIposfP"
  873. Set the queue position of the link to fIposfP. When called before the 
  874. simulator starts to run, it changes the default queue placement of the simplex
  875. link in nam trace file, if there is one. fIposfP specifies the angle between
  876. the horizontal line and the line along which queued packets will be displayed.
  877. .LP
  878. .SH "SIMPLELINK OBJECTS"
  879. [NOTE: This section has not been verified to be up-to-date with the release.]
  880. .IP "fB$link cost fIcost-valfP"
  881. Make 
  882. .I cost-val
  883. the cost of this link.
  884. .IP "fB$link cost?fP"
  885. Return the cost of this link.
  886. .LP
  887. Any configuration parameters or state variables?
  888. .SH "DELAYLINK OBJECTS"
  889. [NOTE: This section has not been verified to be up-to-date with the release.]
  890. The DelayLink Objects determine
  891. the amount of time required for a packet to
  892. traverse a link.
  893. This is defined to be
  894. size/bw + delay
  895. where
  896. size is the packet size,
  897. bw is the link bandwidth and
  898. delay is the link propagation delay.
  899. There are no methods or state variables associated with this object.
  900. .LP
  901. .HD
  902. Configuration Parameters fP
  903. .RS
  904. .IP fIbandwidth_fP
  905. Link bandwidth in bits per second.
  906. .IP fIdelay_fP
  907. Link propagation delay in seconds.
  908. .LP
  909. There are no state variables associated with this object.
  910. .SH "NETWORK DYNAMICS METHODS"
  911. This section describes methods
  912. to make the
  913. links and nodes 
  914. in the topology
  915. go up and down
  916. according to various distributions.
  917. A dynamic routing protocol should
  918. generally be used whenever 
  919. a simulation is to be done
  920. with network dynamics.
  921. Note that a static topology model
  922. is the default in ns.
  923. .IP "fB$ns rtmodel fImodel model-params node1 [node2]fP"
  924. Make the link between
  925. .I node1
  926. and
  927. .I node2
  928. change between up and down states
  929. according to the model
  930. .I model.
  931. In case only
  932. .I node1
  933. is specified all the links 
  934. incident on the node
  935. would be brought up and down
  936. according to the specified
  937. .I model.
  938. .I model-params
  939. contains the parameters required for the relevant model
  940. and is to be specified as a list
  941. i.e. the parameters are to be 
  942. enclosed in curly brackets.
  943. .I model
  944. can be one of
  945. .I Deterministic,
  946. .I Exponential,
  947. .I Manual,
  948. .I Trace.
  949. Returns a handle to a model object
  950. corresponding to the specified
  951. .I model.
  952. In the Deterministic model
  953. .I model-params
  954. is
  955. .I [start-time] up-interval down-interval [finish-time].
  956. Starting from
  957. .I start-time
  958. the link is made up for
  959. .I up-interval
  960. and down for
  961. .I down-interval
  962. till
  963. .I finish-time
  964. is reached.
  965. The default values for
  966. start-time, up-interval, down-interval
  967. are 0.5s, 2.0s, 1.0s respectively.
  968. finish-time defaults to the end of the simulation.
  969. The start-time defaults to 0.5s
  970. in order to let the
  971. routing protocol computation quiesce.
  972. If the Exponential model is used
  973. .I model-params
  974. is of the form
  975. .I up-interval down-interval
  976. where the link up-time
  977. is an exponential distribution
  978. around the mean
  979. .I up-interval
  980. and the link down-time
  981. is an exponential distribution
  982. around the mean
  983. .I down-interval.
  984. Default values for
  985. .I up-interval
  986. and
  987. .I down-interval
  988. are 10s and 1s respectively.
  989. If the Manual distribution is used
  990. .I model-params 
  991. is
  992. .I at op
  993. where
  994. .I at
  995. specifies the time at which the operation
  996. .I op
  997. should occur.
  998. .I op
  999. is one of
  1000. .I up, down.
  1001. The Manual distribution 
  1002. could be specified alternately using the
  1003. .I rtmodel-at 
  1004. method described later in the section.
  1005. If Trace is specified as the
  1006. .I model
  1007. the link/node dynamics
  1008. is read from a Tracefile.
  1009. The
  1010. .I model-params
  1011. argument would in this case
  1012. be the file-handle of the
  1013. Tracefile that has
  1014. the dynamics information.
  1015. The tracefile format is identical
  1016. to the trace output generated by
  1017. the trace-dynamics link method
  1018. (see TRACE AND MONITORING METHODS SECTION).
  1019. .IP "fB$ns rtmodel-delete fImodel-handlefP"
  1020. Delete the instance of
  1021. the route model specified by
  1022. .I model-handle.
  1023. .IP "fB$ns rtmodel-at fIat op node1 [node2]fP"
  1024. Used to specify the up and down times
  1025. of the link between nodes
  1026. .I node1
  1027. and 
  1028. .I node2.
  1029. If only
  1030. .I node1
  1031. is given all the links
  1032. incident on 
  1033. .I node1
  1034. will be brought up and down.
  1035. .I at
  1036. is the time
  1037. at which 
  1038. the operation
  1039. .I op
  1040. that can be either
  1041. .I up
  1042. or
  1043. .I down
  1044. is to be performed
  1045. on the specified link(s).
  1046. .SH "QUEUE OBJECTS"
  1047. A queue object is a general class of object capable
  1048. of holding and possibly marking or discarding packets as they
  1049. travel through the simulated topology.
  1050. .LP
  1051. .HD
  1052. Configuration Parameters fP
  1053. .RS
  1054. .IP fIlimit_fP
  1055. The queue size in packets.
  1056. .IP fIblocked_fP
  1057. Set to false by default,
  1058. this is true if the queue is blocked (unable to send
  1059. a packet to its downstream neighbor).
  1060. .IP fIunblock_on_resume_fP
  1061. Set to true by default, indicates a queue should unblock
  1062. itself at the time the last packet packet sent has been
  1063. transmitted (but not necessarily received).
  1064. .SH "DROP-TAIL OBJECTS"
  1065. Drop-tail objects are a subclass of Queue objects that implement simple
  1066. FIFO queue.  There are no methods that are specific to drop-tail
  1067. objects.  The only configuration parameter is fIdrop-front_fP, 
  1068. which when set to true causes the queue to behave as a drop-from-front
  1069. queueing discipline.  This variable is set to false by default.
  1070. .SH "FQ OBJECTS"
  1071. FQ objects are a subclass of Queue objects that implement
  1072. Fair queuing.  There are no methods
  1073. that are specific to FQ objects.
  1074. .LP
  1075. .HD
  1076. Configuration Parameters fP
  1077. .RS
  1078. .IP fIsecsPerByte_fP
  1079. .LP
  1080. There are no state variables associated with this object.
  1081. .SH "SFQ OBJECTS"
  1082. SFQ objects are a subclass of Queue objects that implement
  1083. Stochastic Fair queuing.  There are no methods
  1084. that are specific to SFQ objects.
  1085. .LP
  1086. .HD
  1087. Configuration Parameters fP
  1088. .RS
  1089. .IP fImaxqueue_fP
  1090. .IP fIbuckets_fP
  1091. .LP
  1092. There are no state variables associated with this object.
  1093. .SH "DRR OBJECTS"
  1094. DRR objects are a subclass of Queue objects that implement deficit
  1095. round robin scheduling. These objects implement deficit round robin
  1096. scheduling amongst different flows ( A particular flow is one which
  1097. has packets with the same node and port id OR packets which have the
  1098. same node id alone). Also unlike other multi-queue objects, this queue
  1099. object implements a single shared buffer space for its different flows.
  1100. .LP
  1101. .HD
  1102. Configuration Parameters fP
  1103. .RS
  1104. .IP fIbuckets_fP
  1105. Indicates the total number of buckets to be used for hashing each of
  1106. the flows.
  1107. .IP fIblimit_fP
  1108. Indicates the shared buffer size in bytes.
  1109. .IP fIquantum_fP
  1110. Indicates (in bytes) how much each flow can send during its turn.
  1111. .IP fImask_fP
  1112. mask_, when set to 1, means that a particular flow consists of packets
  1113. having the same node id (and possibly different port ids), otherwise a
  1114. flow consists of packets having the same node and port ids.
  1115. .SH "RED OBJECTS"
  1116. RED objects are a subclass of Queue objects that implement
  1117. random early-detection gateways.  The object can be configured
  1118. to either drop or ``mark'' packets.
  1119. There are no methods that are specific to RED objects.
  1120. .LP
  1121. .HD
  1122. Configuration Parameters fP
  1123. .RS
  1124. .IP fIbytes_fP
  1125. Set to "true" to enable ``byte-mode'' RED, where the size of arriving
  1126. packets affect the likelihood of marking (dropping) packets.
  1127. .IP fIqueue-in-bytes_fP
  1128. Set to "true" to measure the average queue size in bytes rather than
  1129. packets.
  1130. Enabling this option also causes fIthresh_fP and fImaxthresh_fP to
  1131. be automatically scaled by fImean_pktsize_fP (see below).
  1132. .IP fIthresh_fP
  1133. The minimum threshold for the average queue size in packets.
  1134. .IP fImaxthresh_fP
  1135. The maximum threshold for the average queue size in packets.
  1136. .IP fImean_pktsize_fP
  1137. A rough estimate of the average packet size in bytes.  Used in updating
  1138. the calculated average queue size after an idle period.
  1139. .IP fIq_weight_fP
  1140. The queue weight, used in the exponential-weighted moving average for
  1141. calculating the average queue size.
  1142. .IP fIwait_fP
  1143. Set to true to maintain an interval between dropped packets.
  1144. .IP fIlinterm_fP
  1145. As the average queue size varies between "thresh_" and "maxthresh_",
  1146. the packet dropping probability varies between 0 and "1/linterm".
  1147. .IP fIsetbit_fP
  1148. Set to "true" to mark packets by setting
  1149. the congestion indication bit in packet headers 
  1150. rather than drop packets.
  1151. .IP fIdrop-tail_fP
  1152. Set to true to use drop-tail rather than random-drop or
  1153. drop-from-front when the queue overflows or the average queue size 
  1154. exceeds "maxthresh_".  This is the default behavior.
  1155. For a further explanation of these variables, see [2].
  1156. .IP fIdrop-rand_fP
  1157. Set to true to use random-drop rather than drop-tail or
  1158. drop-from-front when the queue overflows or the average queue size 
  1159. exceeds "maxthresh_".
  1160. .IP fIdrop-front_fP
  1161. Set to true to use drop-from-front rather than drop-tail or random drop
  1162. when the queue overflows or the average queue size exceeds
  1163. "maxthresh_".
  1164. .IP fIns1-compat_fP
  1165. Set to true to avoid resetting the count since the last packet drop,
  1166. after a forced packet is dropped.  This gives compatibility with
  1167. previous behavior of RED.  The default is set to false.
  1168. .IP fgentle_fP
  1169. Set to true to increase the packet drop rate slowly from max_p to
  1170. 1 as the average queue size ranges from maxthresh to twice maxthresh.
  1171. The default is set to false, and max_p increases abruptly from
  1172. max_p to 1 when the average queue size exceeds maxthresh.
  1173. .LP
  1174. .HD
  1175. State Variables
  1176. .RS
  1177. None of the state variables of the RED implementation are accessible.
  1178. .RE
  1179. .SH "CBQ OBJECTS"
  1180. CBQ objects are a subclass of Queue objects that implement
  1181. class-based queueing.
  1182. .IP "fB$cbq insert $classfP"
  1183. Insert traffic class
  1184. .I class
  1185. into the link-sharing structure associated with link object 
  1186. .I cbq.
  1187. .IP "fB$cbq bind $cbqclass $id1 [$id2]fP"
  1188. Cause packets containing flow id
  1189. .I $id1
  1190. (or those in the range
  1191. .I $id1
  1192. to
  1193. .I $id2
  1194. inclusive)
  1195. to be associated with the traffic class
  1196. .I $cbqclass.
  1197. .IP "fB$cbq algorithm $alg"
  1198. Select the CBQ internal algorithm.
  1199. .I $alg
  1200. may be set to one of: "ancestor-only", "top-level", or "formal".
  1201. .LP
  1202. .HD
  1203. .SH "CBQ/WRR OBJECTS"
  1204. CBQ/WRR objects are a subclass of CBQ objects that implement
  1205. weighted round-robin scheduling among classes of the same
  1206. priority level.  In contrast, CBQ objects implement packet-by-packet
  1207. round-robin scheduling among classes of the same priority level.
  1208. .HD
  1209. Configuration Parameters fP
  1210. .RS
  1211. .IP fImaxpkt_fP
  1212. The maximum size of a packet in bytes.
  1213. This is used only by CBQ/WRR objects in
  1214. computing maximum bandwidth allocations
  1215. for the weighted round-robin scheduler.
  1216. .SH "CBQCLASS OBJECTS"
  1217. CBQClass objects implement the traffic classes associated with CBQ objects. 
  1218. .IP "fB$cbqclass setparams fIparent okborrow allot maxidle prio level extradelayfP"
  1219. Sets several of the configuration parameters for the CBQ traffic class (see below).
  1220. .IP "fB$cbqclass parent [$cbqcl|none]"
  1221. specify the parent of this class in the link-sharing tree.
  1222. The parent may be specified as ``none'' to indicate this class is a root.
  1223. .IP "fB$cbqclass newallot $a"
  1224. Change the link allocation of this class to the specified amount (in range
  1225. 0.0 to 1.0).
  1226. Note that only the specified class is affected.
  1227. .IP "fB$cbqclass install-queue $qfP"
  1228. Install a Queue object into the compound CBQ or CBQ/WRR link structure.
  1229. When a CBQ object is initially created, it includes no internal
  1230. queue (only a packet classifier and scheduler).
  1231. .LP
  1232. .HD
  1233. Configuration Parameters fP
  1234. .RS 
  1235. .IP fBokborrow_fP
  1236. is a boolean indicating the class is permitted to borrow bandwidth
  1237. from its parent.
  1238. .IP fBallot_fP
  1239. is the maximum fraction of link bandwidth allocated to the class
  1240. expressed as a real number between 0.0 and 1.0.
  1241. .IP fBmaxidle_fP
  1242. is the maximum amount of time a class may be required to have its
  1243. packets queued before they are permitted to be forwarded
  1244. .IP fBpriority_fP
  1245. is the class' priority level with respect to other classes.
  1246. This value may range from 0 to 10, and more than one class
  1247. may exist at the same priority.
  1248. Priority 0 is the highest priority.
  1249. .IP fBlevel_fP
  1250. is the level of this class in the link-sharing tree.
  1251. Leaf nodes in the tree are considered to be at level 1;
  1252. their parents are at level 2, etc.
  1253. .IP fBextradelay_fP
  1254. increase the delay experienced by a delayed class by the specified
  1255. number of seconds.
  1256. ." check units?
  1257. .SH "QUEUEMONITOR Objects"
  1258. QueueMonitor Objects are used to monitor
  1259. a set of packet and byte arrival, departure and drop
  1260. counters.
  1261. It also includes support for aggregate statistics such
  1262. as average queue size, etc.
  1263. [see TRACE AND MONITORING METHODS].
  1264. .IP "fB$queuemonitor resetfP"
  1265. reset all the cumulative counters described below
  1266. (arrivals, departures, and drops) to zero.
  1267. Also, reset the integrators and delay sampler, if defined.
  1268. .IP "fB$queuemonitor set-delay-samples fIdelaySamp_fP"
  1269. Set up the Samples object
  1270. .I delaySamp_
  1271. to record statistics about queue delays.
  1272. .I delaySamp_
  1273. is a handle to a Samples object 
  1274. i.e the Samples object should have already been created.
  1275. .IP "fB$queuemonitor get-bytes-integratorfP"
  1276. Returns an Integrator object
  1277. that can be used to find the integral of the queue size in bytes.
  1278. (see Integrator Objects section).
  1279. .IP "fB$queuemonitor get-pkts-integrator fP"
  1280. Returns an Integrator object
  1281. that can be used to find the integral of the queue size in packets.
  1282. (see Integrator Objects section).
  1283. .IP "fB$queuemonitor get-delay-samplesfP"
  1284. Returns a Samples object
  1285. .I delaySamp_
  1286. to record statistics about queue delays
  1287. (see Samples Objects section).
  1288. .LP
  1289. There are no configuration parameters specific to this object.
  1290. .LP
  1291. .HD
  1292. State Variables
  1293. .LP
  1294. .RS
  1295. .IP fIsize_fP
  1296. Instantaneous queue size in bytes.
  1297. .IP fIpkts_fP
  1298. Instantaneous queue size in packets.
  1299. .IP fIparrivals_fP
  1300. Running total of packets that have arrived.
  1301. .IP fIbarrivals_fP
  1302. Running total of bytes contained in packets that have arrived.
  1303. .IP fIpdepartures_fP
  1304. Running total of packets that have departed (not dropped).
  1305. .IP fIbdepartures_fP
  1306. Running total of bytes contained in packets that have departed (not dropped).
  1307. .IP fIpdrops_fP
  1308. Total number of packets dropped.
  1309. .IP fIbdrops_fP
  1310. Total number of bytes dropped.
  1311. .IP fIbytesInt_fP
  1312. Integrator object that computes
  1313. the integral of the queue size in bytes. 
  1314. The
  1315. .I sum_
  1316. variable of this object has the running sum (integral)
  1317. of the queue size in bytes.
  1318. .IP fIpktsInt_fP
  1319. Integrator object that computes
  1320. the integral of the queue size in packets. 
  1321. The
  1322. .I sum_
  1323. variable of this object has the running sum (integral)
  1324. of the queue size in packets.
  1325. .RE
  1326. .SH "QUEUEMONITOR/ED Objects"
  1327. This derived object is capable of differentiating regular
  1328. packet drops
  1329. from fIearlyfP drops.  Some queues distinguish regular
  1330. drops (e.g. drops due to buffer exhaustion) from other
  1331. drops (e.g. random drops in RED queues).
  1332. Under some circumstances, it is useful to distinguish these
  1333. two types of drops.
  1334. .LP
  1335. .HD
  1336. State Variables
  1337. .LP
  1338. .RS
  1339. .IP fIepdrops_fP
  1340. The number of packets that have been dropped ``early''.
  1341. .IP fIebdrops_fP
  1342. The number of bytes comprising packets that have been
  1343. dropped ``early''
  1344. .RE
  1345. .LP
  1346. fBNote:fP because this class is a subclass of QueueMonitor,
  1347. objects of this type also have fields such as fCpdrops_fP and
  1348. fCbdrops_fP.  These fields describe the fItotalfP number of
  1349. dropped packets and bytes, including both early and non-early
  1350. drops.
  1351. .SH "QUEUEMONITOR/ED/FLOWMON Objects"
  1352. These objects may be used in the place of a conventional
  1353. QueueMonitor object when wishing to collect per-flow counts and
  1354. statistics in addition to the aggregate counts and statistics
  1355. provided by the basic QueueMonitor.
  1356. .IP "fB$fmon classifier [$cl]"
  1357. insert (read) the specified classifier into (from) the flow monitor object.
  1358. This is used to map incoming packets to which flows they are associated with.
  1359. .IP "fB$fmon dump"
  1360. Dump the current per-flow counters and statistics to the I/O channel
  1361. specified in a previous fCattachfP operation.
  1362. .IP "fB$fmon flows"
  1363. Return a character string containing the names of all flow objects known
  1364. by this flow monitor.  Each of these objects are of type
  1365. QueueMonitor/ED/Flow.
  1366. .IP "fB$fmon attach $chan"
  1367. Attach a tcl I/O channel to the flow monitor.
  1368. Flow statistics are written to the channel when the
  1369. fCdumpfP operation is executed.
  1370. .LP
  1371. .HD
  1372. Configuration Parameters
  1373. .RS
  1374. .IP fBenable_in_fP
  1375. Set to true by default, indicates that per-flow arrival state should
  1376. be kept by the flow monitor.
  1377. If set to false, only the aggregate arrival information is kept.
  1378. .IP fBenable_out_fP
  1379. Set to true by default, indicates that per-flow departure state should
  1380. be kept by the flow monitor.
  1381. If set to false, only the aggregate departure information is kept.
  1382. .IP fBenable_drop_fP
  1383. Set to true by default, indicates that per-flow drop state should
  1384. be kept by the flow monitor.
  1385. If set to false, only the aggregate drop information is kept.
  1386. .IP fBenable_edrop_fP
  1387. Set to true by default, indicates that per-flow early drop state should
  1388. be kept by the flow monitor.
  1389. If set to false, only the aggregate early drop information is kept.
  1390. .SH "QUEUEMONITOR/ED/FLOW Objects"
  1391. These objects contain per-flow counts and statistics managed by
  1392. a QUEUEMONITOR/ED/FLOWMON object.
  1393. They are generally created in an OTcl callback procedure when a
  1394. flow monitor is given a packet it cannot map on to a known flow.
  1395. Note that the flow monitor's classifier is responsible for mapping
  1396. packets to flows in some arbitrary way.  Thus, depending on the
  1397. type of classifier used, not all of the state variables may
  1398. be relevant (e.g. one may classify packets based only on flow id,
  1399. in which case the source and destination addresses may not be
  1400. significant).
  1401. .LP
  1402. .HD
  1403. State Variables
  1404. .RS
  1405. .IP fBsrc_fP
  1406. The source address of packets belonging to this flow.
  1407. .IP fBdst_fP
  1408. The destination address of packets belonging to this flow.
  1409. .IP fBflowid_fP
  1410. The flow id of packets belonging to this flow.
  1411. .SH "UNICAST ROUTING METHODS"
  1412. A dynamic unicast routing protocol
  1413. can be specified to run
  1414. on a subset of nodes in the topology.
  1415. Note that a dynamic routing protocol should
  1416. be generally used whenever 
  1417. a simulation is done
  1418. with network dynamics.
  1419. .IP "fB$ns rtproto fIproto node-listfP"
  1420. Specifies the dynamic unicast routing protocol
  1421. .I proto 
  1422. to be run on the nodes specified by
  1423. .I node-list.
  1424. Currently
  1425. .I proto
  1426. can be one of
  1427. Static, Session, DV.
  1428. Static routing is the default.
  1429. Session implies
  1430. that the unicast routes
  1431. over the entire topology
  1432. are instantaneously recomputed
  1433. whenever a link goes up or down.
  1434. DV implies that a 
  1435. simple distance vector routing protocol
  1436. is to be simulated.
  1437. .I node-list
  1438. defaults to all the nodes in the topology.
  1439. .IP "fB$ns compute-routesfP"
  1440. Compute routes between all the nodes in the topology.
  1441. This can be used if static routing is done
  1442. and the routes have to be recomputed
  1443. as the state of a link has changed.
  1444. Note that Session routing (see 
  1445. .I rtproto 
  1446. method above)
  1447. will recompute routes automatically whenever
  1448. the state of any link in the topology changes.
  1449. .IP "fB$ns get-routelogicfP"
  1450. Returns an handle to 
  1451. a RouteLogic object that
  1452. has methods for route table lookup etc.
  1453. .SH "ROUTELOGIC OBJECTS"
  1454. .IP "fB$routelogic lookup fIsrcid destidfP"
  1455. Returns the id of the node that is the next hop from
  1456. the node with id
  1457. .I srcid
  1458. to the node with id
  1459. .I destid.
  1460. .IP "fB$routelogic dump fInodeidfP"
  1461. Dump the routing tables of all nodes
  1462. whose id is less than
  1463. .I nodeid.
  1464. Node ids are typically assigned to nodes
  1465. in ascending fashion starting from 0
  1466. by their order of creation.
  1467. .SH "RTOBJECT OBJECTS"
  1468. Every node that takes part in a dynamic
  1469. unicast routing protocol will have an instance
  1470. of rtObject
  1471. (see NODE OBJECTS section for the method
  1472. to get an handle to this object at a particular node).
  1473. Note that nodes will not have an instance of this
  1474. object if Session routing is done as a detailed
  1475. routing protocol is not being simulated in this case.
  1476. .IP "fB$rtobject dump-routes fIfileIDfP"
  1477. Dump the routing table to the output channel
  1478. specified by
  1479. .I fileID.
  1480. .I fileID
  1481. must be a file handle returned by the Tcl
  1482. .I open
  1483. command and it must have been opened for writing.
  1484. .IP "fB$rtobject rtProto? fIprotofP"
  1485. Returns a handle to 
  1486. the routing protocol agent
  1487. specified by
  1488. .I proto
  1489. if it exists at that node.
  1490. Returns an empty string otherwise.
  1491. .IP "fB$rtobject nextHop? fIdestIDfP"
  1492. Returns the id of the node 
  1493. that is the next hop
  1494. to the destination specified by the node id,
  1495. .I destID.
  1496. .IP "fB$rtobject rtpref? fIdestIDfP"
  1497. .IP "fB$rtobject metric? fIdestIDfP"
  1498. .SH "MULTICAST ROUTING METHODS"
  1499. Multicast routing is enabled
  1500. by setting Simulator EnableMcast_ variable
  1501. to 1 at the beginning of the simulation.
  1502. Note that this variable must be set before
  1503. any node, link or agent objects are created
  1504. in the simulation.
  1505. Also links must have been created with
  1506. interface labels 
  1507. (see simplex-link and duplex-link methods in NS COMMANDS section).
  1508. .IP "fB$ns mrtproto fIproto node-listfP"
  1509. Specifies the multicast routing protocol
  1510. .I proto 
  1511. to be run on the nodes specified by
  1512. .I node-list.
  1513. Currently
  1514. .I proto
  1515. can be one of
  1516. CtrMcast, DM, detailedDM, dynamicDM, pimDM.
  1517. .I node-list
  1518. defaults to all the nodes in the topology.
  1519. Returns an handle to a protocol-specific object
  1520. that has methods, configuration parameters
  1521. specific to that protocol.
  1522. Note that currently CtrMcastComp object
  1523. is returned if CtrMcast is used
  1524. but a null string is returned
  1525. if DM, detailedDM, dynamicDM or pimDM are used.
  1526. If proto is 'CtrMcast'
  1527. a Rendezvous Point (RP) rooted shared tree is built
  1528. for a multicast group.
  1529. The actual sending
  1530. of prune, join messages etc.
  1531. to set up state at the nodes is not simulated.
  1532. A centralized computation agent is used
  1533. to compute the fowarding trees and set up 
  1534. multicast forwarding state, (*,G) at the relevant nodes
  1535. as new receivers join a group.
  1536. Data packets from the senders to a group
  1537. are unicast to the RP.
  1538. Methods are provided in the CtrMcastComp object
  1539. (see CTRMCASTCOMP OBJECTS section)
  1540. that is returned by mrtproto 
  1541. to switch to source-specific trees,
  1542. choose some nodes as candidate RPs etc.
  1543. When a node/link on a multicast distribution tree
  1544. goes down, the tree is instanteously recomputed.
  1545. If proto is 'DM'
  1546. DVMRP-like dense mode is simulated.
  1547. Parent-child lists are used
  1548. to reduce the number of links over which
  1549. the data packets are broadcast.
  1550. Prune messages are sent by nodes
  1551. to remove branches from the multicast forwarding tree
  1552. that do not lead to any group members.
  1553. The prune timeout value is 0.5s by default 
  1554. (see DM OBJECTS section to change the default).
  1555. This does not adapt to network changes.
  1556. There is also currently no support for
  1557. proper functioning in topologies with LANs.
  1558. If proto is 'detailedDM'
  1559. a dense mode protocol based on
  1560. Protocol Independent Multicast - Dense Mode (PIM-DM)
  1561. is simulated.
  1562. This is currently the most complete version of the 
  1563. dense mode protocol in the simulator
  1564. and is recommended for use 
  1565. over the other dense mode protocols.
  1566. It adapts to network dynamics and functions correctly
  1567. in topologies with LANs 
  1568. (where LANs are created using the multi-link-of-interfaces method -
  1569. see NS COMMANDS).
  1570. In case there are multiple potential forwarders
  1571. for a LAN, the node with the highest id
  1572. is chosen as the forwarder
  1573. (this is done through the Assert mechanism).
  1574. The default values for the
  1575. prune timeout, interface deletion timeout (used for LANs) and
  1576. graft retransmission timeout are
  1577. 0.5s, 0.1s and 0.05s respectively.
  1578. (see Prune/Iface/Timer, Deletion/Iface/Timer 
  1579. and GraftRtx/Timer objects respectively
  1580. to change the default values
  1581. and for more information about the timers).
  1582. If proto is 'dynamicDM'
  1583. DVMRP-like dense mode protocol that
  1584. adapts to network changes is simulated.
  1585. 'Poison-reverse' information
  1586. (i.e. the information that a particular neighbouring node
  1587. uses this node to reach a particular network)
  1588. is read from the routing tables of neighbouring nodes
  1589. in order to adapt to network dynamics
  1590. (DVMRP runs its own unicast routing protocol
  1591. that exchanges this information).
  1592. The current implementation does not support
  1593. proper functioning in topologies with LANs.
  1594. The prune timeout value is 0.5s by default 
  1595. (see DM OBJECTS section to change the default).
  1596. If proto is 'pimDM'
  1597. Protocol Independent Multicast - Dense mode is simulated.
  1598. In this case the data packets are broadcast
  1599. over all the outgoing links except the incoming link.
  1600. Prune messages are sent by nodes to remove
  1601. the branches of the multicast forwarding tree
  1602. that do not lead to any group members.
  1603. The current implementation does not adapt to network dynamics
  1604. and does not support proper functioning in topologies with LANs.
  1605. The prune timeout value is 0.5s by default 
  1606. (see DM OBJECTS section to change the default).
  1607. .SH "CTRMCASTCOMP OBJECTS"
  1608. A handle to the CtrMcastComp object is returned
  1609. when the protocol is specified as 'CtrMcast'
  1610. in mrtproto.
  1611. .IP "fB$ctrmcastcomp switch-treetype fIgroup-addrfP"
  1612. Switch from the Rendezvous Point rooted shared tree
  1613. to source-specific trees 
  1614. for the group specified by
  1615. .I group-addr.
  1616. Note that this method cannot be used
  1617. to switch from source-specific trees
  1618. back to a shared tree for a multicast group.
  1619. .IP "fB$ctrmcastcomp set_c_rp fInode-listfP"
  1620. Make all the nodes specified in
  1621. .I node-list
  1622. as candidate RPs
  1623. and change the state of
  1624. all the other nodes
  1625. to not be candidate RPs.
  1626. Note that all nodes are candidate RPs by default.
  1627. Currently the node with the highest node id
  1628. serves as the RP for all multicast groups.
  1629. This method should be invoked before
  1630. any source starts sending packets to the group
  1631. or any receiver joins the group.
  1632. .IP "fB$ctrmcastcomp get_rp fInode groupfP"
  1633. Returns the RP for the group
  1634. as seen by the node
  1635. .I node
  1636. for the multicast group with address
  1637. .I group-addr.
  1638. Note that different nodes may see different
  1639. RPs for the group if the network is partitioned
  1640. as the nodes might be in different partitions.
  1641. .SH "DM OBJECTS"
  1642. DM Objects implement DVMRP style densemode multicast
  1643. where parent-child lists are used to reduce
  1644. the number of links over which 
  1645. initial data packets are broadcast.
  1646. There are no methods or state variables specific to this object.
  1647. .LP
  1648. .HD
  1649. Configuration parameters fP
  1650. .RS
  1651. .IP fIPruneTimeoutfP
  1652. .LP
  1653. Timeout value for the prune state at nodes.
  1654. .SH "PRUNE/IFACE/TIMER OBJECTS"
  1655. The Prune/Iface/Timer objects are used to implement
  1656. the prune timer for detailedDM.
  1657. There are no methods or state variables specific to this object.
  1658. .LP
  1659. .HD
  1660. Configuration parameters fP
  1661. .RS
  1662. .IP fItimeoutfP
  1663. .LP
  1664. Timeout value for the prune state at nodes.
  1665. .SH "DELETION/IFACE/TIMER OBJECTS"
  1666. The Deletion/Iface/Timer objects are used to implement
  1667. the interface deletion timer that are required for
  1668. correct functioning at nodes that are part of LANs.
  1669. If a node has a LAN as its incoming interface
  1670. for packets from a certain source and 
  1671. it does not have any downstream members
  1672. it sends out a prune message onto the LAN.
  1673. Any node that has the LAN as its incoming interface
  1674. for the same source and has downstream members
  1675. on hearing the prune message sent on the LAN.
  1676. will send a join message onto the LAN.
  1677. When the node that is acting as the forwarder for the LAN hears
  1678. the prune message from the LAN, it does not immediately
  1679. prune off the LAN as its outgoing interface.
  1680. Instead it starts an interface deletion timer
  1681. for the outgoing interface.
  1682. The forwarder will remove the LAN as its
  1683. outgoing interface only if it does not
  1684. receive any join messages from the LAN
  1685. before its deletion timer expires.
  1686. There are no methods or state variables specific to this object.
  1687. .LP
  1688. .HD
  1689. Configuration parameters fP
  1690. .RS
  1691. .IP fItimeoutfP
  1692. .LP
  1693. Timeout value for the interface deletion timer.
  1694. .SH "GRAFTRTX/TIMER OBJECTS"
  1695. The GraftRtx/Timer objects are used to implement
  1696. the graft retransmission timer at nodes.
  1697. This is to ensure the reliability of grafts 
  1698. sent upstream by a node.
  1699. .LP
  1700. .HD
  1701. Configuration parameters fP
  1702. .RS
  1703. .IP fItimeoutfP
  1704. .LP
  1705. Timeout value for the graft retransmission timer.
  1706. .SH "AGENT OBJECTS"
  1707. [NOTE: This section has not been verified to be up-to-date with the release.]
  1708. .IP "fB$agent portfP"
  1709. Return the transport-level port of the agent.
  1710. Ports are used to identify agents within a node.
  1711. .IP "fB$agent dst-addrfP"
  1712. Return the address of the destination node this agent is connected to.
  1713. .IP "fB$agent dst-portfP"
  1714. Return the port at the destination node that this agent is connected to.
  1715. .IP "fB$agent attach-source fItypefP"
  1716. Install a data source
  1717. of type
  1718. .I type
  1719. in this agent.
  1720. .I type
  1721. is one of FTP or bursty[???].
  1722. See the corresponding object methods
  1723. for information on configuration parameters.
  1724. Returns a handle to the source object.
  1725. .IP "fB$agent attach-traffic fItraffic-objectfP"
  1726. Attach
  1727. .I traffic-object
  1728. to this agent
  1729. .I traffic-object
  1730. is an instance of 
  1731. Traffic/Expoo, Traffic/Pareto or Traffic/Trace.
  1732. Traffic/Expoo generates traffic based on 
  1733. an Exponential On/Off distribution.
  1734. Traffic/Pareto generates traffic based on
  1735. a Pareto On/Off distribution.
  1736. Traffic/Trace generates traffic from a trace file.
  1737. The relevant configuration parameters for 
  1738. each of the above objects can be 
  1739. found in the TRAFFIC METHODS section.
  1740. .IP "fB$agent connectfI addr portfP"
  1741. Connect this agent to the agent identified by the address
  1742. .I addr
  1743. and port
  1744. .I port.
  1745. This causes packets transmitted from this agent to contain the
  1746. address and port indicated, so that such packets are routed to
  1747. the intended agent.  The two agents must be compatible (e.g.,
  1748. a tcp-source/tcp-sink pair as opposed a cbr/tcp-sink pair).
  1749. Otherwise, the results of the simulation are unpredictable.
  1750. .LP
  1751. .HD
  1752. Configuration Parameters fP
  1753. .RS
  1754. .IP fIdst_fP
  1755. Address of destination that the agent is connected to. Currently 32
  1756. bits with the higher 24 bits the destination node ID and the
  1757. lower 8 bits being the port number.
  1758. .LP
  1759. There are no state variables specific to the generic agent class.
  1760. .RE
  1761. .SH "NULL OBJECTS"
  1762. [NOTE: This section has not been verified to be up-to-date with the release.]
  1763. Null objects are a subclass of agent objects that 
  1764. implement a traffic sink.
  1765. They inherit all of the generic agent object functionality.
  1766. There are no methods, configuration parameters or state variables
  1767. specific to this object.
  1768. .SH "LOSSMONITOR OBJECTS"
  1769. [NOTE: This section has not been verified to be up-to-date with the release.]
  1770. LossMonitor objects are a subclass of agent objects 
  1771. that implement a traffic sink which also maintains some 
  1772. statistics about the received data e.g.,
  1773. number of bytes received, number of packets lost etc.
  1774. They inherit all of the generic agent object functionality.
  1775. .IP "fB$lossmonitor clearfP"
  1776. Resets the expected sequence number to -1.
  1777. .LP
  1778. .HD
  1779. Configuration Parameters fP
  1780. .LP
  1781. .RS
  1782. There are no configuration parameters specific to this object.
  1783. .RE
  1784. .HD
  1785. State Variables fP
  1786. .LP
  1787. .RS
  1788. .IP fInlost_fP
  1789. Number of packets lost.
  1790. .IP fInpkts_fP
  1791. Number of packets received.
  1792. .IP fIbytes_fP
  1793. Number of bytes received.
  1794. .IP fIlastPktTime_fP
  1795. Time at which the last packet was received.
  1796. .IP fIexpected_fP
  1797. The expected sequence number of the next packet.
  1798. .RE
  1799. .SH "TCP OBJECTS"
  1800. TCP objects are a subclass of agent objects that implement the
  1801. BSD Tahoe TCP transport protocol as described in [7].  They inherit all 
  1802. of the generic agent functionality.
  1803. .LP
  1804. To trace TCP parameters,
  1805. mark each parameter with
  1806. ``$tcp trace window_''
  1807. and then send the output to a trace file
  1808. with ``$tcp attach [open trace.tr w]''.
  1809. .LP
  1810. Tcp segments can be sent with the advance and advanaceby commands.
  1811. When all data is sent, the done method will be invoked
  1812. (which can be overridden in OTcl).
  1813. .LP
  1814. .IP "fB$tcp advance nfP"
  1815. Send up to the nth packets.
  1816. .IP "fB$tcp advanceby nfP"
  1817. Send n more packets.
  1818. .IP "fB$tcp donefP"
  1819. Functional called when all packets (specified by advance/advanceby/maxpkts_)
  1820. have been sent.  Can be overriden on a per-object basis.
  1821. .HD
  1822. Configuration Parameters fP
  1823. .RS
  1824. .IP fIwindow_fP
  1825. The upper bound on the advertised window for the TCP connection
  1826. (in packets).
  1827. .IP fImaxcwnd_fP
  1828. The upper bound on the congestion window for the TCP connection.
  1829. Set to zero to ignore.  (This is the default.)
  1830. Measured in packets.
  1831. .IP fIwindowInit_fP
  1832. The initial size of the congestion window on slow-start.
  1833. (in packets).
  1834. .IP fIwnd_init_option_fP 
  1835. The algorithm used for determining the initial size of the
  1836. congestion window.  Set to 1 for a static algorithm using the
  1837. value in fIwindowInit_fP.  Set to 2 for a dynamic algorithm
  1838. using a function of fIpacketSize_fP.
  1839. .IP fIsyn_fP
  1840. Set to true to model the initial SYN/ACK exchange in one-way TCP.
  1841. Set to false as default.
  1842. .IP fIdelay_growth_fP
  1843. Set to true to delay the initial congestion window until after one
  1844. packet has been sent and acked.
  1845. Set to false as default.
  1846. .IP fIwindowOption_fP
  1847. The algorithm to use for managing the congestion window
  1848. in linear phase.
  1849. The standard algorithm is 1 (the default).
  1850. Other experimental algorithms are documented in the source code.
  1851. .IP fIwindowThresh_fP
  1852. Gain constant to exponential averaging filter used to compute
  1853. .I awnd
  1854. (see below).
  1855. For investigations of different window-increase algorithms.
  1856. .IP fIoverhead_fP
  1857. The range (in seconds)
  1858. of a uniform random variable used to delay each output
  1859. packet.  The idea is to insert random delays at the source
  1860. in order to avoid phase effects, when desired [4].  
  1861. This has only been implemented for the Tahoe ("tcp") version of tcp, not
  1862. for tcp-reno.  This is not intended to be a 
  1863. realistic model of CPU processing overhead.
  1864. .IP fIecn_fP
  1865. Set to true to use explicit congestion notification in addition
  1866. to packet drops to signal congestion.
  1867. This allows a Fast Retransmit after a quench() due to
  1868. an ECN (explicit congestion notification) bit.
  1869. .IP fIpacketSize_fP
  1870. The size in bytes to use for all packets from this source.
  1871. .IP fItcpip_base_hdr_size_fP
  1872. The size in bytes of the base TCP/IP header.
  1873. .IP fItcpTick_fP 
  1874. The TCP clock granularity for measuring roundtrip times.  Note that it is set
  1875. by default to the non-standard value of 100ms.  
  1876. Measured in seconds.
  1877. .IP fIbugFix_fP
  1878. Set to true to remove a bug when multiple fast retransmits are allowed
  1879. for packets dropped in a single window of data.
  1880. .IP fImaxburst_fP
  1881. Set to zero to ignore.  Otherwise, the maximum number of packets that
  1882. the source can send in response to a single incoming ACK.
  1883. .IP fIslow_start_restart_fP
  1884. Boolean; set to 1 to slow-start after the connection goes idle.
  1885. On by default.
  1886. .IP fIsrtt_init_fP
  1887. Initial value for the smoothed roundtrip time estimate.
  1888. Default is 0 seconds.
  1889. .IP fIt_rttvar_fP
  1890. Initial value for the variance in roundtrip time. 
  1891. Default is 3 seconds.
  1892. .IP fIrtxcur_init_fP
  1893. Initial value for the retransmit value.  
  1894. Default is 6 seconds.
  1895. .IP fIT_SRTT_BITSfP
  1896. Exponent of weight for updating the smoothed round-trip time t_srtt_.
  1897. Default is 3, for a weight of 1/2^T_SRTT_BITS or 1/8.
  1898. .IP fIT_RTTVAR_BITSfP
  1899. Exponent of weight for updating variance in round-trip time, t_rttvar_.
  1900. Default is 2, for a weight of 1/2^T_RTTVAR_BITS or 1/4.
  1901. .IP fIrttvar_exp_fP
  1902. Exponent of multiple of the mean deviation in calculating the
  1903. current retransmit value t_rtxcur_.
  1904. Default is 2, for a multiple of 2^rttvar_exp_ or 4.
  1905. .RE 
  1906. .LP 
  1907. .HD 
  1908. Defined Constants
  1909. .RS 
  1910. .LP 
  1911. .IP fIMWSfP
  1912. The Maximum Window Size in packets for a TCP connection.  MWS determines
  1913. the size of an array in tcp-sink.cc.
  1914. The default for MWS is 1024 packets.
  1915. For Tahoe TCP, the "window" parameter, representing the receiver's
  1916. advertised window, should be less than MWS-1.  For Reno TCP, the
  1917. "window" parameter should be less than (MWS-1)/2.
  1918. .RE
  1919. .LP  
  1920. .HD 
  1921. State Variables
  1922. .RS
  1923. .LP
  1924. .IP fIdupacks_fP
  1925. Number of duplicate acks seen since any new data was acknowledged.
  1926. .IP fIseqno_fP
  1927. Highest sequence number for data from data source to TCP.
  1928. .IP fIt_seqno_fP
  1929. Current transmit sequence number.
  1930. .IP fIack_fP
  1931. Highest acknowledgment seen from receiver.
  1932. .IP fIcwnd_fP
  1933. Current value of the congestion window
  1934. (in packets).
  1935. .IP fIawnd_fP
  1936. Current value of a low-pass filtered version of the congestion window.
  1937. For investigations of different window-increase algorithms.
  1938. .IP fIssthresh_fP
  1939. Current value of the slow-start threshold
  1940. (in packets).
  1941. .IP fIrtt_fP
  1942. Round-trip time estimate.
  1943. In seconds (expressed in multiples of tcpTick_).
  1944. .IP fIsrtt_fP
  1945. Smoothed round-trip time estimate.
  1946. In seconds (in multiples of tcpTick_/8).
  1947. .IP fIrttvar_fP
  1948. Round-trip time mean deviation estimate.
  1949. ." what units?
  1950. .IP fIt_rtxcur_fP
  1951. Current retransmit value.
  1952. In seconds.
  1953. .IP fIbackoff_fP
  1954. Round-trip time exponential backoff constant.
  1955. .RE
  1956. .SH "TCP/RENO OBJECTS"
  1957. TCP/Reno objects are a subclass of TCP objects that implement the
  1958. Reno TCP transport protocol as described in [7].
  1959. There are no methods, configuration parameters or state variables
  1960. specific to this object.
  1961. .RE
  1962. .SH "TCP/NEWRENO OBJECTS"
  1963. TCP/Newreno objects are a subclass of TCP objects that implement 
  1964. a modified version of the BSD Reno TCP transport protocol.
  1965. .LP
  1966. There are no methods or state variables
  1967. specific to this object.
  1968. .LP
  1969. .HD
  1970. Configuration Parameters fP
  1971. .LP
  1972. .RS
  1973. .IP fInewreno_changes_fP
  1974. Set to zero for the default NewReno described in [7].  Set to 1 for
  1975. additional
  1976. NewReno algorithms as suggested in [10]; this includes the estimation
  1977. of the ssthresh parameter during slow-start.
  1978. .RE
  1979. .SH "TCP/VEGAS OBJECTS"
  1980. This section of the man page has not yet been written.
  1981. ." TCP/Vegas objects are a subclass of TCP objects that implement 
  1982. ." a modified version of the Reno TCP transport protocol (?).
  1983. ." There are no methods state variables
  1984. ." specific to this object (?).
  1985. ." Configuration Parameters fP
  1986. ." .LP
  1987. ." .RS
  1988. ." .IP fIvegas_changes_fP
  1989. ." .RE
  1990. .SH "TCP/SACK1 OBJECTS"
  1991. TCP/Sack1 objects are a subclass of TCP objects that implement 
  1992. the BSD Reno TCP transport protocol with Selective
  1993. Acknowledgement Extensions as described in [7].
  1994. They inherit all of the TCP object functionality.
  1995. There are no methods, configuration parameters or state variables
  1996. specific to this object.
  1997. .SH "TCP/FACK OBJECTS"
  1998. TCP/Fack objects are a subclass of TCP objects that implement 
  1999. the BSD Reno TCP transport protocol with Forward
  2000. Acknowledgement congestion control.
  2001. They inherit all of the TCP object functionality.
  2002. There are no methods or state variables specific to this object.
  2003. .HD
  2004. Configuration Parameters fP
  2005. .LP
  2006. .RS
  2007. .IP fIss-div4fP
  2008. Overdamping algorithm. Divides ssthresh by 4 (instead of 2) 
  2009. if congestion is detected within 1/2 RTT of slow-start. (1=Enable, 0=Disable)
  2010. .IP fIrampdownfP
  2011. Rampdown data smoothing algorithm. Slowly reduces congestion window 
  2012. rather than instantly halving it. (1=Enable, 0=Disable) 
  2013. .RE
  2014. .SH "TCP/FULLTCP OBJECTS"
  2015. This section has not yet been added to the man page.
  2016. The implementation and the configuration parameters are described in 
  2017. [11].
  2018. .SH "TCPSINK OBJECTS"
  2019. TCPSink objects are a subclass of agent objects that implement 
  2020. a receiver for TCP packets.
  2021. The simulator only implements "one-way" TCP connections, where the
  2022. TCP source sends data packets and the TCP sink sends ACK packets.
  2023. TCPSink objects inherit all of the generic agent functionality.
  2024. There are no methods or state variables specific to the TCPSink object.
  2025. .HD
  2026. Configuration Parameters fP
  2027. .LP
  2028. .RS
  2029. .IP fIpacketSize_fP
  2030. The size in bytes to use for all acknowledgment packets.
  2031. .IP fImaxSackBlocks_fP
  2032. The maximum number of blocks of data that can be acknowledged
  2033. in a SACK option.  For a receiver that is also
  2034. using the time stamp option [RFC 1323], the SACK option 
  2035. specified in RFC 2018 has room to include three SACK blocks.
  2036. This is only used by the TCPSink/Sack1 subclass.
  2037. This value may not be increased within any particular TCPSink
  2038. object after that object has been allocated.
  2039. (Once a TCPSink object has been allocated, the value of this
  2040. parameter may be decreased but not increased).
  2041. .RE
  2042. .SH "TCPSINK/DELACK OBJECTS"
  2043. DelAck objects are a subclass of TCPSink that implement
  2044. a delayed-ACK receiver for TCP packets.
  2045. They inherit all of the TCPSink object functionality.
  2046. There are no methods or state variables specific to the DelAck object.
  2047. .HD
  2048. Configuration Parameters fP
  2049. .LP
  2050. .RS
  2051. .IP fIinterval_fP
  2052. The amount of time to delay before generating an acknowledgment
  2053. for a single packet.  If another packet arrives before this
  2054. time expires, generate an acknowledgment immediately.
  2055. .RE
  2056. .SH "TCPSINK/SACK1 OBJECTS"
  2057. TCPSink/Sack1 objects are a subclass of TCPSink that implement
  2058. a SACK receiver for TCP packets.
  2059. They inherit all of the TCPSink object functionality.
  2060. There are no methods, configuration parameters or state variables
  2061. specific to this object.
  2062. .SH "TCPSINK/SACK1/DELACK OBJECTS"
  2063. TCPSink/Sack1/DelAck objects are a subclass of TCPSink/Sack1 that implement
  2064. a delayed-SACK receiver for TCP packets.
  2065. They inherit all of the TCPSink/Sack1 object functionality.
  2066. There are no methods or state variables specific to this object.
  2067. .HD
  2068. Configuration Parameters fP
  2069. .LP
  2070. .RS
  2071. .IP fIinterval_fP
  2072. The amount of time to delay before generating an acknowledgment
  2073. for a single packet.  If another packet arrives before this
  2074. time expires, generate an acknowledgment immediately.
  2075. .RE
  2076. .SH "SRM OBJECTS"
  2077. SRM objects are a subclass of agent objects that implement the
  2078. SRM reliable multicast transport protocol. They inherit all of the 
  2079. generic agent functionalities.
  2080. .IP "fB$srm traffic-source fIsourcefP"
  2081. Attach a traffic source, e.g., Application/Traffic/CBR, to the SRM agent. 
  2082. .IP "fB$srm startfP"
  2083. Join the multicast group, start the SRM agent and its attached traffic source.
  2084. .IP "fB$srm deletefP"
  2085. Stop the SRM agent, delete all its status and detach the traffic source.
  2086. .IP "fB$srm trace fItrace-file fP"
  2087. Write the traces generated by the SRM agent to fItrace-filefP. The traces 
  2088. includes timer settings, request and repair sending and receipts, etc. Two 
  2089. related files that are not built into ns are
  2090. fItcl/mcast/srm-debug.tclfP
  2091. that permits more detailed tracing of the delay computation functions,
  2092. and 
  2093. fItcl/mcast/srm-nam.tclfP
  2094. that separately marks srm control messages from data.
  2095. The latter is useful to enhance nam visualisation.
  2096. .IP "fB$srm log fIlog-file fP"
  2097. Write the recovery statistics during each request or repair to fIlog-filefP.
  2098. The statistics include start time, duration, message id, total number of 
  2099. duplicate requests and repairs.
  2100. .IP "fB$srm distance? fInode fP"
  2101. Return the distance estimate to fInodefP in this SRM agent.
  2102. .IP "fB$srm distances? fInode fP"
  2103. Returns a list of <group member,  distance> tuples of the distances to all 
  2104. group members that this node is aware of.  The group member is
  2105. identified
  2106. as the address of the remote agent.
  2107. The first tuple is this agent's token.
  2108. The list can be directly loaded into a Tcl array.
  2109. .LP
  2110. .HD
  2111. Configuration Parameters fP
  2112. .RS
  2113. .IP fIpacketSize_fP
  2114. The data packet size in bytes
  2115. that will be used for repair messages. The default value
  2116. is 1024. 
  2117. .IP fIrequestFunction_fP
  2118. The algorithm used to produce a retransmission request, e.g., setting 
  2119. request timers. The default value is SRM/request. Other possible request
  2120. functions are SRM/request/Adaptive, used by the
  2121. Adaptive SRM code.
  2122. .IP fIrepairFunction_fP
  2123. The algorithm used to produce a repair, e.g., compute repair timers. The
  2124. default value is SRM/repair. Other possible request functions are 
  2125. SRM/repair/Adaptive, used by the Adaptive SRM code.
  2126. .IP fIsessionFunction_fP
  2127. The algorithm used to generate session messages. Default is SRM/session
  2128. .IP fIsessionDelay_fP
  2129. The basic interval of session messages. Slight random variation is added to 
  2130. this interval to avoid global synchronization of session messages. User may 
  2131. want to adjust this variable according to their specific simulation. 
  2132. Measured in seconds;
  2133. default value is 1.0 seconds.
  2134. .IP "fIC1_, C2_fP"
  2135. The parameters which control the request timer. Refer to [8] for detail. The
  2136. default value is fIC1_fP = fIC2_fP = 2.0.
  2137. .IP "fID1_, D2_fP"
  2138. The parameters which control the repair timer. Refer to [8] for detail. The 
  2139. default value is fID1_fP = fID2_fP = 1.0.
  2140. .IP fIrequestBackoffLimit_fP
  2141. The maximum number of exponential backoffs. Default value is 5.
  2142. .RE
  2143. .LP  
  2144. .HD 
  2145. State Variables
  2146. .RS
  2147. .LP
  2148. .IP fIstats_fP
  2149. An array containing multiple statistics needed by adaptive SRM agent. 
  2150. Including: duplicate requests and repairs in current request/repair period,
  2151. average number of duplicate requests and repairs, request and repair delay in
  2152. current request/repair period, average request and repair delay.
  2153. .RE
  2154. .SH "SRM/Adaptive OBJECTS"
  2155. SRM/Adaptive objects are a subclass of the SRM objects that implement the
  2156. adaptive SRM reliable multicast transport protocol. They inherit all of the 
  2157. SRM object functionalities.
  2158. .LP
  2159. .HD
  2160. State Variables
  2161. Refer to the SRM paper by Sally et al ([11]) for more detail.
  2162. .RS
  2163. .LP
  2164. .IP fIpdistance_fP
  2165. This variable is used to pass the distance estimate provided by the
  2166. remote agent in a request or repair message.
  2167. .IP "fID1_, D2_fP"
  2168. The same as that in SRM agents, except that they are initialized to 
  2169. log10(group size) when generating the first repair.
  2170. .IP "fIMinC1_, MaxC1_, MinC2_, MaxC2_fP"
  2171. The minimum/maximum values of C1_ and C2_. Default initial values are 
  2172. defined in [8].
  2173. These values define the dynamic range of fIC1_fP and fIC2_fP.
  2174. .IP "fIMinD1_, MaxD1_, MinD2_, MaxD2_fP"
  2175. The minimum/maximum values of D1_ and D2_. Default initial values are defined
  2176. in [8]. These values define the dynamic range of fID1_fP and fID2_fP.
  2177. .IP fIAveDupsfP
  2178. Higher bound for average duplicates.
  2179. .IP fIAveDelayfP
  2180. Higher bound for average delay.
  2181. ." units?
  2182. .IP fIepsfP
  2183. fIAveDupsfP - fIdupsfP determines the lower bound of the number of 
  2184. duplicates, when we should adjust parameters to decrease delay.
  2185. .RE
  2186. .SH "APPLICATION OBJECTS"
  2187. Application objects generate data for transport agents to send.
  2188. .SH "FTP APPLICATION OBJECTS"
  2189. Application/FTP objects  produce bulk data for a TCP object to
  2190. send. 
  2191. .IP "fB$ftp startfP"
  2192. Causes FTP to produce packets indefinitely.
  2193. .IP "fB$ftp produce fInfP"
  2194. Causes the FTP object to produce
  2195. .I n
  2196. packets instantaneously.
  2197. .IP "fB$ftp stopfP"
  2198. Causes the attached TCP object to stop sending data.
  2199. .IP "fB$ftp attach fIagentfP"
  2200. Attaches an Application/FTP object to fIagentfP.
  2201. .IP "fB$ftp producemore fIcountfP"
  2202. Causes the Application/FTP object to produce fIcountfP more packets.
  2203. .RE
  2204. .HD
  2205. Configuration Parameters fP
  2206. .LP
  2207. .RS
  2208. .IP fImaxpktsfP
  2209. The maximum number of packets generated.
  2210. .RE
  2211. .SH "TELNET APPLICATION OBJECTS"
  2212. Application/Telnet objects produce individual packets with inter-arrival
  2213. times as follows.  If fIinterval_fP is non-zero, then inter-arrival
  2214. times are chosen from an exponential distribution with average
  2215. fIinterval_fP.  If fIinterval_fP is zero, then inter-arrival times
  2216. are chosen using the "tcplib" telnet distribution.
  2217. .IP "fB$telnet startfP"
  2218. Causes the Application/Telnet object to start producing packets.
  2219. .IP "fB$telnet stopfP"
  2220. Causes the Application/Telnet object to stop producing packets.
  2221. .IP "fB$telnet attach fIagentfP"
  2222. Attaches a Application/Telnet object to fIagentfP.
  2223. .RE
  2224. .HD
  2225. Configuration Parameters fP
  2226. .LP
  2227. .RS
  2228. .IP fIinterval_fP
  2229. The average inter-arrival time in seconds for packets generated by the
  2230. Application/Telnet object.
  2231. .RE
  2232. .SH "TRAFFIC OBJECTS"
  2233. Traffic objects create data for a transport protocol to send.
  2234. A Traffic object is created by instantiating an object of class
  2235. Application/Traffic/fItypefP
  2236. where
  2237. .I type
  2238. is one of Exponential, Pareto, CBR, Trace.
  2239. .SH "EXPONENTIAL TRAFFIC OBJECTS"
  2240. Application/Traffic/Exponential objects generate On/Off traffic.  During "on" periods,
  2241. packets are generated at a constant burst rate.  During "off"
  2242. periods, no traffic is generated.
  2243. Burst times and
  2244. idle times are taken from exponential distributions.
  2245. .HD
  2246. Configuration Parameters fP
  2247. .LP
  2248. .RS
  2249. .IP fIpacket_size_fP
  2250. The packet size in bytes.
  2251. .IP fIburst_time_fP
  2252. Burst duration in seconds.
  2253. .IP fIidle_time_fP
  2254. Idle time in seconds.
  2255. .IP fIrate_fP
  2256. Peak rate in bits per second.
  2257. .SH "PARETO TRAFFIC OBJECTS"
  2258. Application/Traffic/Pareto objects generate On/Off traffic with burst times and
  2259. idle times taken from pareto distributions.
  2260. .HD
  2261. Configuration Parameters fP
  2262. .LP
  2263. .RS
  2264. .IP fIpacket_size_fP
  2265. The packet size in bytes.
  2266. .IP fIburst_time_fP
  2267. Average on time in seconds.
  2268. .IP fIidle_time_fP
  2269. Average off time in seconds.
  2270. .IP fIrate_fP
  2271. Peak rate in bits per second.
  2272. .IP fIshape_fP
  2273. Pareto shape parameter.
  2274. .SH "CBR (CONSTANT BIT RATE) TRAFFIC OBJECTS"
  2275. Application/Traffic/CBR objects generate packets at a constant rate.  
  2276. Dither can be added to the interarrival times by enabling the "random" flag.
  2277. .HD
  2278. Configuration Parameters fP
  2279. .LP
  2280. .RS
  2281. .IP fIrate_fP
  2282. Peak rate in bits per second.
  2283. .IP fIpacket_size_fP
  2284. The packet size in bytes.
  2285. .IP fIrandom_fP
  2286. Flag that turns dithering on and off (default is off).
  2287. .IP fImaxpkts_fP
  2288. Maximum number of packets to send.
  2289. .SH "TRACE TRAFFIC OBJECTS"
  2290. Application/Traffic/Trace objects are used to generate traffic from a trace file.
  2291. .IP "fB$trace attach-tracefile fItfilefP"
  2292. Attach the Tracefile object
  2293. .I tfile
  2294. to this trace.
  2295. The Tracefile object
  2296. specifies the trace file
  2297. from which the traffic data is to be read
  2298. (see TRACEFILE OBJECTS section).  Multiple Application/Traffic/Trace objects can
  2299. be attached to the same Tracefile object.  A random starting place
  2300. within the Tracefile is chosen for each Application/Traffic/Trace object.
  2301. .LP
  2302. There are no configuration parameters for this object.
  2303. .SH "TRACEFILE OBJECTS"
  2304. Tracefile objects are used to specify the 
  2305. trace file that is to be used 
  2306. for generating traffic (see TRAFFIC/TRACE OBJECTS section).
  2307. $tracefile is an instance of the Tracefile Object.
  2308. .IP "fB$tracefile filename fItrace-inputfP"
  2309. Set the filename from which
  2310. the traffic trace data is to be read to
  2311. .I trace-input.
  2312. .LP
  2313. There are no configuration parameters for this object.  A trace file
  2314. consists of any number of fixed length records.  Each record consists
  2315. of 2 32 bit fields.  The first indicates the interval until the next
  2316. packet is generated in microseconds.  The second indicates the length
  2317. of the next packet in bytes.
  2318. .SH "TRACE AND MONITORING METHODS"
  2319. [NOTE: This section has not been verified to be up-to-date with the release.]
  2320. Trace objects are used to generate event level capture logs typically
  2321. to an output file. 
  2322. Throughout this section $ns 
  2323. refers to a Simulator object, $agent
  2324. refers to an Agent object.
  2325. .IP "fB$ns create-trace fItype fileID node1 node2 [option]fP"
  2326. Create a Trace object of type
  2327. .I type
  2328. and attach the filehandle
  2329. .I fileID
  2330. to it to monitor the
  2331. queues between nodes
  2332. .I node1
  2333. and
  2334. .I node2.
  2335. .I type
  2336. can be one of
  2337. Enque, Deque, Drop.
  2338. Enque monitors packet arrival at a queue.
  2339. Deque monitors packet departure at a queue.
  2340. Drop monitors packet drops at a queue.
  2341. .I fileID
  2342. must be a file handle returned by the Tcl
  2343. .I open
  2344. command and it must have been opened for writing.
  2345. If fIoptionfP is not specified, the command will instruct the created 
  2346. trace object to generate ns traces. If fIoptionfP is """nam"""
  2347. the new object will produce nam traces.
  2348. Returns a handle to the trace object.
  2349. .IP "fB$ns drop-trace fInode1 node2 tracefP"
  2350. Remove trace object attached to
  2351. the link between nodes
  2352. .I node1
  2353. and
  2354. .I node2
  2355. with 
  2356. .I trace
  2357. as the object handle.
  2358. .IP "fB$ns trace-queue fInode1 node2 fileIDfP"
  2359. Enable Enque, Deque and Drop
  2360. tracing on the link between
  2361. .I node1
  2362. and
  2363. .I node2.
  2364. .IP "fB$ns namtrace-queue fInode1 node2 fileIDfP"
  2365. Same function as fB$ns trace-queuefP, except it produces nam traces.
  2366. .IP "fB$ns trace-all fIfileIDfP"
  2367. Enable Enque, Deque, Drop Tracing 
  2368. on all the links in the topology
  2369. created after this method is invoked.
  2370. Also enables the tracing of network dynamics.
  2371. .I fileID
  2372. must be a file handle returned by the Tcl
  2373. .I open
  2374. command and it must have been opened for writing.
  2375. .IP "fB$ns namtrace-all fIfileIDfP"
  2376. Same function as fB$ns trace-allfP, except it will produce all equivalent 
  2377. traces in nam format. In addition, calling this command fIbeforefP the 
  2378. simulator 
  2379. starts to run will generate color configurations (if any) and topology 
  2380. information needed by nam (nodes, links, queues). An example can be found 
  2381. at ns-2/tcl/ex/nam-example.tcl.
  2382. .IP "fB$ns namtrace-config fIfileIDfP"
  2383. Assign a file to store nam configuration information, e.g., 
  2384. node/link/agents and some Simulator-related traces such as annotations.
  2385. When you don't want to trace every object. call this function and then 
  2386. use fI$ns namtrace-queuefP, fIrtModel tracefP, etc., to insert 
  2387. traces individually. Note that you should use the same file for individual 
  2388. traces and nam configuration. An example for this is available at 
  2389. ns-2/tcl/ex/nam-separate-trace.tcl.
  2390. .IP "fB$ns monitor-queue fInode1 node2fP"
  2391. Arrange for queue length of link
  2392. between nodes
  2393. .I node1
  2394. and
  2395. .I node2
  2396. to be tracked.
  2397. Returns QueueMonitor object that can be queried
  2398. to learn average queue size etc.
  2399. [see QueueMonitor Objects section]
  2400. .IP "fB$ns flush-tracefP"
  2401. Flush the output channels attached to all the trace objects.
  2402. .IP "fB$link trace-dynamics fIns fileID [option]fP"
  2403. Trace the dynamics of this link
  2404. and write the output to
  2405. .I fileID
  2406. filehandle.
  2407. .I ns
  2408. is an instance of the Simulator or MultiSim object
  2409. that was created to invoke the simulation.
  2410. .IP "fB$ns color fIid namefP"
  2411. Create a color index, which links the number fIidfP to the color name 
  2412. fInamefP. All colors created fIbeforefP the simulator starts to run will 
  2413. be written to nam trace file, if there is any.
  2414. .IP "fB$ns trace-annotate fIstringfP"
  2415. Writes an annotation to ns and nam trace file, if there are any. The string
  2416. should be enclosed in double quote to make it a single argument.
  2417. .IP "fBtrace_annotate fIstringfP"
  2418. Another version of fB$ns trace-annotatefP, which is a global function and 
  2419. doesn't require the caller to know ns.
  2420. .IP "fB$ns duplex-link-op $node1 $node2 $op $argsfP"
  2421. Perform a given operation fI$opfP on the given duplex link 
  2422. (fI$node1fP, fI$node2fP).
  2423. The following two operations may be used:
  2424. .nf
  2425. orient - Specify the nam orientation of the duplex link. Values can be
  2426.   left, right, up, down, their mixture combined by '-' (e.g., 
  2427.   left-down), and a number specifying the angle between the
  2428.   link and the horizontal line.
  2429. queuePos - Construct a queue of the simplex link (fI$node1fP, 
  2430.   fI$node2fP) in nam, and specify the angle between the 
  2431.   horizontal line and the line along which the queued packets
  2432.   will be displayed.
  2433. .fi
  2434. .IP "fB$ns add-agent-trace fIagent name [fileID]fP"
  2435. Write a nam trace line, which will create a trace agent for fIagentfP when
  2436. interpreted by nam. The trace agent's name will be 
  2437. fInamefP. This nam trace agent is used to show the position of fIagentfP
  2438. and can be used to write nam traces of variables associated with the agent.
  2439. By default traces will be written to the file assigned by fInamtrace-allfP.
  2440. fIfileIDfP can be used to write traces to another file.
  2441. .IP "fB$agent tracevar fInamefP"
  2442. Label OTcl variable fInamefP of fB$agentfP to be traced. Then whenever 
  2443. the variable fInamefP changes value, a nam trace line will be written to 
  2444. nam trace file, if there is one. Note that fInamefP must be the same as the 
  2445. variable's real OTcl name.
  2446. .IP "fB$ns delete-agent-trace fIagentfP"
  2447. Write a nam trace line, which will delete the nam trace associated with 
  2448. fIagentfP when interpreted by nam.
  2449. .IP "fB$agent add-var-trace fIname value [type]fP"
  2450. Write a nam trace line, which creates a variable trace with name fInamefP and
  2451. value fIvaluefP, when interpreted by nam. fItypefP indicates the type of 
  2452. the variable, e.g., is it a list, array, or a plain variable. Currently only 
  2453. plain variable is supported, for which fItypefP = 'v'.
  2454. .LP
  2455. The following 2 functions should be called fIafterfP the simulator starts 
  2456. running. This can be done using fB$ns atfP.
  2457. .IP "fB$agent delete-var-trace fInamefP"
  2458. Write a nam trace line, which deletes the variable trace fInamefP when 
  2459. interpreted by nam.
  2460. .IP "fB$agent update-var-trace fIname value [type]fP"
  2461. Write a nam trace line, which changes the value of traced variable fInamefP
  2462. when interpreted by nam. Unlike fB$agent tracevarfP, the above 3 
  2463. functions provide 'manual' variable tracing, in which variable tracing are done
  2464. by placing fB$agent update-var-tracefP in OTcl code, while fItracevarfP
  2465. automatically generates nam traces when the traced variable changes value.
  2466. .LP
  2467. The tracefile format is backward compatible
  2468. with the output files in the
  2469. ns version 1 simulator
  2470. so that ns-1 post-processing
  2471. scripts can still be used.
  2472. Trace records of traffic for link objects with Enque, Deque or Drop
  2473. Tracing have the following form:
  2474. .LP
  2475. .RS
  2476. .nf
  2477.     <code> <time> <hsrc> <hdst> <packet>
  2478. .fi
  2479. .RE
  2480. .LP
  2481. where
  2482. .LP
  2483. .RS
  2484. .nf
  2485. <code> := [hd+-r] h=hop d=drop +=enque -=deque r=receive
  2486. <time> := simulation time in seconds
  2487. <hsrc> := first node address of hop/queuing link
  2488. <hdst> := second node address of hop/queuing link
  2489. <packet> :=  <type> <size> <flags> <flowID> <src.sport> <dst.dport> <seq> <pktID>
  2490. <type> := tcp|telnet|cbr|ack etc.
  2491. <size> := packet size in bytes
  2492. <flags> := [CP]  C=congestion, P=priority
  2493. <flowID> := flow identifier field as defined for IPv6
  2494. <src.sport> := transport address (src=node,sport=agent)
  2495. <dst.sport> := transport address (dst=node,dport=agent)
  2496. <seq> := packet sequence number
  2497. <pktID> := unique identifer for every new packet
  2498. .fi
  2499. Only those agents interested in
  2500. providing sequencing will generate
  2501. sequence numbers and hence
  2502. this field may not be 
  2503. useful for packets generated by some agents.
  2504. .LP
  2505. For links that use RED gateways,
  2506. there are additional trace records as follows:
  2507. .LP 
  2508. .RS 
  2509. .nf
  2510.     <code> <time> <value> 
  2511. .fi
  2512. .RE 
  2513. .LP 
  2514. where
  2515. .LP 
  2516. .RS 
  2517. .nf
  2518. <code> := [Qap] Q=queue size, a=average queue size, 
  2519. p=packet dropping probability 
  2520. <time> := simulation time in seconds
  2521. <value> := value
  2522. .fi 
  2523. .RE
  2524. .LP
  2525. Trace records for link dynamics are of the form:
  2526. .LP
  2527. .RS
  2528. .nf
  2529.     <code> <time> <state> <src> <dst>
  2530. .fi
  2531. .RE
  2532. .LP
  2533. where
  2534. .LP
  2535. .RS
  2536. .nf
  2537. <code> := [v]
  2538. <time> := simulation time in seconds
  2539. <state> := [link-up | link-down]
  2540. <src> := first node address of link
  2541. <dst> := second node address of link
  2542. .fi
  2543. .RE
  2544. .SH "INTEGRATOR Objects"
  2545. Integrator Objects support the approximate computation
  2546. of continuous integrals using discrete sums.
  2547. The running sum(integral) is computed as:
  2548. sum_ +=  [lasty_ * (x - lastx_)]
  2549. where (x, y) is the last element entered and (lastx_, lasty_)
  2550. was the element previous to that added to the sum.
  2551. lastx_ and lasty_ are updated as new elements 
  2552. are added.
  2553. The first sample point defaults to (0,0)
  2554. that can be changed by changing the values of (lastx_,lasty_).
  2555. .IP "fB$integrator newpoint fIx yfP"
  2556. Add the point (x,y) to the sum.
  2557. Note that it does not make sense for x to be less than lastx_.
  2558. .LP
  2559. There are no configuration parameters specific to this object.
  2560. .LP
  2561. .HD
  2562. State Variables
  2563. .LP
  2564. .RS
  2565. .IP fIlastx_fP
  2566. x-coordinate of the last sample point.
  2567. .IP fIlasty_fP
  2568. y-coordinate of the last sample point.
  2569. .IP fIsum_fP
  2570. Running sum (i.e. the integral) of the sample points.
  2571. .SH "SAMPLES Objects"
  2572. Samples Objects support the computation of 
  2573. mean and variance statistics for a given sample.
  2574. .IP "fB$samples meanfP"
  2575. Returns mean of the sample.
  2576. .IP "fB$samples variancefP"
  2577. Returns variance of the sample.
  2578. .IP "fB$samples cntfP"
  2579. Returns a count of the sample points considered.
  2580. .IP "fB$samples resetfP"
  2581. Reset the Samples object to monitor a fresh set of samples.
  2582. .LP
  2583. There are no configuration parameters or state variables specific to
  2584. this object. 
  2585. .SH BUILTINS
  2586. [NOTE: This section has not been verified to be up-to-date with the release.]
  2587. Because
  2588. .I OTcl
  2589. is a full-fledged programming language, it is easy to build
  2590. high-level simulation constructs from the ns primitives.
  2591. Several library routines have been built in this way, and
  2592. are embedded into the ns interpreter
  2593. as methods of the Simulator class.
  2594. Throughout this section
  2595. $ns represents a Simulator object.
  2596. .IP "fB$ns create-connection fIsrcType srcNode dstType dstNode classfP"
  2597. Create a source agent of type
  2598. .I srcType
  2599. at node
  2600. .I srcNode
  2601. and connect it to a destination agent of type
  2602. .I dstType
  2603. at node
  2604. .I dstNode.
  2605. Also, connect the destination agent to the source agent.
  2606. The traffic class of both agents is set to
  2607. .I class.
  2608. This method returns the source agent.
  2609. .SH EXAMPLE
  2610. .nf
  2611.     set ns [new Simulator]
  2612.     #
  2613.     # Create two nodes 
  2614.     #
  2615.     set n0 [$ns node]
  2616.     set n1 [$ns node]
  2617.     #
  2618.     # Create a trace and arrange for all the trace events of the 
  2619.     # links subsequently created to be dumped to "out.tr"
  2620.     #
  2621.     set f [open out.tr w]
  2622.     $ns trace-all $f
  2623.     #
  2624.     # Connect the two nodes with a 1.5Mb link with a transmission
  2625.     # delay of 10ms using FIFO drop-tail queuing
  2626.     #
  2627.     $ns duplex-link $n0 $n1 1.5Mb 10ms DropTail
  2628.     #
  2629.     # Set up BSD Tahoe TCP connections in opposite directions.
  2630.     #
  2631.     set tcp_src1 [new Agent/TCP]
  2632.     set tcp_snk1 [new Agent/TCPSink]
  2633.     set tcp_src2 [new Agent/TCP]
  2634.     set tcp_snk2 [new Agent/TCPSink]
  2635.     $ns attach-agent $n0 $tcp_src1
  2636.     $ns attach-agent $n1 $tcp_snk1
  2637.     $ns attach-agent $n1 $tcp_src2
  2638.     $ns attach-agent $n0 $tcp_snk2
  2639.     $ns connect $tcp_src1 $tcp_snk1
  2640.     $ns connect $tcp_src2 $tcp_snk2
  2641.     #
  2642.     # Create ftp sources at the each node
  2643.     #
  2644.     set ftp1 [$tcp_src1 attach-source FTP]
  2645.     set ftp2 [$tcp_src2 attach-source FTP]
  2646.     #
  2647.     # Start up the first ftp at the time 0 and
  2648.     # the second ftp staggered 1 second later
  2649.     #
  2650.     $ns at 0.0 "$ftp1 start"
  2651.     $ns at 1.0 "$ftp2 start"
  2652.     #
  2653.     # run the simulation for 10 simulated seconds
  2654.     #
  2655.     $ns at 10.0 "exit 0"
  2656.     $ns run
  2657. .fi
  2658. .SH DEBUGGING 
  2659. To enable debugging when building ns from source:
  2660. .nf
  2661.     % ./configure --enable-debug
  2662.     % make 
  2663. .fi
  2664. .LP
  2665. For more details about ns debugging
  2666. please see
  2667. <http://www-mash.cs.berkeley.edu/ns/ns-debugging.html>.
  2668. .SH DIFFERENCES FROM NS-1
  2669. In general, more complex objects in ns-1 have been broken down
  2670. into simpler components for greater flexibility
  2671. and composability.
  2672. Details of differences between ns-1 and ns-2
  2673. can be found at 
  2674. <http://www-mash.cs.berkeley.edu/ns/ns.html>.
  2675. .SH HISTORY
  2676. Work on the LBL Network Simulator began in May 1990 with modifications to
  2677. S. Keshav's (keshav@research.att.com) REAL network
  2678. simulator, which he developed for his Ph.D. work at U.C. Berkeley.
  2679. In Summer 1991, the simulation description language
  2680. was revamped, and later, the NEST threads model was
  2681. replaced with an event driven framework and
  2682. an efficient scheduler.  Among other contributions, 
  2683. Sugih Jamin (jamin@usc.edu)
  2684. contributed the calendar-queue based scheduling code
  2685. to this version of the program, which was known as 
  2686. .I tcpsim.
  2687. In December 1994, McCanne ported tcpsim
  2688. to C++ and replaced the yacc-based simulation description
  2689. language with a Tcl interface, and added preliminary
  2690. multicast support.  Also at this time, the name changed from 
  2691. .I tcpsim
  2692. to the more generic
  2693. .I ns.
  2694. Throughout, Floyd has made modifications to
  2695. the TCP code and added additional source models for her
  2696. investigations into RED gateways, resource management,
  2697. class-based queuing, explicit congestion notification,
  2698. and traffic phase effects.  Many of the papers discussing these
  2699. issues are available through URL http://www-nrg.ee.lbl.gov/.
  2700. .SH "SEE ALSO"
  2701. Tcl(1),
  2702. tclsh(1),
  2703. nam(1),
  2704. otclsh
  2705. .IP fB[1]fP
  2706. S. Keshav, ``REAL: A Network Simulator''.  UCB CS Tech Report 88/472,
  2707. December 1988.  See
  2708. http://minnie.cs.adfa.oz.au/REAL/index.html
  2709. for more information.
  2710. .IP fB[2]fP
  2711. Floyd, S. and Jacobson, V.  Random Early Detection gateways for
  2712. Congestion Avoidance.  IEEE/ACM Transactions on Networking,
  2713. Vol. 1, No. 4.  August 1993.  pp. 397-413.  Available from
  2714. http://www-nrg.ee.lbl.gov/floyd/red.html.
  2715. .IP fB[3]fP
  2716. Floyd, S.  Simulator Tests.  July 1995.
  2717. URL ftp://ftp.ee.lbl.gov/papers/simtests.ps.Z.
  2718. .IP fB[4]fP
  2719. Floyd, S., and Jacobson, V.
  2720. On Traffic Phase Effects in Packet-Switched Gateways.
  2721. Internetworking: Research and Experience, V.3 N.3, September 1992.
  2722. pp. 115-156.
  2723. .IP fB[5]fP
  2724. Floyd, S., and Jacobson, V.
  2725. Link-sharing and Resource Management Models for Packet Networks.
  2726. IEEE/ACM Transactions on Networking, Vol. 3 No. 4, August 1995. 
  2727. pp. 365-386.
  2728. .IP fB[6]fP
  2729. Floyd, S.,
  2730. Notes of Class-Based Queueing: Setting Parameters.
  2731. URL ftp://ftp.ee.lbl.gov/papers/ params.ps.Z.  September 1995.
  2732. .IP fB[7]fP
  2733. Fall, K., and Floyd, S.  Comparisons of Tahoe, Reno, and Sack TCP.
  2734. December 1995.  URL ftp:// ftp.ee.lbl.gov/papers/sacks.ps.Z.
  2735. .IP fB[8]fP
  2736. David Wetherall and Christopher J. Linblad.
  2737. Extending Tcl for Dynamic Object-Oriented Programming.
  2738. In Proceedings of the USENIX Tcl/Tk Workshop, Toronto, Ontario, USENIX.
  2739. July, 1995.
  2740. At <http://www.tns.lcs.mit.edu/publications/tcltk95.djw.html>.
  2741. .IP fB[9]fP
  2742. M. Shreedhar and G. Varghese. Efficient Fair Queueing Using Deficit
  2743. Round Robin. In Proc. of SIGCOMM, pp. 231-242, 1995.
  2744. .IP fB[10]fP
  2745. Hoe, J., 
  2746. Improving the Start-up Behavior of a Congestion Control Scheme for TCP.
  2747. in SIGCOMM 96, August 1996, pp. 270-280.
  2748. URL http://www.acm.org/sigcomm/sigcomm96/papers/hoe.html.
  2749. .IP fB[11]fP 
  2750. Fall, K., Floyd, S., and Henderson, T.,
  2751. Ns Simulator Tests for Reno FullTCP.
  2752. URL ftp://ftp.ee.lbl.gov/papers/fulltcp.ps.  July 1997.
  2753. .IP fB[12]fP
  2754. Floyd, S., Jacobson, V., Liu, C.-G., McCanne, S. and Zhang, L., 
  2755. A Reliable Multicast Framework for Light-weight Sessions and Application Level
  2756. Framing. To appear in IEEE/ACK Transaction on Networking, November 1996. 
  2757. ftp://ftp.ee.lbl.gov/papers/srm1.ps.gz
  2758. .IP fB[13]fP
  2759. Fall, K., and Varadhan, K., (eds.),
  2760. "Ns notes and documentation",
  2761. work in progress.
  2762. http://www-mash.cs.berkeley.edu/ns/nsDoc.ps.gz
  2763. .LP
  2764. Research using ns is on-going.
  2765. A list of recent research contributions employing ns
  2766. can be found at
  2767. <http://www-mash.cs.berkeley.edu/ns/ns-research.html>.
  2768. .LP
  2769. Work on ns is on-going.
  2770. Information about the most recent version is available
  2771. at 
  2772. <http://www-mash.cs.berkeley.edu/ns/ns.html>.
  2773. .LP
  2774. A mailing list for ns users and announcements is also available,
  2775. send mail to ns-users-request@mash.cs.berkeley.edu
  2776. or ns-announce-request@mash.cs.berkeley.edu
  2777. to join.
  2778. Questions should be forwarded to ns-users;
  2779. ns-announce will be low-traffic announcements only.
  2780. .SH AUTHORS
  2781. Steven McCanne (mccanne@ee.lbl.gov), University of California, Berkeley
  2782. and Lawrence Berkeley National Laboratory, Berkeley, CA, and
  2783. Sally Floyd (floyd@ee.lbl.gov)
  2784. Lawrence Berkeley National Laboratory, Berkeley, CA.
  2785. A complete list of contributors to ns is at
  2786. <http://www-mash.cs.berkeley.edu/ns/ns-contributors.html>.
  2787. .SH BUGS
  2788. Not all of the functionality supported in ns-1 has been ported to ns-2.
  2789. This manual page is incomplete.