David van Moolenbroek b636d99d91 Import NetBSD tcpdump(8)
For now, printing of Sun RPC requests is disabled because we do not
yet have the RPC header files.  This should affect basically noone,
as we do not have any RPC-based programs yet, for the same reason.

Change-Id: Ie7818faaaacdc104d8b2c37a68866b4ce18247d6
2017-03-21 22:00:21 +00:00

62 lines
1.4 KiB
Awk

BEGIN {
# we need to know (usual) packet size to convert byte numbers
# to packet numbers
if (packetsize <= 0)
packetsize = 512
}
$5 !~ /[SR]/ {
# print out per-packet data in the form:
# <packet #>
# <start sequence #>
# <1st send time>
# <last send time>
# <1st ack time>
# <last ack time>
# <# sends>
# <# acks>
n = split ($1,t,":")
tim = t[1]*3600 + t[2]*60 + t[3]
if ($6 != "ack") {
i = index($6,":")
strtSeq = substr($6,1,i-1)
id = 1.5 + (strtSeq - 1) / packetsize
id -= id % 1
if (maxId < id)
maxId = id
if (firstSend[id] == 0) {
firstSend[id] = tim
seqNo[id] = strtSeq
}
lastSend[id] = tim
timesSent[id]++
totalPackets++
} else {
id = 1 + ($7 - 2) / packetsize
id -= id % 1
timesAcked[id]++
if (firstAck[id] == 0)
firstAck[id] = tim
lastAck[id] = tim
totalAcks++
}
}
END {
print "# " maxId " chunks. " totalPackets " packets sent. " \
totalAcks " acks."
# for packets that were implicitly acked, make the ack time
# be the ack time of next explicitly acked packet.
for (i = maxId-1; i > 0; --i)
while (i > 0 && firstAck[i] == 0) {
lastAck[i] = firstAck[i] = firstAck[i+1]
--i
}
tzero = firstSend[1]
for (i = 1; i <= maxId; i++)
printf "%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t%d\n",\
i, seqNo[i], \
firstSend[i] - tzero, lastSend[i] - tzero,\
firstAck[i] - tzero, lastAck[i] - tzero,\
timesSent[i], timesAcked[i]
}