11.8 Different agent objects

Class Agent forms the base class from which different types of objects like Nullobject, TCP etc are derived. The methods for Agent class are described in the next section. Configuration parameters for:
fid_
Flowid.
prio_
Priority.
agent_addr_
Address of this agent.
agent_port_
Port adress of this agent.
dst_addr_
Destination address for the agent.
dst_port_
Destination port address for the agent.
flags_
ttl_
TTL defaults to 32.
There are no state variables specific to the generic agent class. Other objects derived from Agent are given below:

Null Objects
Null objects are a subclass of agent objects that implement a traffic sink. They inherit all of the generic agent object functionality. There are no methods specific to this object. The state variables are:

LossMonitor Objects
LossMonitor objects are a subclass of agent objects that implement a traffic sink which also maintains some statistics about the received data e.g., number of bytes received, number of packets lost etc. They inherit all of the generic agent object functionality.

$lossmonitor clear
Resets the expected sequence number to -1.

State Variables are:

nlost_
Number of packets lost.

npkts_
Number of packets received.

bytes_
Number of bytes received.

lastPktTime_
Time at which the last packet was received.

expected_
The expected sequence number of the next packet.

TCP objects
TCP objects are a subclass of agent objects that implement the BSD Tahoe TCP transport protocol as described in paper: "Fall, K., and Floyd, S. Comparisons of Tahoe, Reno, and Sack TCP. December 1995." URL ftp:// ftp.ee.lbl.gov/papers/sacks.ps.Z. They inherit all of the generic agent functionality. Configuration Parameters are:
window_
The upper bound on the advertised window for the TCP connection.

maxcwnd_
The upper bound on the congestion window for the TCP connection. Set to zero to ignore. (This is the default.)

windowInit_
The initial size of the congestion window on slow-start.

windowOption_
The algorithm to use for managing the congestion window.

windowThresh_
Gain constant to exponential averaging filter used to compute awnd (see below). For investigations of different window-increase algorithms.

overhead_
The range of a uniform random variable used to delay each output packet. The idea is to insert random delays at the source in order to avoid phase effects, when desired [see Floyd, S., and Jacobson, V. On Traffic Phase Effects in Packet-Switched Gateways. Internetworking: Research and Experience, V.3 N.3, September 1992. pp. 115-156 ]. This has only been implemented for the Tahoe ("tcp") version of tcp, not for tcp-reno. This is not intended to be a realistic model of CPU processing overhead.

ecn_
Set to true to use explicit congestion notification in addition to packet drops to signal congestion. This allows a Fast Retransmit after a quench() due to an ECN (explicit congestion notification) bit.

packetSize_
The size in bytes to use for all packets from this source.

tcpTick_
The TCP clock granularity for measuring roundtrip times. Note that it is set by default to the non-standard value of 100ms.

bugFix_
Set to true to remove a bug when multiple fast retransmits are allowed for packets dropped in a single window of data.

maxburst_
Set to zero to ignore. Otherwise, the maximum number of packets that the source can send in response to a single incoming ACK.

slow_start_restart_
Set to 1 to slow-start after the connection goes idle. On by default.

syn_
Set to false to disable modeling the initial SYN/SYNACK exchange. On by default. Note: if this is set to false and the DelAck sink is used, it's advisable to also disable the sink's ``SYN_immediate_ack_'' flag.

Defined Constants are:

MWS
The Maximum Window Size in packets for a TCP connection. MWS determines the size of an array in tcp-sink.cc. The default for MWS is 1024 packets. For Tahoe TCP, the "window" parameter, representing the receiver's advertised window, should be less than MWS-1. For Reno TCP, the "window" parameter should be less than (MWS-1)/2.

State Variables are:

dupacks_
Number of duplicate acks seen since any new data was acknowledged.

seqno_
Highest sequence number for data from data source to TCP.

t_seqno_
Current transmit sequence number.

ack_
Highest acknowledgment seen from receiver. cwnd_ Current value of the congestion window.

awnd_
Current value of a low-pass filtered version of the congestion window. For investigations of different window-increase algorithms.

ssthresh_
Current value of the slow-start threshold.

rtt_
Round-trip time estimate.

srtt_
Smoothed round-trip time estimate.

rttvar_
Round-trip time mean deviation estimate.

backoff_
Round-trip time exponential backoff constant.

TCP/Reno Objects
TCP/Reno objects are a subclass of TCP objects that implement the Reno TCP transport protocol described in paper: "Fall, K., and Floyd, S. Comparisons of Tahoe, Reno, and Sack TCP. December 1995." URL ftp:// ftp.ee.lbl.gov/papers/sacks.ps.Z. There are no methods, configuration parameters or state variables specific to this object.

