[prev in list] [next in list] [prev in thread] [next in thread] 

List:       net-snmp-users
Subject:    Q: Extending the agent with Perl
From:       "Ulrich Windl" <Ulrich.Windl () rz ! uni-regensburg ! de>
Date:       2015-07-31 7:10:24
Message-ID: 55BB3B80020000A10001B506 () gwsmtp1 ! uni-regensburg ! de
[Download RAW message or body]

Hi!

I have no success attempting to extend the SNMP agent with Perl in SLES11 SP3 (using \
a somewhat older version and tools):

Whatever I try, my agent won't register. I also searched the Internet for tutorials, \
example code and explanations, but I failed.

Mainly the reason for writing this is the lack of documentation, inconsitent \
documentation, and the inability to get error details.

So first I tried to used the embed Perl variant with
	$agent->register($name, $OID, \&handler)

That never succeded, and there is not detailed error message (as it's available in $@ \
when usinf the LDAP module, for example).

Also the manual page of NetSNMP::agent says
	$agent->register("my_agent_name", ".1.3.6.1.4.1.8072.9999.9999.7375", \&myhandler);

while some code that is supposed to work uses "new NetSNMP::OID($OID)" instead of \
$OID

Further the snmpd.conf manual page says
	perl 'do /path/to/file.pl';
while the manual page of NetSNMP::agent says
	perl do /path/to/file.pl;
I also found the variant
	perl do "/path/to/file.pl";
Thinking about it I feel that
	perl "do '/path/to/file.pl';"
probably is correct. So what?

Despite of that questions remaining for the example in NetSNMP::agent and OID \
".1.3.6.1.4.1.8072.9999.9999.7375" are: Does the OID have to "join" a leaf of the OID \
tree, or do missing intermediate node come into existance automagically? Can existing \
parts of the OID tree be replaced, or can only new branches be created?

So after having no success in running and debugging the embedded Perl, I tried the \
AgentX variant. Here also I had no success, probable due to a missing configuration \
file. The manual page of NetSNMP::agent is rather vague on that:  \
$agent->register("my_agent_name", ".1.3.6.1.4.1.8072.9999.9999.7375", \&myhandler); \
seems to imply that some "my_agent_name" configuration file must exist in some path. \
The manual page says:  Name of the agent (optional, defaults to "perl") (The snmp \
library will read a NAME.conf snmp configuration file based on this argument.)

But where exactly is the file looked for, and what must be in it?

When trying to start my subagent, I get this:
Warning: Failed to connect to the agentx master agent ([NIL]):
Error registering
Argument "netSnmpPlaypen.7375" isn't numeric in subroutine entry at \
/usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/NetSNMP/OID.pm line 152.

(The latter line is)
	    my $val = constant($constname, @_ ? $_[0] : 0);b

For AgentX the snmpd.conf manual page says the option is named "agentXSocket", while \
"snmpd -H" lists it as "agentxsocket".

When I configured "agentx master", I saw a UNIX domain socket opened at \
/var/run/agentx/master. Then I still get: NET-SNMP version 5.4.2.1 AgentX subagent \
connected Error registering
Argument "netSnmpPlaypen.7375" isn't numeric in subroutine entry at \
/usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/NetSNMP/OID.pm line 152.

My Perl code modelled after the manual page looks like this (relevant part):
---
my $name = 'test_agent';
my $OID = '.1.3.6.1.4.1.8072.9999.9999.7375';
my $agent = new NetSNMP::agent('Name' => $name, 'AgentX' => 1);
if ($agent->register($name, new NetSNMP::OID($OID), \&handler) == 0) {
    my $run = 1;

    print $log "Registered $name for OID $OID\n";
    while ($run) {
        $agent->agent_check_and_process(1)
    }
    $agent->shutdown();
} else {
    print STDERR "Error registering\n";
    print $log "Error registering\n";
}
---

Any help appreciated.

Regards,
Ulrich



------------------------------------------------------------------------------
_______________________________________________
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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic