0
/*
* 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;
}
上面是我的mib2c生成的代碼。我正在編譯它作爲子代理...但它沒有顯示任何類型的值。我應該採取什麼措施來實施它?我從哪裏可以獲取數據?請幫我實施它。執行mib2c生成的代碼
snmpwalk的-c公共-v 2C本地主機1.3.6.1.4.1.21068 POOL-MIB ::精英=無此對象在該代理可在此OID
Thansks提前。
我遵循了你的建議,但現在顯示「目前沒有此實例存在於此OID」 –
你能幫我嗎我應該在哪裏做所有更改?我想添加在同一個表中添加數千個數據。或者如你所說,我想用另一種方法,但我不知道很多snmp編碼,所以我選擇了我發現它們有點容易的東西。 –