本文整理汇总了C++中snmp_set_var_objid函数的典型用法代码示例。如果您正苦于以下问题:C++ snmp_set_var_objid函数的具体用法?C++ snmp_set_var_objid怎么用?C++ snmp_set_var_objid使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了snmp_set_var_objid函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: netsnmp_table_data_build_result
/* builds a result given a row, a varbind to set and the data */
int
netsnmp_table_data_build_result(netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *request,
netsnmp_table_row *row,
int column,
u_char type,
u_char * result_data,
size_t result_data_len)
{
oid build_space[MAX_OID_LEN];
if (!reginfo || !reqinfo || !request)
return SNMPERR_GENERR;
if (reqinfo->mode == MODE_GETNEXT || reqinfo->mode == MODE_GETBULK) {
/*
* only need to do this for getnext type cases where oid is changing
*/
memcpy(build_space, reginfo->rootoid, /* registered oid */
reginfo->rootoid_len * sizeof(oid));
build_space[reginfo->rootoid_len] = 1; /* entry */
build_space[reginfo->rootoid_len + 1] = column; /* column */
memcpy(build_space + reginfo->rootoid_len + 2, /* index data */
row->index_oid, row->index_oid_len * sizeof(oid));
snmp_set_var_objid(request->requestvb, build_space,
reginfo->rootoid_len + 2 + row->index_oid_len);
}
snmp_set_var_typed_value(request->requestvb, type,
result_data, result_data_len);
return SNMPERR_SUCCESS; /* WWWXXX: check for bounds */
}
开发者ID:Undrizzle,项目名称:apps,代码行数:33,代码来源:table_data.c
示例2: register_string_index
char *
register_string_index(oid * name, size_t name_len, char *cp)
{
netsnmp_variable_list varbind, *res;
memset(&varbind, 0, sizeof(netsnmp_variable_list));
varbind.type = ASN_OCTET_STR;
snmp_set_var_objid(&varbind, name, name_len);
if (cp != ANY_STRING_INDEX) {
snmp_set_var_value(&varbind, (u_char *) cp, strlen(cp));
res = register_index(&varbind, ALLOCATE_THIS_INDEX, main_session);
} else {
res = register_index(&varbind, ALLOCATE_ANY_INDEX, main_session);
}
if (res == NULL) {
return NULL;
} else {
char *rv = (char *)malloc(res->val_len + 1);
if (rv) {
memcpy(rv, res->val.string, res->val_len);
rv[res->val_len] = 0;
}
free(res);
return rv;
}
}
开发者ID:duniansampa,项目名称:SigLog,代码行数:27,代码来源:agent_index.cpp
示例3: register_int_index
int
register_int_index(oid * name, size_t name_len, int val)
{
netsnmp_variable_list varbind, *res;
memset(&varbind, 0, sizeof(netsnmp_variable_list));
varbind.type = ASN_INTEGER;
snmp_set_var_objid(&varbind, name, name_len);
varbind.val.string = varbind.buf;
if (val != ANY_INTEGER_INDEX) {
varbind.val_len = sizeof(long);
*varbind.val.integer = val;
res = register_index(&varbind, ALLOCATE_THIS_INDEX, main_session);
} else {
res = register_index(&varbind, ALLOCATE_ANY_INDEX, main_session);
}
if (res == NULL) {
return -1;
} else {
int rv = *(res->val.integer);
free(res);
return rv;
}
}
开发者ID:duniansampa,项目名称:SigLog,代码行数:25,代码来源:agent_index.cpp
示例4: build_new_oid
void
build_new_oid(netsnmp_handler_registration *reginfo,
netsnmp_table_request_info *tblreq_info,
netsnmp_index *row, netsnmp_request_info *current)
{
oid coloid[MAX_OID_LEN];
if (!tblreq_info || !reginfo || !row || !current)
return;
memcpy(coloid, reginfo->rootoid, reginfo->rootoid_len * sizeof(oid));
/** table.entry */
coloid[reginfo->rootoid_len] = 1;
/** table.entry.column */
coloid[reginfo->rootoid_len + 1] = tblreq_info->colnum;
/** table.entry.column.index */
memcpy(&coloid[reginfo->rootoid_len + 2], row->oids,
row->len * sizeof(oid));
snmp_set_var_objid(current->requestvb, coloid,
reginfo->rootoid_len + 2 + row->len);
}
开发者ID:a5216652166,项目名称:rcp100,代码行数:25,代码来源:table_array.c
示例5: _expObject_buildList
netsnmp_variable_list *
_expObject_buildList( oid *root, size_t root_len, size_t prefix_len,
netsnmp_variable_list *template_list )
{
netsnmp_variable_list *query_list = NULL;
netsnmp_variable_list *vp1, *vp2 = NULL;
oid name[ MAX_OID_LEN ];
int i;
if ( prefix_len ) {
/*
* For wildcarded objects, build a list of all relevant
* instances, using the template_list to provide the
* necessary instance suffixes.
*/
memset( name, 0, sizeof(name));
memcpy( name, root, root_len*sizeof(oid));
for ( vp1 = template_list; vp1; vp1=vp1->next_variable ) {
/*
* Append a new varbind to the list for this object ...
*/
if ( !query_list ) {
query_list = (netsnmp_variable_list*)
SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
vp2 = query_list;
} else {
vp2->next_variable = (netsnmp_variable_list*)
SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
vp2 = vp2->next_variable;
}
/*
* ... and set the OID using the template suffix
*/
for ( i=0; i <= vp1->name_length - prefix_len; i++)
name[ root_len+i ] = vp1->name[ prefix_len+i ];
snmp_set_var_objid( vp2, name, root_len+i );
}
} else {
/*
* Otherwise, just use the (single) OID provided.
*/
query_list = (netsnmp_variable_list*)
SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
snmp_set_var_objid( query_list, root, root_len );
}
return query_list;
}
开发者ID:RasmusKoldsoe,项目名称:performand.k70.2,代码行数:47,代码来源:expObject.c
示例6: memset
void AlarmTrapSender::send_trap(AlarmTableDef& alarm_table_def)
{
static const oid snmp_trap_oid[] = {1,3,6,1,6,3,1,1,4,1,0};
static const oid clear_oid[] = {1,3,6,1,2,1,118,0,3};
static const oid active_oid[] = {1,3,6,1,2,1,118,0,2};
static const oid model_ptr_oid[] = {1,3,6,1,2,1,118,1,2,2,1,13,0};
static const oid model_row_oid[] = {1,3,6,1,2,1,118,1,1,2,1,3,0,1,2};
static const oid resource_id_oid[] = {1,3,6,1,2,1,118,1,2,2,1,10,0};
static const oid zero_dot_zero[] = {0,0};
netsnmp_variable_list var_trap;
netsnmp_variable_list var_model_row;
netsnmp_variable_list var_resource_id;
memset(&var_trap, 0x00, sizeof(var_trap));
memset(&var_model_row, 0x00, sizeof(var_model_row));
memset(&var_resource_id, 0x00, sizeof(var_resource_id));
var_trap.next_variable = &var_model_row;
var_model_row.next_variable = &var_resource_id;
var_resource_id.next_variable = NULL;
snmp_set_var_objid(&var_trap, snmp_trap_oid, OID_LENGTH(snmp_trap_oid));
if (alarm_table_def.severity() == AlarmDef::CLEARED)
{
snmp_set_var_typed_value(&var_trap, ASN_OBJECT_ID, (u_char*) clear_oid, sizeof(clear_oid));
}
else
{
snmp_set_var_typed_value(&var_trap, ASN_OBJECT_ID, (u_char*) active_oid, sizeof(active_oid));
}
snmp_set_var_objid(&var_model_row, model_ptr_oid, OID_LENGTH(model_ptr_oid));
snmp_set_var_typed_value(&var_model_row, ASN_OBJECT_ID, (u_char*) model_row_oid, sizeof(model_row_oid));
var_model_row.val.objid[ALARMMODELTABLEROW_INDEX] = alarm_table_def.index();
var_model_row.val.objid[ALARMMODELTABLEROW_STATE] = alarm_table_def.state();
snmp_set_var_objid(&var_resource_id, resource_id_oid, OID_LENGTH(resource_id_oid));
snmp_set_var_typed_value(&var_resource_id, ASN_OBJECT_ID, (u_char*) zero_dot_zero, sizeof(zero_dot_zero));
send_v2trap(&var_trap);
snmp_reset_var_buffers(&var_trap);
}
开发者ID:AiprNick,项目名称:clearwater-snmp-handlers,代码行数:47,代码来源:alarm_trap_sender.cpp
示例7: unregister_string_index
int
unregister_string_index(oid * name, size_t name_len, char *cp)
{
netsnmp_variable_list varbind;
memset(&varbind, 0, sizeof(netsnmp_variable_list));
varbind.type = ASN_OCTET_STR;
snmp_set_var_objid(&varbind, name, name_len);
snmp_set_var_value(&varbind, (u_char *) cp, strlen(cp));
return (unregister_index(&varbind, FALSE, main_session));
}
开发者ID:duniansampa,项目名称:SigLog,代码行数:11,代码来源:agent_index.cpp
示例8: my_test_handler
int
my_test_handler(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests)
{
oid myoid1[] = { 1, 2, 3, 4, 5, 6 };
static u_long accesses = 0;
DEBUGMSGTL(("testhandler", "Got request:\n"));
/*
* loop through requests
*/
while (requests) {
netsnmp_variable_list *var = requests->requestvb;
DEBUGMSGTL(("testhandler", " oid:"));
DEBUGMSGOID(("testhandler", var->name, var->name_length));
DEBUGMSG(("testhandler", "\n"));
switch (reqinfo->mode) {
case MODE_GET:
if (netsnmp_oid_equals(var->name, var->name_length, myoid1, 6)
== 0) {
snmp_set_var_typed_value(var, ASN_INTEGER,
(u_char *) & accesses,
sizeof(accesses));
return SNMP_ERR_NOERROR;
}
break;
case MODE_GETNEXT:
if (snmp_oid_compare(var->name, var->name_length, myoid1, 6)
< 0) {
snmp_set_var_objid(var, myoid1, 6);
snmp_set_var_typed_value(var, ASN_INTEGER,
(u_char *) & accesses,
sizeof(accesses));
return SNMP_ERR_NOERROR;
}
break;
default:
netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_GENERR);
break;
}
requests = requests->next;
}
return SNMP_ERR_NOERROR;
}
开发者ID:ClausKlein,项目名称:net-snmp,代码行数:52,代码来源:testhandler.c
示例9: unregister_int_index
int
unregister_int_index(oid * name, size_t name_len, int val)
{
netsnmp_variable_list varbind;
memset(&varbind, 0, sizeof(netsnmp_variable_list));
varbind.type = ASN_INTEGER;
snmp_set_var_objid(&varbind, name, name_len);
varbind.val.string = varbind.buf;
varbind.val_len = sizeof(long);
*varbind.val.integer = val;
return (unregister_index(&varbind, FALSE, main_session));
}
开发者ID:duniansampa,项目名称:SigLog,代码行数:13,代码来源:agent_index.cpp
示例10: unregister_oid_index
int
unregister_oid_index(oid * name, size_t name_len,
oid * value, size_t value_len)
{
netsnmp_variable_list varbind;
memset(&varbind, 0, sizeof(netsnmp_variable_list));
varbind.type = ASN_OBJECT_ID;
snmp_set_var_objid(&varbind, name, name_len);
snmp_set_var_value(&varbind, (u_char *) value,
value_len * sizeof(oid));
return (unregister_index(&varbind, FALSE, main_session));
}
开发者ID:duniansampa,项目名称:SigLog,代码行数:13,代码来源:agent_index.cpp
示例11: register_oid_index
struct variable_list *
register_oid_index( oid *name, size_t name_len,
oid *value, size_t value_len )
{
struct variable_list varbind;
memset( &varbind, 0, sizeof(struct variable_list));
varbind.type = ASN_OBJECT_ID;
snmp_set_var_objid( &varbind, name, name_len );
if ( value != ANY_OID_INDEX ) {
snmp_set_var_value( &varbind, (u_char*)value, value_len*sizeof(oid) );
return( register_index( &varbind, ALLOCATE_THIS_INDEX, main_session ));
}
else
return( register_index( &varbind, ALLOCATE_ANY_INDEX, main_session ));
}
开发者ID:EPiCS,项目名称:reconos_v2,代码行数:16,代码来源:agent_registry.c
示例12: snmp_clone_var
/*
* Clone an SNMP variable data structure.
* Sets pointers to structure private storage, or
* allocates larger object identifiers and values as needed.
*
* Caller must make list association for cloned variable.
*
* Returns 0 if successful.
*/
int
snmp_clone_var(netsnmp_variable_list * var, netsnmp_variable_list * newvar)
{
if (!newvar || !var)
return 1;
memmove(newvar, var, sizeof(netsnmp_variable_list));
newvar->next_variable = 0;
newvar->name = 0;
newvar->val.string = 0;
newvar->data = 0;
newvar->dataFreeHook = 0;
newvar->index = 0;
/*
* Clone the object identifier and the value.
* Allocate memory iff original will not fit into local storage.
*/
if (snmp_set_var_objid(newvar, var->name, var->name_length))
return 1;
/*
* need a pointer and a length to copy a string value.
*/
if (var->val.string && var->val_len) {
if (var->val.string != &var->buf[0]) {
if (var->val_len <= sizeof(var->buf))
newvar->val.string = newvar->buf;
else {
newvar->val.string = (u_char *) malloc(var->val_len);
if (!newvar->val.string)
return 1;
}
memmove(newvar->val.string, var->val.string, var->val_len);
} else { /* fix the pointer to new local store */
newvar->val.string = newvar->buf;
}
} else {
newvar->val.string = 0;
newvar->val_len = 0;
}
return 0;
}
开发者ID:AllardJ,项目名称:Tomato,代码行数:53,代码来源:snmp_client.c
示例13: _mteEvent_fire_set
int _mteEvent_fire_set (struct mteEvent *entry, /* The event to fire */
struct mteTrigger *trigger, /* Trigger that fired */
oid * suffix, size_t sfx_len) /* Matching instance */
{
netsnmp_variable_list var;
oid set_oid[MAX_OID_LEN];
size_t set_len;
/*
* Set the basic assignment OID...
*/
memset (set_oid, 0, sizeof (set_oid));
memcpy (set_oid, entry->mteSetOID, entry->mteSetOID_len * sizeof (oid));
set_len = entry->mteSetOID_len;
/*
* ... if the trigger value is wildcarded (sfx_len > 0),
* *and* the SET event entry is wildcarded,
* then add the supplied instance suffix...
*/
if (sfx_len && entry->flags & MTE_SET_FLAG_OBJWILD)
{
memcpy (&set_oid[set_len], suffix, sfx_len * sizeof (oid));
set_len += sfx_len;
}
/*
* ... finally build the assignment varbind,
* and pass it to be acted on.
*
* XXX: Need to handle (remote) targets and non-default contexts
*/
memset (&var, 0, sizeof (var));
snmp_set_var_objid (&var, set_oid, set_len);
snmp_set_var_typed_integer (&var, ASN_INTEGER, entry->mteSetValue);
if (entry->session)
return netsnmp_query_set (&var, entry->session);
else
return netsnmp_query_set (&var, trigger->session);
/* XXX - Need to check result */
}
开发者ID:274914765,项目名称:C,代码行数:44,代码来源:mteEvent.c
示例14: oa_bind_var
static netsnmp_variable_list *
oa_bind_var(netsnmp_variable_list * prev,
void *value, int type, size_t sz_val, oid * oid, size_t sz_oid)
{
netsnmp_variable_list *var;
var = (netsnmp_variable_list *) malloc(sizeof(netsnmp_variable_list));
if (!var) {
ag_trace("FATAL: cannot malloc in oa_bind_var\n");
exit(-1); /* Sorry :( */
}
memset(var, 0, sizeof(netsnmp_variable_list));
var->next_variable = prev;
snmp_set_var_objid(var, oid, sz_oid);
snmp_set_var_value(var, (u_char *) value, sz_val);
var->type = type;
return var;
}
开发者ID:RasmusKoldsoe,项目名称:performand.k70.2,代码行数:19,代码来源:event.c
示例15: register_string_index
char *
register_string_index( oid *name, size_t name_len, char *cp )
{
struct variable_list varbind, *res;
memset( &varbind, 0, sizeof(struct variable_list));
varbind.type = ASN_OCTET_STR;
snmp_set_var_objid( &varbind, name, name_len );
if ( cp != ANY_STRING_INDEX ) {
snmp_set_var_value( &varbind, (u_char *)cp, strlen(cp) );
res = register_index( &varbind, ALLOCATE_THIS_INDEX, main_session );
}
else
res = register_index( &varbind, ALLOCATE_ANY_INDEX, main_session );
if ( res == NULL )
return NULL;
else
return (char *)res->val.string;
}
开发者ID:EPiCS,项目名称:reconos_v2,代码行数:20,代码来源:agent_registry.c
示例16: send_enterprise_trap_vars
void send_enterprise_trap_vars (int trap,
int specific,
oid *enterprise, int enterprise_length,
struct variable_list *vars)
{
struct variable_list uptime_var, snmptrap_var, enterprise_var;
struct variable_list *v2_vars, *last_var=NULL;
struct snmp_pdu *template_pdu, *pdu;
struct timeval now;
long uptime;
struct sockaddr_in *pduIp;
struct trap_sink *sink;
oid temp_oid[MAX_OID_LEN];
/*
* Initialise SNMPv2 required variables
*/
gettimeofday(&now, NULL);
uptime = calculate_time_diff(&now, &starttime);
memset (&uptime_var, 0, sizeof (struct variable_list));
snmp_set_var_objid( &uptime_var, sysuptime_oid, OID_LENGTH(sysuptime_oid));
snmp_set_var_value( &uptime_var, (u_char *)&uptime, sizeof(uptime) );
uptime_var.type = ASN_TIMETICKS;
uptime_var.next_variable = &snmptrap_var;
memset (&snmptrap_var, 0, sizeof (struct variable_list));
snmp_set_var_objid( &snmptrap_var, snmptrap_oid, OID_LENGTH(snmptrap_oid));
/* value set later .... */
snmptrap_var.type = ASN_OBJECT_ID;
if ( vars )
snmptrap_var.next_variable = vars;
else
snmptrap_var.next_variable = &enterprise_var;
/* find end of provided varbind list,
ready to append the enterprise info if necessary */
last_var = vars;
while ( last_var && last_var->next_variable )
last_var = last_var->next_variable;
memset (&enterprise_var, 0, sizeof (struct variable_list));
snmp_set_var_objid( &enterprise_var,
snmptrapenterprise_oid, OID_LENGTH(snmptrapenterprise_oid));
snmp_set_var_value( &enterprise_var, (u_char *)enterprise, enterprise_length*sizeof(oid));
enterprise_var.type = ASN_OBJECT_ID;
enterprise_var.next_variable = NULL;
v2_vars = &uptime_var;
/*
* Create a template PDU, ready for sending
*/
template_pdu = snmp_pdu_create( SNMP_MSG_TRAP );
if ( template_pdu == NULL ) {
/* Free memory if value stored dynamically */
snmp_set_var_value( &enterprise_var, NULL, 0);
return;
}
template_pdu->trap_type = trap;
template_pdu->specific_type = specific;
if ( snmp_clone_mem((void **)&template_pdu->enterprise,
enterprise, enterprise_length*sizeof(oid))) {
snmp_free_pdu( template_pdu );
snmp_set_var_value( &enterprise_var, NULL, 0);
return;
}
template_pdu->enterprise_length = enterprise_length;
template_pdu->flags |= UCD_MSG_FLAG_FORCE_PDU_COPY;
pduIp = (struct sockaddr_in *)&template_pdu->agent_addr;
pduIp->sin_family = AF_INET;
pduIp->sin_len = sizeof(*pduIp);
pduIp->sin_addr.s_addr = get_myaddr();
template_pdu->time = uptime;
/*
* Now use the parameters to determine
* which v2 variables are needed,
* and what values they should take.
*/
switch ( trap ) {
case -1: /*
* SNMPv2 only
* Check to see whether the variables provided
* are sufficient for SNMPv2 notifications
*/
if (vars && snmp_oid_compare(vars->name, vars->name_length,
sysuptime_oid, OID_LENGTH(sysuptime_oid)) == 0 )
v2_vars = vars;
else
if (vars && snmp_oid_compare(vars->name, vars->name_length,
snmptrap_oid, OID_LENGTH(snmptrap_oid)) == 0 )
uptime_var.next_variable = vars;
else {
/* Hmmm... we don't seem to have a value - oops! */
snmptrap_var.next_variable = vars;
}
last_var = NULL; /* Don't need enterprise info */
break;
/* "Standard" SNMPv1 traps */
//.........这里部分代码省略.........
开发者ID:LucidOne,项目名称:Rovio,代码行数:101,代码来源:agent_trap.c
示例17: netsnmp_table_iterator_helper_handler
//.........这里部分代码省略.........
iinfo);
}
}
break;
case MODE_GET_STASH:
/* collect data for each column for every row */
build_oid_noalloc(myname, MAX_OID_LEN, &myname_len,
coloid, coloid_len, index_search);
reqinfo->mode = MODE_GET;
if (reqtmp)
ldata =
netsnmp_get_list_node(reqtmp->parent_data,
TABLE_ITERATOR_NAME);
if (!ldata) {
netsnmp_request_add_list_data(reqtmp,
netsnmp_create_data_list
(TABLE_ITERATOR_NAME,
callback_data_context,
NULL));
} else {
/* may have changed */
ldata->data = callback_data_context;
}
table_info->indexes = index_search;
for(i = table_reg_info->min_column;
i <= (int)table_reg_info->max_column; i++) {
myname[reginfo->rootoid_len + 1] = i;
table_info->colnum = i;
vb = reqtmp->requestvb =
SNMP_MALLOC_TYPEDEF(netsnmp_variable_list);
vb->type = ASN_NULL;
snmp_set_var_objid(vb, myname, myname_len);
netsnmp_call_next_handler(handler, reginfo,
reqinfo, reqtmp);
reqtmp->requestvb = NULL;
reqtmp->processed = 0;
if (vb->type != ASN_NULL) { /* XXX, not all */
netsnmp_oid_stash_add_data(cinfo, myname,
myname_len, vb);
} else {
snmp_free_var(vb);
}
}
reqinfo->mode = MODE_GET_STASH;
break;
case MODE_GETNEXT:
/* looking for "next" matches */
if (netsnmp_check_getnext_reply
(request, coloid, coloid_len, index_search,
&ti_info->results)) {
netsnmp_iterator_remember(request,
ti_info->results->name,
ti_info->results->name_length,
callback_data_context,
callback_loop_context, iinfo);
/*
* If we've been told that the rows are sorted,
* then the first valid one we find
* must be the right one.
*/
if (iinfo->flags & NETSNMP_ITERATOR_FLAG_SORTED)
request_count--;
开发者ID:grantc,项目名称:ingres-snmp-agent,代码行数:66,代码来源:table_iterator.c
示例18: netsnmp_stash_cache_helper
/** @internal Implements the stash_cache handler */
int
netsnmp_stash_cache_helper(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests)
{
netsnmp_cache *cache;
netsnmp_stash_cache_info *cinfo;
netsnmp_oid_stash_node *cnode;
netsnmp_variable_list *cdata;
netsnmp_request_info *request;
DEBUGMSGTL(("helper:stash_cache", "Got request\n"));
cache = netsnmp_cache_reqinfo_extract( reqinfo, reginfo->handlerName );
if (!cache) {
DEBUGMSGTL(("helper:stash_cache", "No cache structure\n"));
return SNMP_ERR_GENERR;
}
cinfo = (netsnmp_stash_cache_info *) cache->magic;
switch (reqinfo->mode) {
case MODE_GET:
DEBUGMSGTL(("helper:stash_cache", "Processing GET request\n"));
for(request = requests; request; request = request->next) {
cdata = (netsnmp_variable_list*)
netsnmp_oid_stash_get_data(cinfo->cache,
requests->requestvb->name,
requests->requestvb->name_length);
if (cdata && cdata->val.string && cdata->val_len) {
DEBUGMSGTL(("helper:stash_cache", "Found cached GET varbind\n"));
DEBUGMSGOID(("helper:stash_cache", cdata->name, cdata->name_length));
DEBUGMSG(("helper:stash_cache", "\n"));
snmp_set_var_typed_value(request->requestvb, cdata->type,
cdata->val.string, cdata->val_len);
}
}
break;
case MODE_GETNEXT:
DEBUGMSGTL(("helper:stash_cache", "Processing GETNEXT request\n"));
for(request = requests; request; request = request->next) {
cnode =
netsnmp_oid_stash_getnext_node(cinfo->cache,
requests->requestvb->name,
requests->requestvb->name_length);
if (cnode && cnode->thedata) {
cdata = (netsnmp_variable_list*)cnode->thedata;
if (cdata->val.string && cdata->name && cdata->name_length) {
DEBUGMSGTL(("helper:stash_cache", "Found cached GETNEXT varbind\n"));
DEBUGMSGOID(("helper:stash_cache", cdata->name, cdata->name_length));
DEBUGMSG(("helper:stash_cache", "\n"));
snmp_set_var_typed_value(request->requestvb, cdata->type,
cdata->val.string, cdata->val_len);
snmp_set_var_objid(request->requestvb, cdata->name,
cdata->name_length);
}
}
}
break;
default:
cinfo->cache_valid = 0;
return netsnmp_call_next_handler(handler, reginfo, reqinfo,
requests);
}
return SNMP_ERR_NOERROR;
}
开发者ID:ClausKlein,项目名称:net-snmp,代码行数:71,代码来源:stash_cache.c
示例19: netsnmp_table_iterator_helper_handler
//.........这里部分代码省略.........
&callback_data_context,
index_search, iinfo);
}
}
break;
case MODE_GET:
case MODE_SET_RESERVE1:
/*
* loop through all data till exact results are found
*/
while (index_search) {
build_oid_noalloc(myname, MAX_OID_LEN, &myname_len,
coloid, coloid_len, index_search);
if (snmp_oid_compare(myname, myname_len,
requests->requestvb->name,
requests->requestvb->name_length) ==
0) {
/*
* found the exact match, so we're done
*/
if (iinfo->make_data_context && !callback_data_context) {
callback_data_context =
(iinfo->
make_data_context) (callback_loop_context,
iinfo);
}
callback_data_keep = callback_data_context;
callback_data_context = NULL;
results = snmp_clone_varbind(index_search);
snmp_set_var_objid(results, myname, myname_len);
goto got_results;
} else {
/*
* free not-needed data context
*/
if (callback_data_context && iinfo->free_data_context) {
(iinfo->free_data_context) (callback_data_context,
iinfo);
callback_data_context = NULL;
}
}
/*
* get the next node in the data chain
*/
index_search =
(iinfo->get_next_data_point) (&callback_loop_context,
&callback_data_context,
index_search, iinfo);
}
break;
default:
/*
* the rest of the set states have been dealt with already
*/
goto got_results;
}
/*
* XXX: free index_search?
开发者ID:AllardJ,项目名称:Tomato,代码行数:67,代码来源:table_iterator.c
示例20: netsnmp_old_api_helper
/** implements the old_api handler */
int
netsnmp_old_api_helper(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests)
{
#if MIB_CLIENTS_ARE_EVIL
oid save[MAX_OID_LEN];
size_t savelen = 0;
#endif
struct variable compat_var, *cvp = &compat_var;
int exact = 1;
int status;
struct variable *vp;
netsnmp_old_api_cache *cacheptr;
netsnmp_agent_session *oldasp = NULL;
u_char *access = NULL;
WriteMethod *write_method = NULL;
size_t len;
size_t tmp_len;
oid tmp_name[MAX_OID_LEN];
vp = (struct variable *) handler->myvoid;
/*
* create old variable structure with right information
*/
memcpy(cvp->name, reginfo->rootoid,
reginfo->rootoid_len * sizeof(oid));
cvp->namelen = reginfo->rootoid_len;
cvp->type = vp->type;
cvp->magic = vp->magic;
cvp->acl = vp->acl;
cvp->findVar = vp->findVar;
switch (reqinfo->mode) {
case MODE_GETNEXT:
case MODE_GETBULK:
exact = 0;
}
for (; requests; requests = requests->next) {
#if MIB_CLIENTS_ARE_EVIL
savelen = requests->requestvb->name_length;
memcpy(save, requests->requestvb->name, savelen * sizeof(oid));
#endif
switch (reqinfo->mode) {
case MODE_GET:
case MODE_GETNEXT:
#ifndef NETSNMP_NO_WRITE_SUPPORT
case MODE_SET_RESERVE1:
#endif /* !NETSNMP_NO_WRITE_SUPPORT */
/*
* Actually call the old mib-module function
*/
if (vp && vp->findVar) {
memcpy(tmp_name, requests->requestvb->name,
requests->requestvb->name_length*sizeof(oid));
tmp_len = requests->requestvb->name_length;
access = (*(vp->findVar)) (cvp, tmp_name, &tmp_len,
exact, &len, &write_method);
snmp_set_var_objid( requests->requestvb, tmp_name, tmp_len );
}
else
access = NULL;
#ifdef WWW_FIX
if (IS_DELEGATED(cvp->type)) {
add_method = (AddVarMethod *) statP;
requests->delayed = 1;
have_delegated = 1;
continue; /* WWW: This may not get to the right place */
}
#endif
/*
* WWW: end range checking
*/
if (access) {
/*
* result returned
*/
#ifndef NETSNMP_NO_WRITE_SUPPORT
if (reqinfo->mode != MODE_SET_RESERVE1)
#endif /* !NETSNMP_NO_WRITE_SUPPORT */
snmp_set_var_typed_value(requests->requestvb,
cvp->type, access, len);
} else {
/*
* no result returned
*/
#if MIB_CLIENTS_ARE_EVIL
if (access == NULL) {
if (netsnmp_oid_equals(requests->requestvb->name,
requests->requestvb->name_length,
//.........这里部分代码省略.........
开发者ID:ColdStart,项目名称:SNMPD,代码行数:101,代码来源:old_api.c
注:本文中的snmp_set_var_objid函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论