Link Tolerances

When two machines connect, the response time from one machine to another can be variable, partly due to CPU loading, but mostly due to link throughput limitations. To address this, a set of link "tolerances" can be specified in the SETUP.INI file. The tolerances are only applied to the RPCResendDelay, RPCReconnectTime and RPCPingInterval settings. The RPCPingInterval is only affected on the receiving machine when it is used to calculate the connection timeout.

A "tolerance factor" is specified as a percentage value, so a tolerance factor of 100 is unity, 300 is 3 times the value and 50 is half of the value.

This enables the specification of a base, system default, set of values and tolerances for each peer-to-peer connection that requires them.

It is desirable to be able to specify the settings for an entire system in one file [SETUP.INI], which can then be installed on all machines in the system.

Regardless of whether all machines have been given a copy of the same Setup.INI file, it is extremely important that all machines share the same set of link tolerance assignments.

This is achieved by having an INI file section heading which identifies a particular machine or IP interface in the system and having all the tolerance settings [for other machines with which that machine can communicate] specified as entries within the section. There are, however, a number of variations in how this is specified. On a system consisting entirely of single homed machines, "LinkTolerance-Name" [where name is a workstation name, as returned by WkStaInfo()] is sufficient to uniquely identify the network pathway from that machine to other machines. For multi-homed systems, it may be necessary to use "LinkTolerance-IP" [where IP is the IP of a network interface] to identify tolerances for different network pathways between two machines.

To resolve ambiguity and provide flexibility, each machine uses the following methods to extract the tolerance setting from this .INI file, when a connection is established. The rules are performed in the order listed:

  1. A search is made for a section [LinkTolerance-LocalIP], where LocalIP is the IP of the local machine. If found, that section is searched for the IP of the remote machine. If the IP of the remote machine is not found, the section is searched for the name of the remote machine.
  2. If 1 did not produce a tolerance, a search is made for a section [LinkTolerance-LocalName], where LocalName is the name of the local machine. If found, that section is searched for the IP of the remote machine. If the IP of the remote machine is not found, the section is searched for the name of the remote machine.
  3. If 2 did not produce a tolerance, a search is made for a section [LinkTolerance-RemoteIP], where RemoteIP is the IP of the remote machine. If found, that section is searched for the IP of the local machine. If the IP of the local machine is not found, the section is searched for the name of the local machine.
  4. If 3 did not produce a tolerance, a search is made for a section [LinkTolerance-RemoteName], where RemoteName is the name of the remote machine. If found, that section is searched for the IP of the local machine. If the IP of the local machine is not found, the section is searched for the name of the local machine.
  5. If 4 did not produce a tolerance, a search is made for a section [LinkTolerance-LocalIP], where LocalIP is the IP of the local machine. If found, that section is searched for an entry called "Default".
  6. If 5 did not produce a tolerance, a search is made for a section [LinkTolerance-LocalName], where LocalName is the name of the local machine. If found, that section is searched for an entry called "Default".
  7. If 6 did not produce a tolerance, a search is made for a section [LinkTolerance-RemoteIP], where RemoteIP is the IP of the remote machine. If found, that section is searched for an entry called "Default".
  8. If 7 did not produce a tolerance, a search is made for a section [LinkTolerance-RemoteName], where RemoteName is the name of the remote machine. If found, that section is searched for an entry called "Default".
  9. If 8 did not produce a tolerance, default to 100% of the tolerances.

Note that this procedure is only carried out the first time that a connection is established between two machines.

The "Default" setting within the sections allow you to specify a default tolerance for all connections from the machine or interface identified in the section header. This can significantly reduce the maintenance overhead of these tolerance sections.

For example:

[LinkTolerance-192.168.5.42]
  Default = 200

[LinkToleance-GONZOSPC]
  192.168.5.50 = 300
  Default = 150
  JOESPC = 100

This will cause machine 192.168.5.42 to have a 200% tolerance of all machines connected to it. GONZOSPC will have a 300% tolerance of machine 192.168.5.50, a 100% tolerance of JOESPC and a 150% tolerance of all other machines.

Note that these settings are specified in SETUP.INI and not in service configuration files.

You use workstation names other than IP addresses whenever possible, especially in networks where the workstations may be dual-homed, or where dynamic IPs are assigned. Because workstation names are unique, it is good practice to condition yourself to use workstation names, rather than IP addresses, even if your system configuration does not require the use of workstation names.