14edb46e9SPaul TrainaBEGIN { 24edb46e9SPaul Traina # we need to know (usual) packet size to convert byte numbers 34edb46e9SPaul Traina # to packet numbers 44edb46e9SPaul Traina if (packetsize <= 0) 54edb46e9SPaul Traina packetsize = 512 64edb46e9SPaul Traina } 74edb46e9SPaul Traina$5 !~ /[SR]/ { 84edb46e9SPaul Traina # print out per-packet data in the form: 94edb46e9SPaul Traina # <packet #> 104edb46e9SPaul Traina # <start sequence #> 114edb46e9SPaul Traina # <1st send time> 124edb46e9SPaul Traina # <last send time> 134edb46e9SPaul Traina # <1st ack time> 144edb46e9SPaul Traina # <last ack time> 154edb46e9SPaul Traina # <# sends> 164edb46e9SPaul Traina # <# acks> 174edb46e9SPaul Traina 184edb46e9SPaul Traina n = split ($1,t,":") 194edb46e9SPaul Traina tim = t[1]*3600 + t[2]*60 + t[3] 204edb46e9SPaul Traina if ($6 != "ack") { 214edb46e9SPaul Traina i = index($6,":") 224edb46e9SPaul Traina strtSeq = substr($6,1,i-1) 234edb46e9SPaul Traina id = 1.5 + (strtSeq - 1) / packetsize 244edb46e9SPaul Traina id -= id % 1 254edb46e9SPaul Traina if (maxId < id) 264edb46e9SPaul Traina maxId = id 274edb46e9SPaul Traina if (firstSend[id] == 0) { 284edb46e9SPaul Traina firstSend[id] = tim 294edb46e9SPaul Traina seqNo[id] = strtSeq 304edb46e9SPaul Traina } 314edb46e9SPaul Traina lastSend[id] = tim 324edb46e9SPaul Traina timesSent[id]++ 334edb46e9SPaul Traina totalPackets++ 344edb46e9SPaul Traina } else { 354edb46e9SPaul Traina id = 1 + ($7 - 2) / packetsize 364edb46e9SPaul Traina id -= id % 1 374edb46e9SPaul Traina timesAcked[id]++ 384edb46e9SPaul Traina if (firstAck[id] == 0) 394edb46e9SPaul Traina firstAck[id] = tim 404edb46e9SPaul Traina lastAck[id] = tim 414edb46e9SPaul Traina totalAcks++ 424edb46e9SPaul Traina } 434edb46e9SPaul Traina } 444edb46e9SPaul TrainaEND { 454edb46e9SPaul Traina print "# " maxId " chunks. " totalPackets " packets sent. " \ 464edb46e9SPaul Traina totalAcks " acks." 474edb46e9SPaul Traina # for packets that were implicitly acked, make the ack time 484edb46e9SPaul Traina # be the ack time of next explicitly acked packet. 494edb46e9SPaul Traina for (i = maxId-1; i > 0; --i) 504edb46e9SPaul Traina while (i > 0 && firstAck[i] == 0) { 514edb46e9SPaul Traina lastAck[i] = firstAck[i] = firstAck[i+1] 524edb46e9SPaul Traina --i 534edb46e9SPaul Traina } 544edb46e9SPaul Traina tzero = firstSend[1] 554edb46e9SPaul Traina for (i = 1; i <= maxId; i++) 564edb46e9SPaul Traina printf "%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t%d\n",\ 574edb46e9SPaul Traina i, seqNo[i], \ 584edb46e9SPaul Traina firstSend[i] - tzero, lastSend[i] - tzero,\ 594edb46e9SPaul Traina firstAck[i] - tzero, lastAck[i] - tzero,\ 604edb46e9SPaul Traina timesSent[i], timesAcked[i] 614edb46e9SPaul Traina } 62