blob: 532348ec9a36ced1169db09773bcd21dcc2a66f1 [file] [log] [blame]
Willy Tarreaubaaee002006-06-26 02:48:02 +02001/*
2 include/types/proxy.h
3 This file defines everything related to proxies.
4
Willy Tarreaua8cff1d2007-04-09 16:10:57 +02005 Copyright (C) 2000-2007 Willy Tarreau - w@1wt.eu
Willy Tarreaubaaee002006-06-26 02:48:02 +02006
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation, version 2.1
10 exclusively.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20*/
21
22#ifndef _TYPES_PROXY_H
23#define _TYPES_PROXY_H
24
Willy Tarreau7d677682006-10-15 23:18:47 +020025#include <sys/types.h>
26#include <sys/socket.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020027#include <netinet/in.h>
28#include <arpa/inet.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020029
Willy Tarreau2dd0d472006-06-29 17:53:05 +020030#include <common/appsession.h>
31#include <common/chtbl.h>
Willy Tarreaue3ba5f02006-06-29 18:54:54 +020032#include <common/config.h>
Willy Tarreau2dd0d472006-06-29 17:53:05 +020033#include <common/mini-clist.h>
34#include <common/regex.h>
Willy Tarreaua8cff1d2007-04-09 16:10:57 +020035#include <common/tools.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020036
Willy Tarreaueb0c6142007-05-07 00:53:22 +020037#include <types/acl.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020038#include <types/buffers.h>
Willy Tarreau0f772532006-12-23 20:51:41 +010039#include <types/httperr.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020040#include <types/session.h>
41#include <types/server.h>
42
43/* values for proxy->state */
44#define PR_STNEW 0
45#define PR_STIDLE 1
46#define PR_STRUN 2
47#define PR_STSTOPPED 3
48#define PR_STPAUSED 4
49#define PR_STERROR 5
50
51/* values for proxy->mode */
52#define PR_MODE_TCP 0
53#define PR_MODE_HTTP 1
54#define PR_MODE_HEALTH 2
55
Willy Tarreau977b8e42006-12-29 14:19:17 +010056/* flag values for proxy->cap. This is a bitmask of capabilities supported by the proxy */
57#define PR_CAP_NONE 0x0000
58#define PR_CAP_FE 0x0001
59#define PR_CAP_BE 0x0002
60#define PR_CAP_RS 0x0004
61#define PR_CAP_LISTEN (PR_CAP_FE|PR_CAP_BE|PR_CAP_RS)
62
Willy Tarreaubaaee002006-06-26 02:48:02 +020063/* return codes for start_proxies */
64#define ERR_NONE 0 /* no error */
65#define ERR_RETRYABLE 1 /* retryable error, may be cumulated */
66#define ERR_FATAL 2 /* fatal error, may be cumulated */
67
68
69struct listener {
70 int fd; /* the listen socket */
71 struct sockaddr_storage addr; /* the address we listen to */
72 struct listener *next; /* next address or NULL */
73};
74
75struct proxy {
76 struct listener *listen; /* the listen addresses and sockets */
77 struct in_addr mon_net, mon_mask; /* don't forward connections from this net (network order) FIXME: should support IPv6 */
78 int state; /* proxy state */
Willy Tarreau35d66b02007-01-02 00:28:21 +010079 int options; /* PR_O_REDISP, PR_O_TRANSP, ... */
80 int mode; /* mode = PR_MODE_TCP, PR_MODE_HTTP or PR_MODE_HEALTH */
Willy Tarreaubaaee002006-06-26 02:48:02 +020081 struct sockaddr_in dispatch_addr; /* the default address to connect to */
Willy Tarreau5fdfb912007-01-01 23:11:07 +010082 union {
83 struct proxy *be; /* default backend, or NULL if none set */
84 char *name; /* default backend name during config parse */
85 } defbe;
Willy Tarreaueb0c6142007-05-07 00:53:22 +020086 struct list acl; /* ACL declared on this proxy */
Willy Tarreau5c8e3e02007-05-07 00:58:25 +020087 struct list block_cond; /* early blocking conditions (chained) */
Willy Tarreaubaaee002006-06-26 02:48:02 +020088 struct server *srv; /* known servers */
Willy Tarreau1c47f852006-07-09 08:22:27 +020089 int srv_act, srv_bck; /* # of running servers */
90 int tot_wact, tot_wbck; /* total weights of active and backup servers */
Willy Tarreaubaaee002006-06-26 02:48:02 +020091 struct server **srv_map; /* the server map used to apply weights */
Willy Tarreau1c47f852006-07-09 08:22:27 +020092 int srv_map_sz; /* the size of the effective server map */
93 int srv_rr_idx; /* next server to be elected in round robin mode */
Willy Tarreaubaaee002006-06-26 02:48:02 +020094 char *cookie_name; /* name of the cookie to look for */
95 int cookie_len; /* strlen(cookie_name), computed only once */
Willy Tarreau1c47f852006-07-09 08:22:27 +020096 char *appsession_name; /* name of the cookie to look for */
Willy Tarreaubaaee002006-06-26 02:48:02 +020097 int appsession_name_len; /* strlen(appsession_name), computed only once */
Willy Tarreau1c47f852006-07-09 08:22:27 +020098 int appsession_len; /* length of the appsession cookie value to be used */
Willy Tarreaubaaee002006-06-26 02:48:02 +020099 CHTbl htbl_proxy; /* Per Proxy hashtable */
100 char *capture_name; /* beginning of the name of the cookie to capture */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200101 int capture_namelen; /* length of the cookie name to match */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200102 int capture_len; /* length of the string to be captured */
103 struct uri_auth *uri_auth; /* if non-NULL, the (list of) per-URI authentications */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200104 char *monitor_uri; /* a special URI to which we respond with HTTP/200 OK */
105 int monitor_uri_len; /* length of the string above. 0 if unused */
Willy Tarreaud825eef2007-05-12 22:35:00 +0200106 struct timeval clitimeout; /* client I/O timeout (in milliseconds) */
107 struct timeval srvtimeout; /* server I/O timeout (in milliseconds) */
108 struct timeval contimeout; /* connect timeout (in milliseconds) */
109 struct timeval appsession_timeout;
Willy Tarreaubaaee002006-06-26 02:48:02 +0200110 char *id; /* proxy id */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200111 struct list pendconns; /* pending connections with no server assigned yet */
112 int nbpend, nbpend_max; /* number of pending connections with no server assigned yet */
113 int totpend; /* total number of pending connections on this instance (for stats) */
Willy Tarreauf1221aa2006-12-17 22:14:12 +0100114 unsigned int feconn, feconn_max; /* # of active frontend sessions */
115 unsigned int beconn, beconn_max; /* # of active backend sessions */
116 unsigned int cum_feconn, cum_beconn; /* cumulated number of processed sessions */
Willy Tarreau86034312006-12-29 00:10:33 +0100117 unsigned int maxconn; /* max # of active sessions on the frontend */
118 unsigned int fullconn; /* #conns on backend above which servers are used at full load */
Willy Tarreau7ac51f62007-03-25 16:00:04 +0200119 struct in_addr except_net, except_mask; /* don't x-forward-for for this address. FIXME: should support IPv6 */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200120 unsigned failed_conns, failed_resp; /* failed connect() and responses */
Willy Tarreauc0dde7a2007-01-01 21:38:07 +0100121 unsigned denied_req, denied_resp; /* blocked requests/responses because of security concerns */
122 unsigned failed_req; /* failed requests (eg: invalid or timeout) */
Willy Tarreau35d66b02007-01-02 00:28:21 +0100123 long long bytes_in; /* number of bytes transferred from the client to the server */
124 long long bytes_out; /* number of bytes transferred from the server to the client */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200125 int conn_retries; /* maximum number of connect retries */
Willy Tarreau977b8e42006-12-29 14:19:17 +0100126 int cap; /* supported capabilities (PR_CAP_*) */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200127 struct sockaddr_in source_addr; /* the address to which we want to bind for connect() */
Willy Tarreau77074d52006-11-12 23:57:19 +0100128#ifdef CONFIG_HAP_CTTPROXY
129 struct sockaddr_in tproxy_addr; /* non-local address we want to bind to for connect() */
130#endif
Willy Tarreaubaaee002006-06-26 02:48:02 +0200131 struct proxy *next;
Willy Tarreau1c47f852006-07-09 08:22:27 +0200132 struct sockaddr_in logsrv1, logsrv2; /* 2 syslog servers */
133 signed char logfac1, logfac2; /* log facility for both servers. -1 = disabled */
134 int loglev1, loglev2; /* log level for each server, 7 by default */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200135 int to_log; /* things to be logged (LW_*) */
136 struct timeval stop_time; /* date to stop listening, when stopping != 0 */
137 int nb_reqadd, nb_rspadd;
138 struct hdr_exp *req_exp; /* regular expressions for request headers */
139 struct hdr_exp *rsp_exp; /* regular expressions for response headers */
140 int nb_req_cap, nb_rsp_cap; /* # of headers to be captured */
141 struct cap_hdr *req_cap; /* chained list of request headers to be captured */
142 struct cap_hdr *rsp_cap; /* chained list of response headers to be captured */
143 void *req_cap_pool, *rsp_cap_pool; /* pools of pre-allocated char ** used to build the sessions */
Willy Tarreaue5f20dc2006-12-03 15:21:35 +0100144 void *hdr_idx_pool; /* pools of pre-allocated int* used for headers indexing */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200145 char *req_add[MAX_NEWHDR], *rsp_add[MAX_NEWHDR]; /* headers to be added */
146 int grace; /* grace time after stop request */
Willy Tarreauf3c69202006-07-09 16:42:34 +0200147 char *check_req; /* HTTP or SSL request to use for PR_O_HTTP_CHK|PR_O_SSL3_CHK */
148 int check_len; /* Length of the HTTP or SSL3 request */
Willy Tarreau0f772532006-12-23 20:51:41 +0100149 struct chunk errmsg[HTTP_ERR_SIZE]; /* default or customized error messages for known errors */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200150};
151
152extern struct proxy *proxy;
Willy Tarreaubaaee002006-06-26 02:48:02 +0200153
154#endif /* _TYPES_PROXY_H */
155
156/*
157 * Local variables:
158 * c-indent-level: 8
159 * c-basic-offset: 8
160 * End:
161 */