Difference between revisions of "Command Line Calling Order"

From Net-SNMP Wiki
Jump to: navigation, search
(expand init_snmp)
(expand snmp_open)
Line 46: Line 46:
 
   
 
   
 
     ss = snmp_open(&session);
 
     ss = snmp_open(&session);
 +
        <font color="green">// initialize appropriate transport using peername
 +
        // adds the session to the internal "list"</font>
 
    
 
    
 
     pdu = snmp_pdu_create(SNMP_MSG_(GET|SET|GETNEXT|...));
 
     pdu = snmp_pdu_create(SNMP_MSG_(GET|SET|GETNEXT|...));

Revision as of 23:48, 17 February 2010

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|...));
   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;