Skip to content

Command_Line_Calling_Order

Bill Fenner edited this page Aug 30, 2018 · 1 revision

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);        // initialize appropriate transport using peername        // adds the session to the internal "list"      pdu = snmp_pdu_create(SNMP_MSG_(GET|SET|GETNEXT|...));        // sets up default values in the PDU    snmp_add_null_var(pdu, ...);                 // adding in variables you want to get/set    snmp_pdu_add_variable(pdu, ...);             // OR: use this one to add complete variables

   status = snmp_sync_response(ss, pdu, &response);  // Note: pdu is "consumed" by this call; don't use it again!        snmp_send(ss, pdu);        snmp_select_info()                       // figures out which sockets to select on and needed timeout values        select();        snmp_read(sockets);                      // parses any received packets            // 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);        // Has security model do clean up        // has transport do clean up        // frees the session memory    SOCK_CLEANUP;

Clone this wiki locally