{ devices:[ { id:"Alice", ports:1, x:0.5, y:0.1, script: {onPacketReceived:function(device, packet) { doPacketAnimation("Alice", "Router 1", {network:{srcip:"Alice",dstip:"Carol"}}); }} }, { id:"Bob", image:"iphone-1", ports:1, x:0.15, y:0.75, script: {onPacketReceived:function(device,packet) { doPacketAnimation("Bob", "Router 2", {network:{srcip:"Bob",dstip:"Alice"}}); }} }, { id:"Carol", image:"monitor", ports:1, x:0.85, y:0.75, script: {onPacketReceived:function(device,packet) { doPacketAnimation("Carol", "Router 3", {network:{srcip:"Carol",dstip:"Bob"}}); }} }, { id:"Router 1", ports:3, x:0.5, y:0.4, image:"server", script: deviceScripts.manualRouter, rules:[ {dstip:"Alice", portNum:0}, {dstip:"Bob", portNum:1}, {dstip:"Carol", portNum:2} ] }, { id:"Router 2", ports:3, x:0.35, y:0.6, image:"server", script: deviceScripts.manualRouter, rules:[ {dstip:"Bob", portNum:0}, {dstip:"Alice", portNum:1}, {dstip:"Carol", portNum:2} ] }, { id:"Router 3", ports:3, x:0.65, y:0.6, image:"server", script: deviceScripts.manualRouter, rules:[ {dstip:"Carol", portNum:0}, {dstip:"Alice", portNum:1}, {dstip:"Bob", portNum:2} ] } ], links:[ { src:"Alice", srcport:0, dst:"Router 1", dstport:0 }, { src:"Bob", srcport:0, dst:"Router 2", dstport:0 }, { src:"Carol", srcport:0, dst:"Router 3", dstport:0 }, { src:"Router 1", srcport:1, dst:"Router 2", dstport:1 }, { src:"Router 1", srcport:2, dst:"Router 3", dstport:1 }, { src:"Router 2", srcport:2, dst:"Router 3", dstport:2 } ], timeline:[ { type:"packet", at:100, from:"Alice", payload:{ network:{srcip:"Alice",dstip:"Carol"} } }, { type:"packet", at:100, from:"Carol", payload:{ network:{srcip:"Carol",dstip:"Bob"} } }, { type:"packet", at:100, from:"Bob", payload:{ network:{srcip:"Bob",dstip:"Alice"} } } ], triggers:[ { type:"packet", device:"Carol", payload:{ network:{srcip:"Bob", dstip:"Carol"} } } ], nextLevel:"01 Basics/level05.json" }