I have a system that consists of a control PC, two layers of switches, and 50 custom devices. The PC continuously streams a total of 5.8MB/sec (6000 ethernet frames/sec) to the devices.
I have discovered that each of the device endpoints is seeing all of this traffic, not just the traffic intended for that device. This is causing the firmware on the devices to choke a little.
My theory as to why this is happening is: The PC is set up with a static ARP table. The only times the devices send data is in response to ICMP echo or ARP requests. Since we do not ping the devices during normal operation, and since the PC's ARP table is static (and therefore no ARP requests are made), the devices never send any data and the switches never learn their MAC addresses.
Question 1: Is this analysis correct?
I have to solve this issue. There are four options:
- Manually configure the cam tables in all of the switches.
- Update the device firmware to periodically send something, thus updating the switches cam tables.
- Have the control PC periodically ping the devices, thus causing the devices to respond, leading to switch updates.
- From comments: Enable dynamic ARP on control PC, configure ttl to be less than that of switch entries.
So, question 2: Is option 1 the absolute right way to do this?
Now, the problem with option 1 is the switches in place are unmanaged and I cannot configure them. In order to use option 1 we need to replace the switches with managed ones. I believe this is worth it in the long run but right now it is not feasible for a number of reasons.
I do not want to use option 3 or 4 because I want the solution to this issue to be transparent to the control PC and for various other reasons (In particular, option 4 has subtle but noticeable performance issues in this application, described in the comments below).
Therefore I am pursuing option 2 right now. I've chosen to modify the firmware on each device to send gratuitous ARP requests with a broadcast MAC destination roughly every 30 seconds. I chose ARP because conceptually it seems the most appropriate, although I could also send e.g. blank ethernet frames. I chose the broadcast destination in the hope that the packet will pass the L2 switches and reach the L1 switches and cause them to update their tables as well.
Question 3: While this may not be the most correct option, will it work? Will sending gratuitous ARP requests periodically from all 50 devices cause any unexpected side effects? I do not know what the ttl is of the switch's cam table entries, I arbitrarily picked 30 seconds.
Question 4: Is there another option that I am not considering?