UDP Packet Mirror

Nito

Between 2014 and 2015, while working at the University of Central Florida Institute for Simulation and Training, we had a need to manipulate simulation network traffic to suit some particular needs. In the case of a multiple device simulation using the DIS (Distributed Interactive Simulation) protocol, the different simulators would communicate with each other via local broadcast UDP packets. Normally, and for obvious reasons, UDP local broadcast network traffic is not routed to other IP network segments by routers, but under certain particular situations it is useful to have that UDP traffic flow over other networks. For example, if the simulators that make the distributed simulation come from different participants, like in an integration exercise or a trade show demonstration, they will understandably have different network configurations, some of which might be hard-coded, or difficult to change. In that case, you would use an application on a dedicated host to do the network translation. In fact, in our lab each simulation testbed had it’s own separate physical network with it’s own IP segment so that they would not interfere with each other. To manage the simulations I wrote a simulation traffic routing application that would run on a physical Linux computer physically connected to all the network segment, and we could easily turn on and off the flow of UDP traffic between all the segments with a simple command. However, in the case of other environments, like a trade show demo, or integration experiment it was often a hassle and a waste to have a dedicated host like a notebook running this type function. For this reason I created an embedded device whose only function was to copy the UDP broadcast traffic between the different IP segments. To accomplish this, I took a Teensy Arduino board, added an Ethernet controller, and a multi-color LED, a put it all into a sturdy aluminum box. It only required USB power, and a Ethernet cable. Wrote the Arduino application so that upon power-up, it would listen for a configuration command over the network to setup the IP addresses and UDP ports, and once configured it would start operating. I used the multi-color LED to indicate the configuration state, and later the network activity. In 2015 I refined the design making it much more compact and added a nice metal enclosure. I build several of these devices, as they became quite useful.