On Wed, 2005-04-06 at 11:29, Jim Su wrote:
> What I'm not clear is how the var_xxxtable() return each instance
> to correlate to the data previous read? 

Using the 'name' parameter.
On input, this holds the OID being requested.
On return, this holds the OID of the value being returned.

I presume you've read the documentation in "AGENT.txt" ?


> How the agent correlates the array element to each instance?

Using the last entry in this 'name' array.
All of this is handled by the 'header_simple_table()' call.
So your var_xxxtable routine can start:

    if ( header_simple_table( vp, name, length, exact, var_len,
                              write_method, MAX_ENTRIES)
             != MATCH_SUCCEEDED)
        return NULL;

    index = name[ length-1 ];

and 'index' will hold the index value of the row that you need.



> Yes, the table is indexed by an integer - in this case the moduleId is
> the index. However it can be any integer number set up by user.

Ah - so there can be "gaps" in the indexing, yes?

In which case it's not strictly a "simple table".
(See the description in AGENT.txt).

That doesn't matter - you can still use header_simple_table() to do
most of the work, but you'll have to do a bit more yourself.

Having called 'header_simple_table' and extracted the index (see above),
you'll then need to check whether this particular index value is valid.
If it is, then no problem - continue as before.
If it's not, then:

  - for an "exact" (GET) request, the request can't be
       fulfilled, so return NULL immediately.
  - for an "inexact" (GETNEXT) request, you need to find the
       next index value that *is* valid, and use that instead.
    One way is to keep calling 'header_simple_table' and let
       that do all the work.  Or you could do this yourself.

You'd end up with something like:

    if ( NOT_VALID( index ) ) {
        if ( exact )
            return NULL;     /* GET request */

        while ( NOT_VALID( index ) ) {
            index++;
            if ( index >= MAX_ENTRIES )
                return NULL;  /* No more rows */
        }
        name[length-1] = index;
    }

then continue processing as before.

Dave



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Net-snmp-users mailing list
Net-snmp-users@lists.sourceforge.net
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users

Reply via email to