]> git.ipfire.org Git - thirdparty/squid.git/blob - src/ip/Qos.cci
Merged Postfix-Prefix branch: refactor inc/decrement operators from postfix to prefix...
[thirdparty/squid.git] / src / ip / Qos.cci
1 /* Inline QOS functions */
2 #include "comm/Connection.h"
3
4 int
5 Ip::Qos::setSockTos(const Comm::ConnectionPointer &conn, tos_t tos)
6 {
7 #ifdef IP_TOS
8 int x = setsockopt(conn->fd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos_t));
9 if (x < 0)
10 debugs(50, 2, "Ip::Qos::setSockTos: setsockopt(IP_TOS) on " << conn << ": " << xstrerror());
11 return x;
12 #else
13 debugs(50, DBG_IMPORTANT, "WARNING: setsockopt(IP_TOS) not supported on this platform");
14 return -1;
15 #endif
16 }
17
18 int
19 Ip::Qos::setSockNfmark(const Comm::ConnectionPointer &conn, nfmark_t mark)
20 {
21 #if SO_MARK && USE_LIBCAP
22 int x = setsockopt(conn->fd, SOL_SOCKET, SO_MARK, &mark, sizeof(nfmark_t));
23 if (x < 0)
24 debugs(50, 2, "setSockNfmark: setsockopt(SO_MARK) on " << conn << ": " << xstrerror());
25 return x;
26 #elif USE_LIBCAP
27 debugs(50, DBG_IMPORTANT, "WARNING: setsockopt(SO_MARK) not supported on this platform");
28 return -1;
29 #else
30 debugs(50, DBG_IMPORTANT, "WARNING: Netfilter marking disabled (netfilter marking requires build with LIBCAP)");
31 return -1;
32 #endif
33 }
34
35 bool
36 Ip::Qos::Config::isHitTosActive() const
37 {
38 return (tosLocalHit || tosSiblingHit || tosParentHit || tosMiss || preserveMissTos);
39 }
40
41 bool
42 Ip::Qos::Config::isHitNfmarkActive() const
43 {
44 return (markLocalHit || markSiblingHit || markParentHit || markMiss || preserveMissMark);
45 }
46
47 bool
48 Ip::Qos::Config::isAclNfmarkActive() const
49 {
50 acl_nfmark * nfmarkAcls [] = { nfmarkToServer, nfmarkToClient };
51
52 for (int i=0; i<2; ++i) {
53 while (nfmarkAcls[i]) {
54 acl_nfmark *l = nfmarkAcls[i];
55 if (l->nfmark > 0)
56 return true;
57 nfmarkAcls[i] = l->next;
58 }
59 }
60
61 return false;
62 }
63
64 bool
65 Ip::Qos::Config::isAclTosActive() const
66 {
67 acl_tos * tosAcls [] = { tosToServer, tosToClient };
68
69 for (int i=0; i<2; ++i) {
70 while (tosAcls[i]) {
71 acl_tos *l = tosAcls[i];
72 if (l->tos > 0)
73 return true;
74 tosAcls[i] = l->next;
75 }
76 }
77
78 return false;
79 }