The SnmpMgrGetTrap function returns outstanding trap data that the caller has not received if trap reception is enabled.
BOOL SnmpMgrGetTrap(
AsnObjectIdentifier *enterprise, | // generating enterprise |
AsnNetworkAddress *IPAddress, | // generating IP address |
AsnInteger *genericTrap, | // generic trap type |
AsnInteger *specificTrap, | // enterprise-specific type |
AsnTimeticks *timeStamp, | // time stamp |
RFC1157VarBindList *variableBindings | // variable bindings |
); |
Parameters
enterprise
[out] Points to an object identifier that specifies the enterprise that generated the SNMP trap.
IPAddress
[out] Points to the IP address of the enterprise that generated the SNMP trap.
genericTrap
[out] Points to an indicator of the generic trap. This parameter can be one of the following values:
Value | Meaning |
SNMP_GENERICTRAP_COLDSTART | The agent is initializing protocol entities on the managed mode. It may alter objects in its view. |
SNMP_GENERICTRAP_WARMSTART | The agent is re-initializing itself but it will not alter objects in its view. |
SNMP_GENERICTRAP_LINKDOWN | An attached interface has changed from the up state to the down state. The first variable in the variable bindings list identifies the interface. |
SNMP_GENERICTRAP_LINKUP | An attached interface has changed from the down state to the up state. The first variable in the variable bindings list identifies the interface. |
SNMP_GENERICTRAP_AUTHFAILURE | An SNMP entity has sent an SNMP message, but it has falsely claimed to belong to a known community. |
SNMP_GENERICTRAP_EGPNEIGHLOSS | An EGP peer has changed to the down state. The first variable in the variable bindings list identifies the IP address of the EGP peer. |
SNMP_GENERICTRAP_ENTERSPECIFIC | An extraordinary event has occurred and it is identified in the specificTrap parameter with an enterprise-specific value. |
specificTrap
[out] Points to an indication of the specific trap generated.
timeStamp
[out] Points to a variable to receive the time stamp.
variableBindings
[out] Points to the variable bindings list.
Return Values
If the function returns a trap, the return value is TRUE.
You should call the SnmpMgrGetTrap function repeatedly until GetLastError returns a value of FALSE. GetLastError may also return the following error codes:
Error Code | Meaning |
SNMP_MGMTAPI_TRAP_ERRORS | Indicates errors were encountered; traps are not accessible. |
SNMP_MGMTAPI_NOTRAPS | Indicates no traps are available. |
SNMP_MEM_ALLOC_ERROR | Indicates a memory allocation error. |
Remarks
You must allocate memory for the list member of the RFC1157VarBindList structure with the SnmpUtilMemAlloc function but you do not need to free it.
Once an operating system completes a task, it sends a trap signal. An internal SNMP signal checks for the trap signal to notify the SNMP manager of the completed task. The event that the phTrapAvailable parameter of the SnmpMgrTrapListen function points to allows event-driven acquisition of SNMP traps. You can ignore the trap and poll the SnmpMgrGetTrap function for traps at regular intervals instead.
Another method to acquire traps is to create a thread to wait on the event using the WaitForSingleObject function. When the event occurs, the thread should clear the event using the ResetEvent function. Then the thread should repeatedly call SnmpMgrGetTrap until it returns a value of FALSE.
Always call the SnmpMgrTrapListen function before calling SnmpMgrGetTrap to receive traps. If an SNMP manager application calls SnmpMgrGetTrap first to receive traps, it returns a value of FALSE, even if there are traps available. If the application calls GetLastError before calling SnmpMgrTrapListen, GetLastError returns the error code SNMP_MGMTAPI_TRAP_ERRORS.
See Also
SnmpMgrTrapListen, SnmpUtilMemAlloc, WaitForSingleObject, RFC1157VarBindList, ResetEvent