DRCL JavaSim API

drcl.inet.transport
Class TCPSink

java.lang.Object
  |
  +--drcl.DrclObj
        |
        +--drcl.comp.Component
              |
              +--drcl.net.Module
                    |
                    +--drcl.inet.Protocol
                          |
                          +--drcl.inet.transport.TCPSink
All Implemented Interfaces:
java.lang.Cloneable, drcl.inet.transport.Connection, InetConstants, ObjectDuplicable, java.io.Serializable, TCPConstants

public class TCPSink
extends Protocol
implements TCPConstants, drcl.inet.transport.Connection

This component implements the single-session receiving-side TCP.

By default, when this component receives a TCP packet, it processes the timestamp option and sends back an acknowledgement. In addition, one can enable the SACK flag to make this component append the SACK blocks in the acknowledgement packets. The realization of SACK is based on [RFC2018].

This component also implements delayed ACK. The delay timer is 100ms(0.1 second) as specified in [TCPILL2]. When the delayed ACK flag is enabled, an acknowledgment is sent when (1) the delay timer expires or (2) a new data packet arrives.

Since only one session is handled in this component, open and close of a connection are not implemented, nor is 3-way handshaking.

Additional usage infomation:

  1. To change TTL value, use setTTL(int).
  2. To change receiving buffer size, use setReceivingBuffers(int).
  3. To change delay timer period, use setDelayACKTimeout(double).
References:

Author:
Yuan Gao, Yung-ching Hsiao, Hung-ying Tyan
See Also:
TCP, TCPPacket, Serialized Form

Inner classes inherited from class drcl.comp.Component
Component.LockPack
 
Field Summary
static int DEBUG_RCV
           
static int DEBUG_SACK
           
static int DEBUG_SAMPLE
           
static int DEBUG_SEND
           
static boolean NS_COMPATIBLE
          Sets to true to make TCP ns compatible
protected  boolean SACK
           
 
Fields inherited from class drcl.net.Module
address, downPort, PortGroup_DOWN, PortGroup_UP, timerPort, upPort
 
Fields inherited from class drcl.comp.Component
FLAG_COMPONENT_NOTIFICATION, FLAG_DEBUG_ENABLED, FLAG_DIRECT_OUTPUT_ENABLED, FLAG_ENABLED, FLAG_ERROR_ENABLED, FLAG_EVENT_ENABLED, FLAG_GARBAGE_DISPLAY_ENABLED, FLAG_GARBAGE_ENABLED, FLAG_PORT_NOTIFICATION, FLAG_STARTED, FLAG_STOPPED, FLAG_TRACE_ENABLED, FLAG_UNDEFINED_START, id, infoPort, lockHead, name, parent, PortGroup_DEFAULT_GROUP, PortGroup_EVENT, PortGroup_SERVICE, Root, Trace_DATA, Trace_SEND
 
Fields inherited from interface drcl.inet.transport.TCPConstants
ACK_EVENT, ACK_PORT_ID, AWND_DEFAULT, CLOSE_WAIT, CLOSED, CLOSING, CWND_EVENT, CWND_PORT_ID, DEFAULT_PID, DELAY_ACK, ESTABLISHED, ESTABLISHED_FIN, ESTABLISHED_OVER, FIN_WAIT_1, FIN_WAIT_2, LAST_ACK, LISTEN, LISTEN1, LISTEN2, MAXCWND_DEFAULT, NEW_RENO, NUMDUPACKS, PRE_CLOSED, PRE_LAST_ACK, PRE_SYN_SENT, RECEIVE, RENO, RTT_EVT, RTTVAR_EVENT, RTTVAR_PORT_ID, RXT_EVT, SEND, SEQNO_EVENT, SEQNO_PORT_ID, SEQNO_RCV_EVENT, SEQNO_RCV_PORT_ID, SEQNO_SENT_EVENT, SEQNO_SENT_PORT_ID, SRTT_EVENT, SRTT_PORT_ID, SST_EVENT, SST_PORT_ID, STATES, SYN_RCVD, SYN_SENT, TAHOE, TIME_WAIT, TIMEOUT_TYPES, VEGAS
 
Fields inherited from interface drcl.inet.InetConstants
BYTE_MODE, DEFAULT_BANDWIDTH, DEFAULT_BUFFER_SIZE, DEFAULT_MTU, EVENT_ID_CHANGED_PORT_ID, EVENT_IDENTITY_ADDED, EVENT_IDENTITY_REMOVED, EVENT_IF_NEIGHBOR_DOWN, EVENT_IF_NEIGHBOR_UP, EVENT_IF_PORT_ID, EVENT_MCAST_HOST_PORT_ID, EVENT_PKT_ARRIVAL, EVENT_PKT_ARRIVAL_PORT_ID, EVENT_RT_ENTRY_ADDED, EVENT_RT_ENTRY_MODIFIED, EVENT_RT_ENTRY_REMOVED, EVENT_RT_MCAST_CHANGED_PORT_ID, EVENT_RT_UCAST_CHANGED_PORT_ID, EVENT_VIF_NEIGHBOR_DOWN, EVENT_VIF_NEIGHBOR_UP, EVENT_VIF_PORT_ID, HOST_ENTRY_EXT, ID_CSL, MCAST_QUERY_PORT_ID, PACKET_MODE, PID_DV, PID_DVMRP, PID_HELLO, PID_IGMP, PID_OSPF, PID_RSVP, PID_TCP, PID_UDP, SERVICE_CONFIGSW_PORT_ID, SERVICE_ID_PORT_ID, SERVICE_IF_PORT_ID, SERVICE_MCAST_PORT_ID, SERVICE_RT_PORT_ID, UCAST_QUERY_PORT_ID
 
