snmptable returns: No Entries
"William" <[email protected]>
| Newsgroups | gmane.network.net-snmp.user |
|---|---|
| Message-ID | <000001cbe528$d00d5ba0$702812e0$@com> |
Hi:
I wrote a MIB,and create a dynamic library using the mib2c.iterate.
conf .
When I using the snmpget/snmpset ,it works well.
But when I using the command below:
$snmptable -v2c -c private localhost JS50-MIB::js50PMTable
It returned:
JS50-MIB::js50PMTable:No Entries
What’s the problem on earth?
I would expect your reply!
Code:
/** Initializes the js50 module */
void
init_js50(void)
{
/*
* here we initialize all the tables we're planning on supporting
*/
initialize_table_js50PMTable();
}
//# Determine the first/last column names
/** Initialize the js50PMTable table by defining its contents and how it's
structured */
void
initialize_table_js50PMTable(void)
{
static oid js50PMTable_oid[] = { 1, 3, 6, 1, 4, 1, 35062, 1, 1 };
size_t js50PMTable_oid_len = OID_LENGTH(js50PMTable_oid);
netsnmp_handler_registration *reg;
netsnmp_iterator_info *iinfo;
netsnmp_table_registration_info *table_info;
reg =
netsnmp_create_handler_registration("js50PMTable",
js50PMTable_handler,
js50PMTable_oid,
js50PMTable_oid_len,
HANDLER_CAN_RWRITE);
table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
netsnmp_table_helper_add_indexes(table_info, ASN_INTEGER, /* index:
js50PM01 */
ASN_OCTET_STR, /* index: js50PM02
*/
0);
table_info->min_column = COLUMN_JS50PM01;
table_info->max_column = COLUMN_JS50PM02;
iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
iinfo->get_first_data_point = js50PMTable_get_first_data_point;
iinfo->get_next_data_point = js50PMTable_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 js50PMTable_entry {
/*
* Index values
*/
long js50PM01;
char js50PM02[222];
size_t js50PM02_len;
/*
* Column values
*/
// long js50PM01;
long old_js50PM01;
// char js50PM02[NNN];
// size_t js50PM02_len;
char old_js50PM02[222];
size_t old_js50PM02_len;
/*
* Illustrate using a simple linked list
*/
int valid;
struct js50PMTable_entry *next;
};
struct js50PMTable_entry *js50PMTable_head;
/*
* create a new row in the (unsorted) table
*/
struct js50PMTable_entry *
js50PMTable_createEntry(long js50PM01,
char *js50PM02, size_t js50PM02_len)
{
struct js50PMTable_entry *entry;
entry = SNMP_MALLOC_TYPEDEF(struct js50PMTable_entry);
if (!entry)
return NULL;
entry->js50PM01 = js50PM01;
memcpy(entry->js50PM02, js50PM02, js50PM02_len);
entry->js50PM02_len = js50PM02_len;
entry->next = js50PMTable_head;
js50PMTable_head = entry;
return entry;
}
/*
* remove a row from the table
*/
void
js50PMTable_removeEntry(struct js50PMTable_entry *entry)
{
struct js50PMTable_entry *ptr, *prev;
if (!entry)
return; /* Nothing to remove */
for (ptr = js50PMTable_head, prev = NULL;
ptr != NULL; prev = ptr, ptr = ptr->next) {
if (ptr == entry)
break;
}
if (!ptr)
return; /* Can't find it */
if (prev == NULL)
js50PMTable_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 *
js50PMTable_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 = js50PMTable_head;
return js50PMTable_get_next_data_point(my_loop_context,
my_data_context, put_index_data,
mydata);
}
netsnmp_variable_list *
js50PMTable_get_next_data_point(void **my_loop_context,
void **my_data_context,
netsnmp_variable_list * put_index_data,
netsnmp_iterator_info *mydata)
{
struct js50PMTable_entry *entry =
(struct js50PMTable_entry *) *my_loop_context;
netsnmp_variable_list *idx = put_index_data;
if (entry) {
snmp_set_var_typed_integer(idx, ASN_INTEGER, entry->js50PM01);
idx = idx->next_variable;
snmp_set_var_value(idx, entry->js50PM02, sizeof(entry->js50PM02));
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 js50PMTable table */
int
js50PMTable_handler(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests)
{
int ret=0;
netsnmp_request_info *request;
netsnmp_table_request_info *table_info;
struct js50PMTable_entry *table_entry;
switch (reqinfo->mode) {
/*
* Read-support (also covers GetNext requests)
*/
case MODE_GET:
for (request = requests; request; request = request->next) {
table_entry = (struct js50PMTable_entry *)
netsnmp_extract_iterator_context(request);
table_info = netsnmp_extract_table_info(request);
switch (table_info->colnum) {
case COLUMN_JS50PM01:
if (!table_entry) {
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHINSTANCE);
continue;
}
snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
table_entry->js50PM01);
break;
case COLUMN_JS50PM02:
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->js50PM02,
table_entry->js50PM02_len);
break;
default:
netsnmp_set_request_error(reqinfo, request,
SNMP_NOSUCHOBJECT);
break;
}
}
break;
/*
* Write-support
*/
case MODE_SET_RESERVE1:
for (request = requests; request; request = request->next) {
table_entry = (struct js50PMTable_entry *)
netsnmp_extract_iterator_context(request);
table_info = netsnmp_extract_table_info(request);
switch (table_info->colnum) {
case COLUMN_JS50PM01:
/*
* or possibly 'netsnmp_check_vb_int_range'
*/
ret = netsnmp_check_vb_int(request->requestvb);
if (ret != SNMP_ERR_NOERROR) {
netsnmp_set_request_error(reqinfo, request, ret);
return SNMP_ERR_NOERROR;
}
break;
case COLUMN_JS50PM02:
/*
* or possiblc 'netsnmp_check_vb_type_and_size'
*/
ret =
netsnmp_check_vb_type_and_max_size(request->requestvb,
ASN_OCTET_STR,
sizeof(table_entry->
js50PM02));
if (ret != SNMP_ERR_NOERROR) {
netsnmp_set_request_error(reqinfo, request, ret);
return SNMP_ERR_NOERROR;
}
break;
default:
netsnmp_set_request_error(reqinfo, request,
SNMP_ERR_NOTWRITABLE);
return SNMP_ERR_NOERROR;
}
}
break;
case MODE_SET_RESERVE2:
break;
case MODE_SET_FREE:
break;
case MODE_SET_ACTION:
for (request = requests; request; request = request->next) {
table_entry = (struct js50PMTable_entry *)
netsnmp_extract_iterator_context(request);
table_info = netsnmp_extract_table_info(request);
switch (table_info->colnum) {
case COLUMN_JS50PM01:
table_entry->old_js50PM01 = table_entry->js50PM01;
table_entry->js50PM01 = *request->requestvb->val.integer;
break;
case COLUMN_JS50PM02:
memcpy(table_entry->old_js50PM02,
table_entry->js50PM02,
sizeof(table_entry->js50PM02));
table_entry->old_js50PM02_len = table_entry->js50PM02_len;
memset(table_entry->js50PM02, 0,
sizeof(table_entry->js50PM02));
memcpy(table_entry->js50PM02,
request->requestvb->val.string,
request->requestvb->val_len);
table_entry->js50PM02_len = request->requestvb->val_len;
break;
}
}
break;
case MODE_SET_UNDO:
for (request = requests; request; request = request->next) {
table_entry = (struct js50PMTable_entry *)
netsnmp_extract_iterator_context(request);
table_info = netsnmp_extract_table_info(request);
switch (table_info->colnum) {
case COLUMN_JS50PM01:
table_entry->js50PM01 = table_entry->old_js50PM01;
table_entry->old_js50PM01 = 0;
break;
case COLUMN_JS50PM02:
memcpy(table_entry->js50PM02,
table_entry->old_js50PM02,
sizeof(table_entry->js50PM02));
memset(table_entry->old_js50PM02, 0,
sizeof(table_entry->js50PM02));
table_entry->js50PM02_len = table_entry->old_js50PM02_len;
break;
}
}
break;
case MODE_SET_COMMIT:
break;
}
return SNMP_ERR_NOERROR;
}
------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users