This is something like a "handler" or "code object" for your MIB.
You should also write a subagent that initializes and uses this code.

The subagent is the one that loads the code you have written and manipulates it.

You can see this tutorial:

http://www.net-snmp.org/wiki/index.php/TUT:Writing_a_Subagent


It has some example files that might help you:
- the nst*.c and nst*.h are auto-generated
- while the example-demon is the sub-agent that initializes and uses the auto-generated MIB code.

I guess what you need is to implement an "example-demon" of your own and start it either by itself (by calling sudo ./example-demon)
or deploy it into your main snmpd daemon.

Before creating and running a subagent (like that example-demon) you will be able to call only snmptranslate to your new MIB, but won't be able to read or write its actual values. Thus, the "No Such Object available on this agent at this OID"...



On 10/17/2012 01:02 PM, Jatin Bodarya wrote:

Below is my mib2c generated code. I am compiling it as subagent... but it is not showing any kind of values. What should be my next step to implement it ? from where can I get data? Please help me to implement it.

snmpwalk -c public -v 2c localhost 1.3.6.1.4.1.21068

POOL-MIB::elite = No Such Object available on this agent at this OID

Thansks in advance.

Code :

/*

 * Note: this file originally auto-generated by mib2c using

 *  $

 */

#include <net-snmp/net-snmp-config.h>

#include <net-snmp/net-snmp-includes.h>

#include <net-snmp/agent/net-snmp-agent-includes.h>

#include "pool.h"

/** Initializes the pool module */

void

init_pool(void)

{

  /* here we initialize all the tables we're planning on supporting */

    initialize_table_poolTable();

}

  //Determine the first/last column names

/** Initialize the poolTable table by defining its contents and how it's structured */

void

initialize_table_poolTable(void)

{

    const oid poolTable_oid[] = {1,3,6,1,4,1,21068,4,2};

    const size_t poolTable_oid_len   = OID_LENGTH(poolTable_oid);

    netsnmp_handler_registration    *reg;

    netsnmp_iterator_info           *iinfo;

    netsnmp_table_registration_info *table_info;

    DEBUGMSGTL(("pool:init", "initializing table poolTable\n"));

    reg = netsnmp_create_handler_registration(

              "poolTable",     poolTable_handler,

              poolTable_oid, poolTable_oid_len,

              HANDLER_CAN_RONLY

              );

    table_info = SNMP_MALLOC_TYPEDEF( netsnmp_table_registration_info );

    netsnmp_table_helper_add_indexes(table_info,

                           ASN_INTEGER,  /* index: ifIndex */

                           0);

    table_info->min_column = 1;

    table_info->max_column = COLUMN_POOLINOCTETS;

    iinfo = SNMP_MALLOC_TYPEDEF( netsnmp_iterator_info );

    iinfo->get_first_data_point = poolTable_get_first_data_point;

    iinfo->get_next_data_point  = poolTable_get_next_data_point;

    iinfo->table_reginfo        = table_info;

    netsnmp_register_table_iterator( reg, iinfo );

    /* Initialise the contents of the table here */

}

    /* Typical data structure for a row entry */

struct poolTable_entry {

    /* Index values */

    long ifIndex;

    /* Column values */

    u_long poolInOctets;

    /* Illustrate using a simple linked list */

    int   valid;

    struct poolTable_entry *next;

};

struct poolTable_entry  *poolTable_head;

/* create a new row in the (unsorted) table */

struct poolTable_entry *

poolTable_createEntry(

                 long  ifIndex

                ) {

    struct poolTable_entry *entry;

    entry = SNMP_MALLOC_TYPEDEF(struct poolTable_entry);

    if (!entry)

        return NULL;

    entry->ifIndex = ifIndex;

    entry->next = poolTable_head;

    poolTable_head = entry;

    return entry;

}

/* remove a row from the table */

void

poolTable_removeEntry( struct poolTable_entry *entry ) {

    struct poolTable_entry *ptr, *prev;

    if (!entry)

        return;    /* Nothing to remove */

    for ( ptr  = poolTable_head, prev = NULL;

          ptr != NULL;

          prev = ptr, ptr = ptr->next ) {

        if ( ptr == entry )

            break;

    }

    if ( !ptr )

        return;    /* Can't find it */

    if ( prev == NULL )

        poolTable_head = ptr->next;

    else

        prev->next = ptr->next;

    SNMP_FREE( entry );   /* XXX - release any other internal resources */

}

/* Example iterator hook routines - using 'get_next' to do most of the work */

netsnmp_variable_list *

poolTable_get_first_data_point(void **my_loop_context,

                          void **my_data_context,

                          netsnmp_variable_list *put_index_data,

                          netsnmp_iterator_info *mydata)

{

    *my_loop_context = poolTable_head;

    return poolTable_get_next_data_point(my_loop_context, my_data_context,

                                    put_index_data,  mydata );

}

netsnmp_variable_list *

poolTable_get_next_data_point(void **my_loop_context,

                          void **my_data_context,

                          netsnmp_variable_list *put_index_data,

                          netsnmp_iterator_info *mydata)

{

struct poolTable_entry *entry = (struct poolTable_entry *)*my_loop_context;

    netsnmp_variable_list *idx = put_index_data;

    if ( entry ) {

        snmp_set_var_typed_integer( idx, ASN_INTEGER, entry->ifIndex );

        idx = idx->next_variable;

        *my_data_context = (void *)entry;

        *my_loop_context = (void *)entry->next;

        return put_index_data;

    } else {

        return NULL;

    }

}

/** handles requests for the poolTable table */

int

poolTable_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 poolTable_entry          *table_entry;

DEBUGMSGTL(("pool:handler", "Processing request (%d)\n", reqinfo->mode));

    switch (reqinfo->mode) {

        /*

         * Read-support (also covers GetNext requests)

         */

    case MODE_GET:

        for (request=requests; request; request=request->next) {

            table_entry = (struct poolTable_entry *)

                              netsnmp_extract_iterator_context(request);

            table_info  =     netsnmp_extract_table_info(      request);

            switch (table_info->colnum) {

            case COLUMN_POOLINOCTETS:

                if ( !table_entry ) {

                    netsnmp_set_request_error(reqinfo, request,

                                              SNMP_NOSUCHINSTANCE);

                    continue;

                }

snmp_set_var_typed_integer( request->requestvb, ASN_COUNTER,

                                            table_entry->poolInOctets);

                break;

            default:

                netsnmp_set_request_error(reqinfo, request,

                                          SNMP_NOSUCHOBJECT);

                break;

            }

        }

        break;

    }

    return SNMP_ERR_NOERROR;

}


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct


_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders


--
*/Katia Sarsempagieva/*

/ Research Assistant
Media Network Laboratory
Institute of Information and Telecommunications
NCSR Demokritos
/
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to