I took Wes' advice and ran with -DALL, along with some extra DEBUGMSGTLs in 
suspect areas (-DALL output follows):void
initialize_table_chAsinHwSbcNtpTable(void)
{
    syslog( LOG_ERR, "initialize_table_chAsinHwSbcNtpTable()");
    const oid chAsinHwSbcNtpTable_oid[] = {1,3,6,1,4,1,25228,3,3,1,9,6,6};
    const size_t chAsinHwSbcNtpTable_oid_len   = 
OID_LENGTH(chAsinHwSbcNtpTable_oid);
    netsnmp_handler_registration    *reg;
    netsnmp_iterator_info           *iinfo;
    netsnmp_table_registration_info *table_info;

    DEBUGMSGTL(("chAsinHwSbcNtpTable", "initializing table 
chAsinHwSbcNtpTable\n"));

    reg = netsnmp_create_handler_registration(
              "chAsinHwSbcNtpTable",     chAsinHwSbcNtpTable_handler,
              chAsinHwSbcNtpTable_oid, chAsinHwSbcNtpTable_oid_len,
              HANDLER_CAN_RONLY
              );

    table_info = SNMP_MALLOC_TYPEDEF( netsnmp_table_registration_info );
    if(table_info == NULL) {
        DEBUGMSGTL(("chAsinHwSbcNtpTable", "after SNMP_MALLOC_TYPEDEF( ) 
table_info is _N_U_L_L!\n"));
    }
    else {
        DEBUGMSGTL(("chAsinHwSbcNtpTable", "after SNMP_MALLOC_TYPEDEF( ) 
table_info _NOT_ null\n"));
    }
    netsnmp_table_helper_add_indexes(table_info,
                           ASN_OCTET_STR,  /* index: chAsinHwSbcNtpSbcName */
                           0);
    if(table_info == NULL) {
        DEBUGMSGTL(("chAsinHwSbcNtpTable", "after 
netsnmp_table_helper_add_indexes( ) table_info is _N_U_L_L!\n"));
    }
    else {
        DEBUGMSGTL(("chAsinHwSbcNtpTable", "after 
netsnmp_table_helper_add_indexes( ) table_info _NOT_ null\n"));
    }
    table_info->min_column = COLUMN_CHASINHWSBCNTPSBCNAME;
    table_info->max_column = COLUMN_CHASINHWSBCNTPSTATUSSTRING;
    
    iinfo = SNMP_MALLOC_TYPEDEF( netsnmp_iterator_info );
    iinfo->get_first_data_point = chAsinHwSbcNtpTable_get_first_data_point;
    iinfo->get_next_data_point  = chAsinHwSbcNtpTable_get_next_data_point;
    iinfo->table_reginfo        = table_info;
    iinfo->free_loop_context_at_end = nsModuleTable_loop_free;
    iinfo->free_data_context = freeTableEntry;
    
    if(iinfo->table_reginfo == NULL) {
        DEBUGMSGTL(("chAsinHwSbcNtpTable", "before 
netsnmp_register_table_iterator( ) iinfo->table_reginfo is _N_U_L_L!\n"));
    }
    else {
        DEBUGMSGTL(("chAsinHwSbcNtpTable", "before 
netsnmp_register_table_iterator( ) iinfo->table_reginfo  _NOT_ null\n"));
    }
    netsnmp_register_table_iterator( reg, iinfo );

    /* Initialise the contents of the table here */
}

Now a snippet from the -DALL logging, but nothing stands out to me, perhaps 
someone on the list may have some idea:
9:callback:lock: locked (LIB,POST_READ_CONFIG)
trace: netsnmp_register_callback(): callback.c, 296:
callback: registered (0,0) at 806c818 with priority 0
trace: _callback_unlock(): callback.c, 170:
9:callback:lock: unlocked (LIB,POST_READ_CONFIG)
trace: subagent_init(): mibgroup/agentx/subagent.c, 162:
agentx/subagent: initializing....  DONE
trace: internal_register_config_handler(): read_config.c, 219:
9:read_config:register_handler: registering ./icSNMPntpSubAgentChA.exe com2sec
trace: internal_register_config_handler(): read_config.c, 219:
9:read_config:register_handler: registering ./icSNMPntpSubAgentChA.exe com2sec6
trace: internal_register_config_handler(): read_config.c, 219:
9:read_config:register_handler: registering ./icSNMPntpSubAgentChA.exe 
com2secunix
trace: initialize_table_chAsinHwSbcNtpTable(): 
C:/Users/clougia/workspace/SIN_4/SIN_QNX7/seg_src/SNMP/sinHwSbcNTPtable/channelA/chAsinHwSbcNtpTable.cpp,
 60:
chAsinHwSbcNtpTable: initializing table chAsinHwSbcNtpTable
trace: initialize_table_chAsinHwSbcNtpTable(): 
C:/Users/clougia/workspace/SIN_4/SIN_QNX7/seg_src/SNMP/sinHwSbcNTPtable/channelA/chAsinHwSbcNtpTable.cpp,
 73:
chAsinHwSbcNtpTable: after SNMP_MALLOC_TYPEDEF( ) table_info _NOT_ null
trace: initialize_table_chAsinHwSbcNtpTable(): 
C:/Users/clougia/workspace/SIN_4/SIN_QNX7/seg_src/SNMP/sinHwSbcNTPtable/channelA/chAsinHwSbcNtpTable.cpp,
 82:
chAsinHwSbcNtpTable: after netsnmp_table_helper_add_indexes( ) table_info _NOT_ 
null
trace: initialize_table_chAsinHwSbcNtpTable(): 
C:/Users/clougia/workspace/SIN_4/SIN_QNX7/seg_src/SNMP/sinHwSbcNTPtable/channelA/chAsinHwSbcNtpTable.cpp,
 98:
chAsinHwSbcNtpTable: before netsnmp_register_table_iterator( ) 
iinfo->table_reginfo  _NOT_ null
trace: netsnmp_inject_handler_before(): agent_handler.c, 444:
handler:inject: injecting table_iterator before chAsinHwSbcNtpTable
netsnmp_get_table_handler(NULL) called
could not create table handler
Thanks again Wes, and everyone else reading this!
Ian




    On Thursday, August 6, 2020, 9:56:00 a.m. EDT, Ian C <mc_...@yahoo.com> 
wrote:  
 
  Thanks Wes, will try this soon.

    On Wednesday, August 5, 2020, 1:47:24 p.m. EDT, Wes Hardaker 
<harda...@users.sourceforge.net> wrote:  
 
 Ian C via Net-snmp-coders <net-snmp-coders@lists.sourceforge.net>
writes:

> Hi,
> 
> We previously had net-snmp 5.6 running on QNX 6.5 (from pkgsrc), and had 
> various
> sub-agents retrieving data and working well. However we've recently migrated 
> our OS
> to QNX 7.0 and since there are no pkgsrc packages available for that OS we've
> upgraded and compiled net-snmp 5.8 ourselves. 
> 
> Most of the system has ported well, GETs for scalars are fine; snmp table 
> queries
> for system OIDs such as ifTable & atTable also work, however any table query 
> for our
> own table-based subagents fail. While digging into this I noticed that upon 
> start-up
> our subagent reports:
> 
> Qnx7->SubAgentChA.exe -Lo -d
> netsnmp_get_table_handler(NULL) called
> could not create table handler

I'd run with -DALL in order to get a *lot* of debug output (assuming you
didn't turn off debugging output).  Specifically, look for the same
error message to figure out where in the code the problem is triggered
from in the output trace.  Because this is where the code is:

    netsnmp_mib_handler *
    netsnmp_get_table_handler(netsnmp_table_registration_info *tabreq)
    {
        netsnmp_mib_handler *ret = NULL;

        if (!tabreq) {
            snmp_log(LOG_INFO, "netsnmp_get_table_handler(NULL) called\n");
            return NULL;
        }

Which means that the function is getting called with a NULL input, which
certainly shouldn't happen.  But *where* is calling it?

-DALL should help identify that
-- 
Wes Hardaker
Please mail all replies to net-snmp-coders@lists.sourceforge.net
    
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to