]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
- renovated mib and added descriptions and comments
authorkostas <>
Wed, 25 Mar 1998 16:21:39 +0000 (16:21 +0000)
committerkostas <>
Wed, 25 Mar 1998 16:21:39 +0000 (16:21 +0000)
- 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")

14 files changed:
ChangeLog
include/cache_snmp.h
snmplib/parse.c
src/Makefile.in
src/cache_cf.cc
src/client_db.cc
src/client_side.cc
src/icp_v2.cc
src/icp_v3.cc
src/mib.txt
src/net_db.cc
src/protos.h
src/snmp_agent.cc
src/structs.h

index f78738ca594515404af4beed4dba4ab84b8a1ab3..c09c77de5aada4915e5286389d579a7076287ee2 100644 (file)
--- 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.
index c8b1b31a812c7b94dd850b766290c33d668c24e8..9c3fe8efe36b2b5b8f7962e5af922f690e1752d9 100644 (file)
@@ -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 *);
index 70ea36a5645ca0fea7355dd614eaa4e58e41810c..b39b32b09e730128ec41b7ca13c46e9e6b65181d 100644 (file)
@@ -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");
index 20a209e0331af6c824ff09220c3ef400c1e6a52a..585e7818cef097609665c4980111c7830e5df273 100644 (file)
@@ -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)
 
index 23a53c52c965081bbee901131205c3fa94d096cc..db044696e689880ca9f820a155e945f43d9fd969 100644 (file)
@@ -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
index 2dd37ef95f2dd1e1e3a7dfb2caebe2bd11f649d7..9f46b73b654ffed86a36f27791fb2c566eb613d0 100644 (file)
@@ -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
index 2989169b07bb78ac20cd53881fc796517d78d988..91a3757de34035657ad970084959893ccb5b3e30 100644 (file)
@@ -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);
index 55cf57420464fbda68d0ab5a62fafeea404ec53a..32893865248ee0451bb8e0a7d62d315af61438f5 100644 (file)
@@ -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);
index 1e39bc587bcabfcba4a0a88c629abb574891f655..4a8a97089ddd44af0790b4388251e415e345c7ca 100644 (file)
@@ -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);
index ef872481bb73cf51ebf27bbbdebe7fdcfc7f47b4..da48ca4a980ad2be9c1e1ded86154807f50a97c3 100644 (file)
@@ -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
index 1245017e8bcca4139dbca69e90c8cfe286fca186..0c4cfb6c4f1259d7fef6f842115c0f908f235333 100644 (file)
@@ -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);
index 19218b88a8ce51cea1495de5a9baf388d42b35ea..749b8a970193a95580a9837c75d14179795c2281 100644 (file)
@@ -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);
index fe0a5d61716211dd68d30eb1abf12d9b5190b723..c4f2eb6e15070bf1cc7e4c1453d2df26a81d1161 100644 (file)
@@ -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;
+}
index 45f811397f9b3fb914c25e4d749ea7c820287f7a..a9ffc19ae206a354afca194dc130cfae92111d4a 100644 (file)
@@ -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;