Hi Dave,

I made the host to network order suggestion, and now it works for Get, GetNext 
and BulkGet calls.

However iam facing a issues with Getnext/Bulk/Snmpwalk get calls going to the 
next table, the bulk/walk requests are NOT going to next table, it traverses to 
the beginning of the same table row.

Attached is the file. I really appreciate any help in this regard as this is a 
blocking issue.

Thanks,
Anup


-----Original Message-----
From: dave.shi...@googlemail.com [mailto:dave.shi...@googlemail.com] On Behalf 
Of Dave Shield
Sent: Friday, August 27, 2010 11:10 AM
To: Shankar, Anup
Cc: net-snmp-users@lists.sourceforge.net
Subject: Re: Fails:: SNMPGetNext and GetBulk has the IP Address Index reversed 
in the request.

On 26 August 2010 12:10,  <anup.shan...@emc.com> wrote:
> Any one else in the group, have faced this issue. it's extremely
> high priority to get this issue resolved.
>
> Any help in this is highly appreciated.

If you want a quick-n-dirty hack to get things working,
you could always tweak the vplexDirectorFETable_entry
(and similar) structure to include *two* fields for the
IP address - one held in host order and one in network
order.
   Then use one for the index processing (in the get_first
and get_next routines), and the other in the handler
itself (for the column object).

Dave

/*
* Note: this file originally auto-generated by mib2c using
*  : mib2c.iterate.conf 17695 2009-07-21 12:22:18Z dts12 $
*/

#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include "Vplexstats.h"
#include "StatsManager.h"
#include "Configurator.h"
#include "OID.h"
#include "Logger.h"
#include "Globals.h"

USING_VPLEX_NAMESPACE

struct vplexDirectorTable_entry;
struct vplexDirectorTable_entry * vplexDirectorTable_createEntry( in_addr_t  
vplexDirectorPrimaryIpAddr);
struct vplexDirectorCacheTable_entry * vplexDirectorCacheTable_createEntry( 
in_addr_t  vplexDirectorPrimaryIpAddr); 

static int agent_shutdown(int majorID, int minorID, void *serverarg, void 
*clientarg);


/** Initializes the vplexStats module */

void
init_vplexStats(void)
{
    try 
    {

    /* here we initialize all the tables we're planning on supporting */
    initialize_table_vplexDirectorTable();
    initialize_table_vplexDirectorMemTable();
    
    VPLEX_CHANGE_BEGIN
    
    snmp_register_callback(SNMP_CALLBACK_LIBRARY, 
SNMP_CALLBACK_SHUTDOWN,agent_shutdown, NULL); 
    VPLEX_CHANGE_END
    }
    catch(std::exception& e)
    {
        LOG(LOG_ERR,"Exception :: %s\n",e.what());
        exit(0);
    }

}

VPLEX_CHANGE_BEGIN

static int agent_shutdown(int majorID, int minorID, void *serverarg, void 
*clientarg)
{
    
    DEBUGMSGTL(("vplexStats:init", "shutdown table vplexstatsTable\n"));
    LOG(LOG_INFO,"shutdown stats table \n");
    
    return 0;
}
VPLEX_CHANGE_END

/* Typical data structure for a row entry */

/*
    This is a hack made to the Table entry structures since IP Address
    index used to be in reversed orded for GETNext and Get Bulk calls.
    The hack to get things working,is to tweak the vplexDirectorFETable_entry
    (and similar) structure to include *two* fields for the
    IP address - one held in host order and one in network
    order.
    Then use one for the index processing (in the get_first
    and get_next routines), and the other in the handler
    itself (for the column object).
*/
struct vplexDirectorTable_entry {
    /* Index values */
    in_addr_t vplexDirectorPrimaryIpAddr;
    in_addr_t vplexDirectorPrimaryIpAddrHostOrder;
    /* Column values */
    in_addr_t vplexDirectorFailoverIpAddr;
    char vplexDirectorName[NNN];
    size_t vplexDirectorName_len;
    /* Illustrate using a simple linked list */
    int   valid;
    struct vplexDirectorTable_entry *next;
};

//  # Determine the first/last column names

