[SNMP4J] AgentX shared table indexes problem
Frank Fock
fock at agentpp.com
Thu Mar 8 00:01:41 CET 2012
Hi
The extended index allocation preview can be found
at:
https://server.oosnmp.net/dist/snapshot/org/snmp4j/snmp4j-agentx/2.1-SNAPSHOT/
There are still some issue which need to be fixed.
The snapshot will thus be updated frequently within
the next days.
Best regards,
Frank
Am 05.03.2012 17:25, schrieb Frank Fock:
> Hi Jesse,
>
> Please wait until AgentX 2.1 SNAPSHOT. It will be available not
> later than Wednesday.
>
> Best regards,
> Frank
>
> Am 05.03.2012 14:50, schrieb Jesse Woo:
>> Hi Frank,
>>
>> Shall I overwrite the allocateIndex(..) and deallocateIndex(..) to do nothing for the child table, i.e. return AgentXProtocol.AGENTX_SUCCESS directly?
>>
>> Without index allocation on master agent, will I get the child row OID as below I wanted?
>>
>> Is there alternative way doing shared child table without combined index?
>>
>>> Say session 10 has 3 statistics
>>>
>>> peerIndex.10 = 10 # represents session 10
>>>
>>> statIndex.10.1 = 1 # represents 1st stat of session 10
>>> statIndex.10.2 = 2 # represents 2nd stat of session 10
>>> statIndex.10.3 = 3 # represents 3rd stat of session 10
>> Thanks,
>> Jesse
>>
>> -----Original Message-----
>> From: snmp4j-bounces at agentpp.org [mailto:snmp4j-bounces at agentpp.org] On Behalf Of Frank Fock
>> Sent: 02 March 2012 01:00
>> To: snmp4j at agentpp.org
>> Subject: Re: [SNMP4J] AgentX shared table indexes problem
>>
>> Hi Jesse,
>>
>> The behavior you observed is required by the AgentX protocol.
>> See RFC 2741 section 7.1.4.2.2 for details.
>>
>> If you have such an index structure, where you share the index of the master table, then you should not use any index allocation for the child table.
>>
>> Thus, you should overwrite the methods allocateIndex(..) and deallocateIndex(..) in AgentXSharedMOTableSupport in your own sub-class. Then use that sub-class in your child DefaultAgentXSharedMOTable.
>>
>> Hope that helps.
>>
>> Best regards,
>> Frank
>>
>> Am 20.02.2012 14:10, schrieb Jesse Woo:
>>> I have a MIB contains two tables, main table peerTable and its child table statTable.
>>>
>>> Each row in peerTable represents one session, and each row of statTable is one statistic of a session. Hence the relationship of peerTable and statTable is one-to-many.
>>>
>>> I have many sessions and want the two tables shared across sessions,
>>> and I want the tree is built like this,
>>>
>>> Say session 10 has 3 statistics
>>>
>>> peerIndex.10 = 10 # represents session 10
>>>
>>> statIndex.10.1 = 1 # represents 1st stat of session 10
>>> statIndex.10.2 = 2 # represents 1st stat of session 10
>>> statIndex.10.3 = 3 # represents 1st stat of session 10
>>>
>>>
>>> I have followed sample AgentppTestMib.java and created the two tables as DefaultAgentXSharedMOTable.
>>>
>>> The peerTable works ok but I can't add any rows to statTable because master agent returned error code 259 (AGENTX_INDEX_ALREADY_ALLOCATED) when allocating index for statTable.
>>>
>>> Seems master can't allocate combined index if one of them is already allocated. For example, peerIndex 10 is created for peerTable, and I want to allocate index (peerIndx, statIndex) (10,1) for statTable and master rejects it as the 10 is already allocated.
>>>
>>> My question is:
>>>
>>> Is it AgentX API bug? If not, is it my MIB not compatible with AgentX? If so, how to implement shared table& child tables?
>>>
>>>
>>> Below are my codes and MIB:
>>>
>>> private MOTable<StatEntryRow,
>>> MOColumn,
>>> MOTableModel<StatEntryRow>> statEntry; private
>>> MOTableModel<StatEntryRow> statEntryModel;
>>>
>>> ...
>>>
>>> @SuppressWarnings(value={"unchecked"})
>>> private void createStatEntry(MOFactory moFactory) {
>>> // Index definition
>>> statEntryIndexes =
>>> new MOTableSubIndex[] {
>>> moFactory.createSubIndex(oidPeerIndex,
>>> SMIConstants.SYNTAX_INTEGER, 1, 1),
>>> moFactory.createSubIndex(oidStatIndex,
>>> SMIConstants.SYNTAX_INTEGER, 1, 1) };
>>> ...
>>>
>>> // Table model
>>> statEntryModel =
>>> moFactory.createTableModel(oidStatEntry,
>>> statEntryIndex,
>>> statEntryColumns);
>>> ((MOMutableTableModel<StatEntryRow>)statEntryModel).setRowFactory(
>>> new StatEntryRowFactory());
>>> statEntry =
>>> moFactory.createTable(oidStatEntry,
>>> statEntryIndex,
>>> statEntryColumns,
>>> statEntryModel); }
>>>
>>>
>>> @SuppressWarnings("unchecked")
>>> static class CerillionCcs2MOFactory extends DefaultMOFactory {
>>>
>>> public MOTable createTable(OID oid, MOTableIndex indexDef,
>>> MOColumn[] columns) {
>>> if (oidPeerEntry.equals(oid)) {
>>> return new DefaultAgentXSharedMOTable(oid, indexDef, columns) {
>>> public void setAgentXSharedMOTableSupport(AgentXSharedMOTableSupport
>>> sharedTableSupport) {
>>> super.setAgentXSharedMOTableSupport(sharedTableSupport);
>>> ((MOMutableTableModel)model).clear();
>>>
>>> OID index =
>>> new OID(new int[] { sharedTableSupport.getSession().getSessionID() });
>>>
>>> // register current session on shared table PeerEntry
>>> Variable[] vbs = getDefaultValues();
>>> vbs[idxPeerIndex] = new Integer32(sharedTableSupport.getSession().getSessionID());
>>> vbs[idxPeerName] = new OctetString("Session - " + sharedTableSupport.getSession().getSessionID());
>>> vbs[idxCurrentState] = new OctetString(function.getState().toString());
>>>
>>> MOTableRow row = createRow(index, vbs);
>>> if (row != null) {
>>> addRow(row);
>>> }
>>> }
>>> };
>>> }
>>>
>>> if (oidStatEntry.equals(oid)) {
>>> return new DefaultAgentXSharedMOTable(oid, indexDef, columns) {
>>> public void setAgentXSharedMOTableSupport(AgentXSharedMOTableSupport
>>> sharedTableSupport) {
>>> super.setAgentXSharedMOTableSupport(sharedTableSupport);
>>> ((MOMutableTableModel)model).clear();
>>>
>>> int sessionId = sharedTableSupport.getSession().getSessionID();
>>>
>>> // add initial stats
>>> psList = function.getPeerStatistics();
>>> for (int i=0; psList!=null&& i<psList.size(); i++) {
>>> OID index =
>>> new OID(new int[] { sessionId, i+1});
>>>
>>> PeerStatistics ps = psList.get(i);
>>>
>>> Variable[] vbs = getDefaultValues();
>>> vbs[idxStatIndex] = new Integer32(i+1);
>>> vbs[idxStatname] = new OctetString(ps.getPeerName() + " of session - " + sessionId);
>>> vbs[idxRecvCount] = new Counter32((int)ps.getReceivedCount());
>>> vbs[idxSentCount] = new Counter32((int)ps.getSentCount());
>>>
>>> MOTableRow row = createRow(index, vbs);
>>> if (row != null) {
>>> addRow(row);
>>> }
>>> }
>>> }
>>> };
>>> }
>>> return new DefaultAgentXSharedMOTable(oid, indexDef, columns);
>>> }
>>>
>>> public MOTable createTable(OID oid, MOTableIndex indexDef, MOColumn[] columns,
>>> MOTableModel model) {
>>> DefaultAgentXSharedMOTable table =
>>> (DefaultAgentXSharedMOTable) createTable(oid, indexDef, columns);
>>> table.setModel(model);
>>> return table;
>>> }
>>>
>>> }
>>>
>>>
>>> Here is the MIB:
>>>
>>> peerEntry OBJECT-TYPE
>>> SYNTAX PeerEntry
>>> ACCESS not-accessible
>>> STATUS mandatory
>>> DESCRIPTION "Each entry presents a peer."
>>> INDEX { peerIndex }
>>> ::= { peerTable 1 }
>>>
>>> PeerEntry ::= SEQUENCE {
>>> peerIndex INTEGER,
>>> ...
>>> }
>>>
>>> peerIndex OBJECT-TYPE
>>> SYNTAX INTEGER (1..2147483647)
>>> ACCESS read-only
>>> STATUS mandatory
>>> DESCRIPTION "Unique index on peer table."
>>> ::= { peerEntry 1 }
>>>
>>>
>>> statEntry OBJECT-TYPE
>>> SYNTAX StatEntry
>>> ACCESS not-accessible
>>> STATUS mandatory
>>> DESCRIPTION "Each entry represents a statistic of a peer.
>>> The peerIndex in the index represents the entry in
>>> the peerTable that corresponds to the statEntry.
>>> INDEX { peerIndex, statIndex }
>>> ::= { statTable 1 }
>>>
>>>
>>> StatEntry ::= SEQUENCE {
>>> statIndex INTEGER,
>>> ...
>>> }
>>>
>>> statIndex OBJECT-TYPE
>>> SYNTAX INTEGER (1..2147483647)
>>> ACCESS read-only
>>> STATUS mandatory
>>> DESCRIPTION "A unique value for each statistic of the peer."
>>> ::= { statEntry 1 }
>>>
>>>
>>> Regards,
>>> Jesse
>>> Cerillion Technologies Limited
>>> Office. +44 20 7927 6197
>>> Web. www.cerillion.com
>>> Addr. 125 Shaftsbury Avenue, London, WC2H 8AD, UK
>>> _______________________________________________
>>> SNMP4J mailing list
>>> SNMP4J at agentpp.org
>>> http://lists.agentpp.org/mailman/listinfo/snmp4j
--
---
AGENT++
Maximilian-Kolbe-Str. 10
73257 Koengen, Germany
https://agentpp.com
Phone: +49 7024 8688230
Fax: +49 7024 8688231
More information about the SNMP4J
mailing list