%description: Test TCPMsgBasedSendQueue, TCPMsgBasedRcvQueue classes - sending and receiving 2GB data %includes: #include "TCPQueueTesterFunctions.h" %global: using namespace ::inet::tcp; %activity: TCPMsgBasedSendQueue sendQueue; TCPMsgBasedSendQueue *sq = &sendQueue; sq->init(0); EV << sq->info() <<"\n"; TCPMsgBasedRcvQueue rcvQueue; TCPMsgBasedRcvQueue *rq = &rcvQueue; uint32 seq = 0; rq->init(seq); EV << rq->info() <<"\n"; enqueue(sq, "msg1", 500000000); // 0.. 500000000 enqueue(sq, "msg2", 500000000); // 500000000..1000000000 enqueue(sq, "msg3", 500000000); // 1000000000..1500000000 enqueue(sq, "msg4", 500000000); // 1500000000..2000000000 ulong seglen = 250000000; seq = sq->getBufferStartSeq(); while (seqLess(seq, sq->getBufferEndSeq())) { ulong curlen = seqMin(seq+seglen, sq->getBufferEndSeq()) - seq; insertSegment(rq, createSegmentWithBytes(sq, seq, seq+curlen)); seq += curlen; } seq = sq->getBufferStartSeq(); for(;;) { uint32 eseq = seqMin(seq + seglen, sq->getBufferEndSeq()); if (seqGE(seq, eseq)) break; extractBytesUpTo(rq, eseq); discardUpTo(sq, eseq); seq = eseq; } EV << ".\n"; %contains: stdout [0..0), 0 packets rcv_nxt=0 0 msgs SQ:enqueue("msg1", 500000000): --> [0..500000000), 1 packets SQ:enqueue("msg2", 500000000): --> [0..1000000000), 2 packets SQ:enqueue("msg3", 500000000): --> [0..1500000000), 3 packets SQ:enqueue("msg4", 500000000): --> [0..2000000000), 4 packets SQ:createSegmentWithBytes(0, 250000000): RQ:insertSeg [0..250000000) --> rcv_nxt=250000000 [0..250000000) 0 msgs SQ:createSegmentWithBytes(250000000, 500000000): msg1[0..500000000) RQ:insertSeg [250000000..500000000) --> rcv_nxt=500000000 [0..500000000) 1 msgs SQ:createSegmentWithBytes(500000000, 750000000): RQ:insertSeg [500000000..750000000) --> rcv_nxt=750000000 [0..750000000) 1 msgs SQ:createSegmentWithBytes(750000000, 1000000000): msg2[500000000..1000000000) RQ:insertSeg [750000000..1000000000) --> rcv_nxt=1000000000 [0..1000000000) 2 msgs SQ:createSegmentWithBytes(1000000000, 1250000000): RQ:insertSeg [1000000000..1250000000) --> rcv_nxt=1250000000 [0..1250000000) 2 msgs SQ:createSegmentWithBytes(1250000000, 1500000000): msg3[1000000000..1500000000) RQ:insertSeg [1250000000..1500000000) --> rcv_nxt=1500000000 [0..1500000000) 3 msgs SQ:createSegmentWithBytes(1500000000, 1750000000): RQ:insertSeg [1500000000..1750000000) --> rcv_nxt=1750000000 [0..1750000000) 3 msgs SQ:createSegmentWithBytes(1750000000, 2000000000): msg4[1500000000..2000000000) RQ:insertSeg [1750000000..2000000000) --> rcv_nxt=2000000000 [0..2000000000) 4 msgs RQ:extractUpTo(250000000): < > --> rcv_nxt=2000000000 [250000000..2000000000) 4 msgs SQ:discardUpTo(250000000): [250000000..2000000000), 4 packets RQ:extractUpTo(500000000): < < msg1: 500000000 bytes > > --> rcv_nxt=2000000000 [500000000..2000000000) 3 msgs SQ:discardUpTo(500000000): [500000000..2000000000), 3 packets RQ:extractUpTo(750000000): < > --> rcv_nxt=2000000000 [750000000..2000000000) 3 msgs SQ:discardUpTo(750000000): [750000000..2000000000), 3 packets RQ:extractUpTo(1000000000): < < msg2: 500000000 bytes > > --> rcv_nxt=2000000000 [1000000000..2000000000) 2 msgs SQ:discardUpTo(1000000000): [1000000000..2000000000), 2 packets RQ:extractUpTo(1250000000): < > --> rcv_nxt=2000000000 [1250000000..2000000000) 2 msgs SQ:discardUpTo(1250000000): [1250000000..2000000000), 2 packets RQ:extractUpTo(1500000000): < < msg3: 500000000 bytes > > --> rcv_nxt=2000000000 [1500000000..2000000000) 1 msgs SQ:discardUpTo(1500000000): [1500000000..2000000000), 1 packets RQ:extractUpTo(1750000000): < > --> rcv_nxt=2000000000 [1750000000..2000000000) 1 msgs SQ:discardUpTo(1750000000): [1750000000..2000000000), 1 packets RQ:extractUpTo(2000000000): < < msg4: 500000000 bytes > > --> rcv_nxt=2000000000 0 msgs SQ:discardUpTo(2000000000): [2000000000..2000000000), 0 packets .