/** Initialize the vplexDirectorTable table by defining its contents and how 
it's structured */
void initialize_table_vplexDirectorTable(void)
{
    oid vplexDirectorTable_oid[] = {1,3,6,1,4,1,1139,21,2,2,1};
    const size_t vplexDirectorTable_oid_len   = 
OID_LENGTH(vplexDirectorTable_oid);
    netsnmp_handler_registration    *reg;
    netsnmp_iterator_info           *iinfo;
    netsnmp_table_registration_info *table_info;
    
    DEBUGMSGTL(("vplex:init", "initializing table vplexDirectorTable\n"));
    
    reg = netsnmp_create_handler_registration(
        "vplexDirectorTable",     vplexDirectorTable_handler,
        vplexDirectorTable_oid, vplexDirectorTable_oid_len,
        HANDLER_CAN_RONLY
        );
    
    table_info = SNMP_MALLOC_TYPEDEF( netsnmp_table_registration_info );
    netsnmp_table_helper_add_indexes(table_info,
        ASN_IPADDRESS,  /* index: vplexDirectorPrimaryIpAddr */
        0);
    table_info->min_column = COLUMN_VPLEXDIRECTORPRIMARYIPADDR;
    table_info->max_column = COLUMN_VPLEXDIRECTORNAME;
    
    iinfo = SNMP_MALLOC_TYPEDEF( netsnmp_iterator_info );
    iinfo->get_first_data_point = vplexDirectorTable_get_first_data_point;
    iinfo->get_next_data_point  = vplexDirectorTable_get_next_data_point;
    iinfo->table_reginfo        = table_info;
    
    netsnmp_register_table_iterator( reg, iinfo );
    
    /* Initialise the contents of the table here */
    VPLEX_CHANGE_BEGIN

    Configurator*   configObj = Configurator::getInstance();
    bool local = !configObj->isStatsForNonLocalDirectors();
    std::vector<Director> dirList = configObj->getDirectorsInfo(local);

    Director dir;
    String ipAddress;
    struct vplexDirectorTable_entry*    dirTableEntry;
    in_addr_t vplexDirectorPrimaryIpAddr;
    in_addr_t vplexDirectorPrimaryIpAddrHostOrder;
    
    for(std::vector<Director>::iterator idx = dirList.begin(); idx != 
dirList.end(); idx++)
    {
        dir = *idx;
        
        ipAddress = dir.m_primaryIpAddress;
        vplexDirectorPrimaryIpAddr = inet_addr(ipAddress.c_str());
        vplexDirectorPrimaryIpAddrHostOrder = inet_addr(ipAddress.c_str());
        
        dirTableEntry = 
vplexDirectorTable_createEntry(vplexDirectorPrimaryIpAddr);

        if (!dirTableEntry) continue;
        
        
strncpy(dirTableEntry->vplexDirectorName,dir.m_directorName.c_str(),NNN);

        printf("Dir name %s \n", dir.m_directorName.c_str());
            
        dirTableEntry->valid = 1;
        dirTableEntry->vplexDirectorFailoverIpAddr = 
inet_addr(dir.m_failoverIpAddress.c_str());
        dirTableEntry->vplexDirectorPrimaryIpAddrHostOrder = 
vplexDirectorPrimaryIpAddrHostOrder;
        
    }
    VPLEX_CHANGE_END
}


struct vplexDirectorTable_entry  *vplexDirectorTable_head;

/* create a new row in the (unsorted) table */
struct vplexDirectorTable_entry *
vplexDirectorTable_createEntry(
                               in_addr_t  vplexDirectorPrimaryIpAddr
                               ) {
    struct vplexDirectorTable_entry *entry;
    
    entry = SNMP_MALLOC_TYPEDEF(struct vplexDirectorTable_entry);
    if (!entry)
        return NULL;
    
    entry->vplexDirectorPrimaryIpAddr = vplexDirectorPrimaryIpAddr;
    entry->next = vplexDirectorTable_head;
    vplexDirectorTable_head = entry;
    return entry;
}

