NAME
netsnmplibrary - The Net-SNMP library
MMoodduulleess groupaassnn11 ppaarrssiinngg aanndd ddaattaattyyppee mmaanniippuullaattiioonn rroouuttiinneess.. groupAA ggeenneerriicc ccaallllbbaacckk mmeecchhaanniissmmgroupggeenneerriicc lliinnkkeedd-lliisstt ddaattaa hhaannddlliinngg wwiitthh aa ssttrriinngg aass aa kkeeyy..
groupssttoorraaggee ssppaaccee ffoorr ddeeffaauullttssThe purpose of the default storage is three-fold:.
groupmmiibb ppaarrssiinngg aanndd ddaattaattyyppee mmaanniippuullaattiioonn rroouuttiinneess.. groupSSttoorree aanndd rreettrriieevvee ddaattaa rreeffeerreenncceedd bbyy aann OOIIDD.. This is essentially a way of storing data associated with a given OID. groupppaarrssiinngg vvaarriioouuss ccoonnffiigguurraattiioonn ffiilleess aatt rruunn ttiimmee The readconfig related functions are a fairly extensible system of parsing various configuration files at the run time. groupggeenneerriicc lliibbrraarryy bbaasseedd aallaarrmm ttiimmeerrss ffoorr vvaarriioouuss ppaarrttss ooff aann aapppplliiccaattiioonn groupvvaarriioouuss PPDDUU pprroocceessssiinngg rroouuttiinneessgroupggeenneerriicc llooggggiinngg ffoorr nneett-ssnnmmpp
groupMMeemmoorryy UUttiilliittyy RRoouuttiinneess DDaattaa SSttrruuccttuurreess struct ssnnmmppiinntteerrnnaallsseessssiioonn struct sseessssiioonnlliisstt DDeeffiinneess#define MMIINN(a, b) (((a) < (b)) ? (a) : (b))
#define MMIIBBCCLLIIEENNTTSSAARREEEEVVIILL 1
#define iinniittaaggeennttccaallllbbaacckkttrraannssppoorrtt()
#define SSNNMMPPNNEEEEDDRREEQQUUEESSTTLLIISSTT
#define ttiimmeerrccmmpp(tvp, uvp, cmp)
#define ttiimmeerrcclleeaarr(tvp) (tvp)->tvsec = (tvp)->tvusec = 0
#define MMAAXXPPAACCKKEETTLLEENNGGTTHH (0x7fffffff)
#define NNEETTSSNNMMPPSSTTRREEAAMMQQUUEEUUEELLEENN 5
#define BBSSDD4422
#define NNFFDDBBIITTSS (sizeof(fdmask) * NBBY) /* bits per mask */
#define FFDDSSEETT(n, p) ((p)->fdsbits[(n)/NFDBITS] |= (1 << ((n) %
NFDBITS)))#define FFDDCCLLRR(n, p) ((p)->fdsbits[(n)/NFDBITS] &= ~(1 << ((n) %
NFDBITS)))#define FFDDIISSSSEETT(n, p) ((p)->fdsbits[(n)/NFDBITS] & (1 << ((n) %
NFDBITS)))#define FFDDZZEERROO(p) memset((p), 0, sizeof(*(p)))
#define DDEEFFAAUULLTTCCOOMMMMUUNNIITTYY 'public'
#define DDEEFFAAUULLTTRREETTRRIIEESS 5
#define DDEEFFAAUULLTTTTIIMMEEOOUUTT 1000000L
#define DDEEFFAAUULLTTRREEMMPPOORRTT SNMPPORT
#define DDEEFFAAUULLTTEENNTTEERRPPRRIISSEE defaultenterprise
#define DDEEFFAAUULLTTTTIIMMEE 0
#define MMAAXXIIMMUUMMPPAACCKKEETTSSIIZZEE 0x7fffffff
#define DDEEBBUUGGPPRRIINNTTPPDDUUTTYYPPEE(token, type)
#define EERRRROORRSSTTAATTLLEENNGGTTHH 11
TTyyppeeddeeffss typedef long ffddmmaasskk FFuunnccttiioonnss int iinniittaaggeenntt (const char *app) Initialize the agent. void sshhuuttddoowwnnaaggeenntt (void) int ssnnmmppbbuuiilldd (uchar **pkt, sizet *pktlen, sizet *offset, nneettssnnmmppsseessssiioonn *pss, nneettssnnmmppppdduu *pdu) int ssnnmmppggeetteerrrrnnoo (void) void ssnnmmppssyynncchhrreesseett (nneettssnnmmppsseessssiioonn *notused) void ssnnmmppssyynncchhsseettuupp (nneettssnnmmppsseessssiioonn *notused) const char * ssttrreerrrroorr (int err) long ssnnmmppggeettnneexxttrreeqqiidd (void) long ssnnmmppggeettnneexxttmmssggiidd (void) long ssnnmmppggeettnneexxttsseessssiidd (void) long ssnnmmppggeettnneexxttttrraannssiidd (void) void ssnnmmppppeerrrroorr (const char *progstring) void ssnnmmppsseettddeettaaiill (const char *detailstring) const char * ssnnmmppaappiieerrrrssttrriinngg (int snmperrnumber) void ssnnmmppeerrrroorr (nneettssnnmmppsseessssiioonn *psess, int *perrno, int *psnmperrno, char **pstr) void ssnnmmppsseesssseerrrroorr (void *sessp, int *perrno, int *psnmperrno, char **pstr) void nneettssnnmmppsseessssllooggeerrrroorr (int priority, const char *progstring, nneettssnnmmppsseessssiioonn *ss) void ssnnmmppsseessssppeerrrroorr (const char *progstring, nneettssnnmmppsseessssiioonn *ss) void ssnnmmppsseessssiinniitt (nneettssnnmmppsseessssiioonn *session) void iinniittssnnmmppeennuummss (void) void iinniittssnnmmpp (const char *type) Calls the functions to do config file loading and mib module parsing in the correct order. void ssnnmmppssttoorree (const char *type) void ssnnmmppsshhuuttddoowwnn (const char *type) Shuts down the application, saving any needed persistent storage, and appropriate clean up. nneettssnnmmppsseessssiioonn * ssnnmmppooppeenn (nneettssnnmmppsseessssiioonn *session) nneettssnnmmppsseessssiioonn * ssnnmmppooppeenneexx (nneettssnnmmppsseessssiioonn *session, int(*fpreparse)(nneettssnnmmppsseessssiioonn *, netsnmptransport *, void *, int), int(*fparse)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, uchar *, sizet), int(*fpostparse)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, int), int(*fbuild)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, uchar *, sizet *), int(*frbuild)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, uchar **, sizet *, sizet *), int(*fcheck)(uchar *, sizet)) int ssnnmmppvv33eennggiinneeIIDDpprroobbee (struct sessionlist *slp, nneettssnnmmppsseessssiioonn *insession) nneettssnnmmppsseessssiioonn * ssnnmmppaadddd (nneettssnnmmppsseessssiioonn *insession, netsnmptransport *transport, int(*fpreparse)(nneettssnnmmppsseessssiioonn *, netsnmptransport *, void *, int), int(*fpostparse)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, int)) nneettssnnmmppsseessssiioonn * ssnnmmppaaddddffuullll (nneettssnnmmppsseessssiioonn *insession, netsnmptransport *transport, int(*fpreparse)(nneettssnnmmppsseessssiioonn *, netsnmptransport *, void *, int), int(*fparse)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, uchar *, sizet), int(*fpostparse)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, int), int(*fbuild)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, uchar *, sizet *), int(*frbuild)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, uchar **, sizet *, sizet *), int(*fcheck)(uchar *, sizet), nneettssnnmmppppdduu *(*fcreatepdu)(netsnmptransport *, void *, sizet)) void * ssnnmmppsseessssaaddddeexx (nneettssnnmmppsseessssiioonn *insession, netsnmptransport *transport, int(*fpreparse)(nneettssnnmmppsseessssiioonn *, netsnmptransport *, void *, int), int(*fparse)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, uchar *, sizet), int(*fpostparse)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, int), int(*fbuild)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, uchar *, sizet *), int(*frbuild)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, uchar **, sizet *, sizet *), int(*fcheck)(uchar *, sizet), nneettssnnmmppppdduu *(*fcreatepdu)(netsnmptransport *, void *, sizet)) void * ssnnmmppsseessssaadddd (nneettssnnmmppsseessssiioonn *insession, netsnmptransport *transport, int(*fpreparse)(nneettssnnmmppsseessssiioonn *, netsnmptransport *, void *, int), int(*fpostparse)(nneettssnnmmppsseessssiioonn *, nneettssnnmmppppdduu *, int)) void * ssnnmmppsseessssooppeenn (nneettssnnmmppsseessssiioonn *pss) int ccrreeaatteeuusseerrffrroommsseessssiioonn (nneettssnnmmppsseessssiioonn *session) int ssnnmmppsseesssscclloossee (void *sessp) int ssnnmmppcclloossee (nneettssnnmmppsseessssiioonn *session) int ssnnmmppcclloosseesseessssiioonnss (void) int ssnnmmppvv33ppaacckkeettbbuuiilldd (nneettssnnmmppsseessssiioonn *session, nneettssnnmmppppdduu *pdu, uchar *packet, sizet *outlength, uchar *pdudata, sizet pdudatalen) uchar * ssnnmmppppdduubbuuiilldd (nneettssnnmmppppdduu *pdu, uchar *cp, sizet *outlength) int ssnnmmppvv33ppaarrssee (nneettssnnmmppppdduu *pdu, uchar *data, sizet *length, uchar **afterheader, nneettssnnmmppsseessssiioonn *sess) int ssnnmmppvv33mmaakkeerreeppoorrtt (nneettssnnmmppppdduu *pdu, int error) int ssnnmmppvv33ggeettrreeppoorrttttyyppee (nneettssnnmmppppdduu *pdu) int ssnnmmppppdduuppaarrssee (nneettssnnmmppppdduu *pdu, uchar *data, sizet *length) uchar * ssnnmmppvv33ssccooppeeddPPDDUUppaarrssee (nneettssnnmmppppdduu *pdu, uchar *cp, sizet *length) int ssnnmmppsseenndd (nneettssnnmmppsseessssiioonn *session, nneettssnnmmppppdduu *pdu) int ssnnmmppsseesssssseenndd (void *sessp, nneettssnnmmppppdduu *pdu) int ssnnmmppaassyynnccsseenndd (nneettssnnmmppsseessssiioonn *session, nneettssnnmmppppdduu *pdu, snmpcallback callback, void *cbdata) int ssnnmmppsseessssaassyynnccsseenndd (void *sessp, nneettssnnmmppppdduu *pdu, snmpcallback callback, void *cbdata) void ssnnmmppffrreeeevvaarr (nneettssnnmmppvvaarriiaabblleelliisstt *var) void ssnnmmppffrreeeevvaarrbbiinndd (nneettssnnmmppvvaarriiaabblleelliisstt *var) void ssnnmmppffrreeeeppdduu (nneettssnnmmppppdduu *pdu) nneettssnnmmppppdduu * ssnnmmppccrreeaatteesseessssppdduu (netsnmptransport *transport, void *opaque, sizet olength) void ssnnmmpprreeaadd (fdset *fdset) int sseessssrreeaadd (void *sessp, fdset *fdset) int ssnnmmppsseessssrreeaadd (void *sessp, fdset *fdset) int ssnnmmppsseelleeccttiinnffoo (int *numfds, fdset *fdset, struct timeval *timeout, int *block) int ssnnmmppsseesssssseelleeccttiinnffoo (void *sessp, int *numfds, fdset *fdset, struct timeval *timeout, int *block) void ssnnmmppttiimmeeoouutt (void) void ssnnmmppsseessssttiimmeeoouutt (void *sessp) int ssnnmmppooiiddnnccoommppaarree (const oid *inname1, sizet len1, const oid *inname2, sizet len2, sizet maxlen) int ssnnmmppooiiddccoommppaarree (const oid *inname1, sizet len1, const oid *inname2, sizet len2) lexicographical compare two object identifiers. int ssnnmmppooiiddttrreeeeccoommppaarree (const oid *inname1, sizet len1, const oid *inname2, sizet len2) Compares 2 OIDs to determine if they are equal up until the shortest length. int nneettssnnmmppooiiddeeqquuaallss (const oid *inname1, sizet len1, const oid *inname2, sizet len2) Compares 2 OIDs to determine if they are exactly equal. int nneettssnnmmppooiiddiissssuubbttrreeee (const oid *inname1, sizet len1, const oid *inname2, sizet len2) Identical to netsnmpoidequals, except only the length up to len1 is compared. int nneettssnnmmppooiiddffiinnddpprreeffiixx (const oid *inname1, sizet len1, const oid *inname2, sizet len2) Given two OIDs, determine the common prefix to them both. nneettssnnmmppvvaarriiaabblleelliisstt * ssnnmmppppdduuaaddddvvaarriiaabbllee (nneettssnnmmppppdduu *pdu, const oid *name, sizet namelength, uchar type, const uchar *value, sizet len) nneettssnnmmppvvaarriiaabblleelliisstt * ssnnmmppvvaarrlliissttaaddddvvaarriiaabbllee (nneettssnnmmppvvaarriiaabblleelliisstt **varlist, const oid *name, sizet namelength, uchar type, const uchar *value, sizet len) int ssnnmmppaaddddvvaarr (nneettssnnmmppppdduu *pdu, const oid *name, sizet namelength, char type, const char *value) void * ssnnmmppsseessssppooiinntteerr (nneettssnnmmppsseessssiioonn *session) nneettssnnmmppsseessssiioonn * ssnnmmppsseesssssseessssiioonn (void *sessp) netsnmptransport * ssnnmmppsseessssttrraannssppoorrtt (void *sessp) void ssnnmmppsseessssttrraannssppoorrttsseett (void *sp, netsnmptransport *t) oid * ssnnmmppdduupplliiccaatteeoobbjjiidd (const oid *objToCopy, sizet objToCopyLen) uint ssnnmmppiinnccrreemmeennttssttaattiissttiicc (int which) uint ssnnmmppiinnccrreemmeennttssttaattiissttiiccbbyy (int which, int count) uint ssnnmmppggeettssttaattiissttiicc (int which) void ssnnmmppiinniittssttaattiissttiiccss (void) VVaarriiaabblleess netsnmpsubtree * ssuubbttrreeeess long lloonnggrreettuurrnn uchar rreettuurrnnbbuuff [258] timeval ssttaarrttttiimmeeint ccaallllbbaacckkmmaasstteerrnnuumm = -1
oid nnuullllOOiidd [] = { 0, 0 } int nnuullllOOiiddLLeenn = sizeof(nullOid) sessionlist * SSeessssiioonnss = NULL int ssnnmmppeerrrrnnoo = 0 long lloonnggrreettuurrnn uchar rreettuurrnnbbuuff [] oid nnuullllOOiidd [] int nnuullllOOiiddLLeenn DDeeffiinnee DDooccuummeennttaattiioonn##ddeeffiinnee DDEEBBUUGGPPRRIINNTTPPDDUUTTYYPPEE((ttookkeenn,, ttyyppee))
VVaalluuee::.nf switch(type) { case SNMPMSGGET:DEBUGDUMPSECTION(token, 'PDU-GET'); break; case
SNMPMSGGETNEXT: DEBUGDUMPSECTION(token, 'PDU-GETNEXT');
break; case SNMPMSGRESPONSE: DEBUGDUMPSECTION(token,'PDU-RESPONSE'); break; case SNMPMSGSET:
DEBUGDUMPSECTION(token, 'PDU-SET'); break; case
SNMPMSGGETBULK: DEBUGDUMPSECTION(token, 'PDU-GETBULK');
break; case SNMPMSGINFORM: DEBUGDUMPSECTION(token,'PDU-INFORM'); break; case SNMPMSGTRAP2:
DEBUGDUMPSECTION(token, 'PDU-TRAP2'); break; case
SNMPMSGREPORT: DEBUGDUMPSECTION(token, 'PDU-REPORT');
break; default: DEBUGDUMPSECTION(token, 'PDU-UNKNOWN');
break; } Definition at line 375 of file snmpapi.c.##ddeeffiinnee ttiimmeerrccmmpp((ttvvpp,, uuvvpp,, ccmmpp))
VVaalluuee::.nf /* CSTYLED */ ((tvp)->tvsec cmp (uvp)->tvsec ||
((tvp)->tvsec == (uvp)->tvsec && /* CSTYLED */
(tvp)->tvusec cmp (uvp)->tvusec))
Definition at line 145 of file snmpapi.c. FFuunnccttiioonn DDooccuummeennttaattiioonn iinntt iinniittaaggeenntt ((ccoonnsstt cchhaarr ** aapppp)) Initialize the agent. Calls into initagentreadconfig to set tha app's configuration file in the appropriate default storage space, NETSNMPDSLIBAPPTYPE. Need to call initagent before calling initsnmp. PPaarraammeetteerrss:: app the configuration file to be read in, gets stored in default storage RReettuurrnnss::Returns non-zero on failure and zero on success.
SSeeee aallssoo:: iinniittssnnmmpp Definition at line 269 of file snmpvars.c. References netsnmpdssetboolean(), netsnmpinithelpers(), and snmplog(). vvooiidd iinniittssnnmmpp ((ccoonnsstt cchhaarr ** ttyyppee)) Calls the functions to do config file loading and mib module parsing in the correct order. PPaarraammeetteerrss:: type label for the config file 'type' RReettuurrnnss:: void SSeeee aallssoo:: iinniittaaggeenntt Definition at line 779 of file snmpapi.c. References initmib(). iinntt nneettssnnmmppooiiddeeqquuaallss ((ccoonnsstt ooiidd ** iinnnnaammee11,, ssiizzeett lleenn11,, ccoonnsstt ooiidd ** iinnnnaammee22,, ssiizzeett lleenn22)) Compares 2 OIDs to determine if they are exactly equal. This should be faster than doing a snmpoidcompare for different length OIDs, since the length is checked first and if != returns immediately. Might be very slighly faster if lengths are ==. PPaarraammeetteerrss:: inname1 A pointer to the first oid. len1 length of the first OID (in segments, not bytes) inname2 A pointer to the second oid. len2 length of the second OID (in segments, not bytes) RReettuurrnnss:: 0 if they are equal, 1 if they are not. Definition at line 6213 of file snmpapi.c. Referenced by netsnmpcachefindbyoid(), netsnmpoldapihelper(), and unregistermibcontext(). iinntt nneettssnnmmppooiiddffiinnddpprreeffiixx ((ccoonnsstt ooiidd ** iinnnnaammee11,, ssiizzeett lleenn11,, ccoonnsstt ooiidd ** iinnnnaammee22,, ssiizzeett lleenn22)) Given two OIDs, determine the common prefix to them both. PPaarraammeetteerrss:: inname1 A pointer to the first oid. len1 Length of the first oid. inname2 A pointer to the second oid. len2 Length of the second oid. RReettuurrnnss:: length of largest common index of commonality. 1 = first, 0 if none* or -1 on error.
Definition at line 6269 of file snmpapi.c. References SNMPMIN. Referenced by netsnmpaddvarbindtocache(). iinntt nneettssnnmmppooiiddiissssuubbttrreeee ((ccoonnsstt ooiidd ** iinnnnaammee11,, ssiizzeett lleenn11,, ccoonnsstt ooiidd ** iinnnnaammee22,, ssiizzeett lleenn22)) Identical to netsnmpoidequals, except only the length up to len1 is compared. Functionally, this determines if inname2 is equal or a subtree of inname1 PPaarraammeetteerrss:: inname1 A pointer to the first oid. len1 length of the first OID (in segments, not bytes) inname2 A pointer to the second oid. len2 length of the second OID (in segments, not bytes) RReettuurrnnss:: 0 if one is a common prefix of the other. Definition at line 6249 of file snmpapi.c. iinntt ssnnmmppooiiddccoommppaarree ((ccoonnsstt ooiidd ** iinnnnaammee11,, ssiizzeett lleenn11,, ccoonnsstt ooiidd ** iinnnnaammee22,, ssiizzeett lleenn22)) lexicographical compare two object identifiers. Caution: this method is called often by command responder applications (ie, agent). RReettuurrnnss::-1 if name1 < name2, 0 if name1 = name2, 1 if name1 > name2
Definition at line 6145 of file snmpapi.c. Referenced by checkgetnextresults(), netsnmpcheckgetnextreply(), netsnmpinsertiteratorcontext(), netsnmpinserttablerow(), netsnmprowmergehelperhandler(), netsnmptabledataaddrow(), netsnmptabledatagetfromoid(), netsnmptabledatahelperhandler(), netsnmptableiteratorhelperhandler(), snmpoidtreecompare(), and tablehelperhandler(). iinntt ssnnmmppooiiddttrreeeeccoommppaarree ((ccoonnsstt ooiidd ** iinnnnaammee11,, ssiizzeett lleenn11,, ccoonnsstt ooiidd ** iinnnnaammee22,, ssiizzeett lleenn22)) Compares 2 OIDs to determine if they are equal up until the shortest length. PPaarraammeetteerrss:: inname1 A pointer to the first oid. len1 length of the first OID (in segments, not bytes) inname2 A pointer to the second oid. len2 length of the second OID (in segments, not bytes) RReettuurrnnss::0 if they are equal, 1 if inname1 is > inname2, or -1 if <.
Definition at line 6194 of file snmpapi.c. References snmpoidcompare(). vvooiidd ssnnmmppsshhuuttddoowwnn ((ccoonnsstt cchhaarr ** ttyyppee)) Shuts down the application, saving any needed persistent storage, and appropriate clean up. PPaarraammeetteerrss:: type Label for the config file 'type' used RReettuurrnnss:: void Definition at line 847 of file snmpapi.c. References shutdownmib(), snmpalarmunregisterall(), and snmpcallcallbacks().net-snmp 24 Jan 2005 The Net-SNMP library(3)