| BEGIN { |
| # we need to know (usual) packet size to convert byte numbers |
| # to packet numbers |
| if (packetsize <= 0) |
| packetsize = 512 |
| } |
| $5 !~ /[SR]/ { |
| # print out per-packet data in the form: |
| # <packet #> |
| # <start sequence #> |
| # <1st send time> |
| # <last send time> |
| # <1st ack time> |
| # <last ack time> |
| # <# sends> |
| # <# acks> |
| |
| n = split ($1,t,":") |
| tim = t[1]*3600 + t[2]*60 + t[3] |
| if ($6 != "ack") { |
| i = index($6,":") |
| strtSeq = substr($6,1,i-1) |
| id = 1.5 + (strtSeq - 1) / packetsize |
| id -= id % 1 |
| if (maxId < id) |
| maxId = id |
| if (firstSend[id] == 0) { |
| firstSend[id] = tim |
| seqNo[id] = strtSeq |
| } |
| lastSend[id] = tim |
| timesSent[id]++ |
| totalPackets++ |
| } else { |
| id = 1 + ($7 - 2) / packetsize |
| id -= id % 1 |
| timesAcked[id]++ |
| if (firstAck[id] == 0) |
| firstAck[id] = tim |
| lastAck[id] = tim |
| totalAcks++ |
| } |
| } |
| END { |
| print "# " maxId " chunks. " totalPackets " packets sent. " \ |
| totalAcks " acks." |
| # for packets that were implicitly acked, make the ack time |
| # be the ack time of next explicitly acked packet. |
| for (i = maxId-1; i > 0; --i) |
| while (i > 0 && firstAck[i] == 0) { |
| lastAck[i] = firstAck[i] = firstAck[i+1] |
| --i |
| } |
| tzero = firstSend[1] |
| for (i = 1; i <= maxId; i++) |
| printf "%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t%d\n",\ |
| i, seqNo[i], \ |
| firstSend[i] - tzero, lastSend[i] - tzero,\ |
| firstAck[i] - tzero, lastAck[i] - tzero,\ |
| timesSent[i], timesAcked[i] |
| } |