summaryrefslogtreecommitdiffstats
path: root/packetdat.awk
diff options
context:
space:
mode:
Diffstat (limited to 'packetdat.awk')
-rw-r--r--packetdat.awk61
1 files changed, 61 insertions, 0 deletions
diff --git a/packetdat.awk b/packetdat.awk
new file mode 100644
index 0000000..292e219
--- /dev/null
+++ b/packetdat.awk
@@ -0,0 +1,61 @@
+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]
+ }