Constructor Summary
TCPSink()
           
TCPSink(java.lang.String id_)
           
 
Method Summary
protected  void ack_syn_fin(boolean doSACK_)
          Sends an acknowledgement packet.
protected  void dataArriveAtDownPort(java.lang.Object data_, Port downPort_)
          The down port follows the PktDelivery contract.
protected  void dataArriveAtUpPort(java.lang.Object data_, Port upPort_)
          The up port group ports follow the ByteStreamContract.
 void duplicate(java.lang.Object source_)
          Duplicates the content of source_, including ID, name, child components and connections among them, to this component.
 int getAvailableReceivingBuffers()
           
 java.lang.String[] getDebugLevelNames()
          Returns the names of defined debug levels; subclasses should override this method if debug levels are defined.
 double getDelayACKTimeout()
           
 long getLocalAddr()
          Returns the local address.
 int getLocalPort()
          Returns the local port.
 int getMSS()
           
 java.lang.String getName()
          Returns the (informational) name of the component.
 long getPeer()
          Returns the peer address.
 int getReceivingBuffers()
           
 int getRemotePort()
          Returns the peer port.
 int getTTL()
           
 java.lang.String info()
          Returns information regarding this component.
 boolean isDelayACKEnabled()
           
 boolean isSackEnabled()
           
protected  void option_process(TCPPacket pkt_)
          Processes TCP options in the packet header.
protected  void recv(TCPPacket pkt_)
          Handles incoming packets.
 void reset()
          Resets the component for being used anew.
 void setDelayACKEnabled(boolean delayack_)
           
 void setDelayACKTimeout(double v_)
           
 void setMSS(int mss)
           
 void setReceivingBuffers(int awnd_)
           
 void setSackEnabled(boolean sack_)
           
 void setTTL(int ttl)
           
protected  void timeout(java.lang.Object evt_)
          Handles timeout events.
 
Methods inherited from class drcl.inet.Protocol
broadcast, broadcast, broadcast, broadcast, broadcast, broadcast, createConfigSwitchPort, createIDChangedEventPort, createIDServicePort, createIFEventPort, createIFQueryPort, createMcastHostEventPort, createMcastQueryPort, createMulticastRTChangedEventPort, createPktArrivalEventPort, createRTServicePort, createUcastQueryPort, createUnicastRTChangedEventPort, createVIFEventPort, forward, forward, forward, forward, forward, forward, idAddedEventHandler, idRemovedEventHandler, mcastHostJoinEventHandler, mcastHostLeaveEventHandler, mcastQueryHandler, neighborDownEventHandler, neighborUpEventHandler, pktArrivalHandler, processOther, rtAddedEventHandler, rtModifiedEventHandler, rtRemovedEventHandler, ucastQueryHandler, vNeighborDownEventHandler, vNeighborUpEventHandler
 
Methods inherited from class drcl.net.Module
cancelTimeout, deliver, getAddress, process, removeDefaultDownPort, removeDefaultUpPort, removeTimerPort, setAddress, setTimeout, setTimeoutAt
 
Methods inherited from class drcl.comp.Component
_resume, _start, _stop, addComponent, addComponent, addEventPort, addEventPort, addForkPort, addPort, addPort, addPort, addPort, addPort, addPort, addPort, addPort, addServerPort, addServerPort, cancelFork, componentAdded, componentRemoved, connect, containsComponent, containsComponent, containsPort, debug, disconnectAll, disconnectAllPeers, disconnectAllPorts, drop, drop, error, error, expose, exposeEventPorts, exposePort, exposePort, exposePort, exposePort, exposePort, findAvailable, findAvailable, findAvailable, finishing, fork, forkAt, getAllComponents, getAllPorts, getAllPorts, getAllWiresInside, getAllWiresInsideOut, getAllWiresOut, getComponent, getComponentFlag, getComponentFlag, getContract, getContractHT, getContractHT, getDebugFlagsInBinary, getForkManager, getID, getParent, getPort, getPort, getRoot, getRuntime, getTime, iduplicate, isAncestorOf, isComponentNotificationEnabled, isContainer, isDebugEnabled, isDebugEnabledAt, isDirectOutputEnabled, isEnabled, isErrorNoticeEnabled, isEventExportEnabled, isGarbageDisplayEnabled, isGarbageEnabled, isPortNotificationEnabled, isPortRemovable, isStarted, isStopped, isTraceEnabled, lock, notify, notifyAll, operate, portAdded, portRemoved, reboot, removeAll, removeAllComponents, removeAllPorts, removeAllPorts, removeComponent, removeComponent, removePort, removePort, removePort, resume, run, sduplicate, send, sendAt, setComponentFlag, setComponentFlag, setComponentNotificationEnabled, setContract, setDebugEnabled, setDebugEnabled, setDebugEnabledAt, setDebugEnabledAt, setDebugEnabledAt, setDirectOutputEnabled, setDirectOutputEnabled, setEnabled, setErrorNoticeEnabled, setErrorNoticeEnabled, setEventExportEnabled, setEventExportEnabled, setExecutionBoundary, setGarbageDisplayEnabled, setGarbageDisplayEnabled, setGarbageEnabled, setGarbageEnabled, setID, setID, setName, setPort, setPort, setPortNotificationEnabled, setPortRemovable, setRuntime, setTraceEnabled, setTraceEnabled, sleepFor, sleepUntil, stop, toString, unexpose, unlock, useLocalForkManager, useLocalForkManager, wait
 
