[SNMP4J] Issues with SET on a read-write column
Frank Fock
fock at agentpp.com
Thu Nov 3 00:45:03 CET 2011
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.aswin at 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:fock at agentpp.com]
> Sent: Monday, October 31, 2011 9:28 PM
> To: Aswin, Adireddy
> Cc:<snmp4j at 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.aswin at 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 at agentpp.org
>> http://lists.agentpp.org/mailman/listinfo/snmp4j
> _______________________________________________
> SNMP4J mailing list
> SNMP4J at agentpp.org
> http://lists.agentpp.org/mailman/listinfo/snmp4j
More information about the SNMP4J
mailing list