/* remove a row from the table */
void
vplexDirectorTable_removeEntry( struct vplexDirectorTable_entry *entry ) {
    struct vplexDirectorTable_entry *ptr, *prev;
    
    if (!entry)
        return;    /* Nothing to remove */
    
    for ( ptr  = vplexDirectorTable_head, prev = NULL;
    ptr != NULL;
    prev = ptr, ptr = ptr->next ) {
        if ( ptr == entry )
            break;
    }
    if ( !ptr )
        return;    /* Can't find it */
    
    if ( prev == NULL )
        vplexDirectorTable_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 *
vplexDirectorTable_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 = vplexDirectorTable_head;
    return vplexDirectorTable_get_next_data_point(my_loop_context, 
my_data_context,
        put_index_data,  mydata );
}

netsnmp_variable_list *
vplexDirectorTable_get_next_data_point(void **my_loop_context,
                                       void **my_data_context,
                                       netsnmp_variable_list *put_index_data,
                                       netsnmp_iterator_info *mydata)
{
    struct vplexDirectorTable_entry *entry = (struct vplexDirectorTable_entry 
*)*my_loop_context;
    netsnmp_variable_list *idx = put_index_data;
    
    if ( entry ) {
        snmp_set_var_typed_integer( idx, 
ASN_IPADDRESS,htonl(entry->vplexDirectorPrimaryIpAddrHostOrder));
        //snmp_set_var_typed_integer( idx, ASN_IPADDRESS, 
entry->vplexDirectorPrimaryIpAddr );
        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 vplexDirectorTable table */
int
vplexDirectorTable_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 vplexDirectorTable_entry          *table_entry;
    
    DEBUGMSGTL(("vplex: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 vplexDirectorTable_entry *)
                netsnmp_extract_iterator_context(request);
            table_info  =     netsnmp_extract_table_info(      request);
            
            switch (table_info->colnum) {
            case COLUMN_VPLEXDIRECTORPRIMARYIPADDR:
                if ( !table_entry ) {
                    netsnmp_set_request_error(reqinfo, request,
                        SNMP_NOSUCHINSTANCE);
                    continue;
                }
                snmp_set_var_typed_integer( request->requestvb, ASN_IPADDRESS,
                    table_entry->vplexDirectorPrimaryIpAddr);
                break;
            case COLUMN_VPLEXDIRECTORFAILOVERIPADDR:
                if ( !table_entry ) {
                    netsnmp_set_request_error(reqinfo, request,
                        SNMP_NOSUCHINSTANCE);
                    continue;
                }
                snmp_set_var_typed_integer( request->requestvb, ASN_IPADDRESS,
                    table_entry->vplexDirectorFailoverIpAddr);
                break;
            case COLUMN_VPLEXDIRECTORNAME:
                if ( !table_entry ) {
                    netsnmp_set_request_error(reqinfo, request,
                        SNMP_NOSUCHINSTANCE);
                    continue;
                }
                snmp_set_var_typed_value( request->requestvb, ASN_OCTET_STR,
                    (u_char*)table_entry->vplexDirectorName,
                    table_entry->vplexDirectorName_len);
                break;
            default:
                netsnmp_set_request_error(reqinfo, request,
                    SNMP_NOSUCHOBJECT);
                break;
            }
        }
        break;
        
    }
    return SNMP_ERR_NOERROR;
}
//  # Determine the first/last column names
/* Typical data structure for a row entry */
struct vplexDirectorMemTable_entry {
    /* Index values */
    in_addr_t vplexDirectorPrimaryIpAddr;
    in_addr_t vplexDirectorPrimaryIpAddrHostOrder;
    
    /* Column values */
    long vplexDirectorHeapUsed;
    
    /* Illustrate using a simple linked list */
    int   valid;
    struct vplexDirectorMemTable_entry *next;
};
struct vplexDirectorMemTable_entry *
vplexDirectorMemTable_createEntry(in_addr_t  vplexDirectorPrimaryIpAddr);

