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