* * * * *

 There's more wierdness to this than reported, but this will be fine for now

ospfquery is written using the older CMU (Carnegie Mellon University) [1]
SNMP (Simple Network Management Protocol) library. I want to update it to use
the currently maintained Net SNMP [2] library, but I've been having problems
getting it to work. The problematic bit of code seems to be:

> netsnmp_session  session;
> int              r;
>
> init_snmp("snmpapp");
>
> snmp_enable_stderrlog();
> snmp_sess_init(&session);
>
> session.version       = SNMP_VERSION_1;
> session.peername      = "XXXXXXXXXXXXXXXXXXXXXXX";
> session.community     = "XXXXXXXXX";
> session.community_len = strlen(session.community);
>
> gss = snmp_open(&session);
>

Everytime I try to run it (and by “it” I mean a small test program that just
queries the system id), I get “snmpget: Too long”. Yet, if I change the above
to:

> netsnmp_session  session;
> int              r;
>
> snmp_parse_args(argc,argv,&session,"",NULL);
>
> gss = snmp_open(&session);
>

it (and by “it” I mean a small test program that just queries the system id)
works fine. And as far as I can tell, all that snmp_parse_args() is doing is
the code in the first example, distilled down to just what's required to
initialize session (so why don't I just use snmp_parse_args() and be done
with it? snmp_parse_args() exists to parse the command line for the various
tools like snmpget and snmpwalk which I don't need—ospfquery has its own
command line that doesn't need replacing).

So, I recompiled Net SNMP to include debugging information so I could trace
down into the various calls, and for some reason, the debugging information
isn't being generated (or else there's some other problem with gdb that I
don't know about).

Okay, so I decided to just link directly against the object files that make
up Net SNMP, and that's when things got wierd:

> [spc]royal-oak:~/source/snmp>gcc -o sysid3 sysid3.c -lnetsnmp -lcrypto
> [spc]royal-oak:~/source/snmp>./sysid3
> snmpget: Too long
> XXXXXXXXXXXXXXXXXXXXXXX is unknown
> [spc]royal-oak:~/source/snmp>gcc -o sysid3 sysid3.c \
>       ~/apps/net-snmp-5.2.1/snmplib/*.o -lcrypto
> [spc]royal-oak:~/source/snmp>./sysid3
> XXXXXXXXXXXXXXXXXXXXXXX is a riverstone
> [spc]royal-oak:~/source/snmp>
>

So let me get this straight: I link against the library, and the program
doesn't work. I link against the object files, and it works just fine.

Okay.

Anybody care to explain?

Update on Friday, February 16^th, 2007

Mark [3] sent a reply [4].


[1] http://www.cmu.edu/
[2] http://www.net-snmp.org/
[3] http://www.gladesoft.com/
[4] gopher://gopher.conman.org/0Phlog:2007/02/16.3

Email author at [email protected]