/** Initialize the vplexDirectorMemTable table by defining its contents and how 
it's structured */
void
initialize_table_vplexDirectorMemTable(void)
{
    oid vplexDirectorMemTable_oid[] = {1,3,6,1,4,1,1139,21,2,2,2};
    const size_t vplexDirectorMemTable_oid_len   = 
OID_LENGTH(vplexDirectorMemTable_oid);
    netsnmp_handler_registration    *reg;
    netsnmp_iterator_info           *iinfo;
    netsnmp_table_registration_info *table_info;
    
    DEBUGMSGTL(("vplex:init", "initializing table vplexDirectorMemTable\n"));
    
    reg = netsnmp_create_handler_registration(
        "vplexDirectorMemTable",     vplexDirectorMemTable_handler,
        vplexDirectorMemTable_oid, vplexDirectorMemTable_oid_len,
        HANDLER_CAN_RONLY
        );
    
    table_info = SNMP_MALLOC_TYPEDEF( netsnmp_table_registration_info );
    netsnmp_table_helper_add_indexes(table_info,
        ASN_IPADDRESS,  /* index: vplexDirectorPrimaryIpAddr */
        0);
    table_info->min_column = COLUMN_VPLEXDIRECTORHEAPUSED;
    table_info->max_column = COLUMN_VPLEXDIRECTORHEAPUSED;
    
    iinfo = SNMP_MALLOC_TYPEDEF( netsnmp_iterator_info );
    iinfo->get_first_data_point = vplexDirectorMemTable_get_first_data_point;
    iinfo->get_next_data_point  = vplexDirectorMemTable_get_next_data_point;
    iinfo->table_reginfo        = table_info;
    
    netsnmp_register_table_iterator( reg, iinfo );
    
    /* Initialise the contents of the table here */
    VPLEX_CHANGE_BEGIN
    Configurator*   configObj = Configurator::getInstance();
    bool local = !configObj->isStatsForNonLocalDirectors();
    std::vector<Director> dirList = configObj->getDirectorsInfo(local);

    StatsManager* statsMgr = StatsManager::getInstance();
    Director dir;
    String ipAddress;
    in_addr_t vplexDirectorPrimaryIpAddr;
    in_addr_t vplexDirectorPrimaryIpAddrHostOrder;
    
    struct vplexDirectorMemTable_entry *entry;
    for(std::vector<Director>::iterator i = dirList.begin(); i != 
dirList.end(); i++)
    {
        Stringvector idxList;
        dir = *i;
        ipAddress = dir.m_primaryIpAddress;
        
        vplexDirectorPrimaryIpAddr = inet_addr(ipAddress.c_str());
        vplexDirectorPrimaryIpAddrHostOrder = inet_addr(ipAddress.c_str());
        
        entry = vplexDirectorMemTable_createEntry(vplexDirectorPrimaryIpAddr);

        if (!entry)
            continue;

        entry->valid = 1;
        entry->vplexDirectorPrimaryIpAddrHostOrder = 
vplexDirectorPrimaryIpAddrHostOrder;
        
        idxList.push_back(ipAddress);
        statsMgr->initDirectorMemStats(idxList);
    }
    VPLEX_CHANGE_END
    
}


struct vplexDirectorMemTable_entry  *vplexDirectorMemTable_head;

/* create a new row in the (unsorted) table */
struct vplexDirectorMemTable_entry *
vplexDirectorMemTable_createEntry(
                                  in_addr_t  vplexDirectorPrimaryIpAddr
                                  ) {
    struct vplexDirectorMemTable_entry *entry;
    
    entry = SNMP_MALLOC_TYPEDEF(struct vplexDirectorMemTable_entry);
    if (!entry)
        return NULL;
    
    entry->vplexDirectorPrimaryIpAddr = vplexDirectorPrimaryIpAddr;
    entry->next = vplexDirectorMemTable_head;
    vplexDirectorMemTable_head = entry;
    return entry;
}

/* remove a row from the table */
void
vplexDirectorMemTable_removeEntry( struct vplexDirectorMemTable_entry *entry ) {
    struct vplexDirectorMemTable_entry *ptr, *prev;
    
    if (!entry)
        return;    /* Nothing to remove */
    
    for ( ptr  = vplexDirectorMemTable_head, prev = NULL;
    ptr != NULL;
    prev = ptr, ptr = ptr->next ) {
        if ( ptr == entry )
            break;
    }
    if ( !ptr )
        return;    /* Can't find it */
    
    if ( prev == NULL )
        vplexDirectorMemTable_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 *
vplexDirectorMemTable_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 = vplexDirectorMemTable_head;
    return vplexDirectorMemTable_get_next_data_point(my_loop_context, 
my_data_context,
        put_index_data,  mydata );
}

