12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectBEGIN { 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # we need the number of bytes in a packet to do the output 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # in packet numbers rather than byte numbers. 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (packetsize <= 0) 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project packetsize = 512 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project expectNext = 1 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project lastwin = -1 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # convert tcp trace to send/ack form. 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n = split ($1,t,":") 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tim = t[1]*3600 + t[2]*60 + t[3] 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (NR <= 1) { 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tzero = tim 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ltim = tim 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project OFS = "\t" 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ($6 != "ack") { 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # we have a data packet record: 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # ignore guys with syn, fin or reset 'cause we 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # can't handle their sequence numbers. Try to 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # detect and add a flag character for 'anomalies': 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # * -> re-sent packet 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # - -> packet after hole (missing packet(s)) 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # # -> odd size packet 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ($5 !~ /[SFR]/) { 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = index($6,":") 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = index($6,"(") 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project strtSeq = substr($6,1,i-1) 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project endSeq = substr($6,i+1,j-i-1) 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = endSeq - strtSeq 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project id = endSeq 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (! timeOf[id]) 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project timeOf[id] = tim 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (endSeq - expectNext < 0) 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project flag = "*" 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (strtSeq - expectNext > 0) 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project flag = "-" 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (len != packetsize) 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project flag = "#" 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project flag = " " 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project expectNext = endSeq 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf "%7.2f\t%7.2f\t%s send %s %d", tim-tzero, tim-ltim,\ 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project flag, $5, strtSeq 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (++timesSent[id] > 1) 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf " (%.2f) [%d]", tim - timeOf[id], timesSent[id] 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (len != packetsize) 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf " <%d>", len 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project id = $7 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf "%7.2f\t%7.2f\t%s ack %s %d", tim-tzero, tim-ltim,\ 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project flag, $5, id 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ($9 != lastwin) { 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf " win %d", $9 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project lastwin = $9 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf " (%.2f)", tim - timeOf[id] 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (++timesAcked[id] > 1) 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf " [%d]", timesAcked[id] 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf "\n" 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ltim = tim 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 69