Summary-Cache Enhanced ICP Implementation
We have implemented a prototype of Summary-Cache Enhanced ICP in Squid 1.1.14.
The protocol is described in the paper.
The implementation adds in the following new source files to Squid 1.1.14's code:
The compressed tar archive here contains the above files and other files in the Squid
md5.h, md5.c, md5string.c: code from RSA for calculating the MD5 signature of
an arbitrary-length string;
sc_hashkeys.c: given an url, calculates the hash function values by first
calculating the MD5 signature, and then using successive groups of bits;
sc_broadcast.c: handles packing and unpacking summary updates into a
ICP-formated message, and sending the updates to neighbors;
sc_probe.c: provide routines that the ICP uses to determine whether a document
is at a remote cache. ICP usually calls peerWouldBePinged to
determine whether a query should be sent to a neighbor. We changed
the name to peerWouldBePinged_forURL.
The file also has routines to update the summary based on received update
There are two versions of sc_probe.c: sc_probe.c. and sc_probe.msb.c.
sc_probe.msb.c support the format of update message where the most
significant bit of each update entry indicate whether the bit should be set
to 0 (in the case of the MSB being 1) or 1 (in the case of the MSB being 0).
It is less tested, but can handle UDP message loss better.
sc_updates.c: contains all the routines needed to maintain the local bloom
filter and to construct update messages. Again, there are two versions,
sc_updates.c and sc_updates.msb.c.