netsnmp_variable_list *
vplexDirectorMemTable_get_next_data_point(void **my_loop_context,
                                          void **my_data_context,
                                          netsnmp_variable_list *put_index_data,
                                          netsnmp_iterator_info *mydata)
{
    struct vplexDirectorMemTable_entry *entry = (struct 
vplexDirectorMemTable_entry *)*my_loop_context;
    netsnmp_variable_list *idx = put_index_data;
    
    if ( entry ) {
        snmp_set_var_typed_integer( idx, 
ASN_IPADDRESS,htonl(entry->vplexDirectorPrimaryIpAddrHostOrder));
        //snmp_set_var_typed_integer( idx, ASN_IPADDRESS, 
entry->vplexDirectorPrimaryIpAddr );
        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 vplexDirectorMemTable table */
int
vplexDirectorMemTable_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 vplexDirectorMemTable_entry          *table_entry;
    
    DEBUGMSGTL(("vplex: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 vplexDirectorMemTable_entry *)
                netsnmp_extract_iterator_context(request);
            table_info  =     netsnmp_extract_table_info(      request);

            OID Attribute = getAttribute(reginfo,table_info);                   
   
            Stringvector idxList;
            
            struct in_addr tableIdx;
            if (table_entry)
                tableIdx.s_addr = table_entry->vplexDirectorPrimaryIpAddr;
            String dirIP = inet_ntoa(tableIdx);
            
            printf("Mem table IP = %s \n", dirIP.c_str());

            idxList.push_back(dirIP);
           
            
            StatsManager* statsMgr = StatsManager::getInstance();
            
            String retVal;
            
            statsMgr->fetch(idxList,Attribute,retVal);


            switch (table_info->colnum) {
            case COLUMN_VPLEXDIRECTORHEAPUSED:
                if ( !table_entry ) {
                    netsnmp_set_request_error(reqinfo, request,
                        SNMP_NOSUCHINSTANCE);
                    continue;
                }
                snmp_set_var_typed_integer( request->requestvb, ASN_INTEGER,
                    table_entry->vplexDirectorHeapUsed);
                break;
            default:
                netsnmp_set_request_error(reqinfo, request,
                    SNMP_NOSUCHOBJECT);
                break;
            }
        }
        break;
        
    }
    return SNMP_ERR_NOERROR;
}
/*
 * Note: this file originally auto-generated by mib2c using
 *  : mib2c.iterate.conf 17695 2009-07-21 12:22:18Z dts12 $
 */
#ifndef VPLEXSTATS_H
#define VPLEXSTATS_H

