# Presentation: 722815

## Channel Access Configuration

- Kazuro Furukawa, KEK
- (Andrew Johnson, APS)

## Configuration method

- CA clients and servers can be configured by setting environment variables
- On Unix:
- csh, tcsh — setenv *VARNAME* *value*
- sh, ksh — *VARNAME*=*value*;export *VARNAME*
- printenv displays all variables from any shell
- On vxWorks:
- putenv "*VARNAME*=*value*"
- envShow displays all variable values
- Environment variables are inherited when you start a new program, not afterwards
- Unix: Set the variables, then start the client
- vxWorks: Set variables in the startup script
- Default values for a site are set at build-time in <epics>/base/config/CONFIG_ENV and <epics>/base/config/CONFIG_SITE_ENV

## CA name resolution

- Search requests for CA channel names are broadcast to all CA servers on the client’s local TCP/IP subnet
- Only a server which recognizes the name will respond to the client
- If identical record names exist in two IOCs, the first to reply “wins” the connection
- The client library then opens a connection with that server to access that channel
- Potential problems:
- Not all LANs support broadcasting
- Ethernet does, Token Ring doesn’t
- Some sites don’t allow broadcasting
- Bridges/hubs will not forward packets
- Broadcasts are local to the machine’s subnet
- Sites can span more than a single subnet

## Configuring name resolution

- How to disable all broadcasts?
- EPICS_CA_AUTO_ADDR_LIST = NO
- Default value = YES
- IOCs are also clients, so generate broadcasts
- How to find channels without broadcast?
- EPICS_CA_ADDR_LIST
- List of IP addresses, separated by spaces
- setenv EPICS_CA_ADDR_LIST "164.54.8.145"
- This list is used in addition to broadcasts if these are enabled
- How to search other subnets as well?
- Use a broadcast address in EPICS_CA_ADDR_LIST
- setenv EPICS_CA_ADDR_LIST "131.111.69.255"
- Some routers will not pass broadcast addresses

## Connection health

- CA servers send out an “I’m still here” beacon ever 15 seconds
- Usually broadcast, configurable as before
- If a server is quiet for 30 seconds, any connected clients will
- send it an “echo” packet (not broadcast)
- allow 5 seconds for it to reply
- mark all channels to this server disconnected
- Potential problems:
- Slow or busy links might introduce random delays, some longer than 15 seconds
- Busy sites may want to reduce broadcast rates
- Clients take 35 seconds to recognize when a server has died

## Configuring connection health

- How to change the server beacon period?
- putenv "EPICS_CA_BEACON_PERIOD=30.0"
- Default value is 15.0 seconds
- How to change the client timeout delay?
- setenv EPICS_CA_CONN_TMO 60.0
- Default value is 30.0 seconds
- This value determines how long a client takes to notice that a server has died (+5 seconds)
- The connection timeout must be longer than the beacon period, preferably twice
- Breaking the ‘preferred’ condition could increase network traffic
- Breaking the ‘must be’ condition can also cause random client disconnections

## Port numbers

- Channel Access uses two IP port numbers for its communication (UDP and TCP)
- EPICS_CA_SERVER_PORT
- Default is 5064
- EPICS_CA_REPEATER_PORT
- Default is 5065
- Both should be > 5000, check with sysadmins
- The settings for a server and all its clients must be the same
- Using different port numbers can allow independent projects to share a subnet without any danger of CA name clashes
- Can also be used for application testing
- No interaction is possible between projects

## Where am I —What time is it?

- An IOC gets Universal Coordinated Time from its boot host (UTC=GMT)
- This is converted to local time using the server’s value for EPICS_TS_MIN_WEST
- CA Servers report timestamp values using their local timezone
- How to tell a client that the server is in a different timezone?
- setenv EPICS_TS_MIN_WEST -480
- Default value is set by site manager (APS=360)
- Gives server’s timezone in minutes relative to GMT; negative means east of Greenwich
- Daylight savings changes are hard-coded into the IOC software. Changes may occur on the wrong date in some locations...