All,
As probably many of you know, running multiple IOCs on one host has an
annoying side effect: Clients that are using that host's IP address in
their EPICS_CA_ADDR_LIST with EPICS_CA_AUTO_ADDR_LIST=NO will only reach
one of the IOCs - usually the one that was started last. All clients
have to use broadcasts to reach all IOCs.
The same is true for CA Gateway machines that are set up in a way that
makes multiple Gateway processes serve channels into the same network.
Here's a little helper (for Linux hosts) that I recently was playing
around with - based on an idea by Rodrigo Bongers (CNPEM, Brazil).
If you drop the attached script into /etc/network/if-up.d *and*
/etc/network/if-down.d, it will automatically create/delete an iptables
rule that replaces the destination address of all incoming CA UDP
traffic on each interface with the broadcast address of that interface.
Simple and effective: the kernel will see all incoming name resolution
requests as broadcasts, and delivers them to all IOCs instead of one.
Note: This will not work for clients on the same host. (Adding that
feature makes things a lot more complicated, and I like things to be
simple.)
If you need connections between IOCs on one host, I would suggest adding
the broadcast address of the loopback interface (usually
127.255.255.255) to each IOC's EPICS_CA_ADDR_LIST setting.
Enjoy!
~Ralph