Hi,

I'm trying to write a simple snmp program to query some values of a  
sensor server. Following the tutorial as an example, all seemed fine,  
until I tried executing the program on different platforms.
Compiliation is fine on all, but running the programm often segfaults  
or gives other errors.

I am using protocol version 1 (because the sensor server only supports  
that), don't know the versions of the library. (where can I find what  
I am using?)
On linux machines, be it 32 or 64 bit, centos 5.3 or fedora4, 10, 11  
or whatever, I get a segfault if I use the snmp_init function (with a  
parameter of "snmpapp"), but on the

Mac OS X 10.5.8 intel all's fine.
On Mac OS X 10.4.11 ppc it returns a response.errstat of 2 when I  
don't use the snmp_init, and complains about a missing symbol  
(_RAND_bytes) if I do use it.

Unfortunately, the docs are absolutely not clear as to whether this  
function *must* be called, and about what the value of the paramter  
should be.

As mentioned, the program runs fine on all linux intel systems when  
*not* using snmp_init, but fails on ppc (big-endian problem?)


The relevant parts of the program are:

   /* Initialize snmp. */
   nit_snmp("snmpapp"); // <- segfaults on linux, causes dyn. linker  
problems on Mac OS X 10.4.11 ppc
        
   /* Initialize the connection. */
   struct snmp_session session;
   struct snmp_session *sess_handle;

   snmp_sess_init( &session );
   session.version = SNMP_VERSION_1;
   session.community = "public";
   session.community_len = strlen((const char *)session.community);
   session.peername = "my.host.this.domain";
   sess_handle = snmp_open(&session);

   /* Set up the object for reading. We will read all at once! */
   pdu = snmp_pdu_create(SNMP_MSG_GET);

   size_t status_len = MAX_OID_LEN;
   oid status_oid[MAX_OID_LEN];
   read_objid(".1.3.6.1.4.1.3854.1.2.2.1.16.1.4.0", status_oid,  
&status_len);
   snmp_add_null_var(pdu, status_oid, status_len);

   status = snmp_synch_response(sess_handle, pdu, &response);

   if ((status == STAT_SUCCESS) && (response->errstat ==  
SNMP_ERR_NOERROR) && response->variables) {
     for (d = 0, vars = response->variables; vars; vars = vars- 
 >next_variable, d++) {
       // process the values here
     }
   } else {
     // report the error here
   }

I'd be very grateful for any help or even just further questions!


Thanks in advance
Robert


Departement Informatik   FGB   tel   +41 (0)61 267 14 66
Universität Basel                          fax. +41 (0)61 267 14 61
Robert Frank
Klingelbergstrasse 50                 robert.fr...@unibas.ch
CH-4056 Basel
Switzerland                                   
http://www.informatik.unibas.ch/personen/frank_r.html




------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Net-snmp-users mailing list
Net-snmp-users@lists.sourceforge.net
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users

Reply via email to