Script Modules - Custom UDP Processes
With Script Modules, instructors and students can now develop and add new protocols to PT. They are called custom processes and for now, PT only supports custom processes on top of UDP.
Create
The process can be created and started as follow:
// create the custom process on the device var process = device.getProcess('UdpProcess').createCustomUdpProcess(); // start the process listening on a specified UDP port process.start(1234); |
Send Data
It can send data, but only supports a text payload right now.
// send data to IP and UDP port process.sendData("text data", "1.1.1.1", 1234, null, null); |
The last argument in sendData() is the outgoing port. If null, the lower processes, such as routing process on routers, would decide the outgoing port. Or it can be supplied:
// send data to IP and UDP port and FastEthernet port var outPort = device.getPort("FastEthernet"); process.sendData("some data", "1.1.1.1", 1234, null, outPort); |
The second to last argument in sendData() is the frame instance. It is used in Simulation Mode to show the PDU color and details, such as what decisions are made on the PDU. There is currently no representation of the PDU format in PDU Details.
// create a frame instance with color and destination var frameInstance = process.createFrameInstance(0xff0000, "1.1.1.1"); // add a decision node so it shows in PDU Info if (frameInstance != null) frameInstance.addDecision("CHAT_SEND", "The chat process sends a message.", false, 7); process.sendData(data, dstIp, dstPort, frameInstance, null); // finalize the frame instance so it shows up in Simulation Mode process.finalizeFrameInstance(frameInstance); |
Receive Data
When the custom UDP process receives a packet, it would use the delegate mechanism to have a Script Module do custom processing with the packet. First, the Script Module needs to register for the delegate, and then in the delegate function, process the data.
// register for the processData delegate process.registerDelegate("processData", null, processData); processData = function(src, args) { doSomething(args.data, args.srcIp, args.srcPort); } |