File 10833.patch of Package squid-beta
---------------------
PatchSet 10833
Date: 2007/05/26 06:38:03
Author: wessels
Branch: HEAD
Tag: (none)
Log:
Added 'clientside_tos' directive and feature.
Much like 'tcp_outgoing_tos' except that this affect connections
between Squid and its clients instead of server-side connections.
Members:
src/ClientRequestContext.h:1.3->1.4
src/cf.data.pre:1.437->1.438
src/client_side_request.cc:1.87->1.88
src/comm.cc:1.430->1.431
src/comm.h:1.28->1.29
src/forward.cc:1.164->1.165
src/structs.h:1.556->1.557
Index: squid3/src/ClientRequestContext.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ClientRequestContext.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/ClientRequestContext.h 11 Jan 2006 21:14:33 -0000 1.3
+++ squid3/src/ClientRequestContext.h 26 May 2007 06:38:03 -0000 1.4
@@ -38,6 +38,7 @@
bool redirect_done;
bool no_cache_done;
bool interpreted_req_hdrs;
+ bool clientside_tos_done;
private:
CBDATA_CLASS(ClientRequestContext);
Index: squid3/src/cf.data.pre
===================================================================
RCS file: /cvsroot/squid/squid3/src/cf.data.pre,v
retrieving revision 1.437
retrieving revision 1.438
diff -u -r1.437 -r1.438
--- squid3/src/cf.data.pre 22 May 2007 17:12:38 -0000 1.437
+++ squid3/src/cf.data.pre 26 May 2007 06:38:03 -0000 1.438
@@ -1,6 +1,6 @@
#
-# $Id: cf.data.pre,v 1.437 2007/05/22 17:12:38 rousskov Exp $
+# $Id: cf.data.pre,v 1.438 2007/05/26 06:38:03 wessels Exp $
#
#
# SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -2922,6 +2922,16 @@
matching line.
DOC_END
+NAME: clientside_tos
+TYPE: acl_tos
+DEFAULT: none
+LOC: Config.accessList.clientside_tos
+DOC_START
+ Allows you to select a TOS/Diffserv value to mark client-side
+ connections with, based on the username or source address
+ making the request.
+DOC_END
+
NAME: tcp_outgoing_address
TYPE: acl_address
DEFAULT: none
Index: squid3/src/client_side_request.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/client_side_request.cc,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -r1.87 -r1.88
--- squid3/src/client_side_request.cc 18 May 2007 18:26:01 -0000 1.87
+++ squid3/src/client_side_request.cc 26 May 2007 06:38:04 -0000 1.88
@@ -1,6 +1,6 @@
/*
- * $Id: client_side_request.cc,v 1.87 2007/05/18 18:26:01 wessels Exp $
+ * $Id: client_side_request.cc,v 1.88 2007/05/26 06:38:04 wessels Exp $
*
* DEBUG: section 85 Client-side Request Routines
* AUTHOR: Robert Collins (Originally Duane Wessels in client_side.c)
@@ -999,6 +999,8 @@
* the callout. This is strictly for convenience.
*/
+extern int aclMapTOS (acl_tos * head, ACLChecklist * ch);
+
void
ClientHttpRequest::doCallouts()
{
@@ -1049,6 +1051,20 @@
}
}
+ if (!calloutContext->clientside_tos_done) {
+ calloutContext->clientside_tos_done = true;
+ if (getConn() != NULL) {
+ ACLChecklist ch;
+ ch.src_addr = request->client_addr;
+ ch.my_addr = request->my_addr;
+ ch.my_port = request->my_port;
+ ch.request = HTTPMSGLOCK(request);
+ int tos = aclMapTOS(Config.accessList.clientside_tos, &ch);
+ if (tos)
+ comm_set_tos(getConn()->fd, tos);
+ }
+ }
+
cbdataReferenceDone(calloutContext->http);
delete calloutContext;
calloutContext = NULL;
Index: squid3/src/comm.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/comm.cc,v
retrieving revision 1.430
retrieving revision 1.431
diff -u -r1.430 -r1.431
--- squid3/src/comm.cc 30 Apr 2007 16:56:09 -0000 1.430
+++ squid3/src/comm.cc 26 May 2007 06:38:04 -0000 1.431
@@ -1,6 +1,6 @@
/*
- * $Id: comm.cc,v 1.430 2007/04/30 16:56:09 wessels Exp $
+ * $Id: comm.cc,v 1.431 2007/05/26 06:38:04 wessels Exp $
*
* DEBUG: section 5 Socket Functions
* AUTHOR: Harvest Derived
@@ -822,6 +822,21 @@
return anErrno == ENFILE || anErrno == EMFILE;
}
+int
+comm_set_tos(int fd, int tos)
+{
+#ifdef IP_TOS
+ int x = setsockopt(fd, IPPROTO_IP, IP_TOS, (char *) &tos, sizeof(int));
+ if (x < 0)
+ debugs(50, 1, "comm_set_tos: setsockopt(IP_TOS) on FD " << fd << ": " << xstrerror());
+ return x;
+#else
+ debugs(50, 0, "comm_set_tos: setsockopt(IP_TOS) not supported on this platform");
+ return -1
+#endif
+}
+
+
/* Create a socket. Default is blocking, stream (TCP) socket. IO_TYPE
* is OR of flags specified in defines.h:COMM_* */
int
Index: squid3/src/comm.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/comm.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- squid3/src/comm.h 31 Oct 2006 23:30:57 -0000 1.28
+++ squid3/src/comm.h 26 May 2007 06:38:04 -0000 1.29
@@ -53,6 +53,7 @@
SQUIDCEXTERN int comm_openex(int, int, struct IN_ADDR, u_short, int, unsigned char TOS, const char *);
SQUIDCEXTERN u_short comm_local_port(int fd);
+SQUIDCEXTERN int comm_set_tos(int fd, int tos);
SQUIDCEXTERN void commSetSelect(int, unsigned int, PF *, void *, time_t);
Index: squid3/src/forward.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/forward.cc,v
retrieving revision 1.164
retrieving revision 1.165
diff -u -r1.164 -r1.165
--- squid3/src/forward.cc 11 May 2007 13:20:57 -0000 1.164
+++ squid3/src/forward.cc 26 May 2007 06:38:04 -0000 1.165
@@ -1,6 +1,6 @@
/*
- * $Id: forward.cc,v 1.164 2007/05/11 13:20:57 rousskov Exp $
+ * $Id: forward.cc,v 1.165 2007/05/26 06:38:04 wessels Exp $
*
* DEBUG: section 17 Request Forwarding
* AUTHOR: Duane Wessels
@@ -1197,7 +1197,11 @@
return addr;
}
-static int
+/*
+ * DPW 2007-05-19
+ * Formerly static, but now used by client_side_request.cc
+ */
+int
aclMapTOS(acl_tos * head, ACLChecklist * ch)
{
acl_tos *l;
Index: squid3/src/structs.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/structs.h,v
retrieving revision 1.556
retrieving revision 1.557
diff -u -r1.556 -r1.557
--- squid3/src/structs.h 18 May 2007 06:41:25 -0000 1.556
+++ squid3/src/structs.h 26 May 2007 06:38:05 -0000 1.557
@@ -1,6 +1,6 @@
/*
- * $Id: structs.h,v 1.556 2007/05/18 06:41:25 amosjeffries Exp $
+ * $Id: structs.h,v 1.557 2007/05/26 06:38:05 wessels Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -584,6 +584,7 @@
acl_access *reply;
acl_address *outgoing_address;
acl_tos *outgoing_tos;
+ acl_tos *clientside_tos;
#if USE_HTCP
acl_access *htcp;