[prev in list] [next in list] [prev in thread] [next in thread]
List: net-snmp-coders
Subject: Antw: Re: Q: enums not recognized
From: "Ulrich Windl" <Ulrich.Windl () rz ! uni-regensburg ! de>
Date: 2015-09-03 10:24:38
Message-ID: 55E83C06020000A10001BC36 () gwsmtp1 ! uni-regensburg ! de
[Download RAW message or body]
Hi again!
I fixed all problems indicated by smilint, up to level 6, but unfortunately
the problem remains:
My enumeration now is:
---
IotwSchedPolicyEnum ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"The scheduling policy expressed as integer."
SYNTAX INTEGER {
-- RFC 1155 (STD 16) says in
-- "3.2.1.1. Guidelines for Enumerated INTEGERs":
-- "a named number having the value 0 shall
-- not be present in the list of enumerations.
-- Use of this value is prohibited."
schedPolicyNice (1),
schedPolicyBatch (2),
schedPolicyFIFO (3),
schedPolicyIdle (4),
schedPolicyOther (5),
schedPolicyRR (6)
}
---
My sequence now looks like this:
---
IotwObjectEntry ::= SEQUENCE {
--...
iotwTimingPriority PercentTC, -- basically Integer32
iotwTimingSchedPolicy IotwSchedPolicyEnum,
--...
---
When using "mib2c -c mib2c.array-user.conf" the code generated still has the
problem it had before:
In iotwObjectTable_set_reserve1() there is this code fragment:
---
case COLUMN_IOTWTIMINGPRIORITY:
/** PercentTC = ASN_INTEGER */
/*
* or possibly 'netsnmp_check_vb_int_range'
*/
rc = netsnmp_check_vb_int(var);
break;
case COLUMN_IOTWTIMINGSCHEDPOLICY:
/** = */
/*
* or possibly 'netsnmp_check_vb_int_range'
*/
rc = netsnmp_check_vb_int(var);
break;
---
And in iotwObjectTable_set_reserve2() there is a similar one:
---
case COLUMN_IOTWTIMINGSCHEDPOLICY:
/** = */
/*
* TODO: routine to check valid values
*
* EXAMPLE:
*
* if ( *var->val.integer != XXX ) {
* rc = SNMP_ERR_INCONSISTENTVALUE;
* rc = SNMP_ERR_BADVALUE;
* }
*/
break;
---
In other routines the type is also handled as integer, but in
iotwObjectTable_get_value() a syntax error is created:
---
case COLUMN_IOTWTIMINGPRIORITY:
/** PercentTC = ASN_INTEGER */
snmp_set_var_typed_value(var, ASN_INTEGER,
(char *)
&context->iotwTimingPriority,
sizeof(context->iotwTimingPriority));
break;
case COLUMN_IOTWTIMINGSCHEDPOLICY:
/** = */
snmp_set_var_typed_value(var,,
(char *) &context->
iotwTimingSchedPolicy,
sizeof(context->
iotwTimingSchedPolicy));
break;
---
So the code did not recognize the type for iotwTimingSchedPolicy. The
corresponding code in /usr/share/snmp/mib2c.array-user.conf looks like this:
---
@if $c.readable@
@eval $have_type = 0@
case COLUMN_$c.uc:
/** $c.syntax = $c.type */
@if "$c.type" eq "ASN_OBJECT_ID"@
@eval $have_type = 1@
snmp_set_var_typed_value(var, $c.type,
(char*)&context->$c,
context->${c}_len );
@end@
@if "$c.type" eq "ASN_OCTET_STR"@
@eval $have_type = 1@
snmp_set_var_typed_value(var, $c.type,
(char*)&context->$c,
context->${c}_len );
@end@
@if $have_type == 0@
snmp_set_var_typed_value(var, $c.type,
(char*)&context->$c,
sizeof(context->$c) );
@end@
break;
@end@
---
As said earlier, I'm not using the latest version (I'm using
net-snmp-5.4.2.1-8.12.22.1.8750.1.PTF.935863 of SLES11 SP3); maybe someone
knows whether this bug has been fixed meanwhile.
Regards,
Ulrich
>>> Olivier Miakinen <om+net-snmp@miakinen.net> schrieb am 02.09.2015 um 11:52
in
Nachricht <55E6C6F3.70607@miakinen.net>:
> Hallo Ulrich,
>
> I'm not a NET-SNMP expert, but I have remarks about the mib itself.
>
> Le 02/09/2015 11:07, Ulrich Windl a écrit :
>>
>> I'm working with an older version of Net-SNMP. I have a question:
>>
>> My MIB uses an enum "iotwTimingSchedPolicy" that is defined as
>> iotwSchedPolicyEnum ::= Integer32 {
>
> A syntax must begin with an upper case letter : IotwSchedPolicyEnum
>
>> schedPolicy-nice (0),
>> schedPolicy-batch (1),
>> schedPolicy-FIFO (2),
>> schedPolicy-idle (3),
>> schedPolicy-other (4),
>> schedPolicy-RR (5),
>
> I'm not sure that the last comma (,) is allowed.
>
>> }
>>
>> And it us used as
>> iotwObjectEntrySyntax ::= SEQUENCE {
>
> Upper case initial is mandatory for IotwObjectEntrySyntax
>
>> (...)
>> iotwTimingSchedPolicy iotwSchedPolicyEnum,
>
> Lower case initial for the object (iotwTimingSchedPolicy) but upper case
> for the syntax (IotwSchedPolicyEnum).
>
>> (..)
>> }
>>
>> (...)
>> iotwTimingSchedPolicy OBJECT-TYPE
>> SYNTAX iotwSchedPolicyEnum
>
> IotwSchedPolicyEnum
>
>> MAX-ACCESS read-write
>> STATUS optional
>
> Since you have a MAX-ACCESS, your mib is defined in SMIv2, then a STATUS
> can't be 'optional' (possible values are 'current', 'deprecated' and
> 'obsolete').
>
>> (...)
>>
>> I realized that mib2c and snmptranslate both cannot find out the type of
the
> variable.
>
> Probably because the type is not valid (missing upper case initial)
>
>> I'm new in MIB-writing, so maybe I mad mistakes, but the tools don't
complain
> about errors. Ideas?
>
> I found this in NET-SNMP FAQ :
>
>
http://www.net-snmp.org/docs/FAQ.html#How_can_I_get_more_information_about_pr
> oblems_with_MIB_files_
>
> <cit.>
> For a more rigourous validation, use a tool such as 'smilint', or the
> on-line interface at http://wwwsnmp.cs.utwente.nl/ietf/mibs/validate/
> </cit.>
>
>
> Regards,
> --
> Olivier Miakinen
------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic