LS,

   when playing around with bitstrings, I found a small bug in 
net-snmp-5.7.1/snmplib/mib.c
in sprint_realloc_bitstring:
--------8<-----------
                     for (; enums; enums = enums->next) {
                         if (enums->value == (len * 8) + bit) {
                             enum_string = enums->label;
                             break;
                         }
                     }
--------8<-----------

The above snippet assumes that all bits are enumerated in an ascending 
order. But Cisco
has a MIB (CISCO-QOS-PIB-MIB) that enumerates 
QosInterfaceTypeCapabilities in a
random order:

--------8<-----------
QosInterfaceTypeCapabilities ::= TEXTUAL-CONVENTION
     STATUS current
     DESCRIPTION
         "An enumeration of interface capabilities.  Used by the PDP to
         select policies and configuration to push to the PEP."
     SYNTAX BITS {
         unspecified (0),

         -- Classification support
         inputL2Classification (1), inputIpClassification (2),
         outputL2Classification (3), outputIpClassification (4),
         inputPortClassification (19), outputPortClassification (20),

         -- Policing support
         inputUflowPolicing (5), inputAggregatePolicing (6),
         outputUflowPolicing (7), outputAggregatePolicing (8),
         policeByMarkingDown (9), policeByDropping (10),
         inputUflowShaping (21), inputAggregateShaping (22),
         outputUflowShaping (23), outputAggregateShaping (24),

         -- Supported scheduling mechanisms
         fifo (11), wrr (12), wfq (13), cq (14), pq (15), cbwfq (16),
         pqWrr (25), pqCbwfq (26),

         -- Supported congestion control mechanisms
         tailDrop (17), wred (18)
   }
--------8<-----------

When I run a small tool that print out all bits using 
snmp_varlist_add_variable and
snprint_variable:

--------8<-----------
                 /* val is a pointer to a u_char string */
                 snmp_varlist_add_variable (&vars, name, name_length, 
ASN_BIT_STR, (u_char *)val, val_size);

                 snprint_variable (n, sizeof (n), name, name_length, 
vars);
                 printf ("test vars: %s\n", n);

                 snmp_free_varbind(vars);
--------8<-----------

It outputs:
$ ./snmpt
test vars: CISCO-QOS-PIB-MIB::qosInterfaceTypeCapabilities = BITS: FF 
FF FF E0 00 unspecified(0) inputL2Classification(1) 
inputIpClassification(2) outputL2Classification(3) 
outputIpClassification(4) inputUflowPolicing(5) 
inputAggregatePolicing(6) outputUflowPolicing(7) 
outputAggregatePolicing(8) policeByMarkingDown(9) policeByDropping(10) 
fifo(11) wrr(12) wfq(13) cq(14) pq(15) cbwfq(16) tailDrop(17) wred(18) 
19 20 21 22 23 24 25 26

When I put the bits in ascending order in the MIB, it outputs:

$ ./snmpt
test vars: CISCO-QOS-PIB-MIB::qosInterfaceTypeCapabilities = BITS: FF 
FF FF E0 00 unspecified(0) inputL2Classification(1) 
inputIpClassification(2) outputL2Classification(3) 
outputIpClassification(4) inputUflowPolicing(5) 
inputAggregatePolicing(6) outputUflowPolicing(7) 
outputAggregatePolicing(8) policeByMarkingDown(9) policeByDropping(10) 
fifo(11) wrr(12) wfq(13) cq(14) pq(15) cbwfq(16) tailDrop(17) wred(18) 
inputPortClassification(19) outputPortClassification(20) 
inputUflowShaping(21) inputAggregateShaping(22) outputUflowShaping(23) 
outputAggregateShaping(24) pqWrr(25) pqCbwfq(26)

Which is correct and should be the output in both situations.

The correct way should be to start the loop in the snippet above at the 
start of the
list.

Kind regards, Edgar Matzinger.

------------------------------------------------------------------------------
LogMeIn Central: Instant, anywhere, Remote PC access and management.
Stay in control, update software, and manage PCs from one command center
Diagnose problems and improve visibility into emerging IT issues
Automate, monitor and manage. Do more in less time with Central
http://p.sf.net/sfu/logmein12331_d2d
_______________________________________________
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

Reply via email to