Solved!!!!! A reference to the head of my linked list was missing in my
*_get_first_data_point function.

Thanks for the help,

Alejandro

On Thu, Apr 17, 2008 at 2:16 PM, Alejandro Islas <[EMAIL PROTECTED]>
wrote:

> Ok...using gdb I found where my code crashes. In the handler function that
> follows
>
> MonThreadsTable_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;
>     MonThreadsTable_entry          *table_entry=NULL;
>     char arreglo[300];
>
>     switch (reqinfo->mode) {
>         /*
>          * Read-support (also covers GetNext requests)
>          */
>     case MODE_GET:
>         for (request=requests; request; request=request->next) {
>             table_entry = (MonThreadsTable_entry *)
>                               netsnmp_extract_iterator_context(request);
>             if(table_entry==NULL)
>                 DEBUGMSGTL(("MonThreadsTable","NULL POINTER"));
> ......
>
>  the function netsnmp_extract_iterator_context(request) returns a null
> pointer instead of a pointer to the first
> entry of my list. I checked and my linked list is being generated and
> updated correctly (I'm printing each entry values constantly), so I guess
> I'm missing something at initialization time....here's my initialization
> function.
>
> void
> initialize_table_MonThreadsTable(void)
> {
>     static oid MonThreadsTable_oid[] = {1,3,6,1,4,1,17723,2,1,1,19,1};
>     size_t MonThreadsTable_oid_len   = OID_LENGTH(MonThreadsTable_oid);
>     netsnmp_handler_registration    *reg;
>     netsnmp_iterator_info           *iinfo;
>     netsnmp_table_registration_info *table_info;
>
>     reg = netsnmp_create_handler_registration(
>               "MonThreadsTable",     MonThreadsTable_handler,
>               MonThreadsTable_oid, MonThreadsTable_oid_len,
>               HANDLER_CAN_RONLY
>               );
>
>     table_info = SNMP_MALLOC_TYPEDEF( netsnmp_table_registration_info );
>     netsnmp_table_helper_add_indexes(table_info,
>                            ASN_INTEGER,  /* index: IdThread */
>                            0);
>     table_info->min_column = 1;
>     table_info->max_column = 4;
>
>     iinfo = SNMP_MALLOC_TYPEDEF( netsnmp_iterator_info );
>     iinfo->get_first_data_point = MonThreadsTable_get_first_data_point;
>     iinfo->get_next_data_point  = MonThreadsTable_get_next_data_point;
>     iinfo->table_reginfo        = table_info;
>
>     netsnmp_register_table_iterator( reg, iinfo );
>
>     /* Initialise the contents of the table here */
> }
>
> Do you see someting wrong??? How do I link my table with the request info
> used by the netsnmp_extract_iterator_context function??
>
> Thanks again,
>
> Alejandro
>
>
>
> On Thu, Apr 17, 2008 at 11:00 AM, Alejandro Islas <[EMAIL PROTECTED]>
> wrote:
>
> >
> >
> > On Thu, Apr 17, 2008 at 3:47 AM, Dave Shield <[EMAIL PROTECTED]>
> > wrote:
> >
> > >  On 17/04/2008, Alejandro Islas <[EMAIL PROTECTED]> wrote:
> > > > I tried to use mib2c.container.conf file but mib2c
> > > > wasn't able to found it
> > >
> > > Hmmm... what version of the toolkit are you using?
> > > mib2c.container.conf has been around since the 5.2 release
> > > (although the internals have changed significantly since then).
> > >
> > > I'm using NET-SNMP version:  5.2.1.2
> > >
> > >
> > > >  1)After using mib2c my .c file only contains create/remove entries
> > > > functions. As far as I understand, I need to implement a fetch
> > > entrie, to
> > > > avoid duplicate row entries..correct???
> > >
> > > Sorry - I don't understand what you're asking here.
> > >
> >
> >     After using mib2c to generate my code, I noticed that it created a
> > create_row_entry and a
> >     remove_row_entry functions. I implemented a fetch_row_entry, so that
> > my code would be able to check
> >     if it doesn't have a previously created entry for a particular
> > index.
> >
> > >
> > >
> > > > 2) Besides including data reading functions (i'm using text files),
> > >
> > > What do you mean by "data reading functions"?
> > > How are you storing the table contents within your module?
> >
> >
> >    I read a text file created by another process. Each line of such text
> > file contains a row's info
> >    of my table, so my process checks for such entry(using the index) in
> > the linked list and updated it or create a new entry
> >   if its the first time I received inf of such row.
> >
> > >
> > >
> > > > do I need to do anything else?? I did not do anything to the
> > > handler,
> > > > get_first_data_point and get_next_data_point functions, I left them
> > > as mib2
> > > > generated them.
> > >
> > > The get_{first,next}_data_point routines need to step through the
> > > rows of your table - in whatever way is appropriate for your module.
> > > The template code assumes that the table is held as a linked list
> > > of individual row entries - if this is how your data reading functions
> > > store the table, then you probably don't need to change this code
> > > much (if at all).
> > >   If you are storing the table in a different manner (or pulling it
> > > from
> > > external sources), then you will need to amend these two routines
> > > to match.
> >
> >
> >    Yes, I'm using the linked list of individual row entries created by
> > mib2c.
> >
> > >
> > >
> > > >  3) Could you explain (or send me an info link) of how my table
> > > handler is
> > > > called by the system?? I don't see where my table list is called on
> > > it.
> > >
> > > When you register the table, the agent includes this information in
> > > a list of all the OIDs that it knows about.   When it receives a
> > > request,
> > > it searches this list for the appropriate match(es), and calls the
> > > corresponding handlers.
> > >
> > >
> > > > 4) I used gdb...but didn't help me a lot, it only confirmed a
> > > segmentation
> > > > fault.
> > >
> > > But it should also indicate *where* this segmentation fault occurs.
> > > This would help track down what is causing it.
> >
> >
> >     You're right, I think I need to play a little bit more with gbd
> >
> > >
> > >
> > > >  I'm not compiling the whole project, only adding my so files using
> > > > dlmod command. Can I still use dbg using this method or do I need to
> > > compile
> > > > the whole deamon including my handlers???
> > >
> > > Ummm... not sure.
> > > It would probably be sensible to start by working with a "traditional"
> > > approach,
> > > at least until you get the module working.   The same module code can
> > > be
> > > embedded within the main agent, loaded dynamically, or used within a
> > > subagent - with no changes to the code.
> > >
> >
> >  I'll try this and let you know.
> >
> > Alejandro
> >
> >
>
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Net-snmp-coders mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to