Home | History | Annotate | Download | only in tcpdump
      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 	}
     62