Hi!

I need some help finding the missing link for my AgentX subagent:

I made an agentX that registers successfully with the master agent, and it 
registers the MIB object. However for some reason, the master agent seems to 
know nothing about the MIB, and the provided callback function are not called. 
I cannot find out why, so I'm asking for help.

On the test machine runs a regular (root) snmpd, and I run my test daemon with 
a different port and user (/usr/sbin/snmpd -M+. -m+NET-SNMP-MIB -m+IOTWatch-MIB 
-f -Lo -C --rocommunity="public .1" --rwcommunity=debug --master=agentx 
--agentXSocket=tcp:localhost:1705 udp:1161 -D).

My subagent is multi-threaded (most threads get the data and only one thread 
does the SNMP stuff, but data exchange is not done yet).

My MIB implements a table that should be changed dynamically, starting with an 
empty table (no objects created). The MIB starts like this:
# +--netSnmpPlaypen(9999)
#    |
#    +--iotw(685032294)
#       |
#       +--iotwObjects(1)
#       |  |
#       |  +--iotwObjectTable(1)
#       |     |
#       |     +--iotwObjectEntry(1)
#       |        |  Index: iotwObjectIndex
#       |        |
#       |        +-- ---- Integer32 iotwObjectIndex(1)
#       |        |        Range: 1..2147483647
#       |        +-- CR-- EnumVal   iotwRowStatus(2)
#       |        |        Textual Convention: RowStatus
#       |        |        Values: active(1), notInService(2), notReady(3), crea\
teAndGo(4), createAndWait(5), destroy(6)
#       |        +-- -RW- String    iotwObjectName(3)
#       |        |        Size: 1..256
[...]

I switched on "-DALL" for the master and the subagent, but still I don't get it!

For me it seems the master is registering the subagent OK. Here are some log 
lines from the master agent:
read_config: reading premib configuration tokens
trace: netsnmp_config_process_memory_list(): read_config.c, 648:
read_config: processing memory: rocommunity public .1
trace: netsnmp_config_process_memory_list(): read_config.c, 648:
read_config: processing memory: rwcommunity debug
trace: netsnmp_config_process_memory_list(): read_config.c, 648:
read_config: processing memory: master agentx
trace: netsnmp_config_process_memory_list(): read_config.c, 648:
read_config: processing memory: agentXSocket tcp:localhost:1705
trace: netsnmp_ds_set_boolean(): default_store.c, 205:
[...]
read_config: processing memory: master agentx
trace: run_config_handler(): read_config.c, 499:
read_config: Found a parser.  Calling it: master / agentx
Turning on AgentX master support.
trace: netsnmp_ds_set_boolean(): default_store.c, 205:
netsnmp_ds_set_boolean: Setting APP:3 = 1/True
trace: netsnmp_config_process_memory_list(): read_config.c, 648:
read_config: processing memory: agentXSocket tcp:localhost:1705
trace: run_config_handler(): read_config.c, 499:
read_config: Found a parser.  Calling it: agentXSocket / tcp:localhost:1705
trace: agentx_parse_agentx_socket(): mibgroup/agentx/agentx_config.c, 37:
agentx/config: port spec: tcp:localhost:1705
trace: netsnmp_ds_set_string(): default_store.c, 283:
[...]
agentx/master: initializing...
trace: netsnmp_tdomain_transport_full(): snmp_transport.c, 349:
tdomain: tdomain_transport_full("agentx", "tcp:localhost:1705", 1, "[NIL]", 
"[NIL]")
trace: find_tdomain(): snmp_transport.c, 322:
tdomain: Found domain "tcp" from specifier "tcp"
trace: netsnmp_lookup_default_target(): snmp_service.c, 388:
defaults: netsnmp_lookup_default_target("agentx", "tcp") -> ":705"
trace: netsnmp_tdomain_transport_full(): snmp_transport.c, 421:
tdomain: trying domain "tcp" address "localhost:1705" default address ":705"
trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 799:
netsnmp_sockaddr_in: addr 0x7ffebc4639e0, inpeername "localhost:1705", 
default_target ":705"
trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 799:
netsnmp_sockaddr_in: addr 0x7ffebc4639e0, inpeername ":705", default_target 
"[NIL]"
[...]

