14edb46e9SPaul TrainaBEGIN { 24edb46e9SPaul Traina # we need the number of bytes in a packet to do the output 34edb46e9SPaul Traina # in packet numbers rather than byte numbers. 44edb46e9SPaul Traina if (packetsize <= 0) 54edb46e9SPaul Traina packetsize = 512 64edb46e9SPaul Traina expectNext = 1 74edb46e9SPaul Traina lastwin = -1 84edb46e9SPaul Traina } 94edb46e9SPaul Traina { 104edb46e9SPaul Traina # convert tcp trace to send/ack form. 114edb46e9SPaul Traina n = split ($1,t,":") 124edb46e9SPaul Traina tim = t[1]*3600 + t[2]*60 + t[3] 134edb46e9SPaul Traina if (NR <= 1) { 144edb46e9SPaul Traina tzero = tim 154edb46e9SPaul Traina ltim = tim 164edb46e9SPaul Traina OFS = "\t" 174edb46e9SPaul Traina } 184edb46e9SPaul Traina if ($6 != "ack") { 194edb46e9SPaul Traina # we have a data packet record: 204edb46e9SPaul Traina # ignore guys with syn, fin or reset 'cause we 214edb46e9SPaul Traina # can't handle their sequence numbers. Try to 224edb46e9SPaul Traina # detect and add a flag character for 'anomalies': 234edb46e9SPaul Traina # * -> re-sent packet 244edb46e9SPaul Traina # - -> packet after hole (missing packet(s)) 254edb46e9SPaul Traina # # -> odd size packet 264edb46e9SPaul Traina if ($5 !~ /[SFR]/) { 274edb46e9SPaul Traina i = index($6,":") 284edb46e9SPaul Traina j = index($6,"(") 294edb46e9SPaul Traina strtSeq = substr($6,1,i-1) 304edb46e9SPaul Traina endSeq = substr($6,i+1,j-i-1) 314edb46e9SPaul Traina len = endSeq - strtSeq 324edb46e9SPaul Traina id = endSeq 334edb46e9SPaul Traina if (! timeOf[id]) 344edb46e9SPaul Traina timeOf[id] = tim 354edb46e9SPaul Traina if (endSeq - expectNext < 0) 364edb46e9SPaul Traina flag = "*" 374edb46e9SPaul Traina else { 384edb46e9SPaul Traina if (strtSeq - expectNext > 0) 394edb46e9SPaul Traina flag = "-" 404edb46e9SPaul Traina else if (len != packetsize) 414edb46e9SPaul Traina flag = "#" 424edb46e9SPaul Traina else 434edb46e9SPaul Traina flag = " " 444edb46e9SPaul Traina expectNext = endSeq 454edb46e9SPaul Traina } 464edb46e9SPaul Traina printf "%7.2f\t%7.2f\t%s send %s %d", tim-tzero, tim-ltim,\ 474edb46e9SPaul Traina flag, $5, strtSeq 484edb46e9SPaul Traina if (++timesSent[id] > 1) 494edb46e9SPaul Traina printf " (%.2f) [%d]", tim - timeOf[id], timesSent[id] 504edb46e9SPaul Traina if (len != packetsize) 514edb46e9SPaul Traina printf " <%d>", len 524edb46e9SPaul Traina } 534edb46e9SPaul Traina } else { 544edb46e9SPaul Traina id = $7 554edb46e9SPaul Traina 564edb46e9SPaul Traina printf "%7.2f\t%7.2f\t%s ack %s %d", tim-tzero, tim-ltim,\ 574edb46e9SPaul Traina flag, $5, id 584edb46e9SPaul Traina if ($9 != lastwin) { 594edb46e9SPaul Traina printf " win %d", $9 604edb46e9SPaul Traina lastwin = $9 614edb46e9SPaul Traina } 624edb46e9SPaul Traina printf " (%.2f)", tim - timeOf[id] 634edb46e9SPaul Traina if (++timesAcked[id] > 1) 644edb46e9SPaul Traina printf " [%d]", timesAcked[id] 654edb46e9SPaul Traina } 664edb46e9SPaul Traina printf "\n" 674edb46e9SPaul Traina ltim = tim 684edb46e9SPaul Traina } 69