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