Many of the TCP agents can be used with the TCPSink../ns-2/tcp-sink.h as the peer. This class defines the []recv and []ack methods as follows:
void TcpSink::recv(Packet* pkt, Handler*) { hdr_tcp *th = (hdr_tcp*)pkt-\>access(off_tcp_); acker_-\>update(th-\>seqno()); ack(pkt); Packet::free(pkt); } void TcpSink::ack(Packet* opkt) { Packet* npkt = allocpkt(); hdr_tcp *otcp = (hdr_tcp*)opkt-\>access(off_tcp_); hdr_tcp *ntcp = (hdr_tcp*)npkt-\>access(off_tcp_); ntcp-\>seqno() = acker_-\>Seqno(); ntcp-\>ts() = otcp-\>ts(); hdr_ip* oip = (hdr_ip*)opkt-\>access(off_ip_); hdr_ip* nip = (hdr_ip*)npkt-\>access(off_ip_); nip-\>flowid() = oip-\>flowid(); hdr_flags* of = (hdr_flags*)opkt-\>access(off_flags_); hdr_flags* nf = (hdr_flags*)npkt-\>access(off_flags_); nf-\>ecn_ = of-\>ecn_; acker_-\>append_ack((hdr_cmn*)npkt-\>access(off_cmn_), ntcp, otcp-\>seqno()); send(npkt, 0); }The []recv method overrides the []Agent::recv method (which merely discards the received packet). It updates some internal state with the sequence number of the received packet (and therefore requires the off_tcp_ variable to be properly initialized. It then generates an acknowledgment for the received packet. The []ack method makes liberal use of access to packet header fields including separate accesses to the TCP header, IP header, Flags header, and common header. The call to []send invokes the []Connector::send method.