• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 BEGIN	{
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 	}
69