|ng_output||sends a control message along the given path.|
|ng_output_node||sends a control message to the node with name node and|
|ng_output_id||sends a control message to the node with node id id.|
Each of these functions takes the following arguments:
|cookie||is the node specific command cookie,|
|opcode||is the node specific code for the operation to perform,|
is a pointer to the message itself.
This message must start with a
.Vt struct ng_mesg .
|arglen||is the overall length of the message (header plus arguments).|
Another class of functions is used to send a control message and to wait for a matching response. Note, that this operation blocks the daemon, so use it only if you are sure that the response will happen. There is a maximum timeout that is configurable in the MIB variable begemotNgTimeout. Other messages arriving while the functions are waiting for the response are queued and delivered on the next call to the modules idle function.
|ng_dialog||sends a control message along the given path and waits for a matching response.|
|ng_dialog_node||sends a control message to the node with name node and waits for a matching response.|
|ng_dialog_id||sends a control message to the node with id id and waits for a matching response.|
All three functions take the same arguments as the ng_output* functions. The functions return the response message in a buffer allocated by malloc(3) or NULL in case of an error. The maximum size of the response buffer can be configured in the variable begemotNgResBufSiz.
A data message can be send with the function ng_send_data. This function takes the name of the snmp_node s hook through which to send the data, a pointer to the message buffer and the size of the message. It returns -1 if an error happens.
A module can register functions to asynchronously receive control and data message.
The function ng_register_cookie registers a control message receive function. If a control message is received, that is not consumed by the dialog functions, the list of registered control message receive functions is scanned. If the cookie in the received message is the same as the cookie argument to the ng_register_cookie call and the id argument to the ng_register_cookie call was either 0 or equals the node id which sent the control message, the handler function func is called with a pointer to the received message, the hook on which the message was received (or NULL if it was received not on a hook), the id of the senders node and the uarg argument of the registration call. The handler function should not modify the contents of the message, because more than one function may be registered to the same cookie and node id.
A control message registration can be undone by calling ng_unregister_cookie with the return value of the registration call. If an error occurs while registering, ng_register_cookie returns NULL.
A module can call ng_register_hook to register a callback for data messages on one of the snmp_node s hooks. If a data message is received on that hook, the callback function func is called with the hook name, a pointer to the data message, the size of the message and the argument uarg to the registration function. The message should be treated as read-only. A data message registration can be undone by calling ng_unregister_hook with the return value of the registration call. If an error occurs while registering, ng_register_hook returns NULL.
The function ng_unregister_module removes all control and data registrations for that module.
The function ng_node_id returns the id of the node addressed by path or 0 if the node does not exists.
The function ng_node_id_node returns the id of the node with name node or 0 if the node does not exist.
The function ng_node_node retrieves the name of the node with id id and writes it to the buffer pointed to by name. This buffer should be at least NG_NODESIZ bytes long. The function returns the node id or 0 if the node is not found.
The function ng_node_type retrieves the name of the node with id id and writes it to the buffer pointed to by type. This buffer should be at least NG_TYPESIZ bytes long. The function returns the node id or 0 if the node is not found.
The function ng_peer_hook_id writes the name of the peer hook of the hook hook on the node with id to the buffer pointed to by peer_hook. The buffer should be at least NG_HOOKSIZ bytes long. The function returns 0 if the node and the hook is found, -1 otherwise. The function skips intermediate tee nodes (see ng_tee(4)).
The function ng_next_node_id returns the node id of the peer node that is on the other side of hook hook of node id. If type is not NULL, the function checks, that the peer nodes type is type. The function skips intermediate tee nodes (see ng_tee(4)). It returns the node id of the peer node or 0 if an error occurs or the types do not match.
A number of functions can be used to create or destroy nodes and hooks.
The function ng_mkpeer_id creates a new node of type type whose hook peerhook will be connected to hook of node id. If name is not NULL the new node is named with this name. The function returns The node id of the new node or 0 if an error happens.
The functions ng_connect_node and ng_connect_id make a new hook connecting ourhook of the modules socket node snmp_node to peerhook of the node identified by id id or name node. The functions return 0 on success or -1 otherwise.
The function ng_connect2_id connects hook ourhook of the node with id id to hook peerhook of the node with id peer. The functions return 0 on success or -1 otherwise. The function ng_connect2_tee_id does the same as ng_connect2_id except, that it puts an unnamed tee node between the two nodes.
The function ng_rmhook removes hook hook on the modules snmp_node. The function ng_rmhook_id removes hook hook on the node with id id. The function ng_rmhook_tee_id additionally shuts down all tee nodes between the node and the first non-tee peer.
The function ng_shutdown_id destroys the given node.
/usr/share/bsnmp/defs/netgraph_tree.def The description of the MIB tree implemented by snmp_netgraph. /usr/share/bsnmp/mibs/BEGEMOT-NETGRAPH.txt This is the MIB that is implemented by this module.
.An Hartmut Brandt Aq harti@FreeBSD.org