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