Methods inherited from class drcl.DrclObj
clone
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NS_COMPATIBLE

public static boolean NS_COMPATIBLE
Sets to true to make TCP ns compatible

SACK

protected boolean SACK

DEBUG_RCV

public static final int DEBUG_RCV

DEBUG_SEND

public static final int DEBUG_SEND

DEBUG_SACK

public static final int DEBUG_SACK

DEBUG_SAMPLE

public static final int DEBUG_SAMPLE
Constructor Detail

TCPSink

public TCPSink()

TCPSink

public TCPSink(java.lang.String id_)
Method Detail

getName

public java.lang.String getName()
Description copied from class: Component
Returns the (informational) name of the component.
Overrides:
getName in class Component

getDebugLevelNames

public java.lang.String[] getDebugLevelNames()
Description copied from class: Component
Returns the names of defined debug levels; subclasses should override this method if debug levels are defined.
Overrides:
getDebugLevelNames in class Component

reset

public void reset()
Description copied from class: Component
Resets the component for being used anew. All the internal variables must be set to the initial state. All the ports and child components are reset as well.
Overrides:
reset in class Component

duplicate

public void duplicate(java.lang.Object source_)
Description copied from class: Component
Duplicates the content of source_, including ID, name, child components and connections among them, to this component. Subclasses need to override this method to copy its own variables.
Overrides:
duplicate in class Protocol

setTTL

public void setTTL(int ttl)

getTTL

public int getTTL()

setMSS

public void setMSS(int mss)

getMSS

public int getMSS()

setReceivingBuffers

public void setReceivingBuffers(int awnd_)

getReceivingBuffers

public int getReceivingBuffers()

getAvailableReceivingBuffers

public int getAvailableReceivingBuffers()

setSackEnabled

public void setSackEnabled(boolean sack_)

isSackEnabled

public boolean isSackEnabled()

setDelayACKEnabled

public void setDelayACKEnabled(boolean delayack_)

isDelayACKEnabled

public boolean isDelayACKEnabled()

setDelayACKTimeout

public void setDelayACKTimeout(double v_)

getDelayACKTimeout

public double getDelayACKTimeout()

timeout

protected void timeout(java.lang.Object evt_)
Handles timeout events.
Overrides:
timeout in class Module
Following copied from class: drcl.net.Module
See Also:
Module.setTimeout(Object, double), Module.setTimeoutAt(Object, double)

dataArriveAtUpPort

protected void dataArriveAtUpPort(java.lang.Object data_,
                                  Port upPort_)
The up port group ports follow the ByteStreamContract. The method is blocked until the receiving is complete.
Overrides:
dataArriveAtUpPort in class Module

dataArriveAtDownPort

protected void dataArriveAtDownPort(java.lang.Object data_,
                                    Port downPort_)
The down port follows the PktDelivery contract.
Overrides:
dataArriveAtDownPort in class Module

recv

protected void recv(TCPPacket pkt_)
Handles incoming packets.

option_process

protected void option_process(TCPPacket pkt_)
Processes TCP options in the packet header.

ack_syn_fin

protected void ack_syn_fin(boolean doSACK_)
Sends an acknowledgement packet.

getLocalPort

public int getLocalPort()
Description copied from interface: drcl.inet.transport.Connection
Returns the local port.
Specified by:
getLocalPort in interface drcl.inet.transport.Connection

getRemotePort

public int getRemotePort()
Description copied from interface: drcl.inet.transport.Connection
Returns the peer port.
Specified by:
getRemotePort in interface drcl.inet.transport.Connection

getLocalAddr

public long getLocalAddr()
Description copied from interface: drcl.inet.transport.Connection
Returns the local address.
Specified by:
getLocalAddr in interface drcl.inet.transport.Connection

getPeer

public long getPeer()
Description copied from interface: drcl.inet.transport.Connection
Returns the peer address.
Specified by:
getPeer in interface drcl.inet.transport.Connection

info

public java.lang.String info()
Description copied from class: Component
Returns information regarding this component. Subclasses should override this method to provide useful information at run-time.
Overrides:
info in class Component

DRCL JavaSim API

Copyright © 2001 - DRCL, OSU     ~ Back to JavaSim Home ~