Experimental Physics and Industrial Control System
|
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
#!/bin/sh -e
# Called when a new interface comes up
# Author: Ralph Lange <[email protected]>
# Make any incoming Channel Access name resolution queries go to the broadcast address
# (to hit all IOCs on this host)
# Change this if you run CA on a non-standard port
PORT=5064
[ "$METHOD" != "none" ] || exit 0
[ "$IFACE" != "lo" ] || exit 0
line=`ifconfig $IFACE | grep "inet addr"`
addr=`echo $line | sed -e 's/.*inet addr:\([0-9\.]*\).*/\1/'`
bcast=`echo $line | sed -e 's/.*Bcast:\([0-9\.]*\).*/\1/'`
if [ "$MODE" = "start" ]
then
iptables -t nat -A PREROUTING -d $addr -p udp --dport $PORT -j DNAT --to-destination $bcast
elif [ "$MODE" = "stop" ]
then
iptables -t nat -D PREROUTING -d $addr -p udp --dport $PORT -j DNAT --to-destination $bcast
fi
exit 0
- Replies:
- Re: Multiple IOCs on one Linux host Andrew Johnson
- Navigate by Date:
- Prev:
RE: MJPEG Video Display for CS-Studio Paul.gibbons
- Next:
Re: Multiple IOCs on one Linux host Andrew Johnson
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
<2014>
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
RE: Scaler expected behaviour Mooney, Tim M.
- Next:
Re: Multiple IOCs on one Linux host Andrew Johnson
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
<2014>
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|
ANJ, 17 Dec 2015 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
·
Search
·
EPICS V4
·
IRMIS
·
Talk
·
Bugs
·
Documents
·
Links
·
Licensing
·
|