diff options
Diffstat (limited to 'net-proxy/squid/files/squid-3.0.19-adapted-zph.patch')
-rw-r--r-- | net-proxy/squid/files/squid-3.0.19-adapted-zph.patch | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/net-proxy/squid/files/squid-3.0.19-adapted-zph.patch b/net-proxy/squid/files/squid-3.0.19-adapted-zph.patch new file mode 100644 index 000000000000..0bd256e9f3bc --- /dev/null +++ b/net-proxy/squid/files/squid-3.0.19-adapted-zph.patch @@ -0,0 +1,207 @@ +diff -Nru squid-3.0.STABLE19.orig/src/cf.data.pre squid-3.0.STABLE19/src/cf.data.pre +--- squid-3.0.STABLE19.orig/src/cf.data.pre 2009-09-12 07:25:41.000000000 +0200 ++++ squid-3.0.STABLE19/src/cf.data.pre 2009-09-12 07:26:48.000000000 +0200 +@@ -1133,6 +1133,60 @@ + making the request. + DOC_END + ++NAME: zph_tos_local ++TYPE: int ++DEFAULT: 0 ++LOC: Config.zph_tos_local ++DOC_START ++ Allows you to select a TOS/Diffserv value to mark local hits. Read above ++ (tcp_outgoing_tos) for details/requirements about TOS. ++ Default: 0 (disabled). ++DOC_END ++ ++NAME: zph_tos_peer ++TYPE: int ++DEFAULT: 0 ++LOC: Config.zph_tos_peer ++DOC_START ++ Allows you to select a TOS/Diffserv value to mark peer hits. Read above ++ (tcp_outgoing_tos) for details/requirements about TOS. ++ Default: 0 (disabled). ++DOC_END ++ ++NAME: zph_tos_parent ++COMMENT: on|off ++TYPE: onoff ++LOC: Config.onoff.zph_tos_parent ++DEFAULT: on ++DOC_START ++ Set this to off if you want only sibling hits to be marked. ++ If set to on (default), parent hits are being marked too. ++DOC_END ++ ++NAME: zph_preserve_miss_tos ++COMMENT: on|off ++TYPE: onoff ++LOC: Config.onoff.zph_preserve_miss_tos ++DEFAULT: on ++DOC_START ++ If set to on (default), any HTTP response towards clients will ++ have the TOS value of the response comming from the remote ++ server masked with the value of zph_preserve_miss_tos_mask. ++ For this to work correctly, you will need to patch your linux ++ kernel with the TOS preserving ZPH patch. ++DOC_END ++ ++NAME: zph_preserve_miss_tos_mask ++TYPE: int ++DEFAULT: 255 ++LOC: Config.zph_preserve_miss_tos_mask ++DOC_START ++ Allows you to mask certain bits in the TOS received from the ++ remote server, before copying the value to the TOS send towards ++ clients. ++ Default: 255 (TOS from server is not changed). ++DOC_END ++ + NAME: tcp_outgoing_address + TYPE: acl_address + DEFAULT: none +diff -Nru squid-3.0.STABLE19.orig/src/client_side_reply.cc squid-3.0.STABLE19/src/client_side_reply.cc +--- squid-3.0.STABLE19.orig/src/client_side_reply.cc 2009-09-06 13:29:37.000000000 +0200 ++++ squid-3.0.STABLE19/src/client_side_reply.cc 2009-09-12 07:26:48.000000000 +0200 +@@ -48,6 +48,7 @@ + #include "ESI.h" + #endif + #include "MemObject.h" ++#include "fde.h" + #include "ACLChecklist.h" + #include "ACL.h" + #if DELAY_POOLS +@@ -1549,6 +1550,11 @@ + /* guarantee nothing has been sent yet! */ + assert(http->out.size == 0); + assert(http->out.offset == 0); ++ if (Config.zph_tos_local) ++ { ++ debugs(33, 1, "ZPH hit hier.code=" << http->request->hier.code <<" TOS="<<Config.zph_tos_local); ++ comm_set_tos(http->getConn()->fd,Config.zph_tos_local); ++ } + tempBuffer.offset = reqofs; + tempBuffer.length = getNextNode()->readBuffer.length; + tempBuffer.data = getNextNode()->readBuffer.data; +@@ -1829,6 +1835,24 @@ + char *buf = next()->readBuffer.data; + + char *body_buf = buf; ++ ++ if (reqofs==0 && !logTypeIsATcpHit(http->logType)) ++ { ++ int tos = 0; ++ if (Config.zph_tos_peer && ++ (http->request->hier.code==SIBLING_HIT || ++ (Config.onoff.zph_tos_parent && http->request->hier.code==PARENT_HIT))) ++ { ++ tos = Config.zph_tos_peer; ++ debugs(33, 1, "ZPH: Peer hit, TOS="<<tos<<" hier.code="<<http->request->hier.code); ++ } ++ else if (Config.onoff.zph_preserve_miss_tos && Config.zph_preserve_miss_tos_mask) ++ { ++ tos = fd_table[fd].upstreamTOS & Config.zph_preserve_miss_tos_mask; ++ debugs(33, 1, "ZPH: Preserving TOS on miss, TOS="<<tos); ++ } ++ comm_set_tos(fd,tos); ++ } + + if (buf != result.data) { + /* we've got to copy some data */ +diff -Nru squid-3.0.STABLE19.orig/src/fde.h squid-3.0.STABLE19/src/fde.h +--- squid-3.0.STABLE19.orig/src/fde.h 2009-09-06 13:29:38.000000000 +0200 ++++ squid-3.0.STABLE19/src/fde.h 2009-09-12 07:26:48.000000000 +0200 +@@ -106,7 +106,7 @@ + long handle; + } win32; + #endif +- ++ unsigned char upstreamTOS; /* see FwdState::dispatch() */ + }; + + #endif /* SQUID_FDE_H */ +diff -Nru squid-3.0.STABLE19.orig/src/forward.cc squid-3.0.STABLE19/src/forward.cc +--- squid-3.0.STABLE19.orig/src/forward.cc 2009-09-06 13:29:38.000000000 +0200 ++++ squid-3.0.STABLE19/src/forward.cc 2009-09-12 07:26:48.000000000 +0200 +@@ -965,6 +965,57 @@ + + netdbPingSite(request->host); + ++ /* Retrieves remote server TOS value, and stores it as part of the ++ * original client request FD object. It is later used to forward ++ * remote server's TOS in the response to the client in case of a MISS. ++ */ ++ fde * clientFde = &fd_table[client_fd]; ++ if (clientFde) ++ { ++ int tos = 1; ++ int tos_len = sizeof(tos); ++ clientFde->upstreamTOS = 0; ++ if (setsockopt(server_fd,SOL_IP,IP_RECVTOS,&tos,tos_len)==0) ++ { ++ unsigned char buf[512]; ++ int len = 512; ++ if (getsockopt(server_fd,SOL_IP,IP_PKTOPTIONS,buf,(socklen_t*)&len) == 0) ++ { ++ /* Parse the PKTOPTIONS structure to locate the TOS data message ++ * prepared in the kernel by the ZPH incoming TCP TOS preserving ++ * patch. ++ */ ++ unsigned char * p = buf; ++ while (p-buf < len) ++ { ++ struct cmsghdr *o = (struct cmsghdr*)p; ++ if (o->cmsg_len<=0) ++ break; ++ ++ if (o->cmsg_level == SOL_IP && o->cmsg_type == IP_TOS) ++ { ++ union { ++ unsigned char *pchar; ++ int *pint; ++ } data; ++ data.pchar = CMSG_DATA(o); ++ clientFde->upstreamTOS = (unsigned char)*data.pint; ++ break; ++ } ++ p += CMSG_LEN(o->cmsg_len); ++ } ++ } ++ else ++ { ++ debugs(33, 1, "ZPH: error in getsockopt(IP_PKTOPTIONS) on FD "<<server_fd<<" "<<xstrerror()); ++ } ++ } ++ else ++ { ++ debugs(33, 1, "ZPH: error in setsockopt(IP_RECVTOS) on FD "<<server_fd<<" "<<xstrerror()); ++ } ++ } ++ + if (servers && (p = servers->_peer)) { + p->stats.fetches++; + request->peer_login = p->login; +diff -Nru squid-3.0.STABLE19.orig/src/structs.h squid-3.0.STABLE19/src/structs.h +--- squid-3.0.STABLE19.orig/src/structs.h 2009-09-06 13:29:38.000000000 +0200 ++++ squid-3.0.STABLE19/src/structs.h 2009-09-12 07:26:48.000000000 +0200 +@@ -554,6 +554,8 @@ + int emailErrData; + int httpd_suppress_version_string; + int global_internal_static; ++ int zph_tos_parent; ++ int zph_preserve_miss_tos; + int debug_override_X; + int WIN32_IpAddrChangeMonitor; + } +@@ -722,6 +724,9 @@ + int sleep_after_fork; /* microseconds */ + time_t minimum_expiry_time; /* seconds */ + external_acl *externalAclHelperList; ++ int zph_tos_local; ++ int zph_tos_peer; ++ int zph_preserve_miss_tos_mask; + #if USE_SSL + + struct |