[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