I wonder whether the failure to initialize the "smux" is relevant here (I don't 
use smux, I user AgentX):
mib_init: initializing: smux
trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 799:
netsnmp_sockaddr_in: addr 0x7ffebc464080, inpeername "127.0.0.1", 
default_target ":199"
trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 799:
netsnmp_sockaddr_in: addr 0x7ffebc464080, inpeername ":199", default_target 
"[NIL]"
trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 854:
netsnmp_sockaddr_in: check user service 199
trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 962:
netsnmp_sockaddr_in: return { AF_INET, 0.0.0.0:199 }
trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 854:
netsnmp_sockaddr_in: check user service 127.0.0.1
trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 863:
netsnmp_sockaddr_in: servname not numeric, check if it really is a 
destination)trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 883:
netsnmp_sockaddr_in: check destination 127.0.0.1
trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 906:
netsnmp_sockaddr_in: hostname (resolved okay)
trace: netsnmp_sockaddr_in2(): snmpUDPDomain.c, 962:
netsnmp_sockaddr_in: return { AF_INET, 127.0.0.1:199 }
[init_smux] bind failed: Permission denied
[...]

My test master agent also cannot write persistent config files:
snmp_agent: init_master_agent; "udp:1161" registered as an agent NSAP
trace: netsnmp_ds_set_string(): default_store.c, 283:
netsnmp_ds_set_string: Setting LIB:8 = "/var/lib/net-snmp"
trace: snmp_store(): snmp_api.c, 837:
snmp_store: storing stuff...
trace: snmp_save_persistent(): read_config.c, 1357:
snmp_save_persistent: saving snmpd files...
trace: snmp_save_persistent(): read_config.c, 1369:
snmp_save_persistent:  saving old config file: /var/lib/net-snmp/snmpd.conf -> 
/var/lib/net-snmp/snmpd.0.conf.
Cannot rename /var/lib/net-snmp/snmpd.conf to /var/lib/net-snmp/snmpd.0.conf
Cannot unlink /var/lib/net-snmp/snmpd.conf
read_config_store open failure on /var/lib/net-snmp/snmpd.conf
trace: _callback_lock(): callback.c, 130:
[...]
trace: snmp_call_callbacks(): callback.c, 322:
callback: START calling callbacks for maj=0 min=1
trace: snmp_call_callbacks(): callback.c, 336:
callback: calling a callback for maj=0 min=1
trace: snmp_call_callbacks(): callback.c, 336:
callback: calling a callback for maj=0 min=1
read_config_store open failure on /var/lib/net-snmp/snmpd.conf
read_config_store open failure on /var/lib/net-snmp/snmpd.conf
[...]
NET-SNMP version 5.4.2.1
trace: main(): snmpd.c, 1035:
snmpd/main: We're up.  Starting to process data.
[...]
dumpv_recv:          Range Sub-Id:      0
trace: agentx_parse(): mibgroup/agentx/protocol.c, 1666:
dumph_recv:       Registration OID
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1118:
dumph_recv:         OID Header
dumpx_recv:          07 04 00 00
dumpv_recv:            # subids:        7 (0x07)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1122:
dumpv_recv:             prefix:         4 (0x04)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1125:
dumpv_recv:             inclusive:      0 (0x00)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1130:
dumph_recv:         OID Segments
  parse_oid
  sizeof(oid) = 8
