From: kostas <> Date: Wed, 25 Mar 1998 16:21:39 +0000 (+0000) Subject: - renovated mib and added descriptions and comments X-Git-Tag: SQUID_3_0_PRE1~3745 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81d0c8563453edb7d9dabf1c18ffa52f8737f18a;p=thirdparty%2Fsquid.git - renovated mib and added descriptions and comments - added hit and byte counters to client_db , for cacheClientTable - cacheClientTable, netdbTable, cachePeerTable, cacheConnTable and fqdnCacheTable are now indexed by ip address. hash_lookup was enhanced to allow for subsequent hash_next's similar to hash_first-hash_next, to speed up getnext's in tables which refer to hash-table structures. - added generic (well, sorf of) table indexing functionality - added makefile dependencies for snmplib and cache_snmp.h - WaisHost, WaisPort, Timeouts removed - FdTable split into FdTable and ConnTable. FdTable simplified - PeerTable and PeerStat merged and put into new cacheMesh group - cacheClientTable added for client statistics and accounting (cacheMesh 2) - cacheSec and cacheAccounting groups removed - fixed acl bug when communities not defined - acl config now survives bad configuration (public is defined "implicitly") --- diff --git a/ChangeLog b/ChangeLog index f78738ca59..c09c77de5a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ + - SNMP changes: + 1. renovated mib and added descriptions and comments + 2. added hit and byte counters to client_db , for cacheClientTable + 3. cacheClientTable, netdbTable, cachePeerTable, cacheConnTable + now indexed by ip address. hash_lookup was enhanced + to allow for subsequent hash_next's similar to hash_first, + to speed up getnext's in tables which refer to hash-table + structures. + 4. added generic (well, sorf of) table indexing functionality + 5. added makefile dependencies for snmplib and cache_snmp.h + 6. WaisHost, WaisPort, Timeouts removed + 7. FdTable split into FdTable and ConnTable. FdTable simplified + 8. PeerTable and PeerStat merged and put into new cacheMesh group + 9. cacheClientTable added for client statistics and accounting + (cacheMesh 2) + 10. cacheSec and cacheAccounting groups removed + 11. fixed acl bug when communities not defined + 12. snmp_acl now survives bad configuration + Changes to squid-1.2.beta18 (Mar 23, 1998): - Added v1.1 'test_reachability' option. diff --git a/include/cache_snmp.h b/include/cache_snmp.h index c8b1b31a81..9c3fe8efe3 100644 --- a/include/cache_snmp.h +++ b/include/cache_snmp.h @@ -20,7 +20,7 @@ /* mib stuff here */ #ifndef CURRENT_MIB_VERSION -#define CURRENT_MIB_VERSION "v 1.12 1998/03/16 kostas@nlanr.net" +#define CURRENT_MIB_VERSION "-- v 1.13 1998/03/22 kostas@nlanr.net" #endif /* MIB definitions @@ -46,8 +46,8 @@ #define LEN_SQ_PRF LEN_SQUIDMIB+1 #define SQ_NET SQUIDMIB, 4 #define LEN_SQ_NET LEN_SQUIDMIB+1 -#define SQ_SEC SQUIDMIB, 5 -#define LEN_SQ_SEC LEN_SQUIDMIB+1 +#define SQ_MESH SQUIDMIB, 5 +#define LEN_SQ_MESH LEN_SQUIDMIB+1 #define SQ_ACC SQUIDMIB, 6 #define LEN_SQ_ACC LEN_SQUIDMIB+1 @@ -70,6 +70,7 @@ enum { SYS_START, SYSVMSIZ, SYSSTOR, + SYSCONNTBL, SYSFDTBL, SYS_END }; @@ -79,13 +80,11 @@ enum { enum { CONF_START, CONF_ADMIN, + CONF_VERSION, + CONF_VERSION_ID, CONF_UPTIME, - CONF_WAIS_RHOST, - CONF_WAIS_RPORT, - CONF_LOG_LVL, - CONF_PTBL, + CONF_LOG_FAC, CONF_STORAGE, - CONF_TIO, CONF_END }; @@ -100,31 +99,51 @@ enum { CONF_ST_END }; +/* cacheMesh group */ + enum { - CONF_TIO_START, - CONF_TIO_RD, - CONF_TIO_CON, - CONF_TIO_REQ, - CONF_TIO_END + MESH_START, + MESH_PTBL, + MESH_CTBL, + MESH_END }; -enum { - CONF_PTBL_START, - CONF_PTBL_ID, - CONF_PTBL_NAME, - CONF_PTBL_IP, - CONF_PTBL_HTTP, - CONF_PTBL_ICP, - CONF_PTBL_TYPE, - CONF_PTBL_STATE, - CONF_PTBL_END +enum { /* cachePeerTable */ + MESH_PTBL_START, + MESH_PTBL_NAME, + MESH_PTBL_IP, + MESH_PTBL_HTTP, + MESH_PTBL_ICP, + MESH_PTBL_TYPE, + MESH_PTBL_STATE, + MESH_PTBL_SENT, + MESH_PTBL_PACKED, + MESH_PTBL_FETCHES, + MESH_PTBL_RTT, + MESH_PTBL_IGN, + MESH_PTBL_KEEPAL_S, + MESH_PTBL_KEEPAL_R, + MESH_PTBL_END +}; + +enum { /* cacheClientTable */ + MESH_CTBL_START, + MESH_CTBL_ADDR, + MESH_CTBL_HTREQ, + MESH_CTBL_HTBYTES, + MESH_CTBL_HTHITS, + MESH_CTBL_HTHITBYTES, + MESH_CTBL_ICPREQ, + MESH_CTBL_ICPBYTES, + MESH_CTBL_ICPHITS, + MESH_CTBL_ICPHITBYTES, + MESH_CTBL_END }; /* cacheNetwork group */ enum { NETDB_START, - NETDB_ID, NETDB_NET, NETDB_PING_S, NETDB_PING_R, @@ -245,26 +264,21 @@ enum { enum { SYS_FD_START, SYS_FD_NUMBER, - SYS_FD_TYPE, - SYS_FD_TOUT, SYS_FD_NREAD, SYS_FD_NWRITE, - SYS_FD_ADDR, SYS_FD_NAME, SYS_FD_END }; enum { - PERF_PEERSTAT_START, - PERF_PEERSTAT_ID, - PERF_PEERSTAT_SENT, - PERF_PEERSTAT_PACKED, - PERF_PEERSTAT_FETCHES, - PERF_PEERSTAT_RTT, - PERF_PEERSTAT_IGN, - PERF_PEERSTAT_KEEPAL_S, - PERF_PEERSTAT_KEEPAL_R, - PERF_PEERSTAT_END + SYS_CONN_START, + SYS_CONN_FDNUM, + SYS_CONN_READ, + SYS_CONN_WRITE, + SYS_CONN_ADDR, + SYS_CONN_NAME, + SYS_CONN_PORT, + SYS_CONN_END }; /* First, we have a huge array of MIBs this agent knows about */ @@ -277,7 +291,8 @@ struct MIBListEntry { }; variable_list *snmp_basicFn(variable_list *, snint *); -variable_list *snmp_confPtblFn(variable_list *, snint *); +variable_list *snmp_meshPtblFn(variable_list *, snint *); +variable_list *snmp_meshCtblFn(variable_list *, snint *); variable_list *snmp_confFn(variable_list *, snint *); variable_list *snmp_sysFn(variable_list *, snint *); variable_list *snmp_prfSysFn(variable_list *, snint *); diff --git a/snmplib/parse.c b/snmplib/parse.c index 70ea36a564..b39b32b09e 100644 --- a/snmplib/parse.c +++ b/snmplib/parse.c @@ -1102,7 +1102,7 @@ read_mib(char *filename) } mbuf[0]='\0'; - while ( (p=fgets(mbuf, 256, fp)) && strncmp(&mbuf[3], CURRENT_MIB_VERSION, + while ( (p=fgets(mbuf, 256, fp)) && strncmp(mbuf, CURRENT_MIB_VERSION, strlen(CURRENT_MIB_VERSION))); if (!p) { snmplib_debug(0, "Bad MIB version or tag missing, install original!\n"); diff --git a/src/Makefile.in b/src/Makefile.in index 20a209e033..585e7818ce 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,7 +1,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.135 1998/03/25 05:29:50 wessels Exp $ +# $Id: Makefile.in,v 1.136 1998/03/25 09:21:42 kostas Exp $ # # Uncomment and customize the following to suit your needs: # @@ -163,6 +163,8 @@ all: squid.conf $(PROGS) $(UTILS) $(SUID_UTILS) $(CGIPROGS) $(OBJS): $(top_srcdir)/include/version.h +$(SNMP_OBJS): $(top_srcdir)/snmplib/libsnmp.a $(top_srcdir)/include/cache_snmp.h + squid: $(OBJS) $(CC) -o $@ $(LDFLAGS) $(OBJS) $(SQUID_LIBS) diff --git a/src/cache_cf.cc b/src/cache_cf.cc index 23a53c52c9..db044696e6 100644 --- a/src/cache_cf.cc +++ b/src/cache_cf.cc @@ -1,6 +1,6 @@ /* - * $Id: cache_cf.cc,v 1.262 1998/03/24 17:41:36 wessels Exp $ + * $Id: cache_cf.cc,v 1.263 1998/03/25 09:21:43 kostas Exp $ * * DEBUG: section 3 Configuration File Parsing * AUTHOR: Harvest Derived @@ -443,8 +443,15 @@ dump_acl_access(StoreEntry * entry, const char *name, acl_access * head) static void parse_snmp_access(communityEntry ** head) { - char *t; + char *t=NULL; communityEntry *cp; +/* This is tricky: we need to define the communities here, assuming that + communities and the MIB have already been defined */ + + if (!snmpInitConfig()) { + debug(15,0)("parse_snmp_access: Access lists NOT defined.\n"); + return; + } t = strtok(NULL, w_space); for (cp = *head; cp; cp = cp->next) @@ -452,7 +459,7 @@ parse_snmp_access(communityEntry ** head) aclParseAccessLine(&cp->acls); return; } - debug(15, 0) ("parse_snmp_access: You need to define community %s first!\n", t); + debug(15, 0) ("parse_snmp_access: Unknown community %s!\n", t); } static void diff --git a/src/client_db.cc b/src/client_db.cc index 2dd37ef95f..9f46b73b65 100644 --- a/src/client_db.cc +++ b/src/client_db.cc @@ -1,6 +1,6 @@ /* - * $Id: client_db.cc,v 1.25 1998/03/24 17:29:43 wessels Exp $ + * $Id: client_db.cc,v 1.26 1998/03/25 09:21:43 kostas Exp $ * * DEBUG: section 0 Client Database * AUTHOR: Duane Wessels @@ -58,7 +58,7 @@ clientdbInit(void) } void -clientdbUpdate(struct in_addr addr, log_type log_type, protocol_t p) +clientdbUpdate(struct in_addr addr, log_type log_type, protocol_t p, size_t size) { char *key; ClientInfo *c; @@ -72,11 +72,28 @@ clientdbUpdate(struct in_addr addr, log_type log_type, protocol_t p) debug_trap("clientdbUpdate: Failed to add entry"); if (p == PROTO_HTTP) { c->Http.n_requests++; + kb_incr(&(c->Http.kbytes_out), size); c->Http.result_hist[log_type]++; } else if (p == PROTO_ICP) { c->Icp.n_requests++; + kb_incr(&(c->Icp.kbytes_out), size); c->Icp.result_hist[log_type]++; } + switch (log_type) { + case LOG_TCP_HIT: + case LOG_TCP_REFRESH_HIT: + case LOG_TCP_REFRESH_FAIL_HIT: + case LOG_TCP_IMS_HIT: + case LOG_TCP_NEGATIVE_HIT: + case LOG_TCP_MEM_HIT: + case LOG_UDP_HIT: + if (p==PROTO_ICP) + kb_incr(&(c->Icp.hit_kbytes_out), size); + else + kb_incr(&(c->Http.hit_kbytes_out),size); + break; + default: + } } #define CUTOFF_SECONDS 3600 @@ -181,3 +198,137 @@ clientdbFreeMemory(void) hashFreeMemory(client_table); client_table = NULL; } + +#if SQUID_SNMP +int meshCtblGetRowFn(oid *New,oid *Oid) +{ + ClientInfo *c = NULL; + static char key[15]; + + if (!Oid[0]&&!Oid[1]&&!Oid[2]&&!Oid[3]) + c = (ClientInfo *)hash_first(client_table); + else { + snprintf(key,15,"%d.%d.%d.%d", Oid[0], Oid[1],Oid[2],Oid[3]); + c = (ClientInfo *) hash_lookup(client_table, key); + if (!c) return 0; + c= (ClientInfo *)hash_next(client_table); + } + if (!c) return 0; + addr2oid(c->addr, New); + return 1; +} + + +variable_list * +snmp_meshCtblFn(variable_list * Var, snint *ErrP) +{ + variable_list *Answer; + static char key[15]; + ClientInfo *c = NULL; + int aggr=0; +#if 0 + int cnt; +#endif + + Answer = snmp_var_new(Var->name, Var->name_length); + *ErrP = SNMP_ERR_NOERROR; + + snprintf(key,15,"%d.%d.%d.%d", Var->name[11], Var->name[12], + Var->name[13],Var->name[14]); + debug(49, 5) ("snmp_meshCtblFn: [%s] requested!\n", key); + c = (ClientInfo *) hash_lookup(client_table, key); +#if 0 + c=(ClientInfo *)hash_first(client_table); + cnt = Var->name[11]; + debug(49, 5) ("snmp_meshCtblFn: we want .x.%d\n", Var->name[10]); + while (--cnt) + if (!(c = (ClientInfo *) hash_next(client_table))); +#endif + if (c == NULL) { + debug(49,5)("snmp_meshCtblFn: not found.\n"); + *ErrP = SNMP_ERR_NOSUCHNAME; + snmp_var_free(Answer); + return (NULL); + } + switch (Var->name[10]) { + case MESH_CTBL_ADDR: + Answer->type = SMI_IPADDRESS; + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + *(Answer->val.integer) = (snint) c->addr.s_addr; + break; + case MESH_CTBL_HTBYTES: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = (snint) c->Http.kbytes_out.kb; + break; + case MESH_CTBL_HTREQ: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = (snint) c->Http.n_requests; + break; + case MESH_CTBL_HTHITS: + aggr= c->Http.result_hist[LOG_TCP_HIT] + + c->Http.result_hist[LOG_TCP_REFRESH_HIT] + + c->Http.result_hist[LOG_TCP_REFRESH_FAIL_HIT] + + c->Http.result_hist[LOG_TCP_REFRESH_FAIL_HIT] + + c->Http.result_hist[LOG_TCP_IMS_HIT] + + c->Http.result_hist[LOG_TCP_NEGATIVE_HIT] + + c->Http.result_hist[LOG_TCP_MEM_HIT] + + c->Http.result_hist[LOG_UDP_HIT]; + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = (snint) aggr; + break; + case MESH_CTBL_HTHITBYTES: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = (snint) c->Http.hit_kbytes_out.kb; + break; + case MESH_CTBL_ICPBYTES: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = (snint ) c->Icp.kbytes_out.kb; + break; + case MESH_CTBL_ICPREQ: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = (snint) c->Icp.n_requests; + break; + case MESH_CTBL_ICPHITS: + aggr= c->Icp.result_hist[LOG_TCP_HIT] + + c->Icp.result_hist[LOG_TCP_REFRESH_HIT] + + c->Icp.result_hist[LOG_TCP_REFRESH_FAIL_HIT] + + c->Icp.result_hist[LOG_TCP_REFRESH_FAIL_HIT] + + c->Icp.result_hist[LOG_TCP_IMS_HIT] + + c->Icp.result_hist[LOG_TCP_NEGATIVE_HIT] + + c->Icp.result_hist[LOG_TCP_MEM_HIT] + + c->Icp.result_hist[LOG_UDP_HIT]; + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = (snint) aggr; + break; + case MESH_CTBL_ICPHITBYTES: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = (snint) c->Icp.hit_kbytes_out.kb; + break; + + default: + *ErrP = SNMP_ERR_NOSUCHNAME; + snmp_var_free(Answer); + debug(49,5)("snmp_meshCtblFn: illegal column.\n"); + return (NULL); + } + return Answer; +} + +#endif diff --git a/src/client_side.cc b/src/client_side.cc index 2989169b07..91a3757de3 100644 --- a/src/client_side.cc +++ b/src/client_side.cc @@ -1,6 +1,6 @@ /* - * $Id: client_side.cc,v 1.233 1998/03/23 22:10:48 wessels Exp $ + * $Id: client_side.cc,v 1.234 1998/03/25 09:21:44 kostas Exp $ * * DEBUG: section 33 Client-side Routines * AUTHOR: Duane Wessels @@ -558,7 +558,7 @@ httpRequestFree(void *data) } accessLogLog(&http->al); clientUpdateCounters(http); - clientdbUpdate(conn->peer.sin_addr, http->log_type, PROTO_HTTP); + clientdbUpdate(conn->peer.sin_addr, http->log_type, PROTO_HTTP,http->out.size); } if (http->redirect_state == REDIRECT_PENDING) redirectUnregister(http->uri, http); diff --git a/src/icp_v2.cc b/src/icp_v2.cc index 55cf574204..3289386524 100644 --- a/src/icp_v2.cc +++ b/src/icp_v2.cc @@ -10,7 +10,7 @@ icpLogIcp(icpUdpData * queue) icp_common_t *header = (icp_common_t *) (void *) queue->msg; char *url = (char *) header + sizeof(icp_common_t); AccessLogEntry al; - clientdbUpdate(queue->address.sin_addr, queue->logcode, PROTO_ICP); + clientdbUpdate(queue->address.sin_addr, queue->logcode, PROTO_ICP, queue->len); if (!Config.onoff.log_udp) return; memset(&al, '\0', sizeof(AccessLogEntry)); @@ -202,7 +202,7 @@ icpHandleIcpV2(int fd, struct sockaddr_in from, char *buf, int len) * count this DENIED query in the clientdb, even though * we're not sending an ICP reply... */ - clientdbUpdate(from.sin_addr, LOG_UDP_DENIED, Config.Port.icp); + clientdbUpdate(from.sin_addr, LOG_UDP_DENIED, Config.Port.icp,0); } else { reply = icpCreateMessage(ICP_DENIED, 0, url, header.reqnum, 0); icpUdpSend(fd, &from, reply, LOG_UDP_DENIED, icp_request->protocol); diff --git a/src/icp_v3.cc b/src/icp_v3.cc index 1e39bc587b..4a8a97089d 100644 --- a/src/icp_v3.cc +++ b/src/icp_v3.cc @@ -46,7 +46,7 @@ icpHandleIcpV3(int fd, struct sockaddr_in from, char *buf, int len) * count this DENIED query in the clientdb, even though * we're not sending an ICP reply... */ - clientdbUpdate(from.sin_addr, LOG_UDP_DENIED, Config.Port.icp); + clientdbUpdate(from.sin_addr, LOG_UDP_DENIED, Config.Port.icp,0); } else { reply = icpCreateMessage(ICP_DENIED, 0, url, header.reqnum, 0); icpUdpSend(fd, &from, reply, LOG_UDP_DENIED, icp_request->protocol); diff --git a/src/mib.txt b/src/mib.txt index ef872481bb..da48ca4a98 100644 --- a/src/mib.txt +++ b/src/mib.txt @@ -1,6 +1,8 @@ -- File: SQUID.MIB -- Maintained by: kostas@nlanr.net -- +-- NOTE: This version (1.13) of the mib is supported as of squid1.2beta19. +-- SQUID-MIB DEFINITIONS ::= BEGIN IMPORTS @@ -13,14 +15,21 @@ SQUID-MIB DEFINITIONS ::= BEGIN -- Do NOT remove the following line --- v 1.12 1998/03/16 kostas@nlanr.net +-- v 1.13 1998/03/22 kostas@nlanr.net -- --- definitions included for standalone agent/managers --- - - squid OBJECT IDENTIFIER ::= { iso org(3) dod(6) internet(1) experimental(3) nsfnet(25) 17 } - +-- definition of squid mib subtree +-- NOTE: This should be left this way for compatibility with various tools + + squid OBJECT IDENTIFIER ::= { + iso + org(3) + dod(6) + internet(1) + experimental(3) + nsfnet(25) + 17 + } -- -- Major MIB groups @@ -30,8 +39,7 @@ SQUID-MIB DEFINITIONS ::= BEGIN cacheConfig OBJECT IDENTIFIER ::= { squid 2 } cachePerf OBJECT IDENTIFIER ::= { squid 3 } cacheNetwork OBJECT IDENTIFIER ::= { squid 4 } - cacheSecurity OBJECT IDENTIFIER ::= { squid 5 } - cacheAccounting OBJECT IDENTIFIER ::= { squid 6 } + cacheMesh OBJECT IDENTIFIER ::= { squid 5 } -- @@ -45,313 +53,517 @@ SQUID-MIB DEFINITIONS ::= BEGIN -- cacheSysVMsize OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory DESCRIPTION " Virtual Memory size in KB" - ::= { cacheSystem 1 } + ::= { cacheSystem 1 } cacheSysStorage OBJECT-TYPE - SYNTAX INTEGER (0..2147483647) + SYNTAX Integer32 ACCESS read-only STATUS mandatory DESCRIPTION - " Diskspace in MB" - ::= { cacheSystem 2 } + " Diskspace in KB" + ::= { cacheSystem 2 } -- fd table cacheFdTable OBJECT-TYPE - SYNTAX SEQUENCE OF cacheFdEntry + SYNTAX SEQUENCE OF CacheFdEntry ACCESS read-only - STATUS current + STATUS mandatory DESCRIPTION " This table contains an enumeration of registered filedescriptors , complete with info " - ::= { cacheSystem 3 } + ::= { cacheSystem 4 } cacheFdEntry OBJECT-TYPE SYNTAX CacheFdEntry MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION " An entry in cacheFdTable " INDEX { cacheFdNumber } - ::= { cacheFdTable 1 } + ::= { cacheFdTable 1 } CacheFdEntry ::= SEQUENCE { - cacheFdNumber INTEGER, - cacheFdType INTEGER, - cacheFdTout INTEGER, - cacheFdNread INTEGER, - cacheFdNwrite INTEGER, - cacheFdAddress IpAddress, + cacheFdNumber Integer32, + cacheFdNread Counter32, + cacheFdNwrite Counter32, cacheFdName DisplayString } cacheFdNumber OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only - STATUS current + STATUS mandatory + DESCRIPTION + " Filedescriptor number (in the mib context, + not really the system-level fdnum) " ::= { cacheFdEntry 1 } - cacheFdType OBJECT-TYPE - SYNTAX INTEGER + cacheFdNread OBJECT-TYPE + SYNTAX Counter32 ACCESS read-only - STATUS current + STATUS mandatory + DESCRIPTION + " Number of bytes read from this filedescriptor " ::= { cacheFdEntry 2 } - cacheFdTout OBJECT-TYPE - SYNTAX INTEGER + cacheFdNwrite OBJECT-TYPE + SYNTAX Counter32 ACCESS read-only - STATUS current + STATUS mandatory + DESCRIPTION + " Number of bytes written to this filedescriptor " ::= { cacheFdEntry 3 } - cacheFdNread OBJECT-TYPE - SYNTAX INTEGER + cacheFdName OBJECT-TYPE + SYNTAX DisplayString ACCESS read-only - STATUS current + STATUS mandatory + DESCRIPTION + " Name of filedescriptor, revealing type and purpose " ::= { cacheFdEntry 4 } - cacheFdNwrite OBJECT-TYPE - SYNTAX INTEGER +-- +-- cacheActiveConnTable : Table of active network connections +-- + + cacheActiveConnTable OBJECT-TYPE + SYNTAX SEQUENCE OF CacheActiveConnEntry ACCESS read-only - STATUS current - ::= { cacheFdEntry 5 } + STATUS mandatory + DESCRIPTION + " This table contains an enumeration of + registered filedescriptors , complete with info " + ::= { cacheSystem 3 } - cacheFdAddress OBJECT-TYPE - SYNTAX IpAddress + cacheActiveConnEntry OBJECT-TYPE + SYNTAX CacheActiveConnEntry + MAX-ACCESS not-accessible + STATUS mandatory + DESCRIPTION + " An entry in cacheActiveConnEntry " + INDEX { cacheActiveConnAddr, cacheActiveConnPort } + ::= { cacheActiveConnTable 1 } + + CacheActiveConnEntry ::= SEQUENCE { + cacheActiveConnNread Counter32, + cacheActiveConnNwrite Counter32, + cacheActiveConnAddr IpAddress, + cacheActiveConnName DisplayString, + cacheActiveConnType Integer32 + } + + cacheActiveConnNread OBJECT-TYPE + SYNTAX Counter32 ACCESS read-only - STATUS current - ::= { cacheFdEntry 6 } + STATUS mandatory + DESCRIPTION + " Number of bytes read from connection " + ::= { cacheActiveConnEntry 1 } - cacheFdName OBJECT-TYPE - SYNTAX DisplayString + cacheActiveConnNwrite OBJECT-TYPE + SYNTAX Counter32 ACCESS read-only - STATUS current - ::= { cacheFdEntry 7 } + STATUS mandatory + DESCRIPTION + " Number of bytes written to connection " + ::= { cacheActiveConnEntry 2 } + cacheActiveConnAddress OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Peer-end IP address " + ::= { cacheActiveConnEntry 3 } - cacheFdType OBJECT-TYPE - SYNTAX INTEGER { icp(1), http(2), ftp(3), - wais(4), gopher (5), Swap (6) } - MAX-ACCESS read-write - STATUS current - DESCRIPTION - " type of file descriptor " - ::= { cacheFdEntry 2 } + cacheActiveConnName OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Name assigned to connection by the cache, revealing + type / purpose " + ::= { cacheActiveConnEntry 4 } + cacheActiveConnPort OBJECT-TYPE + SYNTAX Integer32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Peer-end TCP/UDP port number " + ::= { cacheActiveConnEntry 5 } + -- -- config group -- -- Contains configuration information including peers etc. - +-- cacheAdmin OBJECT-TYPE - SYNTAX OCTET STRING + SYNTAX DisplayString ACCESS read-only STATUS mandatory DESCRIPTION - " Cache Administrator Contact address " - ::= { cacheConfig 1 } + " Cache Administrator Contact Name and E-Mail address " + ::= { cacheConfig 1 } + + cacheSoftware OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Cache Software Name " + ::= { cacheConfig 2 } + + cacheVersionId OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Cache Software Version " + ::= { cacheConfig 3 } cacheUptime OBJECT-TYPE - SYNTAX Counter32 + SYNTAX Timeticks ACCESS read-only STATUS mandatory DESCRIPTION - " Number of minutes since cache started " - ::= { cacheConfig 2 } + " Number of timeticks since cache started " + ::= { cacheConfig 4 } + +-- cacheStorageConfig group - cacheStorageConfig OBJECT IDENTIFIER ::= { cacheConfig 7 } + cacheStorageConfig OBJECT IDENTIFIER ::= { cacheConfig 6 } cacheMemMaxSize OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory DESCRIPTION " Cache Memory Maximum Size " - ::= { cacheStorageConfig 1 } + ::= { cacheStorageConfig 1 } cacheMemHighWM OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory DESCRIPTION " Cache Memory High Water Mark " - ::= { cacheStorageConfig 2 } + ::= { cacheStorageConfig 2 } cacheMemLowWM OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory DESCRIPTION " Cache Memory High Water Mark " - ::= { cacheStorageConfig 3 } + ::= { cacheStorageConfig 3 } cacheSwapMaxSize OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory DESCRIPTION " Cache Swap Maximum Size " - ::= { cacheStorageConfig 4 } + ::= { cacheStorageConfig 4 } cacheSwapHighWM OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory DESCRIPTION " Cache Swap High Water Mark " - ::= { cacheStorageConfig 5 } + ::= { cacheStorageConfig 5 } cacheSwapLowWM OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory DESCRIPTION " Cache Swap High Water Mark " - ::= { cacheStorageConfig 6 } - - cacheWaisRelayHost OBJECT-TYPE - SYNTAX DisplayString - ACCESS read-only - STATUS mandatory - DESCRIPTION - " Cache WAIS relay host address " - ::= { cacheConfig 3 } - - cacheWaisRelayPort OBJECT-TYPE - SYNTAX Integer - ACCESS read-only - STATUS mandatory - DESCRIPTION - " Cache WAIS relay host Port " - ::= { cacheConfig 4 } + ::= { cacheStorageConfig 6 } - cacheTimeoutValues OBJECT IDENTIFIER ::= { cacheConfig 8 } +-- end of cacheStorageConfig group - cacheReadTimeout OBJECT-TYPE - SYNTAX Integer - ACCESS read-only - STATUS mandatory - DESCRIPTION - " Read Timeout Value " - ::= { cacheTimeoutValues 1 } - - cacheConnectionTimeout OBJECT-TYPE - SYNTAX Integer - ACCESS read-only - STATUS mandatory - DESCRIPTION - " Connection Timeout Value " - ::= { cacheTimeoutValues 2 } - - cacheRequestTimeout OBJECT-TYPE - SYNTAX Integer - ACCESS read-only - STATUS mandatory - DESCRIPTION - " Request Timeout Value " - ::= { cacheTimeoutValues 3 } - - - - cacheLoggingLevel OBJECT-TYPE + cacheLoggingFacility OBJECT-TYPE SYNTAX DisplayString ACCESS read-write STATUS mandatory DESCRIPTION - " Logging level " - ::= { cacheConfig 5 } + " Logging Facility. An informational string + indicating logging info like debug level, + local/syslog/remote logging etc " + ::= { cacheConfig 5 } - -- - -- config group : table of peers - -- +-- +-- cacheMesh group : peers , clients and children +-- cachePeerTable OBJECT-TYPE - SYNTAX SEQUENCE OF cachePeerEntry + SYNTAX SEQUENCE OF CachePeerEntry ACCESS read-only - STATUS current + STATUS mandatory DESCRIPTION " This table contains an enumeration of the peer caches, complete with info " - ::= { cacheConfig 6 } + ::= { cacheMesh 1 } cachePeerEntry OBJECT-TYPE SYNTAX CachePeerEntry MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION " An entry in cachePeerTable " - INDEX { cachePeerId } - ::= { cachePeerTable 1 } + INDEX { cachePeerAddr } + ::= { cachePeerTable 1 } CachePeerEntry ::= SEQUENCE { - cachePeerId Integer, cachePeerName DisplayString, - cachePeerIP IpAddress, - cachePeerPortHttp INTEGER (1..65535), - cachePeerPortIcp INTEGER (1..65535), - cachePeerType INTEGER, - cachePeerState INTEGER + cachePeerAddr IpAddress, + cachePeerPortHttp Integer32 (1..65535), + cachePeerPortIcp Integer32 (1..65535), + cachePeerType Integer32, + cachePeerState Integer32, + cachePeerPingsSent Counter32, + cachePeerPingsAcked Counter32, + cachePeerFetches Counter32, + cachePeerRtt Integer32, + cachePeerIgnored Counter32, + cachePeerKeepAlSent Counter32, + cachePeerKeepAlRecv Counter32 } - cachePeerId OBJECT-TYPE - SYNTAX Integer - ACCESS read-only - STATUS current - ::= { cachePeerEntry 1 } cachePeerName OBJECT-TYPE SYNTAX DisplayString ACCESS read-only - STATUS current - ::= { cachePeerEntry 2 } + STATUS mandatory + DESCRIPTION + " The FQDN name or internal alias for the + peer cache" + ::= { cachePeerEntry 1 } - cachePeerIP OBJECT-TYPE + cachePeerAddr OBJECT-TYPE SYNTAX IpAddress ACCESS read-only - STATUS current - ::= { cachePeerEntry 3 } + STATUS mandatory + DESCRIPTION + " The IP Address of the peer cache " + ::= { cachePeerEntry 2 } cachePeerPortHttp OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only - STATUS current - ::= { cachePeerEntry 4 } + STATUS mandatory + DESCRIPTION + " The port the peer listens for HTTP requests " + ::= { cachePeerEntry 3 } cachePeerPortIcp OBJECT-TYPE - SYNTAX INTEGER - ACCESS read-only - STATUS current - ::= { cachePeerEntry 5 } - --- cachePeerType OBJECT-TYPE --- SYNTAX INTEGER --- ACCESS read-only --- STATUS current --- ::= { cachePeerEntry 6 } - - cachePeerState OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only - STATUS current - ::= { cachePeerEntry 7 } + STATUS mandatory + DESCRIPTION + " The port the peer listens for ICP requests + should be 0 if not configured to send ICP requests " + ::= { cachePeerEntry 4 } cachePeerType OBJECT-TYPE - SYNTAX INTEGER { - parent(1), - sibling(2), - multicast(3), - none(4) + SYNTAX INTEGER { + none(0), + sibling(1), + parent(2), + multicast(3) } MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION " Peer Type " - ::= { cachePeerEntry 6 } + ::= { cachePeerEntry 5 } + + cachePeerState OBJECT-TYPE + SYNTAX INTEGER { + down(0), + up(1) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + " The operational state of this peer " + ::= { cachePeerEntry 6 } + + cachePeerPingsSent OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Number of pings sent to peer " + ::= { cachePeerEntry 7 } + + cachePeerPingsAcked OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Number of pings received from peer " + ::= { cachePeerEntry 8 } + + cachePeerFetches OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Number of times this peer was selected " + ::= { cachePeerEntry 9 } + + cachePeerRtt OBJECT-TYPE + SYNTAX Integer32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Last known round-trip time to the peer (in ms) " + ::= { cachePeerEntry 10 } + + cachePeerIgnored OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " How many times this peer was ignored " + ::= { cachePeerEntry 11 } + + cachePeerKeepAlSent OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Number of keepalives sent " + ::= { cachePeerEntry 12 } + + cachePeerKeepAlRecv OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Number of keepalives received " + ::= { cachePeerEntry 13 } + +--- +--- Table of cache's clients, with statistics. Children caches can be identified +--- by non-zero number of ICP requests (unless browsers start using ICP). +--- + + cacheClientTable OBJECT-TYPE + SYNTAX SEQUENCE OF cacheClientEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of cache client entries." + ::= { cacheMesh 2 } + + cacheClientEntry OBJECT-TYPE + SYNTAX CacheClientEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "An entry in cacheClientTable" + INDEX { cacheClientAddr } + ::= { cacheClientTable 1 } + + CacheClientEntry ::= SEQUENCE { + cacheClientAddr NetworkAddress, + cacheClientHttpRequests Counter32, + cacheClientHttpKb Counter32, + cacheClientHttpHits Counter32, + cacheClientHTTPHitKb Counter32, + cacheClientIcpRequests Counter32, + cacheClientIcpKb Counter32, + cacheClientIcpHits Counter32, + cacheClientIcpHitKb Counter32 + } + + cacheClientAddr OBJECT-TYPE + SYNTAX NetworkAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The client's IP address " + ::= { cacheClientEntry 1 } + + cacheClientHttpRequests OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Number of HTTP requests received from client " + ::= { cacheClientEntry 2 } + + cacheClientHttpKb OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Amount of total HTTP traffic to this client " + ::= { cacheClientEntry 3 } + + cacheClientHttpHits OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Number of hits in response to this client's HTTP requests " + ::= { cacheClientEntry 4 } + + cacheClientHTTPHitKb OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Amount of HTTP hit traffic in KB " + ::= { cacheClientEntry 5 } + + cacheClientIcpRequests OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Number of ICP requests received from client " + ::= { cacheClientEntry 6 } + + cacheClientIcpKb OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Amount of total ICP traffic to this client (child) " + ::= { cacheClientEntry 7 } + + cacheClientIcpHits OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Number of hits in response to this client's ICP requests " + ::= { cacheClientEntry 8 } + + cacheClientIcpHitKb OBJECT-TYPE + SYNTAX Counter32 + ACCESS read-only + STATUS mandatory + DESCRIPTION + " Amount of ICP hit traffic in KB " + ::= { cacheClientEntry 9 } + + -- end of cacheClientTable + + + -- end of cacheMesh group -- -- cacheNetwork group @@ -365,80 +577,73 @@ SQUID-MIB DEFINITIONS ::= BEGIN -- NetDB info NetDbTable OBJECT-TYPE - SYNTAX SEQUENCE OF netDbEntry + SYNTAX SEQUENCE OF NetDbEntry ACCESS read-only - STATUS current + STATUS mandatory DESCRIPTION " This table contains squid's netdb" - ::= { cacheNetwork 1 } + ::= { cacheNetwork 1 } netDbEntry OBJECT-TYPE SYNTAX NetDbEntry MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION " An entry in the NetDb" - INDEX { netDbEntryId } - ::= { NetDbTable 1 } + INDEX { netDbEntryNetwork } + ::= { NetDbTable 1 } NetDbEntry ::= SEQUENCE { - NetDbEntryId Integer, NetDbEntryNetwork IpAddress, NetDbEntryPingsSent Counter32, NetDbEntryPingsRecv Counter32, - NetDbEntryHops Integer, + NetDbEntryHops Integer32, NetDbEntryRtt TimeTicks, NetDbEntryPingTime TimeTicks, NetDbEntryLastUse TimeTicks, } - NetDbEntryId OBJECT-TYPE - SYNTAX Integer - ACCESS read-only - STATUS current - ::= { netDbEntry 1 } - NetDbEntryNetwork OBJECT-TYPE SYNTAX IpAddress ACCESS read-only - STATUS current - ::= { netDbEntry 2 } + STATUS mandatory + ::= { netDbEntry 1 } NetDbEntryPingsSent OBJECT-TYPE SYNTAX Counter32 ACCESS read-only - STATUS current - ::= { netDbEntry 3 } + STATUS mandatory + ::= { netDbEntry 2 } NetDbEntryPingsRecv OBJECT-TYPE SYNTAX Counter32 ACCESS read-only - STATUS current - ::= { netDbEntry 4 } + STATUS mandatory + ::= { netDbEntry 3 } NetDbEntryHops OBJECT-TYPE - SYNTAX Integer + SYNTAX Integer32 ACCESS read-only - STATUS current - ::= { netDbEntry 5 } + STATUS mandatory + ::= { netDbEntry 4 } NetDbEntryRtt OBJECT-TYPE SYNTAX TimeTicks ACCESS read-only - STATUS current - ::= { netDbEntry 6 } + STATUS mandatory + ::= { netDbEntry 5 } NetDbEntryPingTime OBJECT-TYPE SYNTAX TimeTicks ACCESS read-only - STATUS current - ::= { netDbEntry 7 } + STATUS mandatory + ::= { netDbEntry 6 } NetDbEntryLastUse OBJECT-TYPE SYNTAX TimeTicks ACCESS read-only - STATUS current - ::= { netDbEntry 8 } + STATUS mandatory + ::= { netDbEntry 7 } -- IP cache info @@ -446,153 +651,156 @@ SQUID-MIB DEFINITIONS ::= BEGIN ipCacheTable OBJECT-TYPE SYNTAX SEQUENCE OF iPcacheEntry ACCESS read-only - STATUS current + STATUS mandatory DESCRIPTION - " This table contains an enumeration of - the peer caches, complete with info " - ::= { cacheDns 1 } + " This table contains information about + cached name -> address dns resolution " + ::= { cacheDns 1 } iPcacheEntry OBJECT-TYPE SYNTAX IPcacheEntry MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION - " An entry in cachePeerTable " + " An entry in ipCacheTable " INDEX { IPcacheEntryId } - ::= { ipCacheTable 1 } + ::= { ipCacheTable 1 } IPcacheEntry ::= SEQUENCE { - IPcacheEntryId Integer, - IPcacheEntryName OCTET STRING, + IPcacheEntryId Integer32, + IPcacheEntryName DisplayString, IPcacheEntryIP IpAddress, - IPcacheEntryState INTEGER, + IPcacheEntryState Integer32, } IPcacheEntryState OBJECT-TYPE SYNTAX INTEGER { pending(1), expired(2), ok(3) } MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION " State of IP cache entry " - ::= { iPcacheEntry 3 } + ::= { iPcacheEntry 3 } IPcacheEntryId OBJECT-TYPE - SYNTAX Integer + SYNTAX Integer32 ACCESS read-only - STATUS current + STATUS mandatory ::= { iPcacheEntry 1 } IPcacheEntryName OBJECT-TYPE - SYNTAX OCTET STRING + SYNTAX DisplayString ACCESS read-only - STATUS current + STATUS mandatory ::= { iPcacheEntry 2 } IPcacheEntryIP OBJECT-TYPE SYNTAX IpAddress ACCESS read-only - STATUS current + STATUS mandatory ::= { iPcacheEntry 3 } IPcacheEntryState OBJECT-TYPE - SYNTAX Integer + SYNTAX Integer32 ACCESS read-only - STATUS current + STATUS mandatory ::= { iPcacheEntry 4 } - -- fqdn cache info - fQDNcacheTable OBJECT-TYPE - SYNTAX SEQUENCE OF fQDNcacheEntry +-- fqdn cache info + + fqdnCacheTable OBJECT-TYPE + SYNTAX SEQUENCE OF fqdnCacheEntry ACCESS read-only - STATUS current + STATUS mandatory DESCRIPTION " This table contains an enumeration of the peer caches, complete with info " - ::= { cacheDns 2 } + ::= { cacheDns 2 } - fQDNcacheEntry OBJECT-TYPE + fqdnCacheEntry OBJECT-TYPE SYNTAX FQDNcacheEntry MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION " An entry in cachePeerTable " INDEX { FQDNcacheEntryId } - ::= { fQDNcacheTable 1 } + ::= { fqdnCacheTable 1 } FQDNcacheEntry ::= SEQUENCE { - FQDNcacheEntryId Integer, - FQDNcacheEntryName OCTET STRING, + FQDNcacheEntryId Integer32, + FQDNcacheEntryName DisplayString, FQDNcacheEntryIP IpAddress, FQDNcacheEntryLastRef TimeTicks, FQDNcacheEntryExpires TimeTicks, - FQDNcacheEntryState INTEGER + FQDNcacheEntryState Integer32 } FQDNcacheEntryId OBJECT-TYPE - SYNTAX Integer + SYNTAX Integer32 ACCESS read-only - STATUS current - ::= { fQDNcacheEntry 1 } + STATUS mandatory + ::= { fqdnCacheEntry 1 } FQDNcacheEntryName OBJECT-TYPE - SYNTAX OCTET STRING + SYNTAX DisplayString ACCESS read-only - STATUS current - ::= { fQDNcacheEntry 2 } + STATUS mandatory + ::= { fqdnCacheEntry 2 } FQDNcacheEntryIP OBJECT-TYPE SYNTAX IpAddress ACCESS read-only - STATUS current - ::= { fQDNcacheEntry 3 } + STATUS mandatory + ::= { fqdnCacheEntry 3 } FQDNcacheEntryLastRef OBJECT-TYPE SYNTAX TimeTicks ACCESS read-only - STATUS current - ::= { fQDNcacheEntry 4} + STATUS mandatory + ::= { fqdnCacheEntry 4} FQDNcacheEntryExpires OBJECT-TYPE SYNTAX TimeTicks ACCESS read-only - STATUS current - ::= { fQDNcacheEntry 5} + STATUS mandatory + ::= { fqdnCacheEntry 5} FQDNcacheEntryState OBJECT-TYPE - SYNTAX Integer + SYNTAX Integer32 ACCESS read-only - STATUS current - ::= { fQDNcacheEntry 6} + STATUS mandatory + ::= { fqdnCacheEntry 6} FQDNcacheEntryState OBJECT-TYPE SYNTAX INTEGER { pending(1), expired(2), ok(3) } MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION - " state of FQDN cache entry " - ::= { fQDNcacheEntry 7 } + " state of FQDN cache entry " + ::= { fqdnCacheEntry 7 } + +-- end of fqdnCacheTable cacheNetStat OBJECT IDENTIFIER ::= { cacheNetwork 3 } cacheTCPconnections OBJECT-TYPE SYNTAX Counter32 ACCESS read-only - STATUS current + STATUS mandatory DESCRIPTION " Number of TCP connections since start-up " - ::= { cacheNetStat 1 } + ::= { cacheNetStat 1 } cacheUDPconnections OBJECT-TYPE SYNTAX Counter32 ACCESS read-only - STATUS current + STATUS mandatory DESCRIPTION " Number of UDP connections since start-up " - ::= { cacheNetStat 2 } + ::= { cacheNetStat 2 } -- -- performance group { squid 3 } @@ -600,7 +808,6 @@ SQUID-MIB DEFINITIONS ::= BEGIN cacheSysPerf OBJECT IDENTIFIER ::= { cachePerf 1 } cacheProtoStats OBJECT IDENTIFIER ::= { cachePerf 2 } - cachePeerStats OBJECT IDENTIFIER ::= { cachePerf 3 } -- -- cacheSysPerf @@ -612,48 +819,47 @@ SQUID-MIB DEFINITIONS ::= BEGIN STATUS mandatory DESCRIPTION " Number of system page faults " - ::= { cacheSysPerf 1 } + ::= { cacheSysPerf 1 } cacheSysNumReads OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION " Number of Reads " - ::= { cacheSysPerf 2 } + ::= { cacheSysPerf 2 } cacheSysDefReads OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION " see cachemgr " - ::= { cacheSysPerf 3 } - + ::= { cacheSysPerf 3 } cacheMemUsage OBJECT-TYPE - SYNTAX Integer32 + SYNTAX Integer3232 MAX-ACCESS read-only STATUS current DESCRIPTION " Amount of system memory allocated by the cache" - ::= { cacheSysPerf 4 } + ::= { cacheSysPerf 4 } cacheCpuUsage OBJECT-TYPE - SYNTAX Integer32 + SYNTAX Integer3232 MAX-ACCESS read-only STATUS current DESCRIPTION " Amount of cpu seconds consumed" - ::= { cacheSysPerf 5 } + ::= { cacheSysPerf 5 } cacheMaxResSize OBJECT-TYPE - SYNTAX Integer32 + SYNTAX Integer3232 MAX-ACCESS read-only STATUS current DESCRIPTION " Maximum Resident Size" - ::= { cacheSysPerf 6 } + ::= { cacheSysPerf 6 } cacheNumObjCount OBJECT-TYPE SYNTAX Counter32 @@ -661,31 +867,31 @@ SQUID-MIB DEFINITIONS ::= BEGIN STATUS current DESCRIPTION " Number of objects " - ::= { cacheSysPerf 7 } + ::= { cacheSysPerf 7 } cacheCurrentLRUExpiration OBJECT-TYPE SYNTAX TimeTicks ACCESS read-only STATUS mandatory - ::= { cacheSysPerf 8 } + ::= { cacheSysPerf 8 } cacheCurrentUnlinkRequests OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheSysPerf 9 } + ::= { cacheSysPerf 9 } cacheCurrentUnusedFileDescrCount OBJECT-TYPE SYNTAX Gauge32 ACCESS read-only STATUS mandatory - ::= { cacheSysPerf 10 } + ::= { cacheSysPerf 10 } cacheCurrentReservedFileDescrCount OBJECT-TYPE SYNTAX Gauge32 ACCESS read-only STATUS mandatory - ::= { cacheSysPerf 11 } + ::= { cacheSysPerf 11 } -- -- cacheProtoStats @@ -701,294 +907,167 @@ SQUID-MIB DEFINITIONS ::= BEGIN SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 1 } + ::= { cacheProtoAggregateStats 1 } cacheHttpHits OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 2 } + ::= { cacheProtoAggregateStats 2 } cacheHttpErrors OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 3 } + ::= { cacheProtoAggregateStats 3 } cacheHttpInKb OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 4 } + ::= { cacheProtoAggregateStats 4 } cacheHttpOutKb OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 5 } + ::= { cacheProtoAggregateStats 5 } - cacheICPpktsSent OBJECT-TYPE + cacheIcpPktsSent OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 6 } + ::= { cacheProtoAggregateStats 6 } - cacheICPpktsRecv OBJECT-TYPE + cacheIcpPktsRecv OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 7 } + ::= { cacheProtoAggregateStats 7 } - cacheICPkbSent OBJECT-TYPE + cacheIcpKbSent OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 8 } + ::= { cacheProtoAggregateStats 8 } - cacheICPkbRecv OBJECT-TYPE + cacheIcpKbRecv OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 9 } + ::= { cacheProtoAggregateStats 9 } cacheServerRequests OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 10 } + ::= { cacheProtoAggregateStats 10 } cacheServerErrors OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 11 } + ::= { cacheProtoAggregateStats 11 } cacheServerInKb OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 12 } + ::= { cacheProtoAggregateStats 12 } cacheServerOutKb OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 13 } + ::= { cacheProtoAggregateStats 13 } cacheCurrentSwapSize OBJECT-TYPE SYNTAX Counter32 ACCESS read-only STATUS mandatory - ::= { cacheProtoAggregateStats 14 } + ::= { cacheProtoAggregateStats 14 } -- -- cacheProtoMedianSvcStats group - + -- + -- This is a table, indexed by the interval we want statistics for + -- Example: cacheDnsSvcTime.10 gives 10-min medians for Dns Service Time. cacheMedianSvcTable OBJECT-TYPE - SYNTAX SEQUENCE OF cacheMedianSvcEntry + SYNTAX SEQUENCE OF CacheMedianSvcEntry ACCESS read-only - STATUS current - ::= { cacheProtoStats 2 } + STATUS mandatory + ::= { cacheProtoStats 2 } cacheMedianSvcEntry OBJECT-TYPE SYNTAX CacheMedianSvcEntry MAX-ACCESS not-accessible - STATUS current + STATUS mandatory DESCRIPTION - " An entry in cacheFdTable " + " An entry in cacheMedianSvcTable " INDEX { cacheMedianTime } - ::= { cacheMedianSvcTable 1 } + ::= { cacheMedianSvcTable 1 } CacheMedianSvcEntry ::= SEQUENCE { - cacheMedianTime INTEGER, - cacheHttpAllSvcTime INTEGER, - cacheHttpMissSvcTime INTEGER, - cacheHttpNmSvcTime INTEGER, - cacheHttpHitSvcTime INTEGER, - cacheIcpQuerySvcTime INTEGER, - cacheIcpReplySvcTime INTEGER, - cacheDnsSvcTime INTEGER + cacheMedianTime Integer32, + cacheHttpAllSvcTime Integer32, + cacheHttpMissSvcTime Integer32, + cacheHttpNmSvcTime Integer32, + cacheHttpHitSvcTime Integer32, + cacheIcpQuerySvcTime Integer32, + cacheIcpReplySvcTime Integer32, + cacheDnsSvcTime Integer32 } cacheMedianTime OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory - ::= { cacheMedianSvcEntry 1 } + ::= { cacheMedianSvcEntry 1 } cacheHttpAllSvcTime OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory - ::= { cacheMedianSvcEntry 2 } + ::= { cacheMedianSvcEntry 2 } cacheHttpMissSvcTime OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory - ::= { cacheMedianSvcEntry 3 } + ::= { cacheMedianSvcEntry 3 } cacheHttpNmSvcTime OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory - ::= { cacheMedianSvcEntry 4 } - + ::= { cacheMedianSvcEntry 4 } cacheHttpHitSvcTime OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory - ::= { cacheMedianSvcEntry 5 } - + ::= { cacheMedianSvcEntry 5 } cacheIcpQuerySvcTime OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory - ::= { cacheMedianSvcEntry 6 } - + ::= { cacheMedianSvcEntry 6 } cacheIcpReplySvcTime OBJECT-TYPE - SYNTAX INTEGER + SYNTAX Integer32 ACCESS read-only STATUS mandatory - ::= { cacheMedianSvcEntry 7 } + ::= { cacheMedianSvcEntry 7 } cacheDnsSvcTime OBJECT-TYPE - SYNTAX INTEGER - ACCESS read-only - STATUS mandatory - ::= { cacheMedianSvcEntry 8 } - - - -- - -- cachePeerStats - -- - - cachePeerStatTable OBJECT-TYPE - SYNTAX SEQUENCE OF cachePeerStatEntry - ACCESS not-accessible - STATUS current - DESCRIPTION - " Table containing aggregate statistics - per supported protocol " - ::= { cachePeerStats 1 } - - cachePeerStatEntry OBJECT-TYPE - SYNTAX CachePeerStatEntry - ACCESS not-accessible - STATUS current - DESCRIPTION - " An entry in cacheProtoStatTable " - INDEX { cachePeerStatId } - ::= { cachePeerStatTable 1 } - - - CachePeerStatEntry ::= SEQUENCE { - cachePeerStatId Integer, - peerPingsSent Counter32, - peerPingsAcked Counter32, - peerFetches Counter32, - peerRtt Integer32, - peerIgnored Counter32, - peerKeepAlSent Counter32, - peerKeepAlRecv Counter32 - } - - cachePeerStatId OBJECT-TYPE - SYNTAX Integer - ACCESS read-only - STATUS mandatory - ::= { cachePeerStatEntry 1 } - - - peerPingsSent OBJECT-TYPE - SYNTAX Counter32 - ACCESS read-only - STATUS mandatory - ::= { cachePeerStatEntry 2 } - - peerPingsAcked OBJECT-TYPE - SYNTAX Counter32 - ACCESS read-only - STATUS mandatory - ::= { cachePeerStatEntry 3 } - - peerFetches OBJECT-TYPE - SYNTAX Counter32 - ACCESS read-only - STATUS mandatory - ::= { cachePeerStatEntry 4 } - - peerRtt OBJECT-TYPE SYNTAX Integer32 ACCESS read-only STATUS mandatory - ::= { cachePeerStatEntry 5 } + ::= { cacheMedianSvcEntry 8 } - peerIgnored OBJECT-TYPE - SYNTAX Counter32 - ACCESS read-only - STATUS mandatory - ::= { cachePeerStatEntry 6 } - - peerKeepAlSent OBJECT-TYPE - SYNTAX Counter32 - ACCESS read-only - STATUS mandatory - ::= { cachePeerStatEntry 7 } - - peerKeepAlRecv OBJECT-TYPE - SYNTAX Counter32 - ACCESS read-only - STATUS mandatory - ::= { cachePeerStatEntry 8 } - - - ---- ---- cacheAccounting group ---- ---- We have to decide first if we follow to ietf rfcm/accounting wg ---- model of meters/managers. It could become quite costly to do this ---- type of accounting inside the caching software. If this agent is ---- cascaded by another agent doing this type of accounting, this would ---- be the place to add the information - ---- ---- cacheSecurity group ---- - - cacheAccessControl OBJECT IDENTIFIER ::= { cacheSecurity 1 } - - - --- Access Control Lists for client access - - cacheProtoAclTable OBJECT-TYPE - SYNTAX SEQUENCE OF cacheProtoAclEntry - ACCESS read-only - STATUS current - DESCRIPTION - " This table contains the acl control configuration - for cache access " - ::= { cacheAccessControl 1 } - - cacheProtoAclEntry OBJECT-TYPE - SYNTAX CacheProtoAclEntry - MAX-ACCESS not-accessible - STATUS current - DESCRIPTION - " An entry in cacheProtoAclTable " - INDEX { cacheProtoAclIndex } - ::= { cacheProtoAclTable 1 } - - CacheProtoAclEntry ::= SEQUENCE { - cacheProtoAclIndex Integer, - cacheProtoAclIP IpAddress, - cacheProtoAclMask IpAddress - cacheProtoAclType INTEGER - } ---END +-- end of SQUID-MIB +-- +END diff --git a/src/net_db.cc b/src/net_db.cc index 1245017e8b..0c4cfb6c4f 100644 --- a/src/net_db.cc +++ b/src/net_db.cc @@ -1,6 +1,6 @@ /* - * $Id: net_db.cc,v 1.76 1998/03/24 17:29:47 wessels Exp $ + * $Id: net_db.cc,v 1.77 1998/03/25 09:21:47 kostas Exp $ * * DEBUG: section 37 Network Measurement Database * AUTHOR: Duane Wessels @@ -699,48 +699,58 @@ netdbUpdatePeer(request_t * r, peer * e, int irtt, int ihops) #endif } -#ifdef SQUID_SNMP -int -netdb_getMax() +#if SQUID_SNMP + +int netdbGetRowFn(oid *New,oid *Oid) { - int i = 0; + netdbEntry *c = NULL; + static struct in_addr maddr; + static char key[15]; + #if USE_ICMP - static netdbEntry *n = NULL; - - n = (netdbEntry *) hash_first(addr_table); - if (n != NULL) { - i = 1; - while ((n = (netdbEntry *) hash_next(addr_table))) - i++; - } + if (!Oid[0]&&!Oid[1]&&!Oid[2]&&!Oid[3]) + c = (netdbEntry *)hash_first(addr_table); + else { + snprintf(key,15,"%d.%d.%d.%d", Oid[0],Oid[1],Oid[2],Oid[3]); + c = (netdbEntry *) hash_lookup(addr_table, key); + if (!c) return 0; + debug(49,8)("netdbGetRowFn: [%s] found\n",key); + c= (netdbEntry *)hash_next(addr_table); + if (!c) debug(49,8)("netdbGetRowFn: next does not exist!\n"); + } #endif - return i; + if (!c) return 0; + debug(49,8)("netdbGetRowFn: [%s] is returned\n",c->network); + safe_inet_addr(c->network, &maddr); + addr2oid(maddr, New); + return 1; } + variable_list * snmp_netdbFn(variable_list * Var, snint *ErrP) { variable_list *Answer; +#if 0 int cnt; +#endif + static char key[15]; + static netdbEntry *n = NULL; #if USE_ICMP struct in_addr addr; #endif - debug(49, 5) ("snmp_netdbFn: Processing request with %d.%d!\n", Var->name[10], - Var->name[11]); + snprintf(key,15,"%d.%d.%d.%d", Var->name[11], Var->name[12], + Var->name[13],Var->name[14]); + + debug(49, 5) ("snmp_netdbFn: request with %d. (%s)!\n", Var->name[10],key); Answer = snmp_var_new(Var->name, Var->name_length); *ErrP = SNMP_ERR_NOERROR; - cnt = Var->name[11]; #if USE_ICMP - n = (netdbEntry *) hash_first(addr_table); + n = (netdbEntry *) hash_lookup(addr_table,key); - while (n != NULL) - if (--cnt != 0) - n = (netdbEntry *) hash_next(addr_table); - else - break; #endif if (n == NULL) { debug(49, 8) ("snmp_netdbFn: Requested past end of netdb table.\n"); @@ -752,10 +762,6 @@ snmp_netdbFn(variable_list * Var, snint *ErrP) Answer->val_len = sizeof(snint); Answer->val.integer = xmalloc(Answer->val_len); switch (Var->name[10]) { - case NETDB_ID: - Answer->type = SMI_INTEGER; - *(Answer->val.integer) = (snint) Var->name[11]; - break; case NETDB_NET: Answer->type = SMI_IPADDRESS; safe_inet_addr(n->network, &addr); diff --git a/src/protos.h b/src/protos.h index 19218b88a8..749b8a9701 100644 --- a/src/protos.h +++ b/src/protos.h @@ -69,7 +69,7 @@ extern int cbdataValid(const void *p); extern void cbdataDump(StoreEntry *); extern void clientdbInit(void); -extern void clientdbUpdate(struct in_addr, log_type, protocol_t); +extern void clientdbUpdate(struct in_addr, log_type, protocol_t,size_t); extern int clientdbCutoffDenied(struct in_addr); extern void clientdbDump(StoreEntry *); extern void clientdbFreeMemory(void); @@ -388,6 +388,7 @@ extern DEFER httpAcceptDefer; #ifdef SQUID_SNMP extern PF snmpHandleUdp; extern void snmpInit(void); +extern int snmpInitConfig(void); extern void snmpConnectionOpen(void); extern void snmpConnectionShutdown(void); extern void snmpConnectionClose(void); diff --git a/src/snmp_agent.cc b/src/snmp_agent.cc index fe0a5d6171..c4f2eb6e15 100644 --- a/src/snmp_agent.cc +++ b/src/snmp_agent.cc @@ -22,7 +22,7 @@ struct snmp_session *Session; extern int get_median_svc(int, int); extern StatCounters *snmpStatGet(int); extern void snmp_agent_parse_done(int, snmp_request_t *); - +void addr2oid(struct in_addr addr, oid *); void snmpAclCheckStart(snmp_request_t * rq); @@ -320,7 +320,7 @@ snmp_basicFn(variable_list * Var, snint *ErrP) Answer->val_len = sizeof(snint); Answer->val.integer = xmalloc(Answer->val_len); Answer->type = SMI_TIMETICKS; - *(Answer->val.integer) = tvSubDsec(squid_start, current_time); + *(Answer->val.integer) = (snint) ( tvSubDsec(squid_start, current_time) ); break; case SYSCONTACT: Answer->type = ASN_OCTET_STR; @@ -359,6 +359,7 @@ snmp_sysFn(variable_list * Var, snint *ErrP) variable_list *Answer; static fde *f = NULL; int num = 1, cnt = 0; + static char addrbuf[16]; static struct in_addr addr; static snint snint_return; @@ -381,6 +382,70 @@ snmp_sysFn(variable_list * Var, snint *ErrP) Answer->type = ASN_INTEGER; *(Answer->val.integer) = store_swap_size; break; + case SYSCONNTBL: + snprintf(addrbuf,16, "%d.%d.%d.%d", Var->name[11], Var->name[12], + Var->name[13],Var->name[14]); + + debug(49, 9) ("snmp_sysFn: CONN Table, [%s]\n", addrbuf); + + while (cnt < Squid_MaxFD) { + f = &fd_table[cnt++]; + if (!f->open) + continue; + if (f->type==FD_SOCKET && !strcmp(f->ipaddr, addrbuf ) && + f->remote_port==Var->name[15]) + break; + } + if (!f || cnt==Squid_MaxFD) { + debug(49, 9) ("snmp_sysFn: no such name. %x\n", f); + *ErrP = SNMP_ERR_NOSUCHNAME; + snmp_var_free(Answer); + return (NULL); + } + switch(Var->name[10]) { + case SYS_CONN_FDNUM: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = Var->name[11]; + break; + case SYS_CONN_PORT: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = f->remote_port; + break; + case SYS_CONN_READ: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = (snint) f->bytes_read; + break; + case SYS_CONN_WRITE: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = (snint) f->bytes_written; + break; + case SYS_CONN_ADDR: + safe_inet_addr(f->ipaddr, &addr); + snint_return = (snint) addr.s_addr; + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = SMI_IPADDRESS; + *(Answer->val.integer) = (snint) snint_return; + break; + case SYS_CONN_NAME: + Answer->type = ASN_OCTET_STR; + Answer->val_len = strlen(f->desc); + Answer->val.string = (u_char *) xstrdup(f->desc); + break; + default: + *ErrP = SNMP_ERR_NOSUCHNAME; + snmp_var_free(Answer); + return (NULL); + } + break; /* end SYSCONNTBL */ case SYSFDTBL: num = Var->name[11]; debug(49, 9) ("snmp_sysFn: FD Table, num=%d\n", num); @@ -388,7 +453,8 @@ snmp_sysFn(variable_list * Var, snint *ErrP) f = &fd_table[cnt++]; if (!f->open) continue; - num--; + if (f->type!=FD_SOCKET) + num--; } if (num != 0 || !f) { debug(49, 9) ("snmp_sysFn: no such name. %x\n", f); @@ -403,18 +469,21 @@ snmp_sysFn(variable_list * Var, snint *ErrP) Answer->type = ASN_INTEGER; *(Answer->val.integer) = Var->name[11]; break; +#if 0 case SYS_FD_TYPE: Answer->val_len = sizeof(snint); Answer->val.integer = xmalloc(Answer->val_len); Answer->type = ASN_INTEGER; *(Answer->val.integer) = f->type; break; + case SYS_FD_TOUT: Answer->val_len = sizeof(snint); Answer->val.integer = xmalloc(Answer->val_len); Answer->type = ASN_INTEGER; *(Answer->val.integer) = (snint) (f->timeout_handler ? (f->timeout - squid_curtime) / 60 : 0); break; +#endif case SYS_FD_NREAD: Answer->val_len = sizeof(snint); Answer->val.integer = xmalloc(Answer->val_len); @@ -427,18 +496,6 @@ snmp_sysFn(variable_list * Var, snint *ErrP) Answer->type = ASN_INTEGER; *(Answer->val.integer) = (snint) f->bytes_written; break; - case SYS_FD_ADDR: - if (f->type != FD_SOCKET) - snint_return = (snint) 0; - else { - safe_inet_addr(f->ipaddr, &addr); - snint_return = (snint) addr.s_addr; - } - Answer->val_len = sizeof(snint); - Answer->val.integer = xmalloc(Answer->val_len); - Answer->type = SMI_IPADDRESS; - *(Answer->val.integer) = (snint) snint_return; - break; case SYS_FD_NAME: Answer->type = ASN_OCTET_STR; Answer->val_len = strlen(f->desc); @@ -463,7 +520,7 @@ snmp_confFn(variable_list * Var, snint *ErrP) { variable_list *Answer; char *cp = NULL; - + char *pp = NULL; debug(49, 5) ("snmp_confFn: Processing request with magic %d!\n", Var->name[8]); Answer = snmp_var_new(Var->name, Var->name_length); @@ -481,6 +538,18 @@ snmp_confFn(variable_list * Var, snint *ErrP) Answer->type = SMI_TIMETICKS; *(Answer->val.integer) = tvSubDsec(squid_start, current_time); break; + case CONF_VERSION: + pp= "Squid"; + Answer->type = ASN_OCTET_STR; + Answer->val_len = strlen(pp); + Answer->val.string = (u_char *) xstrdup(pp); + break; + case CONF_VERSION_ID: + pp = SQUID_VERSION; + Answer->type = ASN_OCTET_STR; + Answer->val_len = strlen(pp); + Answer->val.string = (u_char *) xstrdup(pp); + break; case CONF_STORAGE: switch (Var->name[9]) { case CONF_ST_MMAXSZ: @@ -525,48 +594,7 @@ snmp_confFn(variable_list * Var, snint *ErrP) return (NULL); } break; - case CONF_WAIS_RHOST: - if (Config.Wais.relayHost) - cp = Config.Wais.relayHost; - else - cp = "None"; - Answer->type = ASN_OCTET_STR; - Answer->val_len = strlen(cp); - Answer->val.string = (u_char *) xstrdup(cp); - break; - case CONF_WAIS_RPORT: - Answer->val_len = sizeof(snint); - Answer->val.integer = xmalloc(Answer->val_len); - Answer->type = ASN_INTEGER; - *(Answer->val.integer) = (snint) Config.Wais.relayPort; - break; - case CONF_TIO: - switch (Var->name[9]) { - case CONF_TIO_RD: - Answer->val_len = sizeof(snint); - Answer->val.integer = xmalloc(Answer->val_len); - Answer->type = ASN_INTEGER; - *(Answer->val.integer) = (snint) Config.Timeout.read; - break; - case CONF_TIO_CON: - Answer->val_len = sizeof(snint); - Answer->val.integer = xmalloc(Answer->val_len); - Answer->type = ASN_INTEGER; - *(Answer->val.integer) = (snint) Config.Timeout.connect; - break; - case CONF_TIO_REQ: - Answer->val_len = sizeof(snint); - Answer->val.integer = xmalloc(Answer->val_len); - Answer->type = ASN_INTEGER; - *(Answer->val.integer) = (snint) Config.Timeout.request; - break; - default: - *ErrP = SNMP_ERR_NOSUCHNAME; - snmp_var_free(Answer); - return (NULL); - } - break; - case CONF_LOG_LVL: + case CONF_LOG_FAC: if (!(cp = Config.debugOptions)) cp = "None"; Answer->type = ASN_OCTET_STR; @@ -582,70 +610,116 @@ snmp_confFn(variable_list * Var, snint *ErrP) } variable_list * -snmp_confPtblFn(variable_list * Var, snint *ErrP) +snmp_meshPtblFn(variable_list * Var, snint *ErrP) { variable_list *Answer; + struct in_addr *laddr; char *cp = NULL; peer *p = NULL; - int cnt; - debug(49, 5) ("snmp_confPtblFn: peer %d requested!\n", Var->name[11]); + int cnt=0; + debug(49, 5) ("snmp_meshPtblFn: peer %d requested!\n", Var->name[11]); Answer = snmp_var_new(Var->name, Var->name_length); *ErrP = SNMP_ERR_NOERROR; + laddr=oid2addr(&Var->name[11]); + + for (p=Config.peers;p!=NULL;p=p->next,cnt++) + if (p->in_addr.sin_addr.s_addr == laddr->s_addr) + break; + +#if SNMP_OLD_INDEX p = Config.peers; cnt = Var->name[11]; - debug(49, 5) ("snmp_confPtblFn: we want .x.%d\n", Var->name[10]); + debug(49, 5) ("snmp_meshPtblFn: we want .x.%d\n", Var->name[10]); while (--cnt) if (!(p = p->next)); +#endif if (p == NULL) { *ErrP = SNMP_ERR_NOSUCHNAME; snmp_var_free(Answer); return (NULL); } switch (Var->name[10]) { - case CONF_PTBL_ID: - Answer->val_len = sizeof(snint); - Answer->val.integer = xmalloc(Answer->val_len); - Answer->type = ASN_INTEGER; - *(Answer->val.integer) = (snint) Var->name[10]; - break; - case CONF_PTBL_NAME: + case MESH_PTBL_NAME: cp = p->host; Answer->type = ASN_OCTET_STR; Answer->val_len = strlen(cp); Answer->val.string = (u_char *) xstrdup(cp); break; - case CONF_PTBL_IP: + case MESH_PTBL_IP: Answer->type = SMI_IPADDRESS; Answer->val_len = sizeof(snint); Answer->val.integer = xmalloc(Answer->val_len); *(Answer->val.integer) = (snint) (p->in_addr.sin_addr.s_addr); break; - case CONF_PTBL_HTTP: + case MESH_PTBL_HTTP: Answer->val_len = sizeof(snint); Answer->val.integer = xmalloc(Answer->val_len); Answer->type = ASN_INTEGER; *(Answer->val.integer) = (snint) p->http_port; break; - case CONF_PTBL_ICP: + case MESH_PTBL_ICP: Answer->val_len = sizeof(snint); Answer->val.integer = xmalloc(Answer->val_len); Answer->type = ASN_INTEGER; *(Answer->val.integer) = (snint) p->icp_port; break; - case CONF_PTBL_TYPE: + case MESH_PTBL_TYPE: Answer->val_len = sizeof(snint); Answer->val.integer = xmalloc(Answer->val_len); Answer->type = ASN_INTEGER; *(Answer->val.integer) = (snint) p->type; break; - case CONF_PTBL_STATE: + case MESH_PTBL_STATE: Answer->val_len = sizeof(snint); Answer->val.integer = xmalloc(Answer->val_len); Answer->type = ASN_INTEGER; *(Answer->val.integer) = (snint) neighborUp(p); break; + case MESH_PTBL_SENT: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = SMI_COUNTER32; + *(Answer->val.integer) = p->stats.pings_sent; + break; + case MESH_PTBL_PACKED: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = SMI_COUNTER32; + *(Answer->val.integer) = p->stats.pings_acked; + break; + case MESH_PTBL_FETCHES: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = SMI_COUNTER32; + *(Answer->val.integer) = p->stats.fetches; + break; + case MESH_PTBL_RTT: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = ASN_INTEGER; + *(Answer->val.integer) = p->stats.rtt; + break; + case MESH_PTBL_IGN: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = SMI_COUNTER32; + *(Answer->val.integer) = p->stats.ignored_replies; + break; + case MESH_PTBL_KEEPAL_S: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = SMI_COUNTER32; + *(Answer->val.integer) = p->stats.n_keepalives_sent; + break; + case MESH_PTBL_KEEPAL_R: + Answer->val_len = sizeof(snint); + Answer->val.integer = xmalloc(Answer->val_len); + Answer->type = SMI_COUNTER32; + *(Answer->val.integer) = p->stats.n_keepalives_recv; + break; + default: *ErrP = SNMP_ERR_NOSUCHNAME; snmp_var_free(Answer); @@ -714,67 +788,6 @@ snmp_prfSysFn(variable_list * Var, snint *ErrP) return Answer; } -variable_list * -snmp_prfPeerFn(variable_list * Var, snint *ErrP) -{ - variable_list *Answer; - peer *p = NULL; - int cnt; - debug(49, 5) ("snmp_prfPeerFn: Processing request with magic %d!\n", Var->name[9]); - - Answer = snmp_var_new(Var->name, Var->name_length); - *ErrP = SNMP_ERR_NOERROR; - - p = Config.peers; - cnt = Var->name[12]; - debug(49, 5) ("snmp_prfPeerFn: we want .%d.%d\n", Var->name[11], cnt); - while (--cnt) - if (!(p = p->next)); - if (p == NULL) { - *ErrP = SNMP_ERR_NOSUCHNAME; - snmp_var_free(Answer); - return (NULL); - } - Answer->type = SMI_COUNTER32; - Answer->val_len = sizeof(snint); - Answer->val.integer = xmalloc(Answer->val_len); - - switch (Var->name[11]) { - case PERF_PEERSTAT_ID: - Answer->type = ASN_INTEGER; - *(Answer->val.integer) = Var->name[11]; - break; - case PERF_PEERSTAT_SENT: - *(Answer->val.integer) = p->stats.pings_sent; - break; - case PERF_PEERSTAT_PACKED: - *(Answer->val.integer) = p->stats.pings_acked; - break; - case PERF_PEERSTAT_FETCHES: - *(Answer->val.integer) = p->stats.fetches; - break; - case PERF_PEERSTAT_RTT: - Answer->type = ASN_INTEGER; - *(Answer->val.integer) = p->stats.rtt; - break; - case PERF_PEERSTAT_IGN: - *(Answer->val.integer) = p->stats.ignored_replies; - break; - case PERF_PEERSTAT_KEEPAL_S: - *(Answer->val.integer) = p->stats.n_keepalives_sent; - break; - case PERF_PEERSTAT_KEEPAL_R: - *(Answer->val.integer) = p->stats.n_keepalives_recv; - break; - default: - *ErrP = SNMP_ERR_NOSUCHNAME; - snmp_var_free(Answer); - return (NULL); - } - return Answer; -} - - variable_list * snmp_prfProtoFn(variable_list * Var, snint *ErrP) { @@ -911,3 +924,32 @@ snmp_dnsFn(variable_list * Var, snint *ErrP) return NULL; } + +void +addr2oid(struct in_addr addr, oid *Dest) +{ + u_char *cp; + cp=(u_char *)&(addr.s_addr); + Dest[0] = *cp++; + Dest[1] = *cp++; + Dest[2] = *cp++; + Dest[3] = *cp++; +} + +struct in_addr * +oid2addr(oid *id) +{ + static struct in_addr laddr; +#if 0 + static u_char buf[15]; + snprintf(buf,15,"%d.%d.%d.%d", id[0],id[1],id[2],id[3]); + safe_inet_addr(buf, &laddr); + return &laddr; +#endif + u_char *cp=(u_char *)&(laddr.s_addr); + cp[0]=id[0]; + cp[1]=id[1]; + cp[2]=id[2]; + cp[3]=id[3]; + return &laddr; +} diff --git a/src/structs.h b/src/structs.h index 45f811397f..a9ffc19ae2 100644 --- a/src/structs.h +++ b/src/structs.h @@ -1184,6 +1184,9 @@ struct _ClientInfo { struct { int result_hist[LOG_TYPE_MAX]; int n_requests; + kb_t kbytes_in; + kb_t kbytes_out; + kb_t hit_kbytes_out; } Http, Icp; struct { time_t time;