I tracked this down to probably being a multiple thread issue.
The mail loop which calls the API: agent_check_and_process() is in the main
process.
The call to sendTrap2 is in a thread.

What I see is the sendTrap2 logic is making the request to the snmpd, and
before it can put the request on the isp->requests list
the response is coming back into the main process loop and being process,
but since the isp->requests has not been updated, it becomes an un handled
PDU.
The sendTrap2 logic adds it to the isp->requests list and the request
eventually times out and a second trap is sent, which works correctly
because it is sent
withing the main loop.

So I had to get the sending of the Trap to the main loop of the process.
Which required not calling agent_check_and_process(), but writing my own
select statement and processing the snmp socket FDs in it and opening a
listening socket which the trap thread could
send a message to generate a trap, on the main loop processing.

Hope this helps others, that might run into the same issue.

Larry


On Thu, Mar 15, 2018 at 4:42 PM Larry Hayes <lhay...@gmail.com> wrote:

> OS: Linux
> Net-snmp version: 5.7.3
>
> I have written a sub agent using the net-snmp library.
> This sub agent opens a web socket(uWs) to a web socket server and receives
> events.
> It takes the events and maps them to traps and calls the net-snmp library
> functions
> to forward the traps to snmpd, which forwards them out port 162.
> # snmpd -Lsd udp:0.0.0.0
> # subAgent  -Dsess_process_packet -d
>
> snmpd   < -- > subAgent  < -- > custom process
>
> Everything was going well until I did a popen() call from my subAgent to
> get the IP of the machine I am running on.
>
> (Maybe a coincidence) but now about 95% of the time, I get duplicate traps
> coming out of the net-snmp library of the subAgent.  If I do  not do the
> popen() then no duplicates are seen.
>
> When I trun on some debugging in the library, I see unhandled PDU, then a
> resend print.
> This seems to be causing the duplicated traps.
>
> Any Idea why the popen() would interfere with the library apis?
> The popen() and library calls are done by a thread of my subAgent.
>
>
>  sess_process_packet: received message id#0 reqid#2035863312 len 28
> {"method":"alertNtfn","params":{"code":1,"alertId":84,"state":"event","name":"CTRLR:1","type":"Configuration
> Update","severity":"info","description":"Configuration
> Update","modIndex":84,"delIndex":0}}
> Coinfiguration Update
> +++++++++++++++++++ popen(): ifconfig eth0 | grep 'inet addr:' | cut -d:
> -f2 | awk '{ print $1}'
> *sess_process_packet: sending message id#290792091 reqid#2035863313 len
> 212*
>
> Sending 212 bytes to Local IPC: /var/agentx/master
> 0000: 01 0C 00 00  53 00 00 00  00 00 00 00  11 CF 58 79
> ....S.........Xy
> 0016: C0 00 00 00  43 00 00 00  04 02 00 00  01 00 00 00
> ....C...........
> 0032: 01 00 00 00  03 00 00 00  00 00 00 00  41 7B 17 00
> ............A{..
> 0048: 06 00 00 00  06 06 00 00  03 00 00 00  01 00 00 00
> ................
> 0064: 01 00 00 00  04 00 00 00  01 00 00 00  00 00 00 00
> ................
> 0080: 05 04 01 00  01 00 00 00  4E 2A 00 00  01 00 00 00
> ........N*......
> 0096: 00 00 00 00  22 00 00 00  04 00 00 00  05 04 00 00
> ...."...........
> 0112: 01 00 00 00  4E 2A 00 00  02 00 00 00  0F 00 00 00
> ....N*..........
> 0128: 00 00 00 00  00 00 00 00  04 00 00 00  05 04 00 00
> ................
> 0144: 01 00 00 00  4E 2A 00 00  02 00 00 00  10 00 00 00
> ....N*..........
> 0160: 00 00 00 00  00 00 00 00  04 00 00 00  05 04 00 00
> ................
> 0176: 01 00 00 00  4E 2A 00 00  02 00 00 00  11 00 00 00
> ....N*..........
> 0192: 00 00 00 00  0C 00 00 00  31 30 2E 32  30 2E 31 39
> ........10.20.19
> 0208: 2E 31 38 0A                                           .18.
>
> sess_process_packet: session 0x88bd048 fd 8 pkt 0x88ea0a0 length 220
>
> Received 220 byte packet from Local IPC: abstract
> 0000: 01 12 00 00  53 00 00 00  00 00 00 00  11 CF 58 79
> ....S.........Xy
> 0016: C8 00 00 00  43 7B 17 00  00 00 00 00  43 00 00 00
> ....C{......C...
> 0032: 04 02 00 00  01 00 00 00  01 00 00 00  03 00 00 00
> ................
> 0048: 00 00 00 00  41 7B 17 00  06 00 00 00  06 06 00 00
> ....A{..........
> 0064: 03 00 00 00  01 00 00 00  01 00 00 00  04 00 00 00
> ................
> 0080: 01 00 00 00  00 00 00 00  05 04 01 00  01 00 00 00
> ................
> 0096: 4E 2A 00 00  01 00 00 00  00 00 00 00  22 00 00 00
> N*.........."...
> 0112: 04 00 00 00  05 04 00 00  01 00 00 00  4E 2A 00 00
> ............N*..
> 0128: 02 00 00 00  0F 00 00 00  00 00 00 00  00 00 00 00
> ................
> 0144: 04 00 00 00  05 04 00 00  01 00 00 00  4E 2A 00 00
> ............N*..
> 0160: 02 00 00 00  10 00 00 00  00 00 00 00  00 00 00 00
> ................
> 0176: 04 00 00 00  05 04 00 00  01 00 00 00  4E 2A 00 00
> ............N*..
> 0192: 02 00 00 00  11 00 00 00  00 00 00 00  0C 00 00 00
> ................
> 0208: 31 30 2E 32  30 2E 31 39  2E 31 38 0A                 10.20.19.18.
>
>
>
>
>
> *sess_process_packet: received message id#0 reqid#2035863313 len
> 220sess_process_packet: unhandled PDUsess_process_packet: resending message
> id#290792092 reqid#2035863313 rp_reqid#2035863313 rp_msgid#290792092 len
> 212*
> Sending 212 bytes to Local IPC: /var/agentx/master
> 0000: 01 0C 00 00  53 00 00 00  00 00 00 00  11 CF 58 79
> ....S.........Xy
> 0016: C0 00 00 00  43 00 00 00  04 02 00 00  01 00 00 00
> ....C...........
> 0032: 01 00 00 00  03 00 00 00  00 00 00 00  41 7B 17 00
> ............A{..
> 0048: 06 00 00 00  06 06 00 00  03 00 00 00  01 00 00 00
> ................
> 0064: 01 00 00 00  04 00 00 00  01 00 00 00  00 00 00 00
> ................
> 0080: 05 04 01 00  01 00 00 00  4E 2A 00 00  01 00 00 00
> ........N*......
> 0096: 00 00 00 00  22 00 00 00  04 00 00 00  05 04 00 00
> ...."...........
> 0112: 01 00 00 00  4E 2A 00 00  02 00 00 00  0F 00 00 00
> ....N*..........
> 0128: 00 00 00 00  00 00 00 00  04 00 00 00  05 04 00 00
> ................
> 0144: 01 00 00 00  4E 2A 00 00  02 00 00 00  10 00 00 00
> ....N*..........
> 0160: 00 00 00 00  00 00 00 00  04 00 00 00  05 04 00 00
> ................
> 0176: 01 00 00 00  4E 2A 00 00  02 00 00 00  11 00 00 00
> ....N*..........
> 0192: 00 00 00 00  0C 00 00 00  31 30 2E 32  30 2E 31 39
> ........10.20.19
> 0208: 2E 31 38 0A                                           .18.
>
> sess_process_packet: sending message id#290792093 reqid#2035863314 len 20
>
> Sending 20 bytes to Local IPC: /var/agentx/master
> 0000: 01 0D 00 00  53 00 00 00  00 00 00 00  12 CF 58 79
> ....S.........Xy
> 0016: 00 00 00 00                                           ....
>
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Net-snmp-users mailing list
Net-snmp-users@lists.sourceforge.net
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users

Reply via email to