Re: Net-SNMP AgentX - Problem with new MIB and snmpset

Simone Moni <[email protected]>
Newsgroups gmane.network.net-snmp.devel
Message-ID <CALRS0BaVCBnrM5_Meod4rvxAV9e17gO7WYB-jW2iC0aAgEXU+Q@mail.gmail.com>
Hi,
I have not received yet any reply.
Please, may you keep in consideration my request?
I am registered on SourgeForce site, is there any action I have to take?
Thank you

BR
Simone

Il giorno gio 22 apr 2021 alle ore 13:14 Simone Moni <[email protected]>
ha scritto:

> Hi all,
> 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
> 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.