NetSNMP-agent
view release on metacpan or search on metacpan
SV *perlcallback;
PREINIT:
oid myoid[MAX_OID_LEN];
size_t myoid_len = MAX_OID_LEN;
handler_cb_data *cb_data;
int gotit=1;
CODE:
if (!snmp_parse_oid(regoid, myoid, &myoid_len)) {
if (!read_objid(regoid, myoid, &myoid_len)) {
snmp_log(LOG_ERR, "couldn't parse %s (reg name: %s)\n",
regoid, name);
RETVAL = NULL;
gotit = 0;
}
}
if (gotit) {
cb_data = (handler_cb_data *) malloc(sizeof(handler_cb_data));
RETVAL = netsnmp_create_handler_registration(name, handler_wrapper,
myoid, myoid_len,
HANDLER_CAN_RWRITE);
cb_data->perl_cb = newSVsv(perlcallback);
RETVAL->handler->myvoid = cb_data;
}
OUTPUT:
RETVAL
void
nsahr_DESTROY(reginfo)
netsnmp_handler_registration *reginfo
CODE:
netsnmp_handler_registration_free(reginfo);
int
nsahr_register(me)
SV *me;
PREINIT:
netsnmp_handler_registration *reginfo;
CODE:
{
reginfo = (netsnmp_handler_registration *) SvIV(SvRV(me));
RETVAL = netsnmp_register_handler(reginfo);
if (!RETVAL) {
/* the agent now has a "reference" to this reg pointer */
SvREFCNT_inc(me);
}
}
OUTPUT:
RETVAL
MODULE = NetSNMP::agent PACKAGE = NetSNMP::agent::netsnmp_handler_registrationPtr PREFIX = nsahr_
void
nsahr_getRootOID(me)
SV *me;
PREINIT:
int i;
netsnmp_oid *o;
netsnmp_handler_registration *reginfo;
SV *arg, *rarg;
PPCODE:
{
dSP;
PUSHMARK(SP);
reginfo = (netsnmp_handler_registration *) SvIV(SvRV(me));
o = SNMP_MALLOC_TYPEDEF(netsnmp_oid);
o->name = o->namebuf;
o->len = reginfo->rootoid_len;
memcpy(o->name, reginfo->rootoid,
reginfo->rootoid_len * sizeof(oid));
rarg = newSViv((int) 0);
arg = newSVrv(rarg, "netsnmp_oidPtr");
sv_setiv(arg, (IV) o);
XPUSHs(sv_2mortal(rarg));
PUTBACK;
i = perl_call_pv("NetSNMP::OID::newwithptr", G_SCALAR);
SPAGAIN;
if (i != 1) {
snmp_log(LOG_ERR, "unhandled OID error.\n");
/* ack XXX */
}
ST(0) = POPs;
XSRETURN(1);
}
MODULE = NetSNMP::agent PACKAGE = NetSNMP::agent::netsnmp_request_infoPtr PREFIX = nari_
void
getOID(me)
SV *me;
PREINIT:
int i;
netsnmp_oid *o;
netsnmp_request_info *request;
SV *arg, *rarg;
PPCODE:
{
dSP;
PUSHMARK(SP);
request = (netsnmp_request_info *) SvIV(SvRV(me));
o = SNMP_MALLOC_TYPEDEF(netsnmp_oid);
o->name = o->namebuf;
o->len = request->requestvb->name_length;
memcpy(o->name, request->requestvb->name,
request->requestvb->name_length * sizeof(oid));
rarg = newSViv((int) 0);
arg = newSVrv(rarg, "netsnmp_oidPtr");
sv_setiv(arg, (IV) o);
XPUSHs(sv_2mortal(rarg));
PUTBACK;
i = perl_call_pv("NetSNMP::OID::newwithptr", G_SCALAR);
SPAGAIN;
if (i != 1) {
snmp_log(LOG_ERR, "unhandled OID error.\n");
/* ack XXX */
}
ST(0) = POPs;
XSRETURN(1);
}
netsnmp_oid *
nari_getOIDptr(me)
SV *me;
PREINIT:
netsnmp_request_info *request;
CODE:
request = (netsnmp_request_info *) SvIV(SvRV(me));
RETVAL = SNMP_MALLOC_TYPEDEF(netsnmp_oid);
RETVAL->name = RETVAL->namebuf;
RETVAL->len = request->requestvb->name_length;
memcpy(RETVAL->name, request->requestvb->name,
request->requestvb->name_length * sizeof(oid));
OUTPUT:
RETVAL
int
nari_getType(me)
SV *me;
PREINIT:
netsnmp_request_info *request;
CODE:
request = (netsnmp_request_info *) SvIV(SvRV(me));
RETVAL = request->requestvb->type ;
OUTPUT:
RETVAL
void
nari_setType(me, newvalue)
SV *me;
int newvalue;
PREINIT:
( run in 2.440 seconds using v1.01-cache-2.11-cpan-71847e10f99 )