Attached is the compiled code...
-----Original Message-----
From: dave.shi...@googlemail.com [mailto:dave.shi...@googlemail.com] On Behalf
Of Dave Shield
Sent: Wednesday, August 25, 2010 1:20 PM
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 25 August 2010 08:30, <anup.shan...@emc.com> wrote:
> Attached is the code..
And the header files?
What I'm looking to do is to try out your MIB module
on my local system, so I can see exactly what is going
wrong. In order to do that, I need *ALL* the stuff that
you have added (including the C++ objects that you
appear to have defined)
Or better - a version of the code that uses standalone,
hardcoded dummy data (rather than pulling it in from
VPLEXConfigurator) , but still displays the same problem.
If we can isolate the problem using such a test setup,
then it should be possible to apply the same fix to your
live setup.
Dave
/*
* 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 */
/*
* 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 <stdlib.h>
#include<iostream.h>
#include<stdio.h>
#include <exception>
#include <string>
#include <vector>
#include <list>
#include <map>
//#include <sys/socket.h>
//#include <netinet/in.h>
#include <arpa/inet.h>
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/types.h>
#include <stdlib.h>
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
typedef std::string String;
typedef std::vector<std::string> Stringvector;
struct vplexDirectorTable_entry;
struct vplexDirectorTable_entry * vplexDirectorTable_createEntry( in_addr_t
vplexDirectorPrimaryIpAddr);
struct vplexDirectorCacheTable_entry * vplexDirectorCacheTable_createEntry(
in_addr_t vplexDirectorPrimaryIpAddr);
/**Helper Functions **/
struct counter64 getCounter64(String val)
{
struct counter64 c64;
u_long tmp = strtoul(val.c_str(),NULL,0);
c64.high = (tmp & 0xffffffff00000000ULL) >> 32;
c64.low = (tmp & 0xffffffffULL);
return c64;
}
String getPrimaryIP(netsnmp_table_request_info *table_info)
{
String ipAddress;
struct in_addr tableIdx;
long* var = table_info->indexes->val.integer;
tableIdx.s_addr = *var;
cout << "tableIdx" << var << endl;
String dirIP = inet_ntoa(tableIdx);
cout << "director IP" << dirIP << endl;
return dirIP;
}
/** Initializes the vplexStats module */
void
init_vplexStats(void)
{
/* here we initialize all the tables we're planning on supporting */
initialize_table_vplexDirectorTable();
initialize_table_vplexDirectorFETable();
}
// # Determine the first/last column names
/* Typical data structure for a row entry */
struct vplexDirectorTable_entry {
/* Index values */
in_addr_t vplexDirectorPrimaryIpAddr;
/* Column values */
/*in_addr_t vplexDirectorPrimaryIpAddr;*/
in_addr_t vplexDirectorFailoverIpAddr;
char vplexDirectorName[80];
/* Illustrate using a simple linked list */
int valid;
struct vplexDirectorTable_entry *next;
};
/** Initialize the vplexDirectorTable table by defining its contents and how
it's structured */
void
initialize_table_vplexDirectorTable(void)
{
const 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(("vplexStats: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 */
cout << "initialize_table_vplexDirectorTable" << endl;
struct vplexDirectorTable_entry* dirTableEntry;
in_addr_t vplexDirectorPrimaryIpAddr = inet_addr("128.221.252.35");
cout << "Entry 1 IP" << vplexDirectorPrimaryIpAddr << endl;
dirTableEntry =
vplexDirectorTable_createEntry(vplexDirectorPrimaryIpAddr);
strcpy(dirTableEntry->vplexDirectorName,"dir1");
dirTableEntry->valid = 1;
vplexDirectorPrimaryIpAddr = inet_addr("128.221.252.36");
cout << "Entry 2 IP" << vplexDirectorPrimaryIpAddr << endl;
dirTableEntry =
vplexDirectorTable_createEntry(vplexDirectorPrimaryIpAddr);
strcpy(dirTableEntry->vplexDirectorName,"dir2");
dirTableEntry->valid = 1;
}
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_value( idx,ASN_IPADDRESS,(u_char *)
&entry->vplexDirectorPrimaryIpAddr,\
sizeof(entry->vplexDirectorPrimaryIpAddr));
// 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(("vplexStats:handler", "Processing request (%d)\n",
reqinfo->mode));
switch (reqinfo->mode) {
/*
* Read-support (also covers GetNext requests)
*/
case MODE_GET:
cout << "vplexDirectorTable_handler" << endl;
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_integer( request->requestvb, ,
// table_entry->vplexDirectorName);
snmp_set_var_typed_value(
request->requestvb,ASN_OCTET_STR, \
(u_char
*)table_entry->vplexDirectorName, strlen(table_entry->vplexDirectorName));
break;
default:
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHOBJECT);
break;
}
}
break;
}
return SNMP_ERR_NOERROR;
}
/* Typical data structure for a row entry */
struct vplexDirectorFETable_entry {
/* Index values */
in_addr_t vplexDirectorPrimaryIpAddr;
/* Column values */
U64 vplexDirectorFEOpsRead;
U64 vplexDirectorFEOpsWrite;
U64 vplexDirectorFEOpsQueued;
U64 vplexDirectorFEOpsActive;
U64 vplexDirectorFEOpsAvgReadLatency;
U64 vplexDirectorFEOpsAvgWriteLatency;
U64 vplexDirectorFEBytesRead;
U64 vplexDirectorFEBytesWrite;
/* Illustrate using a simple linked list */
int valid;
struct vplexDirectorFETable_entry *next;
};
struct vplexDirectorFETable_entry *vplexDirectorFETable_head;
struct vplexDirectorFETable_entry *
vplexDirectorFETable_createEntry(in_addr_t vplexDirectorPrimaryIpAddr);
/** Initialize the vplexDirectorFETable table by defining its contents and how
it's structured */
void
initialize_table_vplexDirectorFETable(void)
{
const oid vplexDirectorFETable_oid[] = {1,3,6,1,4,1,1139,21,2,2,5};
const size_t vplexDirectorFETable_oid_len =
OID_LENGTH(vplexDirectorFETable_oid);
netsnmp_handler_registration *reg;
netsnmp_iterator_info *iinfo;
netsnmp_table_registration_info *table_info;
DEBUGMSGTL(("vplexStats:init", "initializing table
vplexDirectorFETable\n"));
reg = netsnmp_create_handler_registration(
"vplexDirectorFETable", vplexDirectorFETable_handler,
vplexDirectorFETable_oid, vplexDirectorFETable_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_VPLEXDIRECTORFEOPSREAD;
table_info->max_column = COLUMN_VPLEXDIRECTORFEBYTESWRITE;
iinfo = SNMP_MALLOC_TYPEDEF( netsnmp_iterator_info );
iinfo->get_first_data_point = vplexDirectorFETable_get_first_data_point;
iinfo->get_next_data_point = vplexDirectorFETable_get_next_data_point;
iinfo->table_reginfo = table_info;
netsnmp_register_table_iterator( reg, iinfo );
/* Initialise the contents of the table here */
struct vplexDirectorFETable_entry *dirTableEntry;
in_addr_t vplexDirectorPrimaryIpAddr = inet_addr("128.221.252.35");
cout << "Entry 1 IP" << vplexDirectorPrimaryIpAddr << endl;
dirTableEntry =
vplexDirectorFETable_createEntry(vplexDirectorPrimaryIpAddr);
dirTableEntry->valid = 1;
vplexDirectorPrimaryIpAddr = inet_addr("128.221.252.36");
cout << "Entry 2 IP" << vplexDirectorPrimaryIpAddr << endl;
dirTableEntry =
vplexDirectorFETable_createEntry(vplexDirectorPrimaryIpAddr);
dirTableEntry->valid = 1;
}
/* create a new row in the (unsorted) table */
struct vplexDirectorFETable_entry *
vplexDirectorFETable_createEntry(
in_addr_t vplexDirectorPrimaryIpAddr
) {
struct vplexDirectorFETable_entry *entry;
entry = SNMP_MALLOC_TYPEDEF(struct vplexDirectorFETable_entry);
if (!entry)
return NULL;
entry->vplexDirectorPrimaryIpAddr = vplexDirectorPrimaryIpAddr;
cout << "in vplexDirectorFETable_createEntry" << endl;
cout << "ipAddress--IDX" << entry->vplexDirectorPrimaryIpAddr << endl;
entry->next = vplexDirectorFETable_head;
vplexDirectorFETable_head = entry;
return entry;
}
/* remove a row from the table */
void
vplexDirectorFETable_removeEntry( struct vplexDirectorFETable_entry *entry ) {
struct vplexDirectorFETable_entry *ptr, *prev;
if (!entry)
return; /* Nothing to remove */
for ( ptr = vplexDirectorFETable_head, prev = NULL;
ptr != NULL;
prev = ptr, ptr = ptr->next ) {
if ( ptr == entry )
break;
}
if ( !ptr )
return; /* Can't find it */
if ( prev == NULL )
vplexDirectorFETable_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 *
vplexDirectorFETable_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 = vplexDirectorFETable_head;
struct vplexDirectorFETable_entry *entry = (struct
vplexDirectorFETable_entry *)*my_loop_context;
cout << "in vplexDirectorFETable_get_first_data_point" << endl;
cout << "ipAddress" << entry->vplexDirectorPrimaryIpAddr << endl;
netsnmp_variable_list *list =
vplexDirectorFETable_get_next_data_point(my_loop_context, my_data_context,
put_index_data, mydata );
cout << "put_index_data" << *list->val.integer << endl;
return list;
}
netsnmp_variable_list *
vplexDirectorFETable_get_next_data_point(void **my_loop_context,
void **my_data_context,
netsnmp_variable_list *put_index_data,
netsnmp_iterator_info *mydata)
{
struct vplexDirectorFETable_entry *entry = (struct
vplexDirectorFETable_entry *)*my_loop_context;
netsnmp_variable_list *idx = put_index_data;
if ( entry ) {
cout << "iam in vplexDirectorFETable_get_next_data_point" << endl;
cout << "idx" << idx << "ipAddress" <<
entry->vplexDirectorPrimaryIpAddr << endl;
//snmp_set_var_typed_integer( idx, ASN_IPADDRESS,
entry->vplexDirectorPrimaryIpAddr) ;
snmp_set_var_typed_value( idx,ASN_IPADDRESS,(u_char *)
&entry->vplexDirectorPrimaryIpAddr,\
sizeof(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 vplexDirectorFETable table */
int
vplexDirectorFETable_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 vplexDirectorFETable_entry *table_entry;
DEBUGMSGTL(("vplexStats: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 vplexDirectorFETable_entry *)
netsnmp_extract_iterator_context(request);
table_info = netsnmp_extract_table_info( request);
if (table_entry)
cout << "table IP" <<
table_entry->vplexDirectorPrimaryIpAddr << endl;
switch (table_info->colnum) {
case COLUMN_VPLEXDIRECTORFEOPSREAD:
if ( !table_entry ) {
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHINSTANCE);
continue;
}
cout << "iam in COLUMN_VPLEXDIRECTORFEOPSREAD"
<< table_entry->vplexDirectorFEOpsRead.high \
<<
table_entry->vplexDirectorFEOpsRead.low << endl;
snmp_set_var_typed_value(
request->requestvb,ASN_COUNTER64,(u_char *)
&table_entry->vplexDirectorFEOpsRead,\
sizeof(table_entry->vplexDirectorFEOpsRead));
//snmp_set_var_typed_integer( request->requestvb,
ASN_COUNTER64,table_entry->vplexDirectorFEOpsRead);
break;
case COLUMN_VPLEXDIRECTORFEOPSWRITE:
if ( !table_entry ) {
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHINSTANCE);
continue;
}
cout << "iam in COLUMN_VPLEXDIRECTORFEOPSWRITE"
<< table_entry->vplexDirectorFEOpsWrite.high \
<<
table_entry->vplexDirectorFEOpsWrite.low << endl;
snmp_set_var_typed_value(
request->requestvb,ASN_COUNTER64,(u_char *)
&table_entry->vplexDirectorFEOpsWrite,\
sizeof(table_entry->vplexDirectorFEOpsWrite));
// snmp_set_var_typed_integer( request->requestvb, ASN_COUNTER64,
//
table_entry->vplexDirectorFEOpsWrite);
break;
case COLUMN_VPLEXDIRECTORFEOPSQUEUED:
if ( !table_entry ) {
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHINSTANCE);
continue;
}
cout << "iam in
COLUMN_vplexDirectorFEOpsQueued" << table_entry->vplexDirectorFEOpsQueued.high \
<<
table_entry->vplexDirectorFEOpsQueued.low << endl;
snmp_set_var_typed_value(
request->requestvb,ASN_COUNTER64,(u_char *)
&table_entry->vplexDirectorFEOpsQueued,\
sizeof(table_entry->vplexDirectorFEOpsQueued));
//snmp_set_var_typed_integer( request->requestvb, ASN_COUNTER64,
//
table_entry->vplexDirectorFEOpsQueued);
break;
case COLUMN_VPLEXDIRECTORFEOPSACTIVE:
if ( !table_entry ) {
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHINSTANCE);
continue;
}
cout << "iam in
COLUMN_vplexDirectorFEOpsActive" << table_entry->vplexDirectorFEOpsActive.high \
<<
table_entry->vplexDirectorFEOpsActive.low << endl;
snmp_set_var_typed_value(
request->requestvb,ASN_COUNTER64,(u_char *)
&table_entry->vplexDirectorFEOpsActive,\
sizeof(table_entry->vplexDirectorFEOpsActive));
// snmp_set_var_typed_integer( request->requestvb, ASN_COUNTER64,
//
table_entry->vplexDirectorFEOpsActive);
break;
case COLUMN_VPLEXDIRECTORFEOPSAVGREADLATENCY:
if ( !table_entry ) {
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHINSTANCE);
continue;
}
cout << "iam in
COLUMN_vplexDirectorFEOpsAvgReadLatency" <<
table_entry->vplexDirectorFEOpsAvgReadLatency.high \
<<
table_entry->vplexDirectorFEOpsAvgReadLatency.low << endl;
snmp_set_var_typed_value(
request->requestvb,ASN_COUNTER64,(u_char *)
&table_entry->vplexDirectorFEOpsAvgReadLatency,\
sizeof(table_entry->vplexDirectorFEOpsAvgReadLatency));
// snmp_set_var_typed_integer( request->requestvb, ASN_COUNTER64,
//
table_entry->vplexDirectorFEOpsAvgReadLatency);
break;
case COLUMN_VPLEXDIRECTORFEOPSAVGWRITELATENCY:
if ( !table_entry ) {
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHINSTANCE);
continue;
}
cout << "iam in
COLUMN_vplexDirectorFEOpsAvgWriteLatency" <<
table_entry->vplexDirectorFEOpsAvgWriteLatency.high \
<<
table_entry->vplexDirectorFEOpsAvgWriteLatency.low << endl;
snmp_set_var_typed_value(
request->requestvb,ASN_COUNTER64,(u_char *)
&table_entry->vplexDirectorFEOpsAvgWriteLatency,\
sizeof(table_entry->vplexDirectorFEOpsAvgWriteLatency));
// snmp_set_var_typed_integer( request->requestvb, ASN_COUNTER64,
//
table_entry->vplexDirectorFEOpsAvgWriteLatency);
break;
case COLUMN_VPLEXDIRECTORFEBYTESREAD:
if ( !table_entry ) {
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHINSTANCE);
continue;
}
cout << "iam in
COLUMN_vplexDirectorFEBytesRead" << table_entry->vplexDirectorFEBytesRead.high \
<<
table_entry->vplexDirectorFEBytesRead.low << endl;
snmp_set_var_typed_value(
request->requestvb,ASN_COUNTER64,(u_char *)
&table_entry->vplexDirectorFEBytesRead,\
sizeof(table_entry->vplexDirectorFEBytesRead));
// snmp_set_var_typed_integer( request->requestvb, ASN_COUNTER64,
//
table_entry->vplexDirectorFEBytesRead);
break;
case COLUMN_VPLEXDIRECTORFEBYTESWRITE:
if ( !table_entry ) {
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHINSTANCE);
continue;
}
cout << "iam in
COLUMN_vplexDirectorFEBytesWrite" <<
table_entry->vplexDirectorFEBytesWrite.high \
<<
table_entry->vplexDirectorFEBytesWrite.low << endl;
snmp_set_var_typed_value(
request->requestvb,ASN_COUNTER64,(u_char *)
&table_entry->vplexDirectorFEBytesWrite,\
sizeof(table_entry->vplexDirectorFEBytesWrite));
// snmp_set_var_typed_integer( request->requestvb, ASN_COUNTER64,
//
table_entry->vplexDirectorFEBytesWrite);
break;
default:
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHOBJECT);
break;
}
}
break;
}
return SNMP_ERR_NOERROR;
}
------------------------------------------------------------------------------
Sell apps to millions through the Intel(R) Atom(Tm) Developer Program
Be part of this innovative community and reach millions of netbook users
worldwide. Take advantage of special opportunities to increase revenue and
speed time-to-market. Join now, and jumpstart your future.
http://p.sf.net/sfu/intel-atom-d2d
_______________________________________________
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