OoO En cette matinée pluvieuse du vendredi 05 juin 2009, vers 10:30, Dave Shield <d.t.shi...@liverpool.ac.uk> disait :
>> I don't quite understand the rule to apply when an OCTET STRING is used >> as an index of a table. It seems that when several string are used as >> index, each string should be prefixed by its length (when converting to >> an OID). However, when the string comes in last position, no length is >> needed. What is the precise rule for all this? > See RFC 2578, Section 7.7 Thanks for the pointer! So, a variable-length string should always be prefixed by its length, except if it is IMPLIED. Here is an excerpt of LLDP-MIB: LldpManAddress ::= TEXTUAL-CONVENTION STATUS current SYNTAX OCTET STRING (SIZE (1..31)) lldpLocManAddrTable OBJECT-TYPE SYNTAX SEQUENCE OF LldpLocManAddrEntry MAX-ACCESS not-accessible STATUS current ::= { lldpLocalSystemData 8 } lldpLocManAddrEntry OBJECT-TYPE SYNTAX LldpLocManAddrEntry MAX-ACCESS not-accessible STATUS current INDEX { lldpLocManAddrSubtype, lldpLocManAddr } ::= { lldpLocManAddrTable 1 } LldpLocManAddrEntry ::= SEQUENCE { lldpLocManAddrSubtype AddressFamilyNumbers, lldpLocManAddr LldpManAddress, lldpLocManAddrLen Integer32, lldpLocManAddrIfSubtype LldpManAddrIfSubtype, lldpLocManAddrIfId Integer32, lldpLocManAddrOID OBJECT IDENTIFIER } So, the index is an integer and a non implied variable-length string. The string should be prefixed by its length. However, if I walk this table, I get: .1.0.8802.1.1.2.1.3.8.1.3.1.4.172.16.101.218 = INTEGER: 5 .1.0.8802.1.1.2.1.3.8.1.4.1.4.172.16.101.218 = INTEGER: unknown(1) .1.0.8802.1.1.2.1.3.8.1.5.1.4.172.16.101.218 = INTEGER: 0 .1.0.8802.1.1.2.1.3.8.1.6.1.4.172.16.101.218 = OID: .1.3.6.1.4.1.45.3.53.1 I suppose that I should get: .1.0.8802.1.1.2.1.3.8.1.3.1.4.4.172.16.101.218 = INTEGER: 5 .1.0.8802.1.1.2.1.3.8.1.4.1.4.4.172.16.101.218 = INTEGER: unknown(1) .1.0.8802.1.1.2.1.3.8.1.5.1.4.4.172.16.101.218 = INTEGER: 0 .1.0.8802.1.1.2.1.3.8.1.6.1.4.4.172.16.101.218 = OID: .1.3.6.1.4.1.45.3.53.1 Am I right? I am not sure because snmpwalk interprets the string as expected: LLDP-MIB::lldpLocManAddrLen.ipV4."..e." = INTEGER: 5 LLDP-MIB::lldpLocManAddrIfSubtype.ipV4."..e." = INTEGER: unknown(1) LLDP-MIB::lldpLocManAddrIfId.ipV4."..e." = INTEGER: 0 LLDP-MIB::lldpLocManAddrOID.ipV4."..e." = OID: SNMPv2-SMI::enterprises.45.3.53.1 Usually, when length is not too large, it should have displayed: LLDP-MIB::lldpLocManAddrLen.ipV4.172.16.101.218. But maybe there is some heuristics here. I think that the implementation is wrong from the RFC point of view. Some other equipments respect the RFC by using a "real" string : LLDP-MIB::lldpLocManAddrLen.ipV4."172.16.101.218" = INTEGER: 5 Can you confirm my conclusion? Many thanks for your help. -- No fortunes found ------------------------------------------------------------------------------ OpenSolaris 2009.06 is a cutting edge operating system for enterprises looking to deploy the next generation of Solaris that includes the latest innovations from Sun and the OpenSource community. Download a copy and enjoy capabilities such as Networking, Storage and Virtualization. Go to: http://p.sf.net/sfu/opensolaris-get _______________________________________________ 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