FAQ:Coding 14

From Net-SNMP Wiki

Jump to: navigation, search

Why does the iterator call my get_{first,next} routines so often?

The first thing to realise is that the 'get_first' and 'get_next' hook routines are concerned with processing a single request, not with walking the whole table. A full "snmpwalk" command will typically involve a series of individual 'GetNext' requests, and every one of these will trigger a separate 'get_first/get_next/get_next/....' cycle.

It's usually more efficient to use 'snmptable' which will walk each column in parallel (as well as displaying the results in a more natural manner).

Secondly, the iterator helper was originally designed to handle unsorted data, so will look at every row of the internal table for each request. If the data is actually held in the correct order, then it's worth setting the NETSNMP_ITERATOR_FLAG_SORTED flag:

  iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
  iinfo->flags |= NETSNMP_ITERATOR_FLAG_SORTED;

This will help the situation somewhat.

But the iterator helper is inherently a relatively inefficient mechanism, and it may be worth looking at one of the other helpers, particularly if the data will be held within the agent itself.

   FAQ:Coding
   
  1. How do I write C code to integrate with the agent?
  2. How does the agent fetch the value of a MIB variable from the system?
  3. Mib2c complains about a missing "mib reference" - what does this mean?
  4. Mib2c complains about not having a "valid OID" - what does this mean?
  5. Why doesn't mib2c like the MIB file I'm giving it?
  6. Mib2c ignores my MIB and generates a pair of 'mib-2' code files. Why?
  7. What's the difference between the various mib2c configuration files?
  8. Which mib2c configuration file should I use?
  9. How can I have mib2c generate code for both scalars and tables?
  10. Are there any examples, or documentation?
  11. Where should I put the files produced by 'mib2c'?
  12. I've created a new module with 'mib2c' but it doesn't work. Why not?
  13. I've added my code to this template and it still doesn't work. Why not?
  14. Why does the iterator call my get_{first,next} routines so often?
  15. How can I get the agent to generate a trap (or inform)?
  16. How can I get the agent to send an SNMPv1 (or SNMPv2c) trap?
  17. How can I get the agent to include varbinds with an SNMPv1 trap?
  18. How can I get the agent to send an SNMPv1 enterprise-specific trap?
  19. How can I get the agent to send an SNMPv3 trap (or inform)?
  20. Why does calling 'send_v2trap' generate an SNMPv1 trap (or vice versa)?
  21. What if I'm using an AgentX sub-agent instead?
  22. How can I register a MIB module in a different (SNMPv3) context?
Personal tools