TCP/Newreno Objects
TCP/Newreno objects are a subclass of TCP objects that implement a modified version of the BSD Reno TCP transport protocol. There are no methods or state variables specific to this object.

Configuration Parameters are:

newreno_changes_
Set to zero for the default New Reno described in "Fall, K., and Floyd, S. Comparisons of Tahoe, Reno, and Sack TCP. December 1995". Set to 1 for additional New Reno algorithms [see Hoe, J., Improving the Start-up Behavior of a Congestion Control Scheme for TCP. in SIGCOMM 96, August 1996, pp. 270-280. URL https://www.acm.org/sigcomm/sigcomm96/papers/hoe.html.]; this includes the estimation of the ssthresh parameter during slow-start.

TCP/Vegas Objects
There are no methods or configuration parameters specific to this object. State variables are:

TCP/Sack1 Objects
TCP/Sack1 objects are a subclass of TCP objects that implement the BSD Reno TCP transport protocol with Selective Acknowledgement Extensions described in "Fall, K., and Floyd, S. Comparisons of Tahoe, Reno, and Sack TCP. December 1995". URL ftp:// ftp.ee.lbl.gov/papers/sacks.ps.Z. They inherit all of the TCP object functionality. There are no methods, configuration parameters or state variables specific to this object.

TCP/FACK Objects
TCP/Fack objects are a subclass of TCP objects that implement the BSD Reno TCP transport protocol with Forward Acknowledgement congestion control. They inherit all of the TCP object functionality. There are no methods or state variables specific to this object.

Configuration Parameters are:

ss-div4
Overdamping algorithm. Divides ssthresh by 4 (instead of 2) if congestion is detected within 1/2 RTT of slow-start. (1=Enable, 0=Disable)

rampdown
Rampdown data smoothing algorithm. Slowly reduces congestion window rather than instantly halving it. (1=Enable, 0=Disable)

TCP/FULLTCP Objects
This section has not yet been added here. The implementation and the configuration parameters are described in paper: "Fall, K., Floyd, S., and Henderson, T., Ns Simulator Tests for Reno FullTCP. July, 1997." URL ftp://ftp.ee.lbl.gov/papers/fulltcp.ps.

TCPSINK Objects
TCPSink objects are a subclass of agent objects that implement a receiver for TCP packets. The simulator only implements "one-way" TCP connections, where the TCP source sends data packets and the TCP sink sends ACK packets. TCPSink objects inherit all of the generic agent functionality. There are no methods or state variables specific to the TCPSink object. Configuration Parameters are
packetSize_
The size in bytes to use for all acknowledgment packets.

maxSackBlocks_
The maximum number of blocks of data that can be acknowledged in a SACK option. For a receiver that is also using the time stamp option [RFC 1323], the SACK option specified in RFC 2018 has room to include three SACK blocks. This is only used by the TCPSink/Sack1 subclass. This value may not be increased within any particular TCPSink object after that object has been allocated. (Once a TCPSink object has been allocated, the value of this parameter may be decreased but not increased).

TCPSINK/DELACK Objects
DelAck objects are a subclass of TCPSink that implement a delayed-ACK receiver for TCP packets. They inherit all of the TCPSink object functionality. There are no methods or state variables specific to the DelAck object. Configuration Parameters are:
interval_
The amount of time to delay before generating an acknowledgment for a single packet. If another packet arrives before this time expires, generate an acknowledgment immediately.

RFC2581_immediate_ack_
A boolean flag. If true, conforms to RFC2581 (section 4.2) and only delays the ACK if we know we're not doing recovery, i.e. not gap-filling. Otherwise all ACKs are delayed. The default value is true.

SYN_immediate_ack_
A boolean flag. If true, the first packet in sequence (seqno == 0) is always ACKed immediately. This simulates the behavior of the FullTCP agent, which ACKs a SYN immediately. The default value is true. See also the ``syn_'' flag of the one-way TcpAgent.

TCPSINK/SACK1 Objects
TCPSink/Sack1 objects are a subclass of TCPSink that implement a SACK receiver for TCP packets. They inherit all of the TCPSink object functionality. There are no methods, configuration parameters or state variables specific to this object.

TCPSINK/SACK1/DELACK Objects
TCPSink/Sack1/DelAck objects are a subclass of TCPSink/Sack1 that implement a delayed-SACK receiver for TCP packets. They inherit all of the TCPSink/Sack1 object functionality. There are no methods or state variables specific to this object. Configuration Parameters are:
interval_
The amount of time to delay before generating an acknowledgment for a single packet. If another packet arrives before this time expires, generate an acknowledgment immediately.

Tom Henderson 2014-12-17