On Thu, 2005-05-05 at 00:21, Toth, Gregory S wrote:
> Thanks, that worked (oops I missed the & on the &this_index.
>
> The walk now returns the first row for each column in the table, but not
> the other rows.
OK - so what does your getNextDataPoint routine look like?
> Should the flow look more like this (assuming multiple (2) rows for each
> column)?
>
> get_first_data_point
> get_next_data_point
> get_next_data_point
> ContentTable_handler
> collects data for first column, first row
> collects data for first column, second row
Not quite. It would actually be:
> get_first_data_point
> get_next_data_point
> get_next_data_point
> ContentTable_handler
> collects data for first column, first row
get_first_data_point
get_next_data_point
get_next_data_point
ContentTable_handler
> collects data for first column, second row
> get_first_data_point
> get_next_data_point
> get_next_data_point
> ContentTable_handler
> collects data for second column, first row
get_first_data_point
get_next_data_point
get_next_data_point
ContentTable_handler
> collects data for second column, second row
<etc, etc>
The full get_{first,next} loop is run for *each*
incoming GETNEXT request separately, to determine
the appropriate row needed for that request.
The ContentTable_handler is then called to provide
the appropriate column value from that particular
row (singular).
(That's the basic idea, anyway - things are complicated
by multiple varbinds in a single request, GetBulk handling
and automatic caching - but that's the underlying model).
> If this is correct, than does this mean that the getNextDataPoint is
> where the data structure is built up to allow the correct generation
> of the requests structure for the ContentTable_handler?
No - the getNextDataPoint routine is where you step from one row
of the table to the next. You use the incoming 'loop_context'
parameter to determine where you are currently - based on whatever
you set for this parameter in get_first_data_point.
Then you update this parameter ready for the next iteration.
You also need to set the 'data_context' parameter so that the
ContentTable_handler knows which row it will finally be working
with.
>From the description so far, I think you need to set both of these
to be 'this_index'. So the get_first routine would include:
snmp_set_var_value( vptr, (u_char*)&this_index,
sizeof(this_index));
*loop_context = (void *)this_index;
*data_context = (void *)this_index;
and the get_next routine would include:
this_index = (int)*loop_context;
this_index++;
if ( this_index > LAST_INDEX )
return NULL;
snmp_set_var_value( vptr, (u_char*)&this_index,
sizeof(this_index));
*loop_context = (void *)this_index;
*data_context = (void *)this_index;
> If this is true, then I would expect the "netsnmp_variable_list *
> put_index_data" structure that is passed to getNextDataPoint would
> check the row data in the passed in put_index_data,
But 'put_index_data' does not pass anything *in* to this routine.
It's an empty framework, that getNextDataPoint is expected to populate.
It's used to pass information *out*, not in.
The only parameter used to pass information *in* is 'loop_context'.
> In this case, what methods are used to add the additional row data to
> put_index_data?
put_index_data is only used to report the index value(s) for each row.
The data for that row is the responsibility of 'data_context'.
Dave
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.
Get your fingers limbered up and give it your best shot. 4 great events, 4
opportunities to win big! Highest score wins.NEC IT Guy Games. Play to
win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20
_______________________________________________
Net-snmp-coders mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders