I've added a new stack to revonline - UDP Repay (under alextweedly, category programming)

It can be used to replay a stored log of UDP packets, such as you would want to do for application testing and stress testing. It simply replays a series of packets, keeping the original timing characteristics. Although it can handle multiple interleaved streams of packets to different ports, and can map them to new destination addresses and ports, it can't do anything intelligent (or indeed anything at all) to the streams themselves.

I will some day finish and upload the corresponding "UDP Recorder" stack - but the limitations on how you can insert a UDP recorder stack into a network context make it be of rather limited value. It's (generally) much easier to add recording functions to your own app, and then have it record a series of packets while in use. Then you can take the resulting file of packets, and recreate it as a UDP stream, for testing while the real data source is unavailable (or simply because you want a repeatable set of test data).

Some sample functions that you could add to your stack are enclosed below; usage should be fairly obvious
call "recorderStart pFilename"  to start recording
call "recorderRecord pSock, pData" for every packet received (as near to the original receipt of the packet as possible)
call "recorderFinish" when you're done

You can then use the UDP Replay stack to replay this file - with controls for
- speed (%age of original)
- jitter (random variation of +- 20% of inter-packet delay)
- immediate start (often you'll set up the recorder, then have to go off and get everything else started, so there will be a long delay before the initial packet captured; this check box allows you to skip this initial delay on replay.


Note - it doesn't yet allow you to induce mis-ordered packets .... that's coming later, once I have researched current thinking about what kind of misordering is likely.


-- ------ functions to include in your app ------------

-- initial recode in the file
-- 1-4 length of first record *including* the length and the separating CR which is not part of the data recorder
-- 6-17 timestamp
-- <cr>
-- format of each record is
-- 1-4 length *including* the length and the separating CR which is not part of the data recorder
--   6-9 socket number
--  11-22 timestamp
--   24 - (length-1)   actual data received / to be sent
--            <cr>


local lPorts, lStartTime, lPackets, lBytes, lFileName

on recorderStart pFileName
   put pFileName into lFileName
   put the milliseconds into lStartTime
   open file lFileName for binary write
   write format("%4d %12d", 18, lStartTime) & cr to file lFileName
   put 0 into lPackets
   put 0 into lBytes
end recorderStart

on recorderRecord pSock, pData
   put format("%12d", milliseconds() - lStartTime) into tMsec
   put 4 + 1 + 4 + 1 + 12 + 1 + len(pData)+1 into tLen
write format("%4d %4d %12d", tLen, pSock, tMsec) && pData &CR to file lFileName
   add 1 to lPackets
   add len(pData) to lBytes
end recorderRecord


function recorderStatus
   return the milliseconds - lStartTime, lPackets, lBytes
end recorderStatus

function recorderFinish
   close file lFileName
   return the milliseconds - lStartTime, lPackets, lBytes
end recorderFinish



--
Alex Tweedly       http://www.tweedly.net



--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.7.2/349 - Release Date: 26/05/2006

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to