12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectBEGIN { 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # we need to know (usual) packet size to convert byte numbers 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # to packet numbers 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (packetsize <= 0) 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project packetsize = 512 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project$5 !~ /[SR]/ { 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # print out per-packet data in the form: 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # <packet #> 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # <start sequence #> 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # <1st send time> 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # <last send time> 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # <1st ack time> 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # <last ack time> 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # <# sends> 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # <# acks> 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n = split ($1,t,":") 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tim = t[1]*3600 + t[2]*60 + t[3] 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ($6 != "ack") { 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = index($6,":") 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project strtSeq = substr($6,1,i-1) 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project id = 1.5 + (strtSeq - 1) / packetsize 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project id -= id % 1 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (maxId < id) 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxId = id 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (firstSend[id] == 0) { 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project firstSend[id] = tim 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project seqNo[id] = strtSeq 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project lastSend[id] = tim 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project timesSent[id]++ 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project totalPackets++ 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project id = 1 + ($7 - 2) / packetsize 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project id -= id % 1 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project timesAcked[id]++ 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (firstAck[id] == 0) 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project firstAck[id] = tim 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project lastAck[id] = tim 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project totalAcks++ 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectEND { 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print "# " maxId " chunks. " totalPackets " packets sent. " \ 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project totalAcks " acks." 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # for packets that were implicitly acked, make the ack time 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # be the ack time of next explicitly acked packet. 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = maxId-1; i > 0; --i) 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (i > 0 && firstAck[i] == 0) { 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project lastAck[i] = firstAck[i] = firstAck[i+1] 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project --i 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tzero = firstSend[1] 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 1; i <= maxId; i++) 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf "%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t%d\n",\ 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i, seqNo[i], \ 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project firstSend[i] - tzero, lastSend[i] - tzero,\ 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project firstAck[i] - tzero, lastAck[i] - tzero,\ 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project timesSent[i], timesAcked[i] 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 62