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