Designing and Managing Behavior Models - Using Other Data Sources - NerveCenter's Built-In Triggers -
Using Other Data Sources      An Example Using Built-In Triggers

NerveCenter's Built-In Triggers

When NerveCenter requests a poll, the SNMP GetRequest or the ping that the poll initiates is placed on either NerveCenter's pending SNMP requests list or pending ICMP requests list. NerveCenter waits for a reply from the node or the node's SNMP agent (or from an intervening router). If the node or its SNMP agent sends a non-error reply, then NerveCenter evaluates the poll condition and fires the appropriate trigger.

However, if the node or its SNMP agent makes no response or returns an error -- depending upon the circumstances -- NerveCenter will either retry the request or fire one of its built-in triggers. Those conditions that cause NerveCenter to fire its built-in triggers can be broken down into the following categories:

For particular information about NerveCenter's built-in triggers, see A List of Built-In Triggers.

For information about the order in which NerveCenter fires built-in triggers, see Built-in Trigger Firing Sequence.

SNMP Requests

NerveCenter retries SNMP requests as many times as configured or until a reply arrives on the SNMP or ICMP socket that NerveCenter can match to a pending request. (NerveCenter uses the number of retries and retry interval specified on the SNMP tab in the NerveCenter Administrator. Refer to the Managing NerveCenter guide or Administrator help for details.)

If the reply is an SNMP error, NerveCenter does not retry the request but returns three built-in triggers with the poll: an ERROR trigger, followed by an SNMP_ERROR trigger, and then finally the appropriate SNMP built-in error trigger. (See A List of Built-In Triggers, for more information.)

If NerveCenter receives no response after the configured number of retries, then NerveCenter fires two built-in triggers: ERROR, followed by SNMP_TIMEOUT. For more information about the order in which NerveCenter fires built-in triggers, see Built-in Trigger Firing Sequence.

Ping Requests

NerveCenter retries ICMP requests as many times as configured or until NerveCenter receives a good, non-error response that it can match to a pending ICMP request. (NerveCenter uses the number of retries and retry interval specified on the SNMP tab in the NerveCenter Administrator. Refer to the Managing NerveCenter guide or Administrator help for details.) If NerveCenter receives no response after the configured number of retries, then NerveCenter fires two built-in triggers: ERROR, followed by ICMP_TIMEOUT. For more information about the order in which NerveCenter fires built-in triggers, see Built-in Trigger Firing Sequence.

After the configured number of retries is exceeded, NerveCenter examines the error list, determines which of the matching errors occurred most often, and selects the last packet received from that set. If there is a tie between two or more types of errors, NerveCenter selects the last error packet received. (NerveCenter does not accumulate timeouts. One or more timeouts is counted as only one timeout.)

Error details are stored in ICMP/IP fields that NerveCenter includes with each instance of ICMP_ERROR that it fires. Using a Perl subroutine or a NerveCenter poll expression, you can extract this data (Type, Code, Destination Address, and Source Address) to learn more specific information about the ICMP error that occurred.

The exception to this rule is when NerveCenter receives an ICMP error that contain values for a net, host, or port unreachable condition (where the ICMP fields Type = 3 and Code = 0, 1, or 3). In this situation, NerveCenter fires an ERROR built-in trigger first, followed by an ICMP_ERROR trigger, and then finally either a NET_UNREACHABLE, NODE_UNREACHABLE, or PORT_UNREACHABLE built-in trigger.

If the poll times out, NerveCenter fires two built-in triggers: ERROR, followed by either an ICMP_TIMEOUT or SNMP_TIMEOUT trigger.

Multiple Errors Examples

For example, you poll a node with addresses A1, A2, A3, A4 and A5 with the number of retries set to three in the NerveCenter Administrator. The replies are as follows:

Original response = ICMP error E1 from address A1

Response from First retry = ICMP error E1 from address A2

Response from Second retry = no reply within retry interval from address A3

