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