// Manual Routing
// raniwala : messy global declarations
extern int global_flowid;
extern int flow_to_tag[];
......
TcpSink::TcpSink......
{
......
// Manual Routing
//raniwala: tracking number fo bytes received
bind("nbytes_",&nbytes_);
flow_id = global_flowid;
}
void TcpSink::ack(Packet* opkt)
{
......
hdr_tcp *otcp = hdr_tcp::access(opkt);
hdr_ip *oiph = hdr_ip::access(opkt);
hdr_tcp *ntcp = hdr_tcp::access(npkt);
// Manual Routing
// raniwala- put flow-id, put invalid tag
flow_id = hdr_cmn::access(opkt)->_flowid_; ......
acker_->append_ack(hdr_cmn::access(npkt),
ntcp, otcp->seqno());
add_to_ack(npkt);
// the above function is used in TcpAsymSink
// Manual Routing
// raniwala - put flow-id, put invalid tag
hdr_cmn::access(npkt)->_flowid_ = flow_id;
hdr_cmn::access(npkt)->_tag_ = -1;
...... }
void TcpSink::recv(Packet* pkt, Handler*)
{
......
numToDeliver = acker_->update(th->seqno(), numBytes);
// Manual Routing
//raniwala: tracking number of bytes received
nbytes_ += numBytes;
......
} |