dumpx_recv:          01 00 00 00
dumpv_recv:            Integer: 1 (0x01)
dumpx_recv:          88 1F 00 00
dumpv_recv:            Integer: 8072 (0x1F88)
dumpx_recv:          0F 27 00 00
dumpv_recv:            Integer: 9999 (0x270F)
dumpx_recv:          0F 27 00 00
dumpv_recv:            Integer: 9999 (0x270F)
dumpx_recv:          66 C3 D4 28
dumpv_recv:            Integer: 685032294 (0x28D4C366)
dumpx_recv:          01 00 00 00
dumpv_recv:            Integer: 1 (0x01)
dumpx_recv:          01 00 00 00
dumpv_recv:            Integer: 1 (0x01)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1205:
dumpv_recv:         OID: IOTWatch-MIB::iotwObjectTable
trace: init_agent_snmp_session(): snmp_agent.c, 1288:
snmp_agent: agent_sesion 0x7f6bc5449120 created
[...]
register_mib: registering "AgentX subagent 5, session 0x7f6bc54727c0, 
subsession 0x7f6bc5489320" at IOTWatch-MIB::iotwObjectTable with context 
"(null)"
trace: netsnmp_subtree_find_first(): agent_registry.c, 156:
subtree: looking for subtree for context: ""
trace: netsnmp_subtree_find_first(): agent_registry.c, 160:
subtree: found one for: ""
trace: netsnmp_subtree_find_first(): agent_registry.c, 156:
subtree: looking for subtree for context: ""
trace: netsnmp_subtree_find_first(): agent_registry.c, 160:
subtree: found one for: ""
trace: netsnmp_subtree_find_prev(): agent_registry.c, 1518:
wtest: oid in: IOTWatch-MIB::iotwObjectTable
trace: netsnmp_subtree_find_prev(): agent_registry.c, 1529:
[...]
agentx/master: registered ok
[...]
dumph_send:   Get* Variable List
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 400:
dumph_send:     VarBind
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 401:
dumph_send:       type
dumpx_send:        05 00
dumpv_send:          Short:     5 (0x05)
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 447:
dumph_send:       name
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 224:
dumpv_send:         OID: IOTWatch-MIB::iotwObjectTable
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 265:
dumph_send:         OID Header
dumpx_send:          07 04 00 00
dumpv_send:            # subids:        7 (0x07)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 269:
dumpv_send:             prefix: 4 (0x04)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 271:
dumpv_send:             inclusive:      0 (0x00)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 275:
dumph_send:         OID Segments
dumpx_send:          01 00 00 00
dumpv_send:            Integer: 1 (0x01)
dumpx_send:          88 1F 00 00
dumpv_send:            Integer: 8072 (0x1F88)
dumpx_send:          0F 27 00 00
dumpv_send:            Integer: 9999 (0x270F)
dumpx_send:          0F 27 00 00
dumpv_send:            Integer: 9999 (0x270F)
dumpx_send:          66 C3 D4 28
dumpv_send:            Integer: 685032294 (0x28D4C366)
dumpx_send:          01 00 00 00
dumpv_send:            Integer: 1 (0x01)
dumpx_send:          01 00 00 00
dumpv_send:            Integer: 1 (0x01)
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 456:
dumph_send:       value
dumpx_send:2C 00 00 00
dumpv_send:  Integer:   44 (0x2C)
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 1006:
agentx_build: packet built okay
trace: free_agent_snmp_session(): snmp_agent.c, 1314:
snmp_agent: agent_session 0x7f6bc5449120 released
trace: free_agent_snmp_session(): snmp_agent.c, 1319:
verbose:asp: asp 0x7f6bc5449120 reqinfo 0x7f6bc5449310 freed
[...]
register_mib: registering "AgentX subagent 5, session 0x7f6bc54727c0, 
subsession 0x7f6bc5489320" at IOTWatch-MIB::iotwObjectTable with context 
"(null)"
[...]
trace: netsnmp_subtree_find_prev(): agent_registry.c, 1529:
wtest: oid cmp: IOTWatch-MIB::iotwObjectTable  --- off = 8, in off = 8 test = 1
trace: netsnmp_subtree_find_prev(): agent_registry.c, 1529:
wtest: oid cmp: IOTWatch-MIB::iotwObjects.2  --- off = 12, in off = 13 test = 1
netsnmp_assert !"registration != duplicate" failed agent_registry.c:536 
netsnmp_subtree_load()
trace: register_agentx_list(): mibgroup/agentx/master_admin.c, 259:
agentx/master: duplicate registration
trace: handle_master_agentx_packet(): mibgroup/agentx/master_admin.c, 591:
agentx/master: send response, stat 263 (req=0x4c19098c,trans=0x0,sess=0x5)
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 613:
dumph_send: AgentX Header
dumpx_send:  01 12 00 00
dumpv_send:    Version: 1
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 616:
dumpv_send:     Command:        18 (Response)
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 619:
dumpv_send:     Flags:  00
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 622:
dumph_send:   Session ID
dumpx_send:    05 00 00 00
dumpv_send:      Integer:       5 (0x05)
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 631:
dumph_send:   Transaction ID
dumpx_send:    00 00 00 00
dumpv_send:      Integer:       0 (0x00)
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 640:
dumph_send:   Request ID
dumpx_send:    8C 09 19 4C
dumpv_send:      Integer:       1276709260 (0x4C19098C)
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 649:
dumph_send:   Dummy Length :-(
dumpx_send:    00 00 00 00
dumpv_send:      Integer:       0 (0x00)
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 716:
dumph_send: AgentX Payload
dumpx_send:  4A 43 00 00
dumpv_send:    Integer: 17226 (0x434A)
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 903:
dumph_send:   Response
dumpx_send:    4A 43 00 00
dumpv_send:      sysUpTime:     17226
dumpx_send:  07 01
dumpv_send:    Short:   263 (0x107)
dumpx_send:  00 00
dumpv_send:    Short:   0 (0x00)
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 919:
dumph_send:   Response errors
dumpx_send:    07 01 00 00
dumpv_send:      errstat:       263
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 922:
dumpv_send:       errindex:     0
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 934:
dumph_send:   Get* Variable List
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 400:
dumph_send:     VarBind
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 401:
dumph_send:       type
dumpx_send:        05 00
dumpv_send:          Short:     5 (0x05)
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 447:
dumph_send:       name
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 224:
dumpv_send:         OID: IOTWatch-MIB::iotwObjectTable
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 265:
dumph_send:         OID Header
dumpx_send:          07 04 00 00
dumpv_send:            # subids:        7 (0x07)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 269:
dumpv_send:             prefix: 4 (0x04)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 271:
dumpv_send:             inclusive:      0 (0x00)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 275:
dumph_send:         OID Segments
dumpx_send:          01 00 00 00
dumpv_send:            Integer: 1 (0x01)
dumpx_send:          88 1F 00 00
dumpv_send:            Integer: 8072 (0x1F88)
dumpx_send:          0F 27 00 00
dumpv_send:            Integer: 9999 (0x270F)
dumpx_send:          0F 27 00 00
dumpv_send:            Integer: 9999 (0x270F)
dumpx_send:          66 C3 D4 28
dumpv_send:            Integer: 685032294 (0x28D4C366)
dumpx_send:          01 00 00 00
dumpv_send:            Integer: 1 (0x01)
dumpx_send:          01 00 00 00
dumpv_send:            Integer: 1 (0x01)
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 456:
dumph_send:       value
dumpx_send:2C 00 00 00
dumpv_send:  Integer:   44 (0x2C)
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 1006:
agentx_build: packet built okay
trace: free_agent_snmp_session(): snmp_agent.c, 1314:
snmp_agent: agent_session 0x7f6bc5449120 released
trace: free_agent_snmp_session(): snmp_agent.c, 1319:
verbose:asp: asp 0x7f6bc5449120 reqinfo 0x7f6bc544e5e0 freed

On the subagent I see these messages:
[...]
read_config: /etc/snmp/iotwatch.conf:5 examining: debugTokens agentx/config 
agentx/master agentx/subagent agentx_build agentx_build_varbind agent_handler 
agent_registry agent_set initialize_table_iotwObjectTable
[...]
NET-SNMP version 5.4.2.1 AgentX subagent connected
[...]
agentx/subagent: registering: NET-SNMP-MIB::netSnmpPlaypen.685032294.1.1
[...]
dumpv_recv:           OID: NET-SNMP-MIB::netSnmpPlaypen.685032294.1.1
[...]

In the subsequent output I do not see my OID anywhere!

Could the problem be "netsnmp_assert !"registration != duplicate" failed 
agent_registry.c:536 netsnmp_subtree_load()"?

My agent uses this sequence to register and process requests:
                if ( netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
                                            NETSNMP_DS_AGENT_ROLE, 1)
                     != SNMPERR_SUCCESS )
                {
                        result = 2;
                }
                SOCK_STARTUP;           /* initialize TCP/IP, if necessary */
                /* initialize the agent library */
                if ( init_agent(snmp_agent_name) != 0 )
                {
                        result = 2;
                }
                init_iotwObjectTable(); /* initialize MIB module */
                init_snmp(snmp_agent_name);
                while ( stop_requests == 0 ) {
                        time(&MIB_vars.dummy);
                        agent_check_and_process(1); /* 0 == don't block */
                }

                /* at shutdown time */
                snmp_shutdown(snmp_agent_name);
                SOCK_CLEANUP;

The objects I register are these:
# define iotwObjectTable_TABLE_OID 1,3,6,1,4,1,8072,9999,9999,685032294,1,1
initialize_table_iotwObjectTable(); /* in init_iotwObjectTable() */

Is it OK that I skip over some undefined nodes, i.e. I register 685032294,1,1 
at 1,3,6,1,4,1,8072,9999,9999, but that's a subtree of height 3 (and not one).

I'd really appreciate if someone could help me finding the problem!

Regards,
Ulrich


------------------------------------------------------------------------------
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to