blob: f55b7c2f6d13c2469f410d68095f4ebde6f6312a [file] [log] [blame]
The Android Open Source Project2949f582009-03-03 19:30:46 -08001BEGIN {
2 # we need the number of bytes in a packet to do the output
3 # in packet numbers rather than byte numbers.
4 if (packetsize <= 0)
5 packetsize = 512
6 expectNext = 1
7 lastwin = -1
8 }
9 {
10 # convert tcp trace to send/ack form.
11 n = split ($1,t,":")
12 tim = t[1]*3600 + t[2]*60 + t[3]
13 if (NR <= 1) {
14 tzero = tim
15 ltim = tim
16 OFS = "\t"
17 }
18 if ($6 != "ack") {
19 # we have a data packet record:
20 # ignore guys with syn, fin or reset 'cause we
21 # can't handle their sequence numbers. Try to
22 # detect and add a flag character for 'anomalies':
23 # * -> re-sent packet
24 # - -> packet after hole (missing packet(s))
25 # # -> odd size packet
26 if ($5 !~ /[SFR]/) {
27 i = index($6,":")
28 j = index($6,"(")
29 strtSeq = substr($6,1,i-1)
30 endSeq = substr($6,i+1,j-i-1)
31 len = endSeq - strtSeq
32 id = endSeq
33 if (! timeOf[id])
34 timeOf[id] = tim
35 if (endSeq - expectNext < 0)
36 flag = "*"
37 else {
38 if (strtSeq - expectNext > 0)
39 flag = "-"
40 else if (len != packetsize)
41 flag = "#"
42 else
43 flag = " "
44 expectNext = endSeq
45 }
46 printf "%7.2f\t%7.2f\t%s send %s %d", tim-tzero, tim-ltim,\
47 flag, $5, strtSeq
48 if (++timesSent[id] > 1)
49 printf " (%.2f) [%d]", tim - timeOf[id], timesSent[id]
50 if (len != packetsize)
51 printf " <%d>", len
52 }
53 } else {
54 id = $7
55
56 printf "%7.2f\t%7.2f\t%s ack %s %d", tim-tzero, tim-ltim,\
57 flag, $5, id
58 if ($9 != lastwin) {
59 printf " win %d", $9
60 lastwin = $9
61 }
62 printf " (%.2f)", tim - timeOf[id]
63 if (++timesAcked[id] > 1)
64 printf " [%d]", timesAcked[id]
65 }
66 printf "\n"
67 ltim = tim
68 }