12 #define MIN(a,b) (a<b?a:b)
16 #include "snmp_impl.h"
20 #include "snmp_client.h"
23 #include "snmp_vars.h"
24 #include "snmp_oidlist.h"
28 #ifndef CURRENT_MIB_VERSION
29 #define CURRENT_MIB_VERSION "-- v 1.14 1998/04/03 kostas@nlanr.net"
32 /* Base value for sysDescr */
33 #ifndef SQUID_SYS_DESCR
34 #define SQUID_SYS_DESCR "Squid Internet Object Cache"
38 * We start from the SQUIDMIB as the root of the subtree
40 * we are under : iso.org.dod.internet.experimental.nsfnet.squid
44 #define SQUIDMIB 1, 3, 6, 1, 3, 25, 17 /* length is 7 */
45 #define LEN_SQUIDMIB 7
47 #define SYSMIB 1, 3, 6, 1, 2, 1, 1 /* basic system vars */
50 /* basic groups under .squid */
52 #define SQ_SYS SQUIDMIB, 1 /* length is 8 */
53 #define LEN_SQ_SYS LEN_SQUIDMIB+1
54 #define SQ_CONF SQUIDMIB, 2
55 #define LEN_SQ_CONF LEN_SQUIDMIB+1
56 #define SQ_PRF SQUIDMIB, 3
57 #define LEN_SQ_PRF LEN_SQUIDMIB+1
58 #define SQ_NET SQUIDMIB, 4
59 #define LEN_SQ_NET LEN_SQUIDMIB+1
60 #define SQ_MESH SQUIDMIB, 5
61 #define LEN_SQ_MESH LEN_SQUIDMIB+1
62 #define SQ_ACC SQUIDMIB, 6
63 #define LEN_SQ_ACC LEN_SQUIDMIB+1
65 enum { /* basic system mib info group */
77 /* cacheSystem group */
88 /* cacheConfig group */
112 /* cacheMesh group */
121 enum { /* cachePeerTable */
139 enum { /* cacheClientTable */
145 MESH_CTBL_HTHITBYTES
,
149 MESH_CTBL_ICPHITBYTES
,
153 /* cacheNetwork group */
230 PERF_SYS_CURUNUSED_FD
,
231 PERF_SYS_CURRESERVED_FD
,
236 PERF_PROTOSTAT_START
,
238 PERF_PROTOSTAT_MEDIAN
,
243 PERF_PROTOSTAT_AGGR_START
,
244 PERF_PROTOSTAT_AGGR_HTTP_REQ
,
245 PERF_PROTOSTAT_AGGR_HTTP_HITS
,
246 PERF_PROTOSTAT_AGGR_HTTP_ERRORS
,
247 PERF_PROTOSTAT_AGGR_HTTP_KBYTES_IN
,
248 PERF_PROTOSTAT_AGGR_HTTP_KBYTES_OUT
,
249 PERF_PROTOSTAT_AGGR_ICP_S
,
250 PERF_PROTOSTAT_AGGR_ICP_R
,
251 PERF_PROTOSTAT_AGGR_ICP_SKB
,
252 PERF_PROTOSTAT_AGGR_ICP_RKB
,
253 PERF_PROTOSTAT_AGGR_REQ
,
254 PERF_PROTOSTAT_AGGR_ERRORS
,
255 PERF_PROTOSTAT_AGGR_KBYTES_IN
,
256 PERF_PROTOSTAT_AGGR_KBYTES_OUT
,
257 PERF_PROTOSTAT_AGGR_CURSWAP
,
258 PERF_PROTOSTAT_AGGR_END
264 PERF_MEDIAN_HTTP_ALL
,
265 PERF_MEDIAN_HTTP_MISS
,
267 PERF_MEDIAN_HTTP_HIT
,
268 PERF_MEDIAN_ICP_QUERY
,
269 PERF_MEDIAN_ICP_REPLY
,
294 /* First, we have a huge array of MIBs this agent knows about */
296 struct MIBListEntry
{
297 oid Name
[9]; /* Change as appropriate */
300 oid_GetNextFn
*GetNextFn
;
303 variable_list
*snmp_basicFn(variable_list
*, snint
*);
304 variable_list
*snmp_meshPtblFn(variable_list
*, snint
*);
305 variable_list
*snmp_meshCtblFn(variable_list
*, snint
*);
306 variable_list
*snmp_confFn(variable_list
*, snint
*);
307 variable_list
*snmp_sysFn(variable_list
*, snint
*);
308 variable_list
*snmp_prfSysFn(variable_list
*, snint
*);
309 variable_list
*snmp_prfProtoFn(variable_list
*, snint
*);
310 variable_list
*snmp_prfPeerFn(variable_list
*, snint
*);
311 variable_list
*snmp_netdbFn(variable_list
*, snint
*);
312 variable_list
*snmp_dnsFn(variable_list
*, snint
*);
313 variable_list
*snmp_ipcacheFn(variable_list
*, snint
*);
314 variable_list
*snmp_fqdncacheFn(variable_list
*, snint
*);
316 extern int snmpInitAgentAuth();
317 extern void snmpAgentParse(void *);
318 extern int snmpDefaultAuth();
319 extern int get_median_svc(int, int);
320 extern void snmpAgentParseDone(int, void *);
321 extern int meshCtblGetRowFn(oid
*, oid
*);
322 extern int netdbGetRowFn(oid
*, oid
*);
323 extern int fqdn_getMax();
324 extern int ipcache_getMax();
325 extern struct snmp_pdu
*snmpAgentResponse(struct snmp_pdu
*PDU
);
326 extern void snmpAclCheckStart(void *);
327 extern struct snmp_session
*Session
;
328 extern oid_ParseFn
*genericGetNextFn(oid
* Src
, snint SrcLen
, oid
** Dest
, snint
* DestLen
,
329 oid
* MIBRoot
, int MIBRootLen
, oid_GetRowFn
* getRowFn
, int tblen
, oid
* MIBTail
,
330 oid_ParseFn
* mygetFn
, int MIBTailLen
, int MIB_ACTION_INDEX
);
332 extern int oidcmp(oid
* A
, snint ALen
, oid
* B
, snint BLen
);
333 extern int oidncmp(oid
* A
, snint ALen
, oid
* B
, snint BLen
, snint CompLen
);
334 extern oid
*oiddup(oid
* A
, snint ALen
);
337 /* group handler definition */
339 extern oid_ParseFn
*basicGetFn(oid
*, snint
);
340 extern oid_ParseFn
*basicGetNextFn(oid
*, snint
, oid
**, snint
*);
341 extern oid_ParseFn
*sysGetFn(oid
*, snint
);
342 extern oid_ParseFn
*sysGetNextFn(oid
*, snint
, oid
**, snint
*);
343 extern oid_ParseFn
*sysFdGetFn(oid
*, snint
);
344 extern oid_ParseFn
*sysFdGetNextFn(oid
*, snint
, oid
**, snint
*);
345 extern oid_ParseFn
*sysConnGetFn(oid
*, snint
);
346 extern oid_ParseFn
*sysConnGetNextFn(oid
*, snint
, oid
**, snint
*);
347 extern oid_ParseFn
*confGetFn(oid
*, snint
);
348 extern oid_ParseFn
*confGetNextFn(oid
*, snint
, oid
**, snint
*);
349 extern oid_ParseFn
*confStGetNextFn(oid
*, snint
, oid
**, snint
*);
350 extern oid_ParseFn
*prfSysGetFn(oid
*, snint
);
351 extern oid_ParseFn
*prfSysGetFn(oid
*, snint
);
352 extern oid_ParseFn
*prfSysGetNextFn(oid
*, snint
, oid
**, snint
*);
353 extern oid_ParseFn
*prfProtoGetFn(oid
*, snint
);
354 extern oid_ParseFn
*prfProtoGetNextFn(oid
*, snint
, oid
**, snint
*);
355 extern oid_ParseFn
*netdbGetFn(oid
*, snint
);
356 extern oid_ParseFn
*netdbGetNextFn(oid
*, snint
, oid
**, snint
*);
357 extern oid_ParseFn
*dnsGetFn(oid
*, snint
);
358 extern oid_ParseFn
*dnsGetNextFn(oid
*, snint
, oid
**, snint
*);
359 extern oid_ParseFn
*meshGetFn(oid
*, snint
);
360 extern oid_ParseFn
*meshPtblGetNextFn(oid
*, snint
, oid
**, snint
*);
361 extern int meshPtblGetRowFn(oid
*, oid
*);
362 extern int sysConnGetRowFn(oid
*, oid
*);
363 extern int meshCtblGetRowFn(oid
*, oid
*);
364 extern int netdbGetRowFn(oid
*, oid
*);
365 oid_ParseFn
*meshCtblGetNextFn(oid
*, snint
, oid
**, snint
*);
367 extern int fqdn_getMax();
368 extern int ipcache_getMax();
369 extern int fd_getMax();
370 extern struct in_addr
*gen_getMax();