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