> Hi All,
> 
> Sometimes SNMPD is not responding to snmp requests even though it is
> up and running,  SNMPD is queuing all the requests without processing
> as netsnmp_processing_set  and agent_delegated_list are not getting
> unset. However SNMPD is able to send traps originated by subagent. 
> 
> We are using Net-snmp-5.2.2 as master and subagent. We have 
> 1) Applications which does set and walk operations on our enterprise
> mib 
> 2) Monitoring application which does get operation on  OID
> 1.3.6.1.2.1.1.3.0 (sysUpTime) every 10secs
> 3) Applications which sends number of traps due to changes in the
> system
>  
> Our analysis:
> When the problem occurred we are doing walks on our enterprise MIB
> followed by set operation, when getnext operation is done
> agent_delegated_list is set and it did not get unset. After this when
> set operation is done  in netsnmp_handle_request Snmpd checks if
> agent_delegated_list is set, as it is not unset set request is getting
> queued and as set operation is not processed netsnmp_processing_set
> is not getting unset. For all the further queries SNMPD first checks
> whether netsnmp_processing_set   is set , as this not is unset all the
> requests are getting queued up without getting processed
> 
> So the root cause seems to be agent_delegated_list field not getting
> unset, even I did not see any pending timers in the alarm list
>  
> This problem is coming very frequently. Can you please help us if this
> kind of problem is seen earlier and any help on this will be
> appreciated.
> 
> 
> gdb) p *netsnmp_processing_set->pdu
> $6 = {version = 1, command = 163, reqid = 34644814, msgid = 0, transid
> = 5095,    
>   sessid = 0, errstat = 0, errindex = 0, time = 0, flags = 0,
>   securityModel = 2, securityLevel = 1, msgParseModel = 0,
>   transport_data = 0x100b5ac0, transport_data_length = 16,
>   tDomain = 0xfe893c4, tDomainLen = 7, variables = 0x100ca7e0,
>   community = 0x10084050 "public", community_len = 6, enterprise =
> 0x0,
>   enterprise_length = 0, trap_type = 0, specific_type = 0,
>   agent_addr = "\000\000\000", contextEngineID = 0x0,
> contextEngineIDLen = 0,
>   contextName = 0x100b92f8 "", contextNameLen = 0, securityEngineID =
> 0x0,
>   securityEngineIDLen = 0, securityName = 0x0, securityNameLen = 0,
>   priority = 0, range_subid = 0, securityStateRef = 0x0}
> (gdb)
> 
> (gdb) p *agent_delegated_list->pdu
> $4 = {version = 1, command = 161, reqid = 1989587127, msgid = 0,
>   transid = 2658, sessid = 0, errstat = 0, errindex = 0, time = 0,
> flags = 0,
>   securityModel = 2, securityLevel = 1, msgParseModel = 0,
>   transport_data = 0x100cc2f8, transport_data_length = 16,
>   tDomain = 0xfe893c4, tDomainLen = 7, variables = 0x100ccf38,
>   community = 0x100cc2e8 "public", community_len = 6, enterprise =
> 0x0,
>   enterprise_length = 0, trap_type = 0, specific_type = 0,
>   agent_addr = "\000\000\000", contextEngineID = 0x0,
> contextEngineIDLen = 0,
>   contextName = 0x100cc3e0 "", contextNameLen = 0, securityEngineID =
> 0x0,
>   securityEngineIDLen = 0, securityName = 0x0, securityNameLen = 0,
>   priority = 0, range_subid = 0, securityStateRef = 0x0}
> 
> 
> Code snippet:
> netsnmp_handle_request(netsnmp_agent_session *asp, int status)
> {
>     /*
>      * if this isn't a delegated request trying to finish,
>      * processing of a set request should not start until all
>      * delegated requests have completed, and no other new requests
>      * should be processed until the set request completes.
>      */
>     if ((0 == netsnmp_check_delegated_chain_for(asp)) &&
>         (asp != netsnmp_processing_set)) {
>         /*
>          * if we are processing a set and this is not a delegated
>          * request, queue the request
>          */
>         if (netsnmp_processing_set) {
>             netsnmp_add_queued(asp);
>             DEBUGMSGTL(("snmp_agent",
>                         "request queued while processing set, "
>                         "asp = %08p\n", asp));
>             return 1;
>         }
>         /*
>          * check for set request
>          */
>         if (asp->pdu->command == SNMP_MSG_SET) {
>             netsnmp_processing_set = asp;
> 
>             /*
>              * if there are delegated requests, we must wait for them
>              * to finish.
>              */
>             if (agent_delegated_list) {
>                 DEBUGMSGTL(("snmp_agent", "SET request queued while "
>                             "delegated requests finish, asp = %08p\n",
>                             asp));
>                 netsnmp_add_queued(asp);
>                 return 1;
>             }
> 
> 
> 
> Thanks,
> Ravi
-------------------------------------------------------------------------
SF.Net email is sponsored by:
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services
for just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users

Reply via email to