1*4edb46e9SPaul TrainaBEGIN { 2*4edb46e9SPaul Traina # we need to know (usual) packet size to convert byte numbers 3*4edb46e9SPaul Traina # to packet numbers 4*4edb46e9SPaul Traina if (packetsize <= 0) 5*4edb46e9SPaul Traina packetsize = 512 6*4edb46e9SPaul Traina } 7*4edb46e9SPaul Traina$5 !~ /[SR]/ { 8*4edb46e9SPaul Traina # print out per-packet data in the form: 9*4edb46e9SPaul Traina # <packet #> 10*4edb46e9SPaul Traina # <start sequence #> 11*4edb46e9SPaul Traina # <1st send time> 12*4edb46e9SPaul Traina # <last send time> 13*4edb46e9SPaul Traina # <1st ack time> 14*4edb46e9SPaul Traina # <last ack time> 15*4edb46e9SPaul Traina # <# sends> 16*4edb46e9SPaul Traina # <# acks> 17*4edb46e9SPaul Traina 18*4edb46e9SPaul Traina n = split ($1,t,":") 19*4edb46e9SPaul Traina tim = t[1]*3600 + t[2]*60 + t[3] 20*4edb46e9SPaul Traina if ($6 != "ack") { 21*4edb46e9SPaul Traina i = index($6,":") 22*4edb46e9SPaul Traina strtSeq = substr($6,1,i-1) 23*4edb46e9SPaul Traina id = 1.5 + (strtSeq - 1) / packetsize 24*4edb46e9SPaul Traina id -= id % 1 25*4edb46e9SPaul Traina if (maxId < id) 26*4edb46e9SPaul Traina maxId = id 27*4edb46e9SPaul Traina if (firstSend[id] == 0) { 28*4edb46e9SPaul Traina firstSend[id] = tim 29*4edb46e9SPaul Traina seqNo[id] = strtSeq 30*4edb46e9SPaul Traina } 31*4edb46e9SPaul Traina lastSend[id] = tim 32*4edb46e9SPaul Traina timesSent[id]++ 33*4edb46e9SPaul Traina totalPackets++ 34*4edb46e9SPaul Traina } else { 35*4edb46e9SPaul Traina id = 1 + ($7 - 2) / packetsize 36*4edb46e9SPaul Traina id -= id % 1 37*4edb46e9SPaul Traina timesAcked[id]++ 38*4edb46e9SPaul Traina if (firstAck[id] == 0) 39*4edb46e9SPaul Traina firstAck[id] = tim 40*4edb46e9SPaul Traina lastAck[id] = tim 41*4edb46e9SPaul Traina totalAcks++ 42*4edb46e9SPaul Traina } 43*4edb46e9SPaul Traina } 44*4edb46e9SPaul TrainaEND { 45*4edb46e9SPaul Traina print "# " maxId " chunks. " totalPackets " packets sent. " \ 46*4edb46e9SPaul Traina totalAcks " acks." 47*4edb46e9SPaul Traina # for packets that were implicitly acked, make the ack time 48*4edb46e9SPaul Traina # be the ack time of next explicitly acked packet. 49*4edb46e9SPaul Traina for (i = maxId-1; i > 0; --i) 50*4edb46e9SPaul Traina while (i > 0 && firstAck[i] == 0) { 51*4edb46e9SPaul Traina lastAck[i] = firstAck[i] = firstAck[i+1] 52*4edb46e9SPaul Traina --i 53*4edb46e9SPaul Traina } 54*4edb46e9SPaul Traina tzero = firstSend[1] 55*4edb46e9SPaul Traina for (i = 1; i <= maxId; i++) 56*4edb46e9SPaul Traina printf "%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t%d\n",\ 57*4edb46e9SPaul Traina i, seqNo[i], \ 58*4edb46e9SPaul Traina firstSend[i] - tzero, lastSend[i] - tzero,\ 59*4edb46e9SPaul Traina firstAck[i] - tzero, lastAck[i] - tzero,\ 60*4edb46e9SPaul Traina timesSent[i], timesAcked[i] 61*4edb46e9SPaul Traina } 62