Response from Third retry = ICMP error E2 from address A4

Even though error E4 (third retry) was the last error received, NerveCenter discards it and uses error E1 to produce a response, because it occurred most often. The actual data packet that NerveCenter returns with error E1 is from the first retry, because NerveCenter retains only the last packet for each error code. (The packet from the first retry overwrote the packet from the original response because their error codes matched.)

In this example if any of the ICMP errors contain values for a net, host, or port unreachable condition (where the ICMP fields Type = 3 and Code = 0, 1, or 3), NerveCenter fires an ERROR built-in trigger first, followed by an ICMP_ERROR trigger, and then finally either a NET_UNREACHABLE, NODE_UNREACHABLE, or PORT_UNREACHABLE built-in trigger. If error E1 is any other ICMP error, then NerveCenter fires two triggers: first, an ERROR built-in trigger, followed by an ICMP_ERROR built-in trigger that contains data from the first retry packet. For more information about the order in which NerveCenter fires built-in triggers, see Built-in Trigger Firing Sequence.

Consider a second example in which the replies are as follows:

Original response = ICMP error E1 from address A1

Response from First retry = ICMP error E2 from address A2

Response from Second retry = ICMP error E3 from address A3

Response from Third retry = no reply within retry interval from address A4

NerveCenter uses error E3 to produce a response because it was the last error received, and no error type occurred more than once. Even though a timeout occurred on the last response, NerveCenter discards it because an error takes precedence over a timeout.

Built-in Trigger Firing Sequence

NerveCenter Built-in Trigger Firing Sequence shows the order in which NerveCenter fires built-in triggers.

NerveCenter Built-in Trigger Firing Sequence

If the First Trigger Fired
is an...
Then the Second Trigger Fired
Can Be an...
And the Third Trigger Fired
Can Be a...

ERROR

SNMP_ERROR

Specific SNMP built-in trigger


ERROR

ICMP_ERROR

None or, NET_UNREACHABLE, or NODE_UNREACHABLE, or PORT_UNREACHABLE


ERROR

SNMP_TIMEOUT

None


ERROR

ICMP_TIMEOUT

None


ERROR

CANNOT_SEND

None


RESPONSE

Specific non-built-in trigger or None

None


INFORM_CONNECTION_DOWN

None

None


INFORM_CONNECTION_UP

None

None


INFORMS_LOST

None

None


UNKNOWN_ERROR

None

None


Matching Errors with Pending SNMP and Ping Requests

Each poll packet that NerveCenter sends on a socket includes a unique identifier (the IP field Sequence Number). When a poll returns ICMP errors within its configured number of retries, NerveCenter collects the error messages that are returned. Each error message includes the sequence number as well as the destination address of the associated node. Certain fields in the ICMP error packet enable NerveCenter to attempt to match SNMP/ICMP error messages with a poll's pending SNMP/ping requests as follows:

Multi-homed Nodes

Polling multi-homed nodes will cause NerveCenter to rotate through the address list for that node in the following manner. If the first address returns an ICMP error response, then NerveCenter flags that address as "down" and will not retry the address until NerveCenter has tried all other addresses for this node.

Upon each retry of a poll, NerveCenter chooses the next IP address to poll. If a node has more addresses than the number of allowable retries, then second or subsequent polls of that node will use the current address if it is "up" or the next un-tried address in the list. If all addresses have been tried, then the "down" addresses will be used again. For an SNMP error, NerveCenter flags the address as "up" because NerveCenter did receive a response from the node's agent.

A List of Built-In Triggers

Built-In Triggers lists all the built-in triggers that NerveCenter can fire.

One additional trigger, USER_RESET, is not available from the list of built-in triggers in NerveCenter. NerveCenter fires USER_RESET to trigger another state for an existing alarm instance when you reset the alarm instance using the right-click pop-up menu in the Alarm Summary or Aggregate Alarm Summary windows.


Using Other Data Sources An Example Using Built-In Triggers
29 July 2003