[AGENT++] agentX++ interoperability with NET-SNMP version 5.7.3.rc1
Frank Fock
fock at agentpp.com
Mon Nov 24 00:32:56 CET 2014
Hi Claus,
In general, the noIndexAllocation strategy does not work if:
1. The row in the sub-agent is added in the "index_allocated" callback
method of the sub-agent (obviously).
2. The master agent does not allow to register rows of a shared table if
there are no mathing index allocations.
In the example, the noIndexAllocation will never work, because after
setting the strategy,
an index allocation is tried (which is a contradiction in itself).
The any_index() will not work with a NET-SNMP master because a NET-SNMP
master
does not support it (at least that was the case for many years).
So, everything is working as expected, isn't it?
Best regards,
Frank
Am 23.11.2014 13:36, schrieb Claus Klein:
> Hi Frank,
>
> I tested again with the subagent example.
>
> In general, I can say:
> • any_index()
> • new_index()
> does not work!
>
> //FIXME ifTable->new_index(); //TODO err=AGENTX_INDEX_NONE_AVAILABLE with noIndexAllocation! ck
> //FIXME ifTable->any_index(); //TODO first call to any_index() creates the illegal ifIndex 0!
>
> In case of any error with index allocation, the subagent ends with memory violation!
> You may see below the log output of such a case.
>
> But this code seems to work with net-snmp as master agent as long as there are no errors while index (de)allocation:
>
> while ((run) && (!mib->get_agentx()->quit()))
> {
>
> req = reqList->receive(4000);
> if (req) {
> mib->process_request(req);
> } else {
> // ping the master
> mib->ping_master();
>
> /**
> * This shows how manipulation of a shared
> * table can be done from outside the table class:
> **/
> if (ifEntry::instance) {
> ifEntry* ifTable = ifEntry::instance;
> static bool deAllocateIndices = false;
> //NOTE: default index strategy is firstSubIndexOnly; it works OK
> //FIXME ifTable->set_index_strategy(noIndexAllocation); //TODO does NOT work with net-snmp master agent; why? ck
> //OK ifTable->set_index_strategy(anyNonAllocatedSubIndex); // OK
> //OK ifTable->set_index_strategy(alwaysFirstSubIndex); // OK
>
> if (!deAllocateIndices && ifTable->size() < 3) {
> //FIXME ifTable->new_index();//TODO err=AGENTX_INDEX_NONE_AVAILABLE with noIndexAllocation! ck
> //FIXME ifTable->any_index(); //TODO first call to any_index() creates the illegal ifIndex 0!
> //
> // or this works better if there are NO errors while (de)allocation at master agent.
> //=========================================================
> Oidx index(ifTable->get_next_avail_index());
> if (ifTable->allocate_index(index)) {
> std::cout << std::endl << "ifEntry(" <<
> index.get_printable() << ") allocated"
> << std::endl << std::endl;
> } else {
> std::cout << std::endl << "ifEntry(" <<
> index.get_printable() << ") allocation failed!"
> << std::endl << std::endl;
> }
> //=========================================================
>
> } else if (!deAllocateIndices && ifTable->size() == 3) {
> deAllocateIndices = true;
> } else {
>
> //=========================================================
> if (deAllocateIndices && (ifTable->size())) {
> List<MibTableRow>* l = ifTable->get_rows();
> Oidx index(l->last()->get_index());
> l->clear();
> delete l;
> ifTable->remove_row(index);
> std::cout << std::endl << "ifEntry(" <<
> index.get_printable() << ") removed"
> << std::endl << std::endl;
> }
> //=========================================================
>
> if (!ifTable->size()) {
> deAllocateIndices = false; // done
> }
> }
> }
> }
> }
>
> Best regards,
> Claus
>
> ########################################################################################
>
> /**
> * This shows how manipulation of a shared
> * table can be done from outside the table class:
> **/
> if (ifEntry::instance) {
> ifEntry* ifTable = ifEntry::instance;
> //FIXME ifTable->set_index_strategy(noIndexAllocation); //TODO check this! ck
> ifTable->set_index_strategy(anyNonAllocatedSubIndex); //TODO check this! ck
>
> if (!done && ifTable->size() < 3) {
> ifTable->new_index(); //FIXME err=AGENTX_INDEX_NONE_AVAILABLE with noIndexAllocation! ck
> }
> }
>
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (5)INFO : AgentXSlave: no request within (milli seconds): (20000)
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (3)EVENT : AgentX: sending agentx pdu (sd)(type)(sid)(tid)(pid)(err)(errind): (3), (13), (22), (106), (109), (0), (0)
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)EVENT : AgentXSlave: sending index allocate PDU (sz)(type): (1), (NEW_INDEX)
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (3)EVENT : AgentX: sending agentx pdu (sd)(type)(sid)(tid)(pid)(err)(errind): (3), (14), (22), (107), (110), (0), (0)
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (4)DEBUG : AgentXSlave: received something on ports
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)EVENT : AgentXRequestList: request received (context)(tid)(pid)(siz)(type)(err)(status): (), (106), (109), (0), (18), (0), (0)
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)DEBUG : LockQueue: adding lock request (ptr): (4320162192)
> 20141123.11:41:08: 00 70 43 01 01 00 00 00 .pC.....
> : (8)DEBUG : Synchronized: trylock success (id): (669)
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (1)DEBUG : TaskManager: task manager found
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)DEBUG : TaskManager: after notify
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (4)DEBUG : AgentXSlave: received something on ports
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)EVENT : AgentXRequestList: request received (context)(tid)(pid)(siz)(type)(err)(status): (), (107), (110), (1), (18), (0), (0)
> 20141123.11:41:08: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)EVENT : SubAgent: starting thread execution
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)DEBUG : LockQueue: adding lock request (ptr): (4303367056)
> 20141123.11:41:08: 00 70 5E 00 01 00 00 00 .p^.....
> : (1)DEBUG : TaskManager: task manager found
> 20141123.11:41:08: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)DEBUG : TaskManager: after notify
> 20141123.11:41:08: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)EVENT : Agent: finished thread execution
> 20141123.11:41:08: 00 70 43 01 01 00 00 00 .pC.....
> : (8)DEBUG : Synchronized: trylock success (id): (672)
> 20141123.11:41:08: 00 10 5C 00 01 00 00 00 ..\.....
> : (1)INFO : SubAgentXMib: PING response received (sid)(tid)(pid)(uptime): (22), (106), (109), (927257)
> 20141123.11:41:08: 00 10 5C 00 01 00 00 00 ..\.....
> : (2)DEBUG : LockQueue: adding release request (ptr): (4320162192)
> 20141123.11:41:08: 00 10 5C 00 01 00 00 00 ..\.....
> : (8)DEBUG : Synchronized: trylock success (id): (244)
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (1)DEBUG : TaskManager: task manager found
> 20141123.11:41:08: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)DEBUG : TaskManager: after notify
> 20141123.11:41:08: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)EVENT : SubAgent: starting thread execution
> 20141123.11:41:08: 00 70 5E 00 01 00 00 00 .p^.....
> : (1)DEBUG : TaskManager: task manager found
> 20141123.11:41:08: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)DEBUG : TaskManager: after notify
> 20141123.11:41:08: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)EVENT : Agent: finished thread execution
> 20141123.11:41:08: 00 10 5C 00 01 00 00 00 ..\.....
> : (1)DEBUG : SubAgentXMib: index (de)allocate response (oid)(err)(errind)(values..): (0), (0), (1.3.6.1.2.1.2.2.1), (1.3.6.1.2.1.2.2.1.1), (0)
> 20141123.11:41:21: 00 10 5C 00 01 00 00 00 ..\.....
> : (2)DEBUG : AgentXSlave: sending register PDU (context)(oid)(rangeid)(upper): (), (1.3.6.1.2.1.2.2.1.1.0), (10), (1.3.6.1.2.1.2.2.1.22.0)
> 20141123.11:41:21: 00 10 5C 00 01 00 00 00 ..\.....
> : (3)EVENT : AgentX: sending agentx pdu (sd)(type)(sid)(tid)(pid)(err)(errind): (3), (3), (22), (108), (111), (0), (0)
> 20141123.11:41:21: 00 10 5C 00 01 00 00 00 ..\.....
> : (2)DEBUG : LockQueue: adding release request (ptr): (4303367056)
> 20141123.11:41:21: 00 10 5C 00 01 00 00 00 ..\.....
> : (8)DEBUG : Synchronized: trylock success (id): (244)
> 20141123.11:41:21: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (4)DEBUG : AgentXSlave: received something on ports
> 20141123.11:41:21: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)EVENT : AgentXRequestList: request received (context)(tid)(pid)(siz)(type)(err)(status): (), (108), (111), (1), (18), (0), (0)
> 20141123.11:41:21: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)DEBUG : LockQueue: adding lock request (ptr): (4320162192)
> 20141123.11:41:21: 00 70 43 01 01 00 00 00 .pC.....
> : (8)DEBUG : Synchronized: trylock success (id): (699)
> 20141123.11:41:21: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (1)DEBUG : TaskManager: task manager found
> 20141123.11:41:21: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)DEBUG : TaskManager: after notify
> 20141123.11:41:21: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)EVENT : SubAgent: starting thread execution
> 20141123.11:41:21: 00 70 5E 00 01 00 00 00 .p^.....
> : (1)DEBUG : TaskManager: task manager found
> 20141123.11:41:21: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)DEBUG : TaskManager: after notify
> 20141123.11:41:21: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)EVENT : Agent: finished thread execution
> 20141123.11:41:21: 00 10 5C 00 01 00 00 00 ..\.....
> : (1)DEBUG : SubAgentXMib: registration success (oid): (1.3.6.1.2.1.2.2.1.1.0)
> 20141123.11:41:21: 00 10 5C 00 01 00 00 00 ..\.....
> : (2)DEBUG : LockQueue: adding release request (ptr): (4320162192)
> 20141123.11:41:21: 00 10 5C 00 01 00 00 00 ..\.....
> : (8)DEBUG : Synchronized: trylock success (id): (244)
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
>
> : (5)INFO : AgentXSlave: no request within (milli seconds): (20000)
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (3)EVENT : AgentX: sending agentx pdu (sd)(type)(sid)(tid)(pid)(err)(errind): (3), (13), (22), (109), (113), (0), (0)
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)EVENT : AgentXSlave: sending index allocate PDU (sz)(type): (1), (NEW_INDEX)
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (3)EVENT : AgentX: sending agentx pdu (sd)(type)(sid)(tid)(pid)(err)(errind): (3), (14), (22), (110), (114), (0), (0)
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (4)DEBUG : AgentXSlave: received something on ports
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)EVENT : AgentXRequestList: request received (context)(tid)(pid)(siz)(type)(err)(status): (), (109), (113), (0), (18), (0), (0)
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)DEBUG : LockQueue: adding lock request (ptr): (4320162192)
> 20141123.11:41:41: 00 70 43 01 01 00 00 00 .pC.....
> : (8)DEBUG : Synchronized: trylock success (id): (703)
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (1)DEBUG : TaskManager: task manager found
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)DEBUG : TaskManager: after notify
> 20141123.11:41:41: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)EVENT : SubAgent: starting thread execution
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (4)DEBUG : AgentXSlave: received something on ports
> 20141123.11:41:41: 00 70 5E 00 01 00 00 00 .p^.....
> : (1)DEBUG : TaskManager: task manager found
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)EVENT : AgentXRequestList: request received (context)(tid)(pid)(siz)(type)(err)(status): (), (110), (114), (1), (18), (260), (0) <<<< AGENTX_INDEX_NONE_AVAILABLE
> 20141123.11:41:41: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)DEBUG : TaskManager: after notify
> 20141123.11:41:41: 00 10 5C 00 01 00 00 00 ..\.....
> : (1)INFO : SubAgentXMib: PING response received (sid)(tid)(pid)(uptime): (22), (109), (113), (930560)
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)DEBUG : LockQueue: adding lock request (ptr): (4320163728)
> 20141123.11:41:41: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)EVENT : Agent: finished thread execution
> 20141123.11:41:41: 00 10 5C 00 01 00 00 00 ..\.....
> : (2)DEBUG : LockQueue: adding release request (ptr): (4320162192)
> 20141123.11:41:41: 00 70 43 01 01 00 00 00 .pC.....
> : (8)DEBUG : Synchronized: trylock success (id): (706)
> 20141123.11:41:41: 00 10 5C 00 01 00 00 00 ..\.....
> : (8)DEBUG : Synchronized: trylock success (id): (244)
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (1)DEBUG : TaskManager: task manager found
> 20141123.11:41:41: 10 A3 F3 73 FF 7F 00 00 ...s....
> : (2)DEBUG : TaskManager: after notify
> 20141123.11:41:41: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)EVENT : SubAgent: starting thread execution
> 20141123.11:41:41: 00 70 5E 00 01 00 00 00 .p^.....
> : (1)DEBUG : TaskManager: task manager found
> 20141123.11:41:41: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)DEBUG : TaskManager: after notify
> 20141123.11:41:41: 00 70 5E 00 01 00 00 00 .p^.....
> : (2)EVENT : Agent: finished thread execution
> 20141123.11:41:41: 00 10 5C 00 01 00 00 00 ..\.....
> : (1)DEBUG : SubAgentXMib: index (de)allocate response (oid)(err)(errind)(values..): (260), (0), (1.3.6.1.2.1.2.2.1), (1.3.6.1.2.1.2.2.1.1), (0)
> subagent(95249,0x1005c1000) malloc: *** error for object 0x1006153a0: pointer being freed was not allocated
> *** set a breakpoint in malloc_error_break to debug
> (lldb)
> On 23.11.2014, at 09:50, Frank Fock <fock at agentpp.com> wrote:
>
>> Hi Claus,
>>
>> There are several index allocation strategies available in AgentX++. You should choose
>> the strategy that fits best to your shared table index definition. Using the wrong
>> strategy could lead to a duplicate index registration.
>>
>> Best regards,
>> Frank
--
---
AGENT++
Maximilian-Kolbe-Str. 10
73257 Koengen, Germany
https://agentpp.com
Phone: +49 7024 8688230
Fax: +49 7024 8688231
More information about the AGENTPP
mailing list