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