Hi Aswin, Your index definition proves my guess. The index you create does not match your definition. You can find examples in the SNMP4J-Agent code if you search for "toSubIndex(false)". That is a method of OctetString which creates a sub-index OID value from an OCTET STRING.
Also read the SNMP RFCs about the INDEX SMI construct for more details. Best regards, Frank Am 02.11.2011 02:54, schrieb adireddy.as...@rsa.com: > Resending the mail. > > -----Original Message----- > From: Aswin, Adireddy > Sent: Tuesday, November 01, 2011 5:33 PM > To: 'Frank Fock' > Subject: RE: [SNMP4J] Issues with SET on a read-write column > > Hi Frank, > > Thank you for a quick response. > Here are my index definitions for the table mentioned earlier. > > oidTestConfigEntry = new OID(new int[]{1, 3, 6, 1, 4, 1, 2197, 10, 1, 3, 12, > 1}); > > OID oidIDXTestConfigHost = new OID(new int[]{1, 3, 6, 1, 4, 1, 2197, 10, 1, > 3, 12, 1, 1}); > OID oidIDXTestConfigParamName = new OID(new int[]{1, 3, 6, 1, 4, 1, 2197, 10, > 1, 3, 12, 1, 2}); > > MOTableSubIndex[] testConfigEntryIndexes = new MOTableSubIndex[]{ > moFactory.createSubIndex(oidIDXDispatcherRuntimeConfigHost, > SMIConstants.SYNTAX_OCTET_STRING), > moFactory.createSubIndex(oidIDXDispatcherRuntimeConfigParamName, > SMIConstants.SYNTAX_OCTET_STRING) > }; > > MOTableIndex testConfigEntryIndex = > moFactory.createIndex(testConfigEntryIndexes, false); > > MOColumn[] testConfigEntryColumns = new MOColumn[3]; > testConfigEntryColumns[0]= > moFactory.createColumn(1, > SMIConstants.SYNTAX_OCTET_STRING, > > moFactory.createAccess(MOAccessImpl.ACCESSIBLE_FOR_READ_ONLY)); // > testConfigHost > testConfigEntryColumns[1]= > moFactory.createColumn(2, > SMIConstants.SYNTAX_OCTET_STRING, > > moFactory.createAccess(MOAccessImpl.ACCESSIBLE_FOR_READ_ONLY));// > testConfigParamName > testConfigEntryColumns[2]= > moFactory.createColumn(3, > SMIConstants.SYNTAX_OCTET_STRING, > > moFactory.createAccess(MOAccessImpl.ACCESSIBLE_FOR_READ_WRITE)); // > testConfigParamValue > > I use the following index logic while creating rows- > int i = 1; > for( ... ){ > index = new OID(i); i++; > addRow(rowFactory.createRow(index, values[])); //variable[] size is 3 > // .. > } > If I have my index definition as the one below, the testConfigHost value is > only getting populated in the 3rd column i.e. testConfigParamValue. > > //... > testConfigEntryColumns = new MOColumn[1]; > testConfigEntryColumns[0]= > moFactory.createColumn(3, > SMIConstants.SYNTAX_OCTET_STRING, > > moFactory.createAccess(MOAccessImpl.ACCESSIBLE_FOR_READ_WRITE)); > > > > What am I missing here? > Could you please elaborate as to what you mean by variable length for the > index columns? > > > Thanks and Regards > Aswin > > -----Original Message----- > From: Frank Fock [mailto:f...@agentpp.com] > Sent: Monday, October 31, 2011 9:28 PM > To: Aswin, Adireddy > Cc:<snmp4j@agentpp.org> > Subject: Re: [SNMP4J] Issues with SET on a read-write column > > Hi, > I guess that you have chosen the wrong index for your SET operation. If you > would have included the INDEX definition I could have checked it. > OCTET STRING index columns have variable length and thus need an additional > length sub-id if not specified otherwise for the last sub-index. > > Best regards > Frank > > > > Am 31.10.2011 um 15:51 schrieb<adireddy.as...@rsa.com>: > >> Hi , >> >> >> >> I have a table with 2 indices and one read-write column. >> >> Here is the MIB entry- >> >> >> >> testRuntimeConfigEntry ::= SEQUENCE { >> >> testConfigHost OCTET STRING, >> >> testConfigParamName OCTET STRING, >> >> testConfigParamValue OCTET STRING >> >> } >> >> -- .1.3.6.1.4.1.2197.10.1.3.12.1 >> >> >> >> testConfigHost OBJECT-TYPE >> >> SYNTAX OCTET STRING >> >> ACCESS not-accessible >> >> STATUS current >> >> ::= { testConfigEntry 1 } >> >> >> >> testConfigParamName OBJECT-TYPE >> >> SYNTAX OCTET STRING >> >> ACCESS not-accessible >> >> STATUS current >> >> ::= { testConfigEntry 2 } >> >> >> >> testConfigParamValue OBJECT-TYPE >> >> SYNTAX OCTET STRING >> >> ACCESS read-write >> >> STATUS current >> >> ::= { testConfigEntry 3 } >> >> >> >> I have created a community "public". >> >> I'm able to do a walk on this table, no issues. >> >> (Currently I'm using iReasoning to get the table view) >> >> >> >> But when I do a SET, using "public" community, I get the following response >> >> RESPONSE[requestID=6891380, errorStatus=Unable to create object(11), >> errorIndex=1, VBS[1.3.6.1.4.1.2197.10.1.3.12.1.3.1 = 30]] >> >> >> >> I have fiddled around with all possible view mappings, and I still got the >> same error. >> >> After some digging around, I did manage to create another community >> "private". >> >> >> >> Now when I do a SET, using "private" community, on the read write column, I >> get the following response >> >> RESPONSE[requestID=620227330, errorStatus=General variable binding error(5), >> errorIndex=0, VBS[1.3.6.1.4.1.2197.10.1.3.12.1.3.1 = 30]] >> >> >> >> I'm using the following snippet to set the data >> >> //... >> >> pdu.add(new VariableBinding(new OID(strOID), new OctetString(valueToSet))); >> >> pdu.setType(PDU.SET); >> >> ResponseListener listener = new ResponseListener() { >> >> public void onResponse(ResponseEvent event) { >> >> ((Snmp)event.getSource()).cancel(event.getRequest(), this); >> >> PDU strResponse = event.getResponse(); >> >> if (strResponse!= null) >> >> System.out.println (strResponse.getErrorStatusText()); >> >> else >> >> System.out.println("Response is null"); >> >> }}; >> >> snmp.send(pdu, target, null, listener); >> >> snmp.close(); >> >> >> >> Here is a snippet of my view mappings and communities- >> >> >> >> //same for public community as well >> >> >> >> Variable[] com2sec1 = new Variable[] { new OctetString("private"), >> //community name >> >> new >> OctetString("cprivate"), // security name >> >> >> getAgent().getContextEngineID(), // local engine ID >> >> new >> OctetString("private"), // default context name >> >> new >> OctetString(), // transport tag >> >> new >> Integer32(StorageType.nonVolatile), // storage type >> >> new >> Integer32(RowStatus.active) // row status >> >> }; >> >> >> >> MOTableRow row1 = >> communityMIB.getSnmpCommunityEntry().createRow( >> >> new >> OctetString("private").toSubIndex(true), com2sec1); >> >> >> communityMIB.getSnmpCommunityEntry().addRow(row1); >> >> >> >> vacm.addGroup(SecurityModel.SECURITY_MODEL_SNMPv2c, >> >> new OctetString("cprivate"), >> >> new OctetString("v1v2group"), >> >> StorageType.nonVolatile); >> >> >> >> vacm.addAccess(new OctetString("v1v2group"), new OctetString("private"), >> >> SecurityModel.SECURITY_MODEL_SNMPv2c, >> >> SecurityLevel.NOAUTH_NOPRIV, >> >> MutableVACM.VACM_MATCH_EXACT, >> >> new OctetString("fullReadView"), >> >> new OctetString("fullWriteView"), >> >> new OctetString("fullNotifyView"), >> >> StorageType.nonVolatile); >> >> >> >> vacm.addViewTreeFamily(new OctetString("fullWriteView"), new >> OID(".1.3.6.1.4.1.2197.10.1.3.12.1.3"), >> >> new OctetString(), VacmMIB.vacmViewIncluded, >> >> StorageType.nonVolatile); >> >> >> >> What am I missing here or what am I doing wrong here? >> >> Appreciate any help. >> >> Thanks in advance. >> >> >> >> Regards, >> >> Aswin >> >> >> >> _______________________________________________ >> SNMP4J mailing list >> SNMP4J@agentpp.org >> http://lists.agentpp.org/mailman/listinfo/snmp4j > _______________________________________________ > SNMP4J mailing list > SNMP4J@agentpp.org > http://lists.agentpp.org/mailman/listinfo/snmp4j _______________________________________________ SNMP4J mailing list SNMP4J@agentpp.org http://lists.agentpp.org/mailman/listinfo/snmp4j