Re: snmp agent crashed when i used the tool snmpwalk running through out my private MIB(a table).

"jiang jilin" <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <[email protected]>
Thanks for your reply,Dave.

Maybe,I should modify the rsfwTable_handler routine shown as follows,

 /** handles requests for the rsfwTable table */
int
rsfwTable_handler(netsnmp_mib_handler *handler,
                              netsnmp_handler_registration *reginfo,
                              netsnmp_agent_request_info *reqinfo,
                              netsnmp_request_info *requests)
{

    netsnmp_request_info *request;
    netsnmp_table_request_info *table_info;
    struct rsfwTable_entry *table_entry;


    switch (reqinfo->mode) {
        /*
         * Read-support (also covers GetNext requests)
         */
       case MODE_GET:
        for (request = requests; request; request = request->next) {
            table_entry = (struct rsfwTable_entry *)
                netsnmp_extract_iterator_context(request);

            table_info = netsnmp_extract_table_info(request);



            switch (table_info->colnum) {
            case COLUMN_RSFWFILES:

                snmp_set_var_typed_integer(request->requestvb, ASN_COUNTER,
                                           table_entry->
                                           rsfwFiles);
                break;
            case COLUMN_RSFWFILESINSCAN:

                snmp_set_var_typed_integer(request->requestvb, ASN_COUNTER,
                                           table_entry->
                                           rsfwFilesInScan);

                break;
            default:
                /*
                 * An unsupported/unreadable column (if applicable)
                 */

                snmp_set_var_typed_value(request->requestvb,
                                         SNMP_NOSUCHOBJECT, NULL, 0);
            }
        }
        break;

    }
    DEBUGMSGTL(("rising","END ...handler of antivirusTable\n"));
    return SNMP_ERR_NOERROR;
}
you know,I used GDB to debug the agent,and I traced the procedure at
the routine  rsfwTable_handler.

gdb>bt
#0  rsfwTable_handler (handler=0x80a1e60, reginfo=0x80a1ea0,
    reqinfo=0x80e75c8, requests=0x810ebe0) at rfw/rs.c:332
#1  0xb7e20902 in netsnmp_call_handler (next_handler=0x80a1e60,
    reginfo=0x80a1ea0, reqinfo=0x80e75c8, requests=0x810ebe0)
    at agent_handler.c:428
#2  0xb7e20f33 in netsnmp_call_next_handler (current=0x80a1b38,
    reginfo=0x80a1ea0, reqinfo=0x80e75c8, requests=0x810ebe0)
    at agent_handler.c:533
#3  0xb7dfbf09 in netsnmp_table_iterator_helper_handler (handler=0x80a1b38,
    reginfo=0x80a1ea0, reqinfo=0x80e75c8, requests=0x810ebe0)
    at table_iterator.c:781
#4  0xb7e20902 in netsnmp_call_handler (next_handler=0x80a1b38,
    reginfo=0x80a1ea0, reqinfo=0x80e75c8, requests=0x810ebe0)
    at agent_handler.c:428
#5  0xb7e20f33 in netsnmp_call_next_handler (current=0x80a28a0,
    reginfo=0x80a1ea0, reqinfo=0x80e75c8, requests=0x810ebe0)
    at agent_handler.c:533
#6  0xb7e01f3f in table_helper_handler (handler=0x80a28a0,
reginfo=0x80a1ea0,
    reqinfo=0x80e75c8, requests=0x810ebe0) at table.c:619
#7  0xb7e20902 in netsnmp_call_handler (next_handler=0x80a28a0,
    reginfo=0x80a1ea0, reqinfo=0x80e75c8, requests=0x810ebe0)
    at agent_handler.c:428
#8  0xb7e20cf8 in netsnmp_call_handlers (reginfo=0x80a1ea0,
reqinfo=0x80e75c8,
    requests=0x810ebe0) at agent_handler.c:509
#9  0xb7e160f7 in handle_var_requests (asp=0x810e218) at snmp_agent.c:2474
#10 0xb7e17478 in handle_pdu (asp=0x810e218) at snmp_agent.c:3251
#11 0xb7e1702d in netsnmp_handle_request (asp=0x810e218, status=1927183776)


gdb>n
0xb7e95d73      358                     break;
gdb>n
335         switch (reqinfo->mode) {
gdb>n
342             for (request = requests; request; request = request->next) {
(gdb)
343                 table_entry = (struct rsfwTable_entry *)
(gdb)
347                 table_info = netsnmp_extract_table_info(request);
(gdb)
0xb7e95ce6      358                     break;

(gdb)
352                 switch (table_info->colnum) {
(gdb)
361                     snmp_set_var_typed_integer(request->requestvb,
ASN_COUNTER,
(gdb)

Program received signal SIGSEGV, Segmentation fault.
0xb7e95b20 in rsfwTable_handler (handler=0x80a1e60,
    reginfo=0x80a1ea0, reqinfo=0x0, requests=0x810ebe0) at rfw/rs.c:361
361                     snmp_set_var_typed_integer(request->requestvb,
ASN_COUNTER,
so far,we''ve seen that the result the agent  received signal SIGSEGV,and
again,I found the pointer reqinfo had been NULL(==0) with using GDB.Here is
its output:

Breakpoint 1, rsfwSysAntivirusTable_handler (handler=0x80a1e60,
    reginfo=0x80a1ea0, reqinfo=0x80e75c8, requests=0x810ebe0) at
rfw/rising.c:332
332         DEBUGMSGTL(("rising","handler of antivirusTable\n"));
(gdb) n
0xb7ed1d73      358                     break;
(gdb)
335         switch (reqinfo->mode) {
(gdb) p request
$1 = (netsnmp_request_info *) 0xb7ed1910
(gdb) p reqinfo
$2 = (netsnmp_agent_request_info *) 0x0

So,we all will understand why the agent crashed,as you see,the agent works
well after I added some code to assure the POINTERs != NULL.Howerver,I'm not
sure that what I did is right.so,you may help me ?

And I've another question,How add my private MODULE to the default ? You
konw,I mean when everyone use snmpget,snmpwalk and so forth to manipulate my
private OID,there is no need to pass the argument "-m ALL" or something
else equivalent.

Also,in the agent,I've add the lines as follows to the file some.h
config_require(rfw/rs)
config_add_mib(RS-MIB)
config_add_mib(RS-FW-MIB)

Many thanks, Dave!
Best wishes!

Jiang





On 12/22/06, Dave Shield <[email protected]> wrote:
>
> On 21/12/06, jiang jilin <[email protected]> wrote:
> > I've found that agent crashed at function "myTable_handler ".Anynoe can
> help
> > me resolve the problem?
>
> Try running the agent under a debugger, or running the debugger
> on the core file from the crash.   A backtrace should indicate
> where exactly the crash is occuring.
>   What does this code look like?
>
> Dave
>

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

_______________________________________________
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.