Command Line Calling Order
From Net-SNMP Wiki
Most of the Net-SNMP command line applications (like snmpget, snmpwalk, snmpset, ...) have similar internal code. This page describes the calling structure of these applications. If you're writing your own applications this should help you understand the process flow of the applications.
Comments are written in // style for simplicity, but obviously this isn't callable code anyway...
Code in black (indented 4 spaces generally) is application code, and code in green is functions called by the library code (indented 8+ spaces generally).
main()
netsnmp_session session, *ss;
netsnmp_pdu *pdu;
netsnmp_pdu *response;
netsnmp_variable_list *vars;
// the only thing you can do before snmp_parse_args is call the netsnmp_ds_set_(bool|int|string) functions
snmp_parse_args(argv, argc, &session, ...); // accepts argv, argc, a session to initialize and optional additional arguments
snmp_sess_init(session);
getopt(); // and process
init_snmp("snmpapp"); // change to your app name if something special
// ensure we're only called once
// set the application name to "snmpapp" (or whatever was passed in).
snmp_debug_init(); // starts debugging output if requested
netsnmp_container_init_list();
init_callbacks();
init_snmp_logging(); // figures out if we're logging to stdout, stderr, file, syslog, ...
snmp_init_statistics();
register_mib_handlers(); // registers default mibs, mibdirs, etc .conf handlers
register_default_handlers(); // registers all the other common (zillion) snmp.conf tokens
init_snmpv3(type); // SNMPv3 and security module specific init
init_snmp_alarm();
init_snmp_enum(type);
init_vacm(); // access control
read_premib_configs(); // reads in early bootstapping .conf tokens (setting mibs to load, dirs, etc)
netsnmp_init_mib(); // reads in MIBs requested to load either default or special
read_configs(); // reads in the rest of the normal configuration tokens
// setup special session params
// like v3/USM keys
session->peername = NEXT_ARGV_AFTER_OPTS
SOCK_STARTUP; // a win32 specific required macro
ss = snmp_open(&session);
pdu = snmp_pdu_create(SNMP_MSG_(GET|SET|GETNEXT|...));
snmp_add_null_var(pdu, ...); // adding in variables you want to get/set
status = snmp_sync_response(ss, pdu, &response); // Note: pdu is "consumed" by this call; don't use it again!
// results are in the response list, assuming no errors. See the snmpget code for example error handling
if (response)
snmp_free_pdu(response);
snmp_close(ss);
SOCK_CLEANUP;