HELP - Net-SNMP AgentX - Problem with new MIB and snmpset

Simone Moni <[email protected]>
Newsgroups gmane.network.net-snmp.devel,gmane.network.net-snmp.user
Message-ID <CALRS0BagtsJ+Z9vDhrDv0kUkFXqBxuWnSXRzcKyVye_0-J1U5A@mail.gmail.com>
 Hi, Can anyone help me?
I'm a newbie with AgentX. I need to extend snmpd with a new custom MIB
module.
I have NET-SNMP version 5.5 on Redhat, I would implement perl API, using
NetSNMP::agent.
Hereby, the steps I've done:

- /etc/snmp/snmpd.conf
#sec.name              source        community
com2sec notConfigUser  default       public
#groupName              securityModel securityName
group   notConfigGroup  v1            notConfigUser
group   notConfigGroup  v2c           notConfigUser
#name           incl/excl     subtree         mask(optional)
view all        included      .1
#group               context sec.model sec.level prefix   read write  notif
access  notConfigGroup ""      any       noauth    exact  all   all   none
master    agentx

- MIB module
My custom MIB is related to an active alarms table for fault management.
It must be queryable from an external management station.
The MIB file (ACM-LOGWATCH-MIB) is located in /usr/share/snmp/mibs
directory.

Here the subset for Table:

acmLogWatchTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF acmLogWatchEntry
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Table of objects"
    ::= { acmLogWatch 10 }

acmLogWatchEntry OBJECT-TYPE
    SYNTAX      acmLogWatchEntry
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        ""
    INDEX   { acmLogWatchIndex }
    ::= { acmLogWatchTable 1 }

acmLogWatchEntry ::= SEQUENCE {
    acmLogWatchIndex                   Integer32,
    acmLogWatchSpecificProblem         DisplayString,
    acmLogWatchProbableCause           DisplayString,
}

acmLogWatchIndex OBJECT-TYPE
                                SYNTAX  INTEGER
                                ACCESS  read-only
                                STATUS  mandatory
                                DESCRIPTION
                                "A unique value for each active alarm"
                                ::= { acmLogWatchEntry 1 }

acmLogWatchSpecificProblem              OBJECT-TYPE
                                SYNTAX      DisplayString
                                MAX-ACCESS  read-write
                                STATUS      current
                                DESCRIPTION
                                "the specific problem of the alarm"
                                ::= { acmLogWatchEntry 2 }

acmLogWatchProbableCause                OBJECT-TYPE
                                SYNTAX      DisplayString
                                MAX-ACCESS  read-write
                                STATUS      current
                                DESCRIPTION
                                "the probable cause of the alarm"
                                ::= { acmLogWatchEntry 3 }

snmpset is used to set OID's Values.

- perl code:

use NetSNMP::agent (':all');
use NetSNMP::ASN (':all');
use NetSNMP::OID(':all');

my $default_SP = "SP 1";
my $default_PC = "PC 1";

sub myhandler {
    my ($handler, $registration_info, $request_info, $requests) = @_;
        my $request;

    for($request = $requests; $request; $request = $request->next()) {
        my $oid = $request->getOID();
        if ($request_info->getMode() == MODE_GET) {
            # ... generally, you would calculate value from oid
            if ($oid == new
NetSNMP::OID(".1.3.6.1.4.1.193.37.10.11.64.10.1.2.0")) {
            $request->setValue(ASN_OCTET_STR, $default_SP);
            }
            if ($oid == new
NetSNMP::OID(".1.3.6.1.4.1.193.37.10.11.64.10.1.3.0")) {
            $request->setValue(ASN_OCTET_STR, $default_PC);
            }
        } elsif ($request_info->getMode() == MODE_GETNEXT) {
            # ... generally, you would calculate value from oid
            if ( $oid < new
NetSNMP::OID(".1.3.6.1.4.1.193.37.10.11.64.10.1.2.0")) {
            $request->setOID(".1.3.6.1.4.1.193.37.10.11.64.10.1.2.0");
            $request->setValue(ASN_OCTET_STR, $default_SP);
            $request->setOID(".1.3.6.1.4.1.193.37.10.11.64.10.1.3.0");
            $request->setValue(ASN_OCTET_STR, $default_PC);
            }
        } elsif ($request_info->getMode() == MODE_SET_RESERVE1) {
            if ( ( $oid != new
NetSNMP::OID(".1.3.6.1.4.1.193.37.10.11.64.10.1.2.0")) and ( $oid != new
NetSNMP::OID(".1.3.6.1.4.1.193.37.10.11.64.10.1.3.0")) ) {  # do error
checking here
            $request->setError($request_info, SNMP_ERR_NOSUCHNAME);
            }
        } elsif ($request_info->getMode() == MODE_SET_ACTION) {
            # ... (or use the value)
            $value = $request->getValue();
        }
    }

}

my $agent = new NetSNMP::agent(
    # makes the agent read a my_agent_name.conf file
    'Name' => "my_agent_name",
    'AgentX' => 1
    );
$agent->register("my_agent_name", ".1.3.6.1.4.1.193.37.10.11.64.10",
    \&myhandler);

my $running = 1;
while($running) {
    $agent->agent_check_and_process(1);
}

$agent->shutdown();

Results:

# snmpget -v2c -c public localhost .1.3.6.1.4.1.193.37.10.11.64.10.1.2.0
ACM-LOGWATCH-MIB::acmLogWatchSpecificProblem.0 = STRING: SP 1
# snmpget -v2c -c public localhost .1.3.6.1.4.1.193.37.10.11.64.10.1.3.0
ACM-LOGWATCH-MIB::acmLogWatchProbableCause.0 = STRING: PC 1

SNMPWALK doesn't show all the OID's set, but last one:
# snmpwalk -v2c -c public localhost .1.3.6.1.4.1.193.37.10.11.64.10
ACM-LOGWATCH-MIB::acmLogWatchProbableCause.0 = STRING: PC 1

SNMPSET doesn't work:
[root@redhatgp ACM]# snmpset -v2c -c public localhost
.1.3.6.1.4.1.193.37.10.11.64.10.1.3.0 s "PC 2"
ACM-LOGWATCH-MIB::acmLogWatchProbableCause.0 = STRING: PC 2
[root@redhatgp ACM]# snmpget -v2c -c public localhost
.1.3.6.1.4.1.193.37.10.11.64.10.1.3.0
ACM-LOGWATCH-MIB::acmLogWatchProbableCause.0 = STRING: PC 1

Can anyone help me?

Thanks
BR
Simone

_______________________________________________
Net-snmp-coders mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.