#if defined(__cplusplus)
extern "C" {
#endif


/* function declarations */
void init_vplexStats(void);
void initialize_table_vplexDirectorTable(void);
Netsnmp_Node_Handler vplexDirectorTable_handler;
Netsnmp_First_Data_Point  vplexDirectorTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorTable_get_next_data_point;
void initialize_table_vplexDirectorCacheTable(void);
Netsnmp_Node_Handler vplexDirectorCacheTable_handler;
Netsnmp_First_Data_Point  vplexDirectorCacheTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorCacheTable_get_next_data_point;
void initialize_table_vplexDirectorMemTable(void);
Netsnmp_Node_Handler vplexDirectorMemTable_handler;
Netsnmp_First_Data_Point  vplexDirectorMemTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorMemTable_get_next_data_point;
void initialize_table_vplexDirectorProcTable(void);
Netsnmp_Node_Handler vplexDirectorProcTable_handler;
Netsnmp_First_Data_Point  vplexDirectorProcTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorProcTable_get_next_data_point;
void initialize_table_vplexDirectorFETable(void);
Netsnmp_Node_Handler vplexDirectorFETable_handler;
Netsnmp_First_Data_Point  vplexDirectorFETable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorFETable_get_next_data_point;
void initialize_table_vplexDirectorFEPortTable(void);
Netsnmp_Node_Handler vplexDirectorFEPortTable_handler;
Netsnmp_First_Data_Point  vplexDirectorFEPortTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorFEPortTable_get_next_data_point;
void initialize_table_vplexDirectorBETable(void);
Netsnmp_Node_Handler vplexDirectorBETable_handler;
Netsnmp_First_Data_Point  vplexDirectorBETable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorBETable_get_next_data_point;
void initialize_table_vplexDirectorBEPortTable(void);
Netsnmp_Node_Handler vplexDirectorBEPortTable_handler;
Netsnmp_First_Data_Point  vplexDirectorBEPortTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorBEPortTable_get_next_data_point;
void initialize_table_vplexDirectorCOMPortTable(void);
Netsnmp_Node_Handler vplexDirectorCOMPortTable_handler;
Netsnmp_First_Data_Point  vplexDirectorCOMPortTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorCOMPortTable_get_next_data_point;
void initialize_table_vplexDirectorFCPortTable(void);
Netsnmp_Node_Handler vplexDirectorFCPortTable_handler;
Netsnmp_First_Data_Point  vplexDirectorFCPortTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorFCPortTable_get_next_data_point;
void initialize_table_vplexDirectorEthPortTable(void);
Netsnmp_Node_Handler vplexDirectorEthPortTable_handler;
Netsnmp_First_Data_Point  vplexDirectorEthPortTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexDirectorEthPortTable_get_next_data_point;
void initialize_table_vplexVirtualVolumeTable(void);
Netsnmp_Node_Handler vplexVirtualVolumeTable_handler;
Netsnmp_First_Data_Point  vplexVirtualVolumeTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexVirtualVolumeTable_get_next_data_point;
void initialize_table_vplexStorageVolumeTable(void);
Netsnmp_Node_Handler vplexStorageVolumeTable_handler;
Netsnmp_First_Data_Point  vplexStorageVolumeTable_get_first_data_point;
Netsnmp_Next_Data_Point   vplexStorageVolumeTable_get_next_data_point;

/* column number definitions for table vplexDirectorTable */
       #define COLUMN_VPLEXDIRECTORPRIMARYIPADDR                1
       #define COLUMN_VPLEXDIRECTORFAILOVERIPADDR               2
       #define COLUMN_VPLEXDIRECTORNAME         3

/* column number definitions for table vplexDirectorCacheTable */
       #define COLUMN_VPLEXDIRECTORCACHEMISS            1
       #define COLUMN_VPLEXDIRECTORCACHEDIRTY           2
       #define COLUMN_VPLEXDIRECTORCACHESUBPAGEOPS              3
       #define COLUMN_VPLEXDIRECTORCACHEREMOTEHITS              4

/* column number definitions for table vplexDirectorMemTable */
       #define COLUMN_VPLEXDIRECTORHEAPUSED             1

/* column number definitions for table vplexDirectorProcTable */
       #define COLUMN_VPLEXDIRECTORCPUIDLE              1

/* column number definitions for table vplexDirectorFETable */
       #define COLUMN_VPLEXDIRECTORFEOPSREAD            1
       #define COLUMN_VPLEXDIRECTORFEOPSWRITE           2
       #define COLUMN_VPLEXDIRECTORFEOPSQUEUED          3
       #define COLUMN_VPLEXDIRECTORFEOPSACTIVE          4
       #define COLUMN_VPLEXDIRECTORFEOPSAVGREADLATENCY          5
       #define COLUMN_VPLEXDIRECTORFEOPSAVGWRITELATENCY         6
       #define COLUMN_VPLEXDIRECTORFEBYTESREAD          7
       #define COLUMN_VPLEXDIRECTORFEBYTESWRITE         8

/* column number definitions for table vplexDirectorFEPortTable */
       #define COLUMN_VPLEXDIRECTORFEPORTINDEX          1
       #define COLUMN_VPLEXDIRECTORFEPORTNAME           2
       #define COLUMN_VPLEXDIRECTORFEPORTOPSREAD                3
       #define COLUMN_VPLEXDIRECTORFEPORTOPSWRITE               4
       #define COLUMN_VPLEXDIRECTORFEPORTOPSQUEUED              5
       #define COLUMN_VPLEXDIRECTORFEPORTOPSACTIVE              6
       #define COLUMN_VPLEXDIRECTORFEPORTOPSAVGREADLATENCY              7
       #define COLUMN_VPLEXDIRECTORFEPORTOPSAVGWRITELATENCY             8
       #define COLUMN_VPLEXDIRECTORFEPORTBYTESREAD              9
       #define COLUMN_VPLEXDIRECTORFEPORTBYTESWRITE             10

/* column number definitions for table vplexDirectorBETable */
       #define COLUMN_VPLEXDIRECTORBEOPSREAD            1
       #define COLUMN_VPLEXDIRECTORBEOPSWRITE           2
       #define COLUMN_VPLEXDIRECTORBEOPSQUEUED          3
       #define COLUMN_VPLEXDIRECTORBEOPSACTIVE          4
       #define COLUMN_VPLEXDIRECTORBEOPSAVGREADLATENCY          5
       #define COLUMN_VPLEXDIRECTORBEOPSAVGWRITELATENCY         6
       #define COLUMN_VPLEXDIRECTORBEBYTESREAD          7
       #define COLUMN_VPLEXDIRECTORBEBYTESWRITE         8

/* column number definitions for table vplexDirectorBEPortTable */
       #define COLUMN_VPLEXDIRECTORBEPORTINDEX          1
       #define COLUMN_VPLEXDIRECTORBEPORTNAME           2
       #define COLUMN_VPLEXDIRECTORBEPORTOPSREAD                3
       #define COLUMN_VPLEXDIRECTORBEPORTOPSWRITE               4
       #define COLUMN_VPLEXDIRECTORBEPORTOPSQUEUED              5
       #define COLUMN_VPLEXDIRECTORBEPORTOPSACTIVE              6
       #define COLUMN_VPLEXDIRECTORBEPORTOPSAVGREADLATENCY              7
       #define COLUMN_VPLEXDIRECTORBEPORTOPSAVGWRITELATENCY             8
       #define COLUMN_VPLEXDIRECTORBEPORTBYTESREAD              9
       #define COLUMN_VPLEXDIRECTORBEPORTBYTESWRITE             10

/* column number definitions for table vplexDirectorCOMPortTable */
       #define COLUMN_VPLEXDIRECTORCOMPORTINDEX         1
       #define COLUMN_VPLEXDIRECTORCOMPORTNAME          2
       #define COLUMN_VPLEXDIRECTORCOMPORTOPSREAD               3
       #define COLUMN_VPLEXDIRECTORCOMPORTOPSWRITE              4
       #define COLUMN_VPLEXDIRECTORCOMPORTOPSQUEUED             5
       #define COLUMN_VPLEXDIRECTORCOMPORTOPSACTIVE             6
       #define COLUMN_VPLEXDIRECTORCOMPORTOPSAVGREADLATENCY             7
       #define COLUMN_VPLEXDIRECTORCOMPORTOPSAVGWRITELATENCY            8
       #define COLUMN_VPLEXDIRECTORCOMPORTBYTESREAD             9
       #define COLUMN_VPLEXDIRECTORCOMPORTBYTESWRITE            10

/* column number definitions for table vplexDirectorFCPortTable */
       #define COLUMN_VPLEXDIRECTORFCPORTINDEX          1

/* column number definitions for table vplexDirectorEthPortTable */
       #define COLUMN_VPLEXDIRECTORETHPORTINDEX         1

/* column number definitions for table vplexVirtualVolumeTable */
       #define COLUMN_VPLEXVIRTUALVOLUMEINDEX           1

/* column number definitions for table vplexStorageVolumeTable */
       #define COLUMN_VPLEXSTORAGEVOLUMEINDEX           1

#if defined(__cplusplus)
}
#endif

#endif /* VPLEXSTATS_H */

------------------------------------------------------------------------------
Automate Storage Tiering Simply
Optimize IT performance and efficiency through flexible, powerful, 
automated storage tiering capabilities. View this brief to learn how
you can reduce costs and improve performance. 
http://p.sf.net/sfu/dell-sfdev2dev
_______________________________________________
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