1 b62a1edf 2026-06-03 rsadowski /* $OpenBSD: relayd.h,v 1.280 2026/06/03 19:26:56 rsadowski Exp $ */
4 4a9b7b24 2016-07-29 reyk * Copyright (c) 2006 - 2016 Reyk Floeter <reyk@openbsd.org>
5 8c736326 2007-09-28 pyr * Copyright (c) 2006, 2007 Pierre-Yves Ritschard <pyr@openbsd.org>
6 41042ecc 2006-12-16 reyk * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
8 41042ecc 2006-12-16 reyk * Permission to use, copy, modify, and distribute this software for any
9 41042ecc 2006-12-16 reyk * purpose with or without fee is hereby granted, provided that the above
10 41042ecc 2006-12-16 reyk * copyright notice and this permission notice appear in all copies.
12 41042ecc 2006-12-16 reyk * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 41042ecc 2006-12-16 reyk * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 41042ecc 2006-12-16 reyk * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15 41042ecc 2006-12-16 reyk * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 41042ecc 2006-12-16 reyk * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 41042ecc 2006-12-16 reyk * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 41042ecc 2006-12-16 reyk * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 d6302b55 2015-06-11 reyk #ifndef RELAYD_H
22 d6302b55 2015-06-11 reyk #define RELAYD_H
24 d93c36af 2015-01-22 reyk #include <sys/types.h>
25 d93c36af 2015-01-22 reyk #include <sys/socket.h>
26 d93c36af 2015-01-22 reyk #include <sys/queue.h>
27 30640247 2007-02-22 reyk #include <sys/tree.h>
28 d93c36af 2015-01-22 reyk #include <sys/time.h>
29 04a2f953 2020-09-14 martijn #include <sys/un.h>
31 d93c36af 2015-01-22 reyk #include <net/if.h>
32 73162055 2017-01-24 benno #include <net/pfvar.h>
34 d93c36af 2015-01-22 reyk #include <stdarg.h>
35 274e1f2b 2010-12-31 guenther #include <limits.h>
36 3e04b122 2014-12-18 reyk #include <siphash.h>
37 d93c36af 2015-01-22 reyk #include <event.h>
38 d93c36af 2015-01-22 reyk #include <imsg.h>
40 d93c36af 2015-01-22 reyk #include <openssl/ssl.h>
41 f4a6eef3 2017-05-27 claudio #include <tls.h>
43 a1f7e67d 2012-07-09 deraadt #ifndef nitems
44 a1f7e67d 2012-07-09 deraadt #define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
47 6d0767ae 2007-12-07 reyk #define CONF_FILE "/etc/relayd.conf"
48 6d0767ae 2007-12-07 reyk #define RELAYD_SOCKET "/var/run/relayd.sock"
49 3faac10b 2007-01-09 pyr #define PF_SOCKET "/dev/pf"
50 6d0767ae 2007-12-07 reyk #define RELAYD_USER "_relayd"
51 6d0767ae 2007-12-07 reyk #define RELAYD_ANCHOR "relayd"
52 6d0767ae 2007-12-07 reyk #define RELAYD_SERVERNAME "OpenBSD relayd"
53 3faac10b 2007-01-09 pyr #define CHECK_TIMEOUT 200
54 3faac10b 2007-01-09 pyr #define CHECK_INTERVAL 10
55 3faac10b 2007-01-09 pyr #define EMPTY_TABLE UINT_MAX
56 3faac10b 2007-01-09 pyr #define EMPTY_ID UINT_MAX
57 69fde657 2014-07-09 reyk #define LABEL_NAME_SIZE 1024
58 69fde657 2014-07-09 reyk #define TAG_NAME_SIZE 64
59 4727a21a 2007-11-20 pyr #define TABLE_NAME_SIZE 64
60 39bc6125 2009-08-13 reyk #define RT_LABEL_SIZE 32
61 3faac10b 2007-01-09 pyr #define MAX_NAME_SIZE 64
62 3faac10b 2007-01-09 pyr #define SRV_MAX_VIRTS 16
63 096ff28b 2014-12-12 reyk #define TLS_NAME_SIZE 512
64 f4a6eef3 2017-05-27 claudio #define TLS_CERT_HASH_SIZE 128
65 01c76597 2015-07-18 benno #define RELAY_MAX_PREFETCH 256
66 01c76597 2015-07-18 benno #define RELAY_MIN_PREFETCHED 32
68 61cca588 2012-09-21 benno #define FD_RESERVE 5
70 62110500 2018-04-18 claudio #define RELAY_MAX_BACKLOG 512
71 30640247 2007-02-22 reyk #define RELAY_TIMEOUT 600
72 30640247 2007-02-22 reyk #define RELAY_CACHESIZE -1 /* use default size */
73 c525adb9 2014-04-18 reyk #define RELAY_NUMPROC 3
74 30640247 2007-02-22 reyk #define RELAY_MAXHOSTS 32
75 b688796e 2017-11-15 benno #define RELAY_MAXHEADERLENGTH 131072
76 b688796e 2017-11-15 benno #define RELAY_DEFHEADERLENGTH 8192
77 30640247 2007-02-22 reyk #define RELAY_STATINTERVAL 60
78 ed29f86d 2007-02-24 reyk #define RELAY_BACKLOG 10
79 d8e9af71 2007-11-24 reyk #define RELAY_MAXLOOKUPLEVELS 5
80 3a75ae45 2012-10-04 reyk #define RELAY_OUTOF_FD_RETRIES 5
81 da2e55f8 2015-12-02 benno #define RELAY_MAX_HASH_RETRIES 5
82 5ba5de82 2016-09-01 claudio #define RELAY_TLS_PRIV_TIMEOUT 1000 /* wait 1sec for the ca */
84 591e6ab5 2011-05-19 reyk #define CONFIG_RELOAD 0x00
85 591e6ab5 2011-05-19 reyk #define CONFIG_TABLES 0x01
86 591e6ab5 2011-05-19 reyk #define CONFIG_RDRS 0x02
87 591e6ab5 2011-05-19 reyk #define CONFIG_RELAYS 0x04
88 591e6ab5 2011-05-19 reyk #define CONFIG_PROTOS 0x08
89 591e6ab5 2011-05-19 reyk #define CONFIG_ROUTES 0x10
90 591e6ab5 2011-05-19 reyk #define CONFIG_RTS 0x20
91 c525adb9 2014-04-18 reyk #define CONFIG_CA_ENGINE 0x40
92 ce78c3f2 2017-11-27 claudio #define CONFIG_CERTS 0x80
93 591e6ab5 2011-05-19 reyk #define CONFIG_ALL 0xff
95 ae98db81 2006-12-25 reyk #define SMALL_READ_BUF_SIZE 1024
96 9920aa41 2007-01-09 reyk #define ICMP_BUF_SIZE 64
97 779fb716 2015-08-21 yasuoka #define ICMP_RCVBUF_SIZE 262144
99 04a2f953 2020-09-14 martijn #define AGENTX_RECONNECT_TIMEOUT { 3, 0 } /* sec, usec */
101 9179ded7 2016-09-03 reyk #define PROC_PARENT_SOCK_FILENO 3
102 9179ded7 2016-09-03 reyk #define PROC_MAX_INSTANCES 32
104 a8e8fb8b 2008-02-04 thib #if DEBUG > 1
105 a8e8fb8b 2008-02-04 thib #define DPRINTF log_debug
106 03668b6b 2013-05-30 reyk #define DEBUG_CERT 1
108 a8e8fb8b 2008-02-04 thib #define DPRINTF(x...) do {} while(0)
111 c0255773 2008-07-09 reyk /* Used for DNS request ID randomization */
112 c0255773 2008-07-09 reyk struct shuffle {
113 c0255773 2008-07-09 reyk u_int16_t id_shuffle[65536];
114 c0255773 2008-07-09 reyk int isindex;
117 4ab45c57 2006-12-16 reyk typedef u_int32_t objid_t;
119 41042ecc 2006-12-16 reyk struct ctl_status {
120 41042ecc 2006-12-16 reyk objid_t id;
122 30640247 2007-02-22 reyk int retry_cnt;
123 30640247 2007-02-22 reyk u_long check_cnt;
124 b2665266 2008-12-05 reyk u_int16_t he;
127 d2170f6d 2006-12-16 reyk struct ctl_id {
128 d2170f6d 2006-12-16 reyk objid_t id;
129 d2170f6d 2006-12-16 reyk char name[MAX_NAME_SIZE];
132 0f7a5e2e 2012-10-03 reyk struct ctl_relaytable {
133 0f7a5e2e 2012-10-03 reyk objid_t id;
134 0f7a5e2e 2012-10-03 reyk objid_t relayid;
136 016b3271 2012-10-03 reyk u_int32_t flags;
139 fe4913ec 2019-05-31 reyk enum fd_type {
140 c4efe747 2024-10-28 tb RELAY_FD_CERT = 1,
141 c4efe747 2024-10-28 tb RELAY_FD_CACERT = 2,
142 c4efe747 2024-10-28 tb RELAY_FD_CAFILE = 3,
143 c4efe747 2024-10-28 tb RELAY_FD_KEY = 4,
144 c4efe747 2024-10-28 tb RELAY_FD_OCSP = 5,
145 c4efe747 2024-10-28 tb RELAY_FD_CLIENTCACERT = 6
148 ce78c3f2 2017-11-27 claudio struct ctl_relayfd {
149 fe4913ec 2019-05-31 reyk objid_t id;
150 ce78c3f2 2017-11-27 claudio objid_t relayid;
151 fe4913ec 2019-05-31 reyk enum fd_type type;
154 292100ef 2007-05-29 reyk struct ctl_script {
155 292100ef 2007-05-29 reyk objid_t host;
156 292100ef 2007-05-29 reyk int retval;
157 1ffcf252 2011-05-26 reyk struct timeval timeout;
158 2f6ec04d 2015-01-16 deraadt char name[HOST_NAME_MAX+1];
159 2f6ec04d 2015-01-16 deraadt char path[PATH_MAX];
162 30640247 2007-02-22 reyk struct ctl_demote {
163 30640247 2007-02-22 reyk char group[IFNAMSIZ];
167 ae98db81 2006-12-25 reyk struct ctl_icmp_event {
168 6d0767ae 2007-12-07 reyk struct relayd *env;
171 3faac10b 2007-01-09 pyr int last_up;
172 3faac10b 2007-01-09 pyr struct event ev;
173 3faac10b 2007-01-09 pyr struct timeval tv_start;
176 ae98db81 2006-12-25 reyk struct ctl_tcp_event {
178 fb0e4fa0 2010-05-26 nicm struct ibuf *buf;
179 816ddb53 2007-01-11 reyk struct host *host;
180 816ddb53 2007-01-11 reyk struct table *table;
181 3e2ddb06 2007-02-22 reyk struct timeval tv_start;
182 3e2ddb06 2007-02-22 reyk struct event ev;
183 cbeeaf47 2007-01-12 pyr int (*validate_read)(struct ctl_tcp_event *);
184 cbeeaf47 2007-01-12 pyr int (*validate_close)(struct ctl_tcp_event *);
186 f4a6eef3 2017-05-27 claudio struct tls *tls;
189 e624e530 2007-02-27 reyk enum direction {
190 69fde657 2014-07-09 reyk RELAY_DIR_INVALID = -1,
191 69fde657 2014-07-09 reyk RELAY_DIR_ANY = 0,
192 69fde657 2014-07-09 reyk RELAY_DIR_REQUEST = 1,
193 69fde657 2014-07-09 reyk RELAY_DIR_RESPONSE = 2
196 6b2aabbf 2015-06-12 reyk enum relay_state {
197 6b2aabbf 2015-06-12 reyk STATE_INIT,
198 6b2aabbf 2015-06-12 reyk STATE_PENDING,
199 6b2aabbf 2015-06-12 reyk STATE_PRECONNECT,
200 f877c700 2017-11-28 claudio STATE_CONNECTED,
201 b8764354 2019-05-13 reyk STATE_CLOSED,
202 f877c700 2017-11-28 claudio STATE_DONE
205 30640247 2007-02-22 reyk struct ctl_relay_event {
207 30640247 2007-02-22 reyk in_port_t port;
208 30640247 2007-02-22 reyk struct sockaddr_storage ss;
209 30640247 2007-02-22 reyk struct bufferevent *bev;
210 30640247 2007-02-22 reyk struct evbuffer *output;
211 30640247 2007-02-22 reyk struct ctl_relay_event *dst;
212 63a1d849 2011-04-24 bluhm struct rsession *con;
214 f4a6eef3 2017-05-27 claudio struct tls *tls;
215 f4a6eef3 2017-05-27 claudio struct tls_config *tls_cfg;
216 14dad9a3 2017-11-28 claudio struct tls *tls_ctx;
218 f4a6eef3 2017-05-27 claudio uint8_t *tlscert;
219 f4a6eef3 2017-05-27 claudio size_t tlscert_len;
221 6caeec2c 2011-04-12 bluhm off_t splicelen;
222 8a9dc1ef 2012-07-09 deraadt off_t toread;
223 e442b42f 2014-07-14 bluhm size_t headerlen;
226 e442b42f 2014-07-14 bluhm int timedout;
227 6b2aabbf 2015-06-12 reyk enum relay_state state;
228 e624e530 2007-02-27 reyk enum direction dir;
230 69fde657 2014-07-09 reyk /* protocol-specific descriptor */
231 69fde657 2014-07-09 reyk void *desc;
234 268a5dac 2013-02-05 bluhm enum httpchunk {
235 268a5dac 2013-02-05 bluhm TOREAD_UNLIMITED = -1,
236 268a5dac 2013-02-05 bluhm TOREAD_HTTP_HEADER = -2,
237 268a5dac 2013-02-05 bluhm TOREAD_HTTP_CHUNK_LENGTH = -3,
238 268a5dac 2013-02-05 bluhm TOREAD_HTTP_CHUNK_TRAILER = -4
241 30640247 2007-02-22 reyk struct ctl_natlook {
242 30640247 2007-02-22 reyk objid_t id;
245 30640247 2007-02-22 reyk struct sockaddr_storage src;
246 30640247 2007-02-22 reyk struct sockaddr_storage dst;
247 30640247 2007-02-22 reyk struct sockaddr_storage rsrc;
248 30640247 2007-02-22 reyk struct sockaddr_storage rdst;
249 30640247 2007-02-22 reyk in_port_t rsport;
250 30640247 2007-02-22 reyk in_port_t rdport;
255 6d5340e6 2008-06-11 reyk struct ctl_bindany {
256 6d5340e6 2008-06-11 reyk objid_t bnd_id;
257 6d5340e6 2008-06-11 reyk int bnd_proc;
259 6d5340e6 2008-06-11 reyk struct sockaddr_storage bnd_ss;
260 6d5340e6 2008-06-11 reyk in_port_t bnd_port;
261 6d5340e6 2008-06-11 reyk int bnd_proto;
264 c525adb9 2014-04-18 reyk struct ctl_keyop {
265 f4a6eef3 2017-05-27 claudio char cko_hash[TLS_CERT_HASH_SIZE];
266 c525adb9 2014-04-18 reyk int cko_proc;
267 c525adb9 2014-04-18 reyk int cko_flen;
268 c525adb9 2014-04-18 reyk int cko_tlen;
269 c525adb9 2014-04-18 reyk int cko_padding;
270 e7fdc47f 2021-03-23 claudio u_int cko_cookie;
273 30640247 2007-02-22 reyk struct ctl_stats {
274 30640247 2007-02-22 reyk objid_t id;
277 983a954b 2013-04-27 benno u_int64_t interval;
278 90f6aaca 2007-12-20 reyk u_int64_t cnt;
279 90f6aaca 2007-12-20 reyk u_int32_t tick;
280 90f6aaca 2007-12-20 reyk u_int32_t avg;
281 90f6aaca 2007-12-20 reyk u_int32_t last;
282 90f6aaca 2007-12-20 reyk u_int32_t avg_hour;
283 90f6aaca 2007-12-20 reyk u_int32_t last_hour;
284 90f6aaca 2007-12-20 reyk u_int32_t avg_day;
285 90f6aaca 2007-12-20 reyk u_int32_t last_day;
288 69fde657 2014-07-09 reyk enum key_option {
289 69fde657 2014-07-09 reyk KEY_OPTION_NONE = 0,
290 69fde657 2014-07-09 reyk KEY_OPTION_APPEND,
291 69fde657 2014-07-09 reyk KEY_OPTION_SET,
292 69fde657 2014-07-09 reyk KEY_OPTION_REMOVE,
293 69fde657 2014-07-09 reyk KEY_OPTION_HASH,
294 d498e80a 2021-01-09 denis KEY_OPTION_LOG,
295 d498e80a 2021-01-09 denis KEY_OPTION_STRIP
298 69fde657 2014-07-09 reyk enum key_type {
299 69fde657 2014-07-09 reyk KEY_TYPE_NONE = 0,
300 69fde657 2014-07-09 reyk KEY_TYPE_COOKIE,
301 69fde657 2014-07-09 reyk KEY_TYPE_HEADER,
302 69fde657 2014-07-09 reyk KEY_TYPE_PATH,
303 69fde657 2014-07-09 reyk KEY_TYPE_QUERY,
304 69fde657 2014-07-09 reyk KEY_TYPE_URL,
305 69fde657 2014-07-09 reyk KEY_TYPE_MAX
308 69fde657 2014-07-09 reyk struct ctl_kvlen {
309 69fde657 2014-07-09 reyk ssize_t key;
310 69fde657 2014-07-09 reyk ssize_t value;
313 69fde657 2014-07-09 reyk struct ctl_rule {
314 69fde657 2014-07-09 reyk struct ctl_kvlen kvlen[KEY_TYPE_MAX];
317 69fde657 2014-07-09 reyk enum digest_type {
318 69fde657 2014-07-09 reyk DIGEST_NONE = 0,
319 69fde657 2014-07-09 reyk DIGEST_SHA1 = 1,
320 69fde657 2014-07-09 reyk DIGEST_MD5 = 2
323 2d9632ee 2014-07-11 reyk TAILQ_HEAD(kvlist, kv);
324 2d9632ee 2014-07-11 reyk RB_HEAD(kvtree, kv);
326 69fde657 2014-07-09 reyk struct kv {
327 69fde657 2014-07-09 reyk char *kv_key;
328 69fde657 2014-07-09 reyk char *kv_value;
330 69fde657 2014-07-09 reyk enum key_type kv_type;
331 69fde657 2014-07-09 reyk enum key_option kv_option;
332 69fde657 2014-07-09 reyk enum digest_type kv_digest;
334 69fde657 2014-07-09 reyk #define KV_FLAG_MACRO 0x01
335 69fde657 2014-07-09 reyk #define KV_FLAG_INVALID 0x02
336 2d9632ee 2014-07-11 reyk #define KV_FLAG_GLOBBING 0x04
337 69fde657 2014-07-09 reyk u_int8_t kv_flags;
339 2d9632ee 2014-07-11 reyk struct kvlist kv_children;
340 2d9632ee 2014-07-11 reyk struct kv *kv_parent;
341 2d9632ee 2014-07-11 reyk TAILQ_ENTRY(kv) kv_entry;
343 2d9632ee 2014-07-11 reyk RB_ENTRY(kv) kv_node;
345 69fde657 2014-07-09 reyk /* A few pointers used by the rule actions */
346 69fde657 2014-07-09 reyk struct kv *kv_match;
347 2d9632ee 2014-07-11 reyk struct kvtree *kv_matchtree;
349 69fde657 2014-07-09 reyk TAILQ_ENTRY(kv) kv_match_entry;
350 69fde657 2014-07-09 reyk TAILQ_ENTRY(kv) kv_rule_entry;
351 2d9632ee 2014-07-11 reyk TAILQ_ENTRY(kv) kv_action_entry;
354 09913286 2008-09-29 reyk struct portrange {
355 09913286 2008-09-29 reyk in_port_t val[2];
356 09913286 2008-09-29 reyk u_int8_t op;
359 41042ecc 2006-12-16 reyk struct address {
360 591e6ab5 2011-05-19 reyk objid_t rdrid;
361 41042ecc 2006-12-16 reyk struct sockaddr_storage ss;
362 d250825b 2009-04-24 reyk int ipproto;
363 09913286 2008-09-29 reyk struct portrange port;
364 41042ecc 2006-12-16 reyk char ifname[IFNAMSIZ];
365 41042ecc 2006-12-16 reyk TAILQ_ENTRY(address) entry;
367 41042ecc 2006-12-16 reyk TAILQ_HEAD(addresslist, address);
369 3e04b122 2014-12-18 reyk union hashkey {
370 3e04b122 2014-12-18 reyk /* Simplified version of pf_poolhashkey */
371 3e04b122 2014-12-18 reyk u_int32_t data[4];
372 3e04b122 2014-12-18 reyk SIPHASH_KEY siphashkey;
375 f6a2ad33 2007-06-18 pyr #define F_DISABLE 0x00000001
376 f6a2ad33 2007-06-18 pyr #define F_BACKUP 0x00000002
377 f6a2ad33 2007-06-18 pyr #define F_USED 0x00000004
378 f6a2ad33 2007-06-18 pyr #define F_DOWN 0x00000008
379 f6a2ad33 2007-06-18 pyr #define F_ADD 0x00000010
380 f6a2ad33 2007-06-18 pyr #define F_DEL 0x00000020
381 f6a2ad33 2007-06-18 pyr #define F_CHANGED 0x00000040
382 f6a2ad33 2007-06-18 pyr #define F_STICKY 0x00000080
383 f6a2ad33 2007-06-18 pyr #define F_CHECK_DONE 0x00000100
384 f6a2ad33 2007-06-18 pyr #define F_ACTIVE_RULESET 0x00000200
385 f6a2ad33 2007-06-18 pyr #define F_CHECK_SENT 0x00000400
386 096ff28b 2014-12-12 reyk #define F_TLS 0x00000800
387 f6a2ad33 2007-06-18 pyr #define F_NATLOOK 0x00001000
388 f6a2ad33 2007-06-18 pyr #define F_DEMOTE 0x00002000
389 f6a2ad33 2007-06-18 pyr #define F_LOOKUP_PATH 0x00004000
390 f6a2ad33 2007-06-18 pyr #define F_DEMOTED 0x00008000
391 7ba7514d 2007-09-10 reyk #define F_UDP 0x00010000
392 691e5d5c 2007-11-20 reyk #define F_RETURN 0x00020000
393 04a2f953 2020-09-14 martijn #define F_AGENTX 0x00040000
394 982e86f7 2008-05-06 pyr #define F_NEEDPF 0x00080000
395 09913286 2008-09-29 reyk #define F_PORT 0x00100000
396 096ff28b 2014-12-12 reyk #define F_TLSCLIENT 0x00200000
397 39bc6125 2009-08-13 reyk #define F_NEEDRT 0x00400000
398 9832d300 2010-10-26 reyk #define F_MATCH 0x00800000
399 9c52a29e 2011-04-07 reyk #define F_DIVERT 0x01000000
400 12566ac9 2011-05-26 reyk #define F_SCRIPT 0x02000000
401 096ff28b 2014-12-12 reyk #define F_TLSINSPECT 0x04000000
402 3e04b122 2014-12-18 reyk #define F_HASHKEY 0x08000000
403 04a2f953 2020-09-14 martijn #define F_AGENTX_TRAPONLY 0x10000000
404 199fb283 2024-06-17 sashan #define F_PFLOG 0x20000000
405 80347df3 2026-02-18 kirill #define F_PROXYV1 0x40000000
406 80347df3 2026-02-18 kirill #define F_PROXYV2 0x80000000
408 ee6d33e4 2011-04-12 reyk #define F_BITS \
409 ee6d33e4 2011-04-12 reyk "\10\01DISABLE\02BACKUP\03USED\04DOWN\05ADD\06DEL\07CHANGED" \
410 ee6d33e4 2011-04-12 reyk "\10STICKY-ADDRESS\11CHECK_DONE\12ACTIVE_RULESET\13CHECK_SENT" \
411 096ff28b 2014-12-12 reyk "\14TLS\15NAT_LOOKUP\16DEMOTE\17LOOKUP_PATH\20DEMOTED\21UDP" \
412 096ff28b 2014-12-12 reyk "\22RETURN\23TRAP\24NEEDPF\25PORT\26TLS_CLIENT\27NEEDRT" \
413 972a10c5 2016-09-02 reyk "\30MATCH\31DIVERT\32SCRIPT\33TLS_INSPECT\34HASHKEY" \
414 04a2f953 2020-09-14 martijn "\35AGENTX_TRAPONLY"
416 6d5340e6 2008-06-11 reyk enum forwardmode {
417 6d5340e6 2008-06-11 reyk FWD_NORMAL = 0,
422 87178699 2007-05-27 pyr struct host_config {
423 41042ecc 2006-12-16 reyk objid_t id;
424 17acabee 2008-07-19 reyk objid_t parentid;
425 41042ecc 2006-12-16 reyk objid_t tableid;
427 2f6ec04d 2015-01-16 deraadt char name[HOST_NAME_MAX+1];
428 87178699 2007-05-27 pyr struct sockaddr_storage ss;
430 246e5b16 2011-05-05 phessler int priority;
433 87178699 2007-05-27 pyr struct host {
434 87178699 2007-05-27 pyr TAILQ_ENTRY(host) entry;
435 28bd28ce 2014-11-19 blambert TAILQ_ENTRY(host) globalentry;
436 aebf7fd4 2008-07-19 reyk SLIST_ENTRY(host) child;
437 aebf7fd4 2008-07-19 reyk SLIST_HEAD(,host) children;
438 87178699 2007-05-27 pyr struct host_config conf;
439 f6a2ad33 2007-06-18 pyr u_int32_t flags;
440 41042ecc 2006-12-16 reyk char *tablename;
442 ae98db81 2006-12-25 reyk int last_up;
443 30640247 2007-02-22 reyk u_long check_cnt;
444 30640247 2007-02-22 reyk u_long up_cnt;
445 30640247 2007-02-22 reyk int retry_cnt;
447 b2665266 2008-12-05 reyk u_int16_t he;
449 65d0067b 2007-11-22 reyk struct ctl_tcp_event cte;
451 41042ecc 2006-12-16 reyk TAILQ_HEAD(hostlist, host);
453 b2665266 2008-12-05 reyk enum host_error {
454 b2665266 2008-12-05 reyk HCE_NONE = 0,
456 b2665266 2008-12-05 reyk HCE_INTERVAL_TIMEOUT,
457 b2665266 2008-12-05 reyk HCE_ICMP_OK,
458 b2665266 2008-12-05 reyk HCE_ICMP_READ_TIMEOUT,
459 b2665266 2008-12-05 reyk HCE_ICMP_WRITE_TIMEOUT,
460 ea47f1c4 2010-11-30 reyk HCE_TCP_SOCKET_ERROR,
461 ea47f1c4 2010-11-30 reyk HCE_TCP_SOCKET_LIMIT,
462 ea47f1c4 2010-11-30 reyk HCE_TCP_SOCKET_OPTION,
463 b2665266 2008-12-05 reyk HCE_TCP_CONNECT_FAIL,
464 b2665266 2008-12-05 reyk HCE_TCP_CONNECT_TIMEOUT,
465 b2665266 2008-12-05 reyk HCE_TCP_CONNECT_OK,
466 b2665266 2008-12-05 reyk HCE_TCP_WRITE_TIMEOUT,
467 b2665266 2008-12-05 reyk HCE_TCP_WRITE_FAIL,
468 b2665266 2008-12-05 reyk HCE_TCP_READ_TIMEOUT,
469 b2665266 2008-12-05 reyk HCE_TCP_READ_FAIL,
470 b2665266 2008-12-05 reyk HCE_SCRIPT_OK,
471 b2665266 2008-12-05 reyk HCE_SCRIPT_FAIL,
472 096ff28b 2014-12-12 reyk HCE_TLS_CONNECT_ERROR,
473 096ff28b 2014-12-12 reyk HCE_TLS_CONNECT_FAIL,
474 096ff28b 2014-12-12 reyk HCE_TLS_CONNECT_OK,
475 096ff28b 2014-12-12 reyk HCE_TLS_CONNECT_TIMEOUT,
476 096ff28b 2014-12-12 reyk HCE_TLS_READ_TIMEOUT,
477 096ff28b 2014-12-12 reyk HCE_TLS_WRITE_TIMEOUT,
478 096ff28b 2014-12-12 reyk HCE_TLS_READ_ERROR,
479 096ff28b 2014-12-12 reyk HCE_TLS_WRITE_ERROR,
480 b2665266 2008-12-05 reyk HCE_SEND_EXPECT_FAIL,
481 b2665266 2008-12-05 reyk HCE_SEND_EXPECT_OK,
482 b2665266 2008-12-05 reyk HCE_HTTP_CODE_ERROR,
483 b2665266 2008-12-05 reyk HCE_HTTP_CODE_FAIL,
484 b2665266 2008-12-05 reyk HCE_HTTP_CODE_OK,
485 b2665266 2008-12-05 reyk HCE_HTTP_DIGEST_ERROR,
486 b2665266 2008-12-05 reyk HCE_HTTP_DIGEST_FAIL,
487 b2665266 2008-12-05 reyk HCE_HTTP_DIGEST_OK,
490 f802d393 2007-02-07 reyk enum host_status {
491 f802d393 2007-02-07 reyk HOST_DOWN = -1,
492 f802d393 2007-02-07 reyk HOST_UNKNOWN = 0,
493 f802d393 2007-02-07 reyk HOST_UP = 1
495 30640247 2007-02-22 reyk #define HOST_ISUP(x) (x == HOST_UP)
497 87178699 2007-05-27 pyr struct table_config {
498 41042ecc 2006-12-16 reyk objid_t id;
499 c8f9d8e3 2007-12-08 pyr objid_t rdrid;
500 f6a2ad33 2007-06-18 pyr u_int32_t flags;
502 30640247 2007-02-22 reyk char demote_group[IFNAMSIZ];
503 2ac5660d 2008-05-07 reyk char ifname[IFNAMSIZ];
504 87178699 2007-05-27 pyr struct timeval timeout;
505 41042ecc 2006-12-16 reyk in_port_t port;
506 4ab45c57 2006-12-16 reyk int retcode;
507 182ad205 2007-11-20 pyr int skip_cnt;
508 41042ecc 2006-12-16 reyk char name[TABLE_NAME_SIZE];
509 69fde657 2014-07-09 reyk size_t name_len;
510 2f6ec04d 2015-01-16 deraadt char path[PATH_MAX];
511 738b3cc9 2019-09-15 rob unsigned char exbinbuf[128];
512 738b3cc9 2019-09-15 rob char exbuf[256];
513 41042ecc 2006-12-16 reyk char digest[41]; /* length of sha1 digest * 2 */
514 65d0067b 2007-11-22 reyk u_int8_t digest_type;
515 6d5340e6 2008-06-11 reyk enum forwardmode fwdmode;
518 87178699 2007-05-27 pyr struct table {
519 41042ecc 2006-12-16 reyk TAILQ_ENTRY(table) entry;
520 87178699 2007-05-27 pyr struct table_config conf;
522 182ad205 2007-11-20 pyr int skipped;
523 87178699 2007-05-27 pyr struct hostlist hosts;
524 f4a6eef3 2017-05-27 claudio struct tls_config *tls_cfg;
525 738b3cc9 2019-09-15 rob struct ibuf *sendbinbuf;
526 87178699 2007-05-27 pyr char *sendbuf;
528 41042ecc 2006-12-16 reyk TAILQ_HEAD(tablelist, table);
530 f802d393 2007-02-07 reyk enum table_check {
531 f802d393 2007-02-07 reyk CHECK_NOCHECK = 0,
532 f802d393 2007-02-07 reyk CHECK_ICMP = 1,
533 f802d393 2007-02-07 reyk CHECK_TCP = 2,
534 f802d393 2007-02-07 reyk CHECK_HTTP_CODE = 3,
535 f802d393 2007-02-07 reyk CHECK_HTTP_DIGEST = 4,
536 738b3cc9 2019-09-15 rob CHECK_BINSEND_EXPECT = 5,
537 738b3cc9 2019-09-15 rob CHECK_SEND_EXPECT = 6,
538 738b3cc9 2019-09-15 rob CHECK_SCRIPT = 7
541 c8f9d8e3 2007-12-08 pyr struct rdr_config {
542 41042ecc 2006-12-16 reyk objid_t id;
543 f6a2ad33 2007-06-18 pyr u_int32_t flags;
544 41042ecc 2006-12-16 reyk in_port_t port;
545 87178699 2007-05-27 pyr objid_t table_id;
546 87178699 2007-05-27 pyr objid_t backup_id;
548 3e04b122 2014-12-18 reyk union hashkey key;
549 062dadc0 2024-08-10 tb char name[PF_TABLE_NAME_SIZE];
550 062dadc0 2024-08-10 tb char tag[PF_TAG_NAME_SIZE];
551 2ac5660d 2008-05-07 reyk struct timeval timeout;
554 c8f9d8e3 2007-12-08 pyr struct rdr {
555 c8f9d8e3 2007-12-08 pyr TAILQ_ENTRY(rdr) entry;
556 c8f9d8e3 2007-12-08 pyr struct rdr_config conf;
557 41042ecc 2006-12-16 reyk struct addresslist virts;
558 41042ecc 2006-12-16 reyk struct table *table;
559 41042ecc 2006-12-16 reyk struct table *backup; /* use this if no host up */
560 90f6aaca 2007-12-20 reyk struct ctl_stats stats;
562 c8f9d8e3 2007-12-08 pyr TAILQ_HEAD(rdrlist, rdr);
564 61afd4d6 2009-08-07 reyk struct rsession {
565 aa79f3aa 2008-01-31 thib objid_t se_id;
566 aa79f3aa 2008-01-31 thib objid_t se_relayid;
567 fc2c091b 2019-05-10 reyk struct sockaddr_storage se_sockname;
568 aa79f3aa 2008-01-31 thib struct ctl_relay_event se_in;
569 aa79f3aa 2008-01-31 thib struct ctl_relay_event se_out;
570 6e9314ae 2008-05-08 reyk void *se_priv;
571 3e04b122 2014-12-18 reyk SIPHASH_CTX se_siphashctx;
572 0f7a5e2e 2012-10-03 reyk struct relay_table *se_table;
573 b8764354 2019-05-13 reyk struct relay_table *se_table0;
574 aa79f3aa 2008-01-31 thib struct event se_ev;
575 aa79f3aa 2008-01-31 thib struct timeval se_timeout;
576 aa79f3aa 2008-01-31 thib struct timeval se_tv_start;
577 aa79f3aa 2008-01-31 thib struct timeval se_tv_last;
578 61cca588 2012-09-21 benno struct event se_inflightevt;
579 aa79f3aa 2008-01-31 thib int se_done;
580 aa79f3aa 2008-01-31 thib int se_retry;
581 61cca588 2012-09-21 benno int se_retrycount;
582 03668b6b 2013-05-30 reyk int se_connectcount;
583 c72024a8 2014-07-13 benno int se_haslog;
584 aa79f3aa 2008-01-31 thib struct evbuffer *se_log;
585 435c9c8d 2008-02-04 thib struct relay *se_relay;
586 aa79f3aa 2008-01-31 thib struct ctl_natlook *se_cnl;
587 6d5340e6 2008-06-11 reyk int se_bnds;
588 69fde657 2014-07-09 reyk u_int16_t se_tag;
589 69fde657 2014-07-09 reyk u_int16_t se_label;
591 f55b0941 2011-05-20 reyk int se_cid;
592 f55b0941 2011-05-20 reyk pid_t se_pid;
593 61afd4d6 2009-08-07 reyk SPLAY_ENTRY(rsession) se_nodes;
594 28bd28ce 2014-11-19 blambert TAILQ_ENTRY(rsession) se_entry;
596 61afd4d6 2009-08-07 reyk SPLAY_HEAD(session_tree, rsession);
597 28bd28ce 2014-11-19 blambert TAILQ_HEAD(sessionlist, rsession);
599 30640247 2007-02-22 reyk enum prototype {
600 30640247 2007-02-22 reyk RELAY_PROTO_TCP = 0,
601 69fde657 2014-07-09 reyk RELAY_PROTO_HTTP,
602 69fde657 2014-07-09 reyk RELAY_PROTO_DNS
605 69fde657 2014-07-09 reyk enum relay_result {
606 69fde657 2014-07-09 reyk RES_DROP = 0,
607 69fde657 2014-07-09 reyk RES_PASS = 1,
608 265f5a08 2016-07-22 benno RES_FAIL = -1,
609 265f5a08 2016-07-22 benno RES_BAD = -2,
610 265f5a08 2016-07-22 benno RES_INTERNAL = -3
613 69fde657 2014-07-09 reyk enum rule_action {
614 69fde657 2014-07-09 reyk RULE_ACTION_MATCH = 0,
615 69fde657 2014-07-09 reyk RULE_ACTION_PASS,
616 69fde657 2014-07-09 reyk RULE_ACTION_BLOCK
619 69fde657 2014-07-09 reyk struct rule_addr {
620 69fde657 2014-07-09 reyk struct sockaddr_storage addr;
621 69fde657 2014-07-09 reyk u_int8_t addr_mask;
622 fc2c091b 2019-05-10 reyk int addr_port;
625 69fde657 2014-07-09 reyk #define RELAY_ADDR_EQ(_a, _b) \
626 69fde657 2014-07-09 reyk ((_a)->addr_mask == (_b)->addr_mask && \
627 69fde657 2014-07-09 reyk sockaddr_cmp((struct sockaddr *)&(_a)->addr, \
628 69fde657 2014-07-09 reyk (struct sockaddr *)&(_b)->addr, (_a)->addr_mask) == 0)
630 69fde657 2014-07-09 reyk #define RELAY_ADDR_CMP(_a, _b) \
631 69fde657 2014-07-09 reyk sockaddr_cmp((struct sockaddr *)&(_a)->addr, \
632 69fde657 2014-07-09 reyk (struct sockaddr *)(_b), (_a)->addr_mask)
634 69fde657 2014-07-09 reyk #define RELAY_ADDR_NEQ(_a, _b) \
635 69fde657 2014-07-09 reyk ((_a)->addr_mask != (_b)->addr_mask || \
636 69fde657 2014-07-09 reyk sockaddr_cmp((struct sockaddr *)&(_a)->addr, \
637 69fde657 2014-07-09 reyk (struct sockaddr *)&(_b)->addr, (_a)->addr_mask) != 0)
639 fc2c091b 2019-05-10 reyk #define RELAY_AF_NEQ(_a, _b) \
640 fc2c091b 2019-05-10 reyk (((_a) != AF_UNSPEC) && ((_b) != AF_UNSPEC) && \
641 fc2c091b 2019-05-10 reyk ((_a) != (_b)))
643 69fde657 2014-07-09 reyk struct relay_rule {
644 69fde657 2014-07-09 reyk objid_t rule_id;
645 69fde657 2014-07-09 reyk objid_t rule_protoid;
647 69fde657 2014-07-09 reyk u_int rule_action;
648 69fde657 2014-07-09 reyk #define RULE_SKIP_PROTO 0
649 69fde657 2014-07-09 reyk #define RULE_SKIP_DIR 1
650 69fde657 2014-07-09 reyk #define RULE_SKIP_AF 2
651 69fde657 2014-07-09 reyk #define RULE_SKIP_SRC 3
652 69fde657 2014-07-09 reyk #define RULE_SKIP_DST 4
653 69fde657 2014-07-09 reyk #define RULE_SKIP_METHOD 5
654 69fde657 2014-07-09 reyk #define RULE_SKIP_COUNT 6
655 69fde657 2014-07-09 reyk struct relay_rule *rule_skip[RULE_SKIP_COUNT];
657 69fde657 2014-07-09 reyk #define RULE_FLAG_QUICK 0x01
658 69fde657 2014-07-09 reyk u_int8_t rule_flags;
660 69fde657 2014-07-09 reyk int rule_label;
661 69fde657 2014-07-09 reyk int rule_tag;
662 69fde657 2014-07-09 reyk int rule_tagged;
663 69fde657 2014-07-09 reyk enum direction rule_dir;
664 69fde657 2014-07-09 reyk u_int rule_proto;
665 69fde657 2014-07-09 reyk int rule_af;
666 69fde657 2014-07-09 reyk struct rule_addr rule_src;
667 69fde657 2014-07-09 reyk struct rule_addr rule_dst;
668 69fde657 2014-07-09 reyk struct relay_table *rule_table;
670 69fde657 2014-07-09 reyk u_int rule_method;
671 69fde657 2014-07-09 reyk char rule_labelname[LABEL_NAME_SIZE];
672 69fde657 2014-07-09 reyk char rule_tablename[TABLE_NAME_SIZE];
673 69fde657 2014-07-09 reyk char rule_taggedname[TAG_NAME_SIZE];
674 69fde657 2014-07-09 reyk char rule_tagname[TAG_NAME_SIZE];
676 69fde657 2014-07-09 reyk struct ctl_rule rule_ctl;
677 69fde657 2014-07-09 reyk struct kv rule_kv[KEY_TYPE_MAX];
678 69fde657 2014-07-09 reyk struct kvlist rule_kvlist;
680 69fde657 2014-07-09 reyk TAILQ_ENTRY(relay_rule) rule_entry;
682 69fde657 2014-07-09 reyk TAILQ_HEAD(relay_rules, relay_rule);
684 30640247 2007-02-22 reyk #define TCPFLAG_NODELAY 0x01
685 30640247 2007-02-22 reyk #define TCPFLAG_NNODELAY 0x02
686 30640247 2007-02-22 reyk #define TCPFLAG_SACK 0x04
687 30640247 2007-02-22 reyk #define TCPFLAG_NSACK 0x08
688 30640247 2007-02-22 reyk #define TCPFLAG_BUFSIZ 0x10
689 0a6c88ff 2007-03-13 reyk #define TCPFLAG_IPTTL 0x20
690 0a6c88ff 2007-03-13 reyk #define TCPFLAG_IPMINTTL 0x40
691 ee6d33e4 2011-04-12 reyk #define TCPFLAG_NSPLICE 0x80
692 ed29f86d 2007-02-24 reyk #define TCPFLAG_DEFAULT 0x00
694 ee6d33e4 2011-04-12 reyk #define TCPFLAG_BITS \
695 ee6d33e4 2011-04-12 reyk "\10\01NODELAY\02NO_NODELAY\03SACK\04NO_SACK" \
696 ee6d33e4 2011-04-12 reyk "\05SOCKET_BUFFER_SIZE\06IP_TTL\07IP_MINTTL\10NO_SPLICE"
698 096ff28b 2014-12-12 reyk #define TLSFLAG_SSLV3 0x01
699 096ff28b 2014-12-12 reyk #define TLSFLAG_TLSV1_0 0x02
700 096ff28b 2014-12-12 reyk #define TLSFLAG_TLSV1_1 0x04
701 096ff28b 2014-12-12 reyk #define TLSFLAG_TLSV1_2 0x08
702 8d09c191 2020-05-14 pvk #define TLSFLAG_TLSV1_3 0x10
703 8d09c191 2020-05-14 pvk #define TLSFLAG_TLSV1 0x1e
704 096ff28b 2014-12-12 reyk #define TLSFLAG_VERSION 0x1f
705 096ff28b 2014-12-12 reyk #define TLSFLAG_CIPHER_SERVER_PREF 0x20
706 096ff28b 2014-12-12 reyk #define TLSFLAG_CLIENT_RENEG 0x40
707 096ff28b 2014-12-12 reyk #define TLSFLAG_DEFAULT \
708 8d09c191 2020-05-14 pvk (TLSFLAG_TLSV1_2|TLSFLAG_TLSV1_3|TLSFLAG_CIPHER_SERVER_PREF)
710 096ff28b 2014-12-12 reyk #define TLSFLAG_BITS \
711 8d09c191 2020-05-14 pvk "\06\01sslv3\02tlsv1.0\03tlsv1.1\04tlsv1.2\05tlsv1.3" \
712 05dee715 2014-10-15 reyk "\06cipher-server-preference\07client-renegotiation"
714 096ff28b 2014-12-12 reyk #define TLSCIPHERS_DEFAULT "HIGH:!aNULL"
715 3fe6d92f 2017-11-27 claudio #define TLSECDHECURVES_DEFAULT "default"
716 f4a6eef3 2017-05-27 claudio #define TLSDHPARAM_DEFAULT "none"
718 f4a6eef3 2017-05-27 claudio struct relay_ticket_key {
719 f4a6eef3 2017-05-27 claudio uint32_t tt_keyrev;
720 f4a6eef3 2017-05-27 claudio unsigned char tt_key[TLS_TICKET_KEY_SIZE];
722 f4a6eef3 2017-05-27 claudio #define TLS_SESSION_LIFETIME (2 * 3600)
724 c0f9bf60 2019-03-04 benno #define HTTPFLAG_WEBSOCKETS 0x01
726 9261e0d8 2019-05-31 reyk struct keyname {
727 9261e0d8 2019-05-31 reyk TAILQ_ENTRY(keyname) entry;
728 9261e0d8 2019-05-31 reyk char *name;
729 36dd1e7a 2026-05-15 rsadowski char certificate[PATH_MAX];
730 36dd1e7a 2026-05-15 rsadowski char key[PATH_MAX];
731 36dd1e7a 2026-05-15 rsadowski char ocsp[PATH_MAX];
733 9261e0d8 2019-05-31 reyk TAILQ_HEAD(keynamelist, keyname);
735 30640247 2007-02-22 reyk struct protocol {
736 30640247 2007-02-22 reyk objid_t id;
737 f6a2ad33 2007-06-18 pyr u_int32_t flags;
738 ed29f86d 2007-02-24 reyk u_int8_t tcpflags;
739 30640247 2007-02-22 reyk int tcpbufsiz;
740 ed29f86d 2007-02-24 reyk int tcpbacklog;
741 0a6c88ff 2007-03-13 reyk u_int8_t tcpipttl;
742 0a6c88ff 2007-03-13 reyk u_int8_t tcpipminttl;
743 b688796e 2017-11-15 benno size_t httpheaderlen;
744 c0f9bf60 2019-03-04 benno int httpflags;
745 096ff28b 2014-12-12 reyk u_int8_t tlsflags;
746 096ff28b 2014-12-12 reyk char tlsciphers[768];
747 f4a6eef3 2017-05-27 claudio char tlsdhparams[128];
748 3fe6d92f 2017-11-27 claudio char tlsecdhecurves[128];
749 2f6ec04d 2015-01-16 deraadt char tlsca[PATH_MAX];
750 2f6ec04d 2015-01-16 deraadt char tlscacert[PATH_MAX];
751 2f6ec04d 2015-01-16 deraadt char tlscakey[PATH_MAX];
752 096ff28b 2014-12-12 reyk char *tlscapass;
753 c4efe747 2024-10-28 tb char tlsclientca[PATH_MAX];
754 9261e0d8 2019-05-31 reyk struct keynamelist tlscerts;
755 30640247 2007-02-22 reyk char name[MAX_NAME_SIZE];
756 e5c598d0 2016-09-01 claudio int tickets;
757 30640247 2007-02-22 reyk enum prototype type;
758 691e5d5c 2007-11-20 reyk char *style;
760 61afd4d6 2009-08-07 reyk int (*cmp)(struct rsession *, struct rsession *);
761 61afd4d6 2009-08-07 reyk void *(*validate)(struct rsession *, struct relay *,
762 7ba7514d 2007-09-10 reyk struct sockaddr_storage *,
763 6e9314ae 2008-05-08 reyk u_int8_t *, size_t);
764 61afd4d6 2009-08-07 reyk int (*request)(struct rsession *);
765 69fde657 2014-07-09 reyk void (*close)(struct rsession *);
767 69fde657 2014-07-09 reyk struct relay_rules rules;
768 69fde657 2014-07-09 reyk int rulecount;
770 30640247 2007-02-22 reyk TAILQ_ENTRY(protocol) entry;
772 30640247 2007-02-22 reyk TAILQ_HEAD(protolist, protocol);
774 0f7a5e2e 2012-10-03 reyk struct relay_table {
775 0f7a5e2e 2012-10-03 reyk struct table *rlt_table;
776 0f7a5e2e 2012-10-03 reyk u_int32_t rlt_flags;
777 0f7a5e2e 2012-10-03 reyk int rlt_mode;
778 3e04b122 2014-12-18 reyk u_int32_t rlt_index;
779 0f7a5e2e 2012-10-03 reyk struct host *rlt_host[RELAY_MAXHOSTS];
780 0f7a5e2e 2012-10-03 reyk int rlt_nhosts;
781 0f7a5e2e 2012-10-03 reyk TAILQ_ENTRY(relay_table) rlt_entry;
783 0f7a5e2e 2012-10-03 reyk TAILQ_HEAD(relaytables, relay_table);
785 fae05986 2014-04-22 reyk struct ca_pkey {
786 f4a6eef3 2017-05-27 claudio char pkey_hash[TLS_CERT_HASH_SIZE];
787 fae05986 2014-04-22 reyk EVP_PKEY *pkey;
788 fae05986 2014-04-22 reyk TAILQ_ENTRY(ca_pkey) pkey_entry;
790 fae05986 2014-04-22 reyk TAILQ_HEAD(ca_pkeylist, ca_pkey);
792 fe4913ec 2019-05-31 reyk struct relay_cert {
793 fe4913ec 2019-05-31 reyk objid_t cert_id;
794 fe4913ec 2019-05-31 reyk objid_t cert_relayid;
795 fe4913ec 2019-05-31 reyk int cert_fd;
796 fe4913ec 2019-05-31 reyk int cert_key_fd;
797 0c91187d 2019-06-26 reyk int cert_ocsp_fd;
798 fe4913ec 2019-05-31 reyk EVP_PKEY *cert_pkey;
799 fe4913ec 2019-05-31 reyk TAILQ_ENTRY(relay_cert) cert_entry;
801 fe4913ec 2019-05-31 reyk TAILQ_HEAD(relaycertlist, relay_cert);
803 c06cb0e1 2007-05-29 pyr struct relay_config {
805 f6a2ad33 2007-06-18 pyr u_int32_t flags;
806 c06cb0e1 2007-05-29 pyr objid_t proto;
807 2f6ec04d 2015-01-16 deraadt char name[HOST_NAME_MAX+1];
808 c06cb0e1 2007-05-29 pyr in_port_t port;
809 c06cb0e1 2007-05-29 pyr in_port_t dstport;
810 c06cb0e1 2007-05-29 pyr int dstretry;
811 c06cb0e1 2007-05-29 pyr struct sockaddr_storage ss;
812 c06cb0e1 2007-05-29 pyr struct sockaddr_storage dstss;
813 2e5903be 2008-07-22 reyk struct sockaddr_storage dstaf;
814 c06cb0e1 2007-05-29 pyr struct timeval timeout;
815 6d5340e6 2008-06-11 reyk enum forwardmode fwdmode;
816 3e04b122 2014-12-18 reyk union hashkey hashkey;
817 096ff28b 2014-12-12 reyk off_t tls_cakey_len;
820 30640247 2007-02-22 reyk struct relay {
821 146643ba 2008-01-31 reyk TAILQ_ENTRY(relay) rl_entry;
822 146643ba 2008-01-31 reyk struct relay_config rl_conf;
825 146643ba 2008-01-31 reyk struct protocol *rl_proto;
827 146643ba 2008-01-31 reyk struct bufferevent *rl_bev;
829 146643ba 2008-01-31 reyk int rl_dsts;
830 146643ba 2008-01-31 reyk struct bufferevent *rl_dstbev;
832 0f7a5e2e 2012-10-03 reyk struct relaytables rl_tables;
834 146643ba 2008-01-31 reyk struct event rl_ev;
835 1ca19f87 2012-04-11 deraadt struct event rl_evt;
837 f4a6eef3 2017-05-27 claudio struct tls_config *rl_tls_cfg;
838 f4a6eef3 2017-05-27 claudio struct tls_config *rl_tls_client_cfg;
839 f4a6eef3 2017-05-27 claudio struct tls *rl_tls_ctx;
841 fe4913ec 2019-05-31 reyk int rl_tls_ca_fd;
842 fe4913ec 2019-05-31 reyk int rl_tls_cacert_fd;
843 c4efe747 2024-10-28 tb int rl_tls_client_ca_fd;
844 096ff28b 2014-12-12 reyk EVP_PKEY *rl_tls_pkey;
845 096ff28b 2014-12-12 reyk X509 *rl_tls_cacertx509;
846 096ff28b 2014-12-12 reyk char *rl_tls_cakey;
847 096ff28b 2014-12-12 reyk EVP_PKEY *rl_tls_capkey;
849 9179ded7 2016-09-03 reyk struct ctl_stats rl_stats[PROC_MAX_INSTANCES + 1];
851 146643ba 2008-01-31 reyk struct session_tree rl_sessions;
853 30640247 2007-02-22 reyk TAILQ_HEAD(relaylist, relay);
855 30640247 2007-02-22 reyk enum dstmode {
856 d6c9879f 2012-10-19 reyk RELAY_DSTMODE_LOADBALANCE = 0,
857 d6c9879f 2012-10-19 reyk RELAY_DSTMODE_ROUNDROBIN,
858 d6c9879f 2012-10-19 reyk RELAY_DSTMODE_HASH,
859 d6c9879f 2012-10-19 reyk RELAY_DSTMODE_SRCHASH,
860 d6c9879f 2012-10-19 reyk RELAY_DSTMODE_LEASTSTATES,
861 d6c9879f 2012-10-19 reyk RELAY_DSTMODE_RANDOM
863 d7758aba 2007-12-08 reyk #define RELAY_DSTMODE_DEFAULT RELAY_DSTMODE_ROUNDROBIN
865 39bc6125 2009-08-13 reyk struct netroute_config {
866 39bc6125 2009-08-13 reyk objid_t id;
867 39bc6125 2009-08-13 reyk struct sockaddr_storage ss;
868 39bc6125 2009-08-13 reyk int prefixlen;
869 39bc6125 2009-08-13 reyk objid_t routerid;
872 39bc6125 2009-08-13 reyk struct netroute {
873 deb7af7c 2009-11-03 reyk struct netroute_config nr_conf;
875 39bc6125 2009-08-13 reyk TAILQ_ENTRY(netroute) nr_entry;
876 39bc6125 2009-08-13 reyk TAILQ_ENTRY(netroute) nr_route;
878 39bc6125 2009-08-13 reyk struct router *nr_router;
880 39bc6125 2009-08-13 reyk TAILQ_HEAD(netroutelist, netroute);
882 39bc6125 2009-08-13 reyk struct router_config {
883 39bc6125 2009-08-13 reyk objid_t id;
884 39bc6125 2009-08-13 reyk u_int32_t flags;
885 2f6ec04d 2015-01-16 deraadt char name[HOST_NAME_MAX+1];
886 39bc6125 2009-08-13 reyk char label[RT_LABEL_SIZE];
887 39bc6125 2009-08-13 reyk int nroutes;
888 39bc6125 2009-08-13 reyk objid_t gwtable;
889 39bc6125 2009-08-13 reyk in_port_t gwport;
890 39bc6125 2009-08-13 reyk int rtable;
894 39bc6125 2009-08-13 reyk struct router {
895 39bc6125 2009-08-13 reyk struct router_config rt_conf;
897 39bc6125 2009-08-13 reyk struct table *rt_gwtable;
898 39bc6125 2009-08-13 reyk struct netroutelist rt_netroutes;
900 deb7af7c 2009-11-03 reyk TAILQ_ENTRY(router) rt_entry;
902 39bc6125 2009-08-13 reyk TAILQ_HEAD(routerlist, router);
904 591e6ab5 2011-05-19 reyk struct ctl_netroute {
906 591e6ab5 2011-05-19 reyk struct host_config host;
907 591e6ab5 2011-05-19 reyk struct netroute_config nr;
908 591e6ab5 2011-05-19 reyk struct router_config rt;
911 41042ecc 2006-12-16 reyk /* initially control.h */
912 dbef7d4f 2011-05-09 reyk struct control_sock {
913 dbef7d4f 2011-05-09 reyk const char *cs_name;
914 dbef7d4f 2011-05-09 reyk struct event cs_ev;
915 1ca19f87 2012-04-11 deraadt struct event cs_evt;
917 dbef7d4f 2011-05-09 reyk int cs_restricted;
918 dbef7d4f 2011-05-09 reyk void *cs_env;
920 fb3cc10c 2014-05-08 blambert TAILQ_ENTRY(control_sock) cs_entry;
922 fb3cc10c 2014-05-08 blambert TAILQ_HEAD(control_socks, control_sock);
924 eabfa908 2009-06-05 pyr struct imsgev {
925 eabfa908 2009-06-05 pyr struct imsgbuf ibuf;
926 eabfa908 2009-06-05 pyr void (*handler)(int, short, void *);
927 eabfa908 2009-06-05 pyr struct event ev;
928 dbef7d4f 2011-05-09 reyk struct privsep_proc *proc;
930 eabfa908 2009-06-05 pyr short events;
933 dbef7d4f 2011-05-09 reyk #define IMSG_SIZE_CHECK(imsg, p) do { \
934 dbef7d4f 2011-05-09 reyk if (IMSG_DATA_SIZE(imsg) < sizeof(*p)) \
935 dbef7d4f 2011-05-09 reyk fatalx("bad length imsg received"); \
936 dbef7d4f 2011-05-09 reyk } while (0)
937 dbef7d4f 2011-05-09 reyk #define IMSG_DATA_SIZE(imsg) ((imsg)->hdr.len - IMSG_HEADER_SIZE)
939 41042ecc 2006-12-16 reyk struct ctl_conn {
940 4ab45c57 2006-12-16 reyk TAILQ_ENTRY(ctl_conn) entry;
941 f16408f4 2007-02-01 pyr u_int8_t flags;
942 f55b0941 2011-05-20 reyk u_int waiting;
943 f16408f4 2007-02-01 pyr #define CTL_CONN_NOTIFY 0x01
944 ccf58482 2011-09-04 bluhm struct imsgev iev;
947 41042ecc 2006-12-16 reyk TAILQ_HEAD(ctl_connlist, ctl_conn);
949 8698669f 2009-06-04 eric enum imsg_type {
951 8698669f 2009-06-04 eric IMSG_CTL_OK, /* answer to relayctl requests */
952 8698669f 2009-06-04 eric IMSG_CTL_FAIL,
953 dbef7d4f 2011-05-09 reyk IMSG_CTL_VERBOSE,
954 41ddf20a 2016-09-03 reyk IMSG_CTL_PROCFD,
955 8698669f 2009-06-04 eric IMSG_CTL_END,
956 8698669f 2009-06-04 eric IMSG_CTL_RDR,
957 8698669f 2009-06-04 eric IMSG_CTL_TABLE,
958 8698669f 2009-06-04 eric IMSG_CTL_HOST,
959 8698669f 2009-06-04 eric IMSG_CTL_RELAY,
960 8698669f 2009-06-04 eric IMSG_CTL_SESSION,
961 a2fb091d 2009-08-17 reyk IMSG_CTL_ROUTER,
962 a2fb091d 2009-08-17 reyk IMSG_CTL_NETROUTE,
963 8698669f 2009-06-04 eric IMSG_CTL_TABLE_CHANGED,
964 8698669f 2009-06-04 eric IMSG_CTL_PULL_RULESET,
965 8698669f 2009-06-04 eric IMSG_CTL_PUSH_RULESET,
966 8698669f 2009-06-04 eric IMSG_CTL_SHOW_SUM, /* relayctl requests */
967 8698669f 2009-06-04 eric IMSG_CTL_RDR_ENABLE,
968 8698669f 2009-06-04 eric IMSG_CTL_RDR_DISABLE,
969 8698669f 2009-06-04 eric IMSG_CTL_TABLE_ENABLE,
970 8698669f 2009-06-04 eric IMSG_CTL_TABLE_DISABLE,
971 8698669f 2009-06-04 eric IMSG_CTL_HOST_ENABLE,
972 8698669f 2009-06-04 eric IMSG_CTL_HOST_DISABLE,
973 8698669f 2009-06-04 eric IMSG_CTL_SHUTDOWN,
974 996c1f22 2012-01-21 camield IMSG_CTL_START,
975 8698669f 2009-06-04 eric IMSG_CTL_RELOAD,
976 591e6ab5 2011-05-19 reyk IMSG_CTL_RESET,
977 8698669f 2009-06-04 eric IMSG_CTL_POLL,
978 8698669f 2009-06-04 eric IMSG_CTL_NOTIFY,
979 8698669f 2009-06-04 eric IMSG_CTL_RDR_STATS,
980 8698669f 2009-06-04 eric IMSG_CTL_RELAY_STATS,
981 8698669f 2009-06-04 eric IMSG_RDR_ENABLE, /* notifies from pfe to hce */
982 8698669f 2009-06-04 eric IMSG_RDR_DISABLE,
983 8698669f 2009-06-04 eric IMSG_TABLE_ENABLE,
984 8698669f 2009-06-04 eric IMSG_TABLE_DISABLE,
985 8698669f 2009-06-04 eric IMSG_HOST_ENABLE,
986 8698669f 2009-06-04 eric IMSG_HOST_DISABLE,
987 8698669f 2009-06-04 eric IMSG_HOST_STATUS, /* notifies from hce to pfe */
989 8698669f 2009-06-04 eric IMSG_NATLOOK,
990 8698669f 2009-06-04 eric IMSG_DEMOTE,
991 8698669f 2009-06-04 eric IMSG_STATISTICS,
992 8698669f 2009-06-04 eric IMSG_SCRIPT,
993 04a2f953 2020-09-14 martijn IMSG_AGENTXSOCK,
994 39bc6125 2009-08-13 reyk IMSG_BINDANY,
995 591e6ab5 2011-05-19 reyk IMSG_RTMSG, /* from pfe to parent */
996 591e6ab5 2011-05-19 reyk IMSG_CFG_TABLE, /* configuration from parent */
997 591e6ab5 2011-05-19 reyk IMSG_CFG_HOST,
998 591e6ab5 2011-05-19 reyk IMSG_CFG_RDR,
999 591e6ab5 2011-05-19 reyk IMSG_CFG_VIRT,
1000 591e6ab5 2011-05-19 reyk IMSG_CFG_ROUTER,
1001 591e6ab5 2011-05-19 reyk IMSG_CFG_ROUTE,
1002 591e6ab5 2011-05-19 reyk IMSG_CFG_PROTO,
1003 69fde657 2014-07-09 reyk IMSG_CFG_RULE,
1004 591e6ab5 2011-05-19 reyk IMSG_CFG_RELAY,
1005 0f7a5e2e 2012-10-03 reyk IMSG_CFG_RELAY_TABLE,
1006 ce78c3f2 2017-11-27 claudio IMSG_CFG_RELAY_CERT,
1007 ce78c3f2 2017-11-27 claudio IMSG_CFG_RELAY_FD,
1008 c525adb9 2014-04-18 reyk IMSG_CFG_DONE,
1009 c525adb9 2014-04-18 reyk IMSG_CA_PRIVENC,
1010 28bd28ce 2014-11-19 blambert IMSG_CA_PRIVDEC,
1011 802e1af6 2017-11-28 claudio IMSG_SESS_PUBLISH, /* from relay to pfe */
1012 e5c598d0 2016-09-01 claudio IMSG_SESS_UNPUBLISH,
1013 e5c598d0 2016-09-01 claudio IMSG_TLSTICKET_REKEY
1016 dbef7d4f 2011-05-09 reyk enum privsep_procid {
1017 591e6ab5 2011-05-19 reyk PROC_ALL = -1,
1018 dbef7d4f 2011-05-09 reyk PROC_PARENT = 0,
1020 dbef7d4f 2011-05-09 reyk PROC_RELAY,
1025 071bd662 2021-01-27 deraadt extern enum privsep_procid privsep_process;
1027 dbef7d4f 2011-05-09 reyk /* Attach the control socket to the following process */
1028 dbef7d4f 2011-05-09 reyk #define PROC_CONTROL PROC_PFE
1030 720a4aa4 2014-04-20 reyk struct privsep_pipes {
1031 720a4aa4 2014-04-20 reyk int *pp_pipes[PROC_MAX];
1034 dbef7d4f 2011-05-09 reyk struct privsep {
1035 720a4aa4 2014-04-20 reyk struct privsep_pipes *ps_pipes[PROC_MAX];
1036 720a4aa4 2014-04-20 reyk struct privsep_pipes *ps_pp;
1038 dbef7d4f 2011-05-09 reyk struct imsgev *ps_ievs[PROC_MAX];
1039 dbef7d4f 2011-05-09 reyk const char *ps_title[PROC_MAX];
1040 591e6ab5 2011-05-19 reyk u_int8_t ps_what[PROC_MAX];
1042 dbef7d4f 2011-05-09 reyk u_int ps_instances[PROC_MAX];
1043 dbef7d4f 2011-05-09 reyk u_int ps_instance;
1045 dbef7d4f 2011-05-09 reyk struct control_sock ps_csock;
1046 fb3cc10c 2014-05-08 blambert struct control_socks ps_rcsocks;
1048 dbef7d4f 2011-05-09 reyk /* Event and signal handlers */
1049 dbef7d4f 2011-05-09 reyk struct event ps_evsigint;
1050 dbef7d4f 2011-05-09 reyk struct event ps_evsigterm;
1051 dbef7d4f 2011-05-09 reyk struct event ps_evsigchld;
1052 dbef7d4f 2011-05-09 reyk struct event ps_evsighup;
1053 dbef7d4f 2011-05-09 reyk struct event ps_evsigpipe;
1054 7629917f 2014-08-18 reyk struct event ps_evsigusr1;
1056 591e6ab5 2011-05-19 reyk int ps_noaction;
1057 dbef7d4f 2011-05-09 reyk struct passwd *ps_pw;
1058 dbef7d4f 2011-05-09 reyk struct relayd *ps_env;
1061 dbef7d4f 2011-05-09 reyk struct privsep_proc {
1062 dbef7d4f 2011-05-09 reyk const char *p_title;
1063 dbef7d4f 2011-05-09 reyk enum privsep_procid p_id;
1064 dbef7d4f 2011-05-09 reyk int (*p_cb)(int, struct privsep_proc *,
1065 dbef7d4f 2011-05-09 reyk struct imsg *);
1066 94404df8 2016-09-02 reyk void (*p_init)(struct privsep *,
1067 dbef7d4f 2011-05-09 reyk struct privsep_proc *);
1068 dbef7d4f 2011-05-09 reyk const char *p_chroot;
1069 dbef7d4f 2011-05-09 reyk struct privsep *p_ps;
1070 87e4c32e 2016-09-28 reyk void (*p_shutdown)(void);
1071 ee80ee17 2016-10-05 reyk struct passwd *p_pw;
1074 41ddf20a 2016-09-03 reyk struct privsep_fd {
1075 41ddf20a 2016-09-03 reyk enum privsep_procid pf_procid;
1076 41ddf20a 2016-09-03 reyk unsigned int pf_instance;
1079 58fc320c 2016-09-02 reyk struct relayd_config {
1080 58fc320c 2016-09-02 reyk char tls_sid[SSL_MAX_SID_CTX_LENGTH];
1081 04a2f953 2020-09-14 martijn char agentx_path[sizeof(((struct sockaddr_un *)NULL)->sun_path)];
1082 04a2f953 2020-09-14 martijn char agentx_context[32];
1083 58fc320c 2016-09-02 reyk struct timeval interval;
1084 58fc320c 2016-09-02 reyk struct timeval timeout;
1085 58fc320c 2016-09-02 reyk struct timeval statinterval;
1086 58fc320c 2016-09-02 reyk u_int16_t prefork_relay;
1087 58fc320c 2016-09-02 reyk u_int16_t opts;
1088 58fc320c 2016-09-02 reyk u_int32_t flags;
1091 73162055 2017-01-24 benno struct pfdata {
1093 73162055 2017-01-24 benno struct pf_anchor *anchor;
1094 73162055 2017-01-24 benno struct pfioc_trans pft;
1095 73162055 2017-01-24 benno struct pfioc_trans_e pfte;
1096 73162055 2017-01-24 benno u_int8_t pfused;
1099 dbef7d4f 2011-05-09 reyk struct relayd {
1100 58fc320c 2016-09-02 reyk struct relayd_config sc_conf;
1101 591e6ab5 2011-05-19 reyk const char *sc_conffile;
1102 dbef7d4f 2011-05-09 reyk struct pfdata *sc_pf;
1103 dbef7d4f 2011-05-09 reyk int sc_rtsock;
1104 dbef7d4f 2011-05-09 reyk int sc_rtseq;
1105 dbef7d4f 2011-05-09 reyk int sc_tablecount;
1106 dbef7d4f 2011-05-09 reyk int sc_rdrcount;
1107 dbef7d4f 2011-05-09 reyk int sc_protocount;
1108 dbef7d4f 2011-05-09 reyk int sc_relaycount;
1109 dbef7d4f 2011-05-09 reyk int sc_routercount;
1110 dbef7d4f 2011-05-09 reyk int sc_routecount;
1111 dbef7d4f 2011-05-09 reyk struct table sc_empty_table;
1112 dbef7d4f 2011-05-09 reyk struct protocol sc_proto_default;
1113 dbef7d4f 2011-05-09 reyk struct event sc_ev;
1114 dbef7d4f 2011-05-09 reyk struct tablelist *sc_tables;
1115 28bd28ce 2014-11-19 blambert struct hostlist sc_hosts;
1116 dbef7d4f 2011-05-09 reyk struct rdrlist *sc_rdrs;
1117 dbef7d4f 2011-05-09 reyk struct protolist *sc_protos;
1118 dbef7d4f 2011-05-09 reyk struct relaylist *sc_relays;
1119 dbef7d4f 2011-05-09 reyk struct routerlist *sc_rts;
1120 dbef7d4f 2011-05-09 reyk struct netroutelist *sc_routes;
1121 fae05986 2014-04-22 reyk struct ca_pkeylist *sc_pkeys;
1122 fe4913ec 2019-05-31 reyk struct relaycertlist *sc_certs;
1123 28bd28ce 2014-11-19 blambert struct sessionlist sc_sessions;
1124 dbef7d4f 2011-05-09 reyk char sc_demote_group[IFNAMSIZ];
1125 dbef7d4f 2011-05-09 reyk u_int16_t sc_id;
1126 3a342b20 2015-11-29 benno int sc_rtable;
1128 dbef7d4f 2011-05-09 reyk struct event sc_statev;
1130 04a2f953 2020-09-14 martijn struct event sc_agentxev;
1132 dbef7d4f 2011-05-09 reyk int sc_has_icmp;
1133 dbef7d4f 2011-05-09 reyk int sc_has_icmp6;
1134 dbef7d4f 2011-05-09 reyk struct ctl_icmp_event sc_icmp_send;
1135 dbef7d4f 2011-05-09 reyk struct ctl_icmp_event sc_icmp_recv;
1136 dbef7d4f 2011-05-09 reyk struct ctl_icmp_event sc_icmp6_send;
1137 dbef7d4f 2011-05-09 reyk struct ctl_icmp_event sc_icmp6_recv;
1139 f4a6eef3 2017-05-27 claudio struct relay_ticket_key sc_ticket;
1141 dbef7d4f 2011-05-09 reyk struct privsep *sc_ps;
1142 591e6ab5 2011-05-19 reyk int sc_reload;
1145 dbef7d4f 2011-05-09 reyk #define RELAYD_OPT_VERBOSE 0x01
1146 dbef7d4f 2011-05-09 reyk #define RELAYD_OPT_NOACTION 0x04
1147 dbef7d4f 2011-05-09 reyk #define RELAYD_OPT_LOGUPDATE 0x08
1148 37ed6014 2018-08-06 benno #define RELAYD_OPT_LOGHOSTCHECK 0x10
1149 37ed6014 2018-08-06 benno #define RELAYD_OPT_LOGCON 0x20
1150 37ed6014 2018-08-06 benno #define RELAYD_OPT_LOGCONERR 0x40
1152 41042ecc 2006-12-16 reyk /* control.c */
1153 dbef7d4f 2011-05-09 reyk int control_init(struct privsep *, struct control_sock *);
1154 dbef7d4f 2011-05-09 reyk int control_listen(struct control_sock *);
1155 dbef7d4f 2011-05-09 reyk void control_cleanup(struct control_sock *);
1156 dbef7d4f 2011-05-09 reyk void control_dispatch_imsg(int, short, void *);
1157 3b28f64e 2016-09-02 reyk void control_imsg_forward(struct privsep *ps, struct imsg *);
1158 dbef7d4f 2011-05-09 reyk struct ctl_conn *
1159 dbef7d4f 2011-05-09 reyk control_connbyfd(int);
1161 41042ecc 2006-12-16 reyk /* parse.y */
1162 591e6ab5 2011-05-19 reyk int parse_config(const char *, struct relayd *);
1163 591e6ab5 2011-05-19 reyk int load_config(const char *, struct relayd *);
1164 591e6ab5 2011-05-19 reyk int cmdline_symset(char *);
1166 0e5011aa 2015-11-21 reyk /* util.c */
1167 b2665266 2008-12-05 reyk const char *host_error(enum host_error);
1168 f802d393 2007-02-07 reyk const char *host_status(enum host_status);
1169 f802d393 2007-02-07 reyk const char *table_check(enum table_check);
1170 b8764354 2019-05-13 reyk #ifdef DEBUG
1171 b8764354 2019-05-13 reyk const char *relay_state(enum relay_state);
1173 30640247 2007-02-22 reyk const char *print_availability(u_long, u_long);
1174 1abf0955 2007-09-06 reyk const char *print_host(struct sockaddr_storage *, char *, size_t);
1175 a3e50d2c 2007-09-07 reyk const char *print_time(struct timeval *, struct timeval *, char *, size_t);
1176 ee6d33e4 2011-04-12 reyk const char *printb_flags(const u_int32_t, const char *);
1177 b7f7a948 2013-03-10 reyk void getmonotime(struct timeval *);
1178 738b3cc9 2019-09-15 rob struct ibuf *string2binary(const char *);
1179 738b3cc9 2019-09-15 rob void print_hex(uint8_t *, off_t, size_t);
1180 738b3cc9 2019-09-15 rob void print_debug(const char *, ...);
1182 41042ecc 2006-12-16 reyk /* pfe.c */
1183 94404df8 2016-09-02 reyk void pfe(struct privsep *, struct privsep_proc *);
1184 41042ecc 2006-12-16 reyk void show(struct ctl_conn *);
1185 41b83bb1 2007-09-07 reyk void show_sessions(struct ctl_conn *);
1186 c8f9d8e3 2007-12-08 pyr int enable_rdr(struct ctl_conn *, struct ctl_id *);
1187 d2170f6d 2006-12-16 reyk int enable_table(struct ctl_conn *, struct ctl_id *);
1188 17acabee 2008-07-19 reyk int enable_host(struct ctl_conn *, struct ctl_id *, struct host *);
1189 c8f9d8e3 2007-12-08 pyr int disable_rdr(struct ctl_conn *, struct ctl_id *);
1190 d2170f6d 2006-12-16 reyk int disable_table(struct ctl_conn *, struct ctl_id *);
1191 17acabee 2008-07-19 reyk int disable_host(struct ctl_conn *, struct ctl_id *, struct host *);
1193 41042ecc 2006-12-16 reyk /* pfe_filter.c */
1194 6d0767ae 2007-12-07 reyk void init_tables(struct relayd *);
1195 c8f9d8e3 2007-12-08 pyr void flush_table(struct relayd *, struct rdr *);
1196 c8f9d8e3 2007-12-08 pyr void sync_table(struct relayd *, struct rdr *, struct table *);
1197 c8f9d8e3 2007-12-08 pyr void sync_ruleset(struct relayd *, struct rdr *, int);
1198 6d0767ae 2007-12-07 reyk void flush_rulesets(struct relayd *);
1199 6d0767ae 2007-12-07 reyk int natlook(struct relayd *, struct ctl_natlook *);
1201 90f6aaca 2007-12-20 reyk check_table(struct relayd *, struct rdr *, struct table *);
1203 39bc6125 2009-08-13 reyk /* pfe_route.c */
1204 39bc6125 2009-08-13 reyk void init_routes(struct relayd *);
1205 39bc6125 2009-08-13 reyk void sync_routes(struct relayd *, struct router *);
1206 39bc6125 2009-08-13 reyk int pfe_route(struct relayd *, struct ctl_netroute *);
1208 41042ecc 2006-12-16 reyk /* hce.c */
1209 94404df8 2016-09-02 reyk void hce(struct privsep *, struct privsep_proc *);
1210 b2665266 2008-12-05 reyk void hce_notify_done(struct host *, enum host_error);
1212 30640247 2007-02-22 reyk /* relay.c */
1213 94404df8 2016-09-02 reyk void relay(struct privsep *, struct privsep_proc *);
1214 591e6ab5 2011-05-19 reyk int relay_privinit(struct relay *);
1215 61afd4d6 2009-08-07 reyk int relay_session_cmp(struct rsession *, struct rsession *);
1216 37ed6014 2018-08-06 benno void relay_close(struct rsession *, const char *, int);
1217 b8764354 2019-05-13 reyk int relay_reset_event(struct rsession *, struct ctl_relay_event *);
1218 9fb76c8c 2008-02-04 thib void relay_natlook(int, short, void *);
1219 61afd4d6 2009-08-07 reyk void relay_session(struct rsession *);
1220 61afd4d6 2009-08-07 reyk int relay_from_table(struct rsession *);
1221 9fb76c8c 2008-02-04 thib int relay_socket_af(struct sockaddr_storage *, in_port_t);
1223 9c52a29e 2011-04-07 reyk relay_socket_getport(struct sockaddr_storage *);
1224 9fb76c8c 2008-02-04 thib int relay_cmp_af(struct sockaddr_storage *,
1225 8bf959a5 2012-09-20 reyk struct sockaddr_storage *);
1226 8bf959a5 2012-09-20 reyk void relay_write(struct bufferevent *, void *);
1227 8bf959a5 2012-09-20 reyk void relay_read(struct bufferevent *, void *);
1228 b1e5969d 2013-03-09 bluhm int relay_splice(struct ctl_relay_event *);
1229 b1e5969d 2013-03-09 bluhm int relay_splicelen(struct ctl_relay_event *);
1230 b1e5969d 2013-03-09 bluhm int relay_spliceadjust(struct ctl_relay_event *);
1231 8bf959a5 2012-09-20 reyk void relay_error(struct bufferevent *, short, void *);
1232 03668b6b 2013-05-30 reyk int relay_preconnect(struct rsession *);
1233 8bf959a5 2012-09-20 reyk int relay_connect(struct rsession *);
1234 8bf959a5 2012-09-20 reyk void relay_connected(int, short, void *);
1235 8bf959a5 2012-09-20 reyk void relay_bindanyreq(struct rsession *, in_port_t, int);
1236 8bf959a5 2012-09-20 reyk void relay_bindany(int, short, void *);
1237 8bf959a5 2012-09-20 reyk void relay_dump(struct ctl_relay_event *, const void *, size_t);
1238 8bf959a5 2012-09-20 reyk int relay_bufferevent_add(struct event *, int);
1239 69fde657 2014-07-09 reyk int relay_bufferevent_print(struct ctl_relay_event *, const char *);
1240 8bf959a5 2012-09-20 reyk int relay_bufferevent_write_buffer(struct ctl_relay_event *,
1241 8bf959a5 2012-09-20 reyk struct evbuffer *);
1242 8bf959a5 2012-09-20 reyk int relay_bufferevent_write_chunk(struct ctl_relay_event *,
1243 8bf959a5 2012-09-20 reyk struct evbuffer *, size_t);
1244 8bf959a5 2012-09-20 reyk int relay_bufferevent_write(struct ctl_relay_event *,
1245 8bf959a5 2012-09-20 reyk void *, size_t);
1246 69fde657 2014-07-09 reyk int relay_test(struct protocol *, struct ctl_relay_event *);
1247 69fde657 2014-07-09 reyk void relay_calc_skip_steps(struct relay_rules *);
1248 69fde657 2014-07-09 reyk void relay_match(struct kvlist *, struct kv *, struct kv *,
1249 2d9632ee 2014-07-11 reyk struct kvtree *);
1250 28bd28ce 2014-11-19 blambert void relay_session_publish(struct rsession *);
1251 28bd28ce 2014-11-19 blambert void relay_session_unpublish(struct rsession *);
1253 61afd4d6 2009-08-07 reyk SPLAY_PROTOTYPE(session_tree, rsession, se_nodes, relay_session_cmp);
1255 8bf959a5 2012-09-20 reyk /* relay_http.c */
1256 69fde657 2014-07-09 reyk void relay_http(struct relayd *);
1257 69fde657 2014-07-09 reyk void relay_http_init(struct relay *);
1258 8bf959a5 2012-09-20 reyk void relay_abort_http(struct rsession *, u_int, const char *,
1259 8bf959a5 2012-09-20 reyk u_int16_t);
1260 8bf959a5 2012-09-20 reyk void relay_read_http(struct bufferevent *, void *);
1261 69fde657 2014-07-09 reyk void relay_close_http(struct rsession *);
1262 69fde657 2014-07-09 reyk u_int relay_httpmethod_byname(const char *);
1263 69fde657 2014-07-09 reyk const char
1264 69fde657 2014-07-09 reyk *relay_httpmethod_byid(u_int);
1265 fa847717 2014-07-12 reyk const char
1266 fa847717 2014-07-12 reyk *relay_httperror_byid(u_int);
1267 c0f9bf60 2019-03-04 benno int relay_http_priv_init(struct rsession *);
1268 69fde657 2014-07-09 reyk int relay_httpdesc_init(struct ctl_relay_event *);
1269 b8e8b53b 2015-01-01 reyk ssize_t relay_http_time(time_t, char *, size_t);
1271 7ba7514d 2007-09-10 reyk /* relay_udp.c */
1272 a2811280 2017-07-04 benno void relay_udp_privinit(struct relay *);
1273 a2811280 2017-07-04 benno void relay_udp_init(struct relayd *, struct relay *);
1274 7ba7514d 2007-09-10 reyk int relay_udp_bind(struct sockaddr_storage *, in_port_t,
1275 7ba7514d 2007-09-10 reyk struct protocol *);
1276 7ba7514d 2007-09-10 reyk void relay_udp_server(int, short, void *);
1278 41042ecc 2006-12-16 reyk /* check_icmp.c */
1279 6d0767ae 2007-12-07 reyk void icmp_init(struct relayd *);
1280 6d0767ae 2007-12-07 reyk void schedule_icmp(struct relayd *, struct host *);
1281 6d0767ae 2007-12-07 reyk void check_icmp(struct relayd *, struct timeval *);
1283 41042ecc 2006-12-16 reyk /* check_tcp.c */
1284 ae98db81 2006-12-25 reyk void check_tcp(struct ctl_tcp_event *);
1286 f4a6eef3 2017-05-27 claudio /* check_tls.c */
1287 f4a6eef3 2017-05-27 claudio void check_tls(struct ctl_tcp_event *);
1289 292100ef 2007-05-29 reyk /* check_script.c */
1290 dbef7d4f 2011-05-09 reyk void check_script(struct relayd *, struct host *);
1291 6d0767ae 2007-12-07 reyk void script_done(struct relayd *, struct ctl_script *);
1292 6d0767ae 2007-12-07 reyk int script_exec(struct relayd *, struct ctl_script *);
1294 05982e1a 2007-01-29 pyr /* ssl.c */
1295 03668b6b 2013-05-30 reyk char *ssl_load_key(struct relayd *, const char *, off_t *, char *);
1296 f4a6eef3 2017-05-27 claudio uint8_t *ssl_update_certificate(const uint8_t *, size_t, EVP_PKEY *,
1297 f4a6eef3 2017-05-27 claudio EVP_PKEY *, X509 *, size_t *);
1298 bd00d3d8 2017-07-28 bluhm int ssl_load_pkey(char *, off_t, X509 **, EVP_PKEY **);
1300 c525adb9 2014-04-18 reyk /* ca.c */
1301 94404df8 2016-09-02 reyk void ca(struct privsep *, struct privsep_proc *);
1302 03ee1221 2014-05-04 reyk void ca_engine_init(struct relayd *);
1303 bd00d3d8 2017-07-28 bluhm void hash_x509(X509 *cert, char *hash, size_t hashlen);
1305 6d0767ae 2007-12-07 reyk /* relayd.c */
1306 6d0767ae 2007-12-07 reyk struct host *host_find(struct relayd *, objid_t);
1307 6d0767ae 2007-12-07 reyk struct table *table_find(struct relayd *, objid_t);
1308 c8f9d8e3 2007-12-08 pyr struct rdr *rdr_find(struct relayd *, objid_t);
1309 39bc6125 2009-08-13 reyk struct netroute *route_find(struct relayd *, objid_t);
1310 591e6ab5 2011-05-19 reyk struct router *router_find(struct relayd *, objid_t);
1311 6d0767ae 2007-12-07 reyk struct host *host_findbyname(struct relayd *, const char *);
1312 6d0767ae 2007-12-07 reyk struct table *table_findbyname(struct relayd *, const char *);
1313 d7758aba 2007-12-08 reyk struct table *table_findbyconf(struct relayd *, struct table *);
1314 c8f9d8e3 2007-12-08 pyr struct rdr *rdr_findbyname(struct relayd *, const char *);
1315 816ddb53 2007-01-11 reyk void event_again(struct event *, int, short,
1316 816ddb53 2007-01-11 reyk void (*)(int, short, void *),
1317 816ddb53 2007-01-11 reyk struct timeval *, struct timeval *, void *);
1318 6d0767ae 2007-12-07 reyk struct relay *relay_find(struct relayd *, objid_t);
1319 591e6ab5 2011-05-19 reyk struct protocol *proto_find(struct relayd *, objid_t);
1320 61afd4d6 2009-08-07 reyk struct rsession *session_find(struct relayd *, objid_t);
1321 6d0767ae 2007-12-07 reyk struct relay *relay_findbyname(struct relayd *, const char *);
1322 d070188d 2009-08-05 reyk struct relay *relay_findbyaddr(struct relayd *, struct relay_config *);
1323 f4a6eef3 2017-05-27 claudio EVP_PKEY *pkey_find(struct relayd *, char *hash);
1324 f4a6eef3 2017-05-27 claudio struct ca_pkey *pkey_add(struct relayd *, EVP_PKEY *, char *hash);
1325 fe4913ec 2019-05-31 reyk struct relay_cert *cert_add(struct relayd *, objid_t);
1326 fe4913ec 2019-05-31 reyk struct relay_cert *cert_find(struct relayd *, objid_t);
1327 55ca94a7 2019-05-29 reyk char *relay_load_fd(int, off_t *);
1328 9261e0d8 2019-05-31 reyk int relay_load_certfiles(struct relayd *, struct relay *,
1329 36dd1e7a 2026-05-15 rsadowski const struct keyname *);
1330 30640247 2007-02-22 reyk int expand_string(char *, size_t, const char *, const char *);
1331 b279fb39 2007-10-02 pyr void translate_string(char *);
1332 c525adb9 2014-04-18 reyk void purge_key(char **, off_t);
1333 2f479274 2015-05-02 claudio void purge_table(struct relayd *, struct tablelist *,
1334 2f479274 2015-05-02 claudio struct table *);
1335 591e6ab5 2011-05-19 reyk void purge_relay(struct relayd *, struct relay *);
1336 8a025509 2007-11-21 reyk char *digeststr(enum digest_type, const u_int8_t *, size_t, char *);
1337 d8e9af71 2007-11-24 reyk const char *canonicalize_host(const char *, char *, size_t);
1338 4e975be3 2016-07-27 reyk int parse_url(const char *, char **, char **, char **);
1339 2e5903be 2008-07-22 reyk int map6to4(struct sockaddr_storage *);
1340 2e5903be 2008-07-22 reyk int map4to6(struct sockaddr_storage *, struct sockaddr_storage *);
1341 eabfa908 2009-06-05 pyr void imsg_event_add(struct imsgev *);
1342 ccf58482 2011-09-04 bluhm int imsg_compose_event(struct imsgev *, u_int16_t, u_int32_t,
1343 cdaf5262 2009-06-05 pyr pid_t, int, void *, u_int16_t);
1344 ea47f1c4 2010-11-30 reyk void socket_rlimit(int);
1345 591e6ab5 2011-05-19 reyk char *get_string(u_int8_t *, size_t);
1346 591e6ab5 2011-05-19 reyk void *get_data(u_int8_t *, size_t);
1347 69fde657 2014-07-09 reyk int sockaddr_cmp(struct sockaddr *, struct sockaddr *, int);
1348 69fde657 2014-07-09 reyk struct in6_addr *prefixlen2mask6(u_int8_t, u_int32_t *);
1349 69fde657 2014-07-09 reyk u_int32_t prefixlen2mask(u_int8_t);
1350 185b85c3 2014-06-27 andre int accept_reserve(int, struct sockaddr *, socklen_t *, int,
1351 185b85c3 2014-06-27 andre volatile int *);
1352 4e975be3 2016-07-27 reyk struct kv *kv_add(struct kvtree *, char *, char *, int);
1353 e4d9aa92 2021-07-25 benno int kv_set(struct kv *, char *, ...)
1354 e4d9aa92 2021-07-25 benno __attribute__((__format__ (printf, 2, 3)));
1355 e4d9aa92 2021-07-25 benno int kv_setkey(struct kv *, char *, ...)
1356 e4d9aa92 2021-07-25 benno __attribute__((__format__ (printf, 2, 3)));
1357 2d9632ee 2014-07-11 reyk void kv_delete(struct kvtree *, struct kv *);
1358 2d9632ee 2014-07-11 reyk void kv_purge(struct kvtree *);
1359 69fde657 2014-07-09 reyk void kv_free(struct kv *);
1360 69fde657 2014-07-09 reyk struct kv *kv_inherit(struct kv *, struct kv *);
1361 c72024a8 2014-07-13 benno void relay_log(struct rsession *, char *);
1362 c72024a8 2014-07-13 benno int kv_log(struct rsession *, struct kv *, u_int16_t,
1363 c72024a8 2014-07-13 benno enum direction);
1364 2d9632ee 2014-07-11 reyk struct kv *kv_find(struct kvtree *, struct kv *);
1365 62ee3f1b 2019-05-08 reyk struct kv *kv_find_value(struct kvtree *, char *, const char *,
1366 62ee3f1b 2019-05-08 reyk const char *);
1367 2d9632ee 2014-07-11 reyk int kv_cmp(struct kv *, struct kv *);
1368 69fde657 2014-07-09 reyk int rule_add(struct protocol *, struct relay_rule *, const char
1370 69fde657 2014-07-09 reyk void rule_delete(struct relay_rules *, struct relay_rule *);
1371 69fde657 2014-07-09 reyk void rule_free(struct relay_rule *);
1372 69fde657 2014-07-09 reyk struct relay_rule
1373 69fde657 2014-07-09 reyk *rule_inherit(struct relay_rule *);
1374 69fde657 2014-07-09 reyk void rule_settable(struct relay_rules *, struct relay_table *);
1375 2d9632ee 2014-07-11 reyk RB_PROTOTYPE(kvtree, kv, kv_node, kv_cmp);
1377 30640247 2007-02-22 reyk /* carp.c */
1378 30640247 2007-02-22 reyk int carp_demote_init(char *, int);
1379 30640247 2007-02-22 reyk void carp_demote_shutdown(void);
1380 30640247 2007-02-22 reyk int carp_demote_get(char *);
1381 30640247 2007-02-22 reyk int carp_demote_set(char *, int);
1382 30640247 2007-02-22 reyk int carp_demote_reset(char *, int);
1384 cd2aab3b 2007-11-26 reyk /* name2id.c */
1385 69fde657 2014-07-09 reyk u_int16_t label_name2id(const char *);
1386 69fde657 2014-07-09 reyk const char *label_id2name(u_int16_t);
1387 69fde657 2014-07-09 reyk void label_unref(u_int16_t);
1388 69fde657 2014-07-09 reyk void label_ref(u_int16_t);
1389 69fde657 2014-07-09 reyk u_int16_t tag_name2id(const char *);
1390 69fde657 2014-07-09 reyk const char *tag_id2name(u_int16_t);
1391 69fde657 2014-07-09 reyk void tag_unref(u_int16_t);
1392 69fde657 2014-07-09 reyk void tag_ref(u_int16_t);
1394 04a2f953 2020-09-14 martijn /* agentx_control.c */
1395 04a2f953 2020-09-14 martijn void agentx_init(struct relayd *);
1396 04a2f953 2020-09-14 martijn void agentx_setsock(struct relayd *, enum privsep_procid);
1397 6d9ea5e7 2022-08-31 dv void agentx_getsock(struct imsg *);
1398 dbef7d4f 2011-05-09 reyk void snmp_hosttrap(struct relayd *, struct table *, struct host *);
1400 c0255773 2008-07-09 reyk /* shuffle.c */
1401 c0255773 2008-07-09 reyk void shuffle_init(struct shuffle *);
1402 c0255773 2008-07-09 reyk u_int16_t shuffle_generate16(struct shuffle *);
1404 dbef7d4f 2011-05-09 reyk /* proc.c */
1405 41ddf20a 2016-09-03 reyk enum privsep_procid
1406 41ddf20a 2016-09-03 reyk proc_getid(struct privsep_proc *, unsigned int, const char *);
1407 4b93801a 2016-11-24 reyk int proc_flush_imsg(struct privsep *, enum privsep_procid, int);
1408 1c66e337 2018-09-09 bluhm void proc_init(struct privsep *, struct privsep_proc *, unsigned int, int,
1409 41ddf20a 2016-09-03 reyk int, char **, enum privsep_procid);
1410 dbef7d4f 2011-05-09 reyk void proc_kill(struct privsep *);
1411 41ddf20a 2016-09-03 reyk void proc_connect(struct privsep *);
1412 dbef7d4f 2011-05-09 reyk void proc_dispatch(int, short event, void *);
1413 94404df8 2016-09-02 reyk void proc_run(struct privsep *, struct privsep_proc *,
1414 41ddf20a 2016-09-03 reyk struct privsep_proc *, unsigned int,
1415 dbef7d4f 2011-05-09 reyk void (*)(struct privsep *, struct privsep_proc *, void *), void *);
1416 591e6ab5 2011-05-19 reyk void proc_range(struct privsep *, enum privsep_procid, int *, int *);
1417 dbef7d4f 2011-05-09 reyk int proc_compose_imsg(struct privsep *, enum privsep_procid, int,
1418 141b9058 2015-12-02 reyk u_int16_t, u_int32_t, int, void *, u_int16_t);
1419 141b9058 2015-12-02 reyk int proc_compose(struct privsep *, enum privsep_procid,
1420 141b9058 2015-12-02 reyk uint16_t, void *, uint16_t);
1421 dbef7d4f 2011-05-09 reyk int proc_composev_imsg(struct privsep *, enum privsep_procid, int,
1422 141b9058 2015-12-02 reyk u_int16_t, u_int32_t, int, const struct iovec *, int);
1423 141b9058 2015-12-02 reyk int proc_composev(struct privsep *, enum privsep_procid,
1424 141b9058 2015-12-02 reyk uint16_t, const struct iovec *, int);
1425 41ddf20a 2016-09-03 reyk int proc_forward_imsg(struct privsep *, struct imsg *,
1426 41ddf20a 2016-09-03 reyk enum privsep_procid, int);
1427 dbef7d4f 2011-05-09 reyk struct imsgbuf *
1428 dbef7d4f 2011-05-09 reyk proc_ibuf(struct privsep *, enum privsep_procid, int);
1429 83f0e184 2014-04-18 reyk struct imsgev *
1430 83f0e184 2014-04-18 reyk proc_iev(struct privsep *, enum privsep_procid, int);
1431 dbef7d4f 2011-05-09 reyk void imsg_event_add(struct imsgev *);
1432 41ddf20a 2016-09-03 reyk int imsg_compose_event(struct imsgev *, uint16_t, uint32_t,
1433 41ddf20a 2016-09-03 reyk pid_t, int, void *, uint16_t);
1434 41ddf20a 2016-09-03 reyk int imsg_composev_event(struct imsgev *, uint16_t, uint32_t,
1435 dbef7d4f 2011-05-09 reyk pid_t, int, const struct iovec *, int);
1437 591e6ab5 2011-05-19 reyk /* config.c */
1438 591e6ab5 2011-05-19 reyk int config_init(struct relayd *);
1439 591e6ab5 2011-05-19 reyk void config_purge(struct relayd *, u_int);
1440 591e6ab5 2011-05-19 reyk int config_setreset(struct relayd *, u_int);
1441 591e6ab5 2011-05-19 reyk int config_getreset(struct relayd *, struct imsg *);
1442 591e6ab5 2011-05-19 reyk int config_getcfg(struct relayd *, struct imsg *);
1443 591e6ab5 2011-05-19 reyk int config_settable(struct relayd *, struct table *);
1444 591e6ab5 2011-05-19 reyk int config_gettable(struct relayd *, struct imsg *);
1445 591e6ab5 2011-05-19 reyk int config_gethost(struct relayd *, struct imsg *);
1446 591e6ab5 2011-05-19 reyk int config_setrdr(struct relayd *, struct rdr *);
1447 591e6ab5 2011-05-19 reyk int config_getrdr(struct relayd *, struct imsg *);
1448 591e6ab5 2011-05-19 reyk int config_getvirt(struct relayd *, struct imsg *);
1449 591e6ab5 2011-05-19 reyk int config_setrt(struct relayd *, struct router *);
1450 591e6ab5 2011-05-19 reyk int config_getrt(struct relayd *, struct imsg *);
1451 591e6ab5 2011-05-19 reyk int config_getroute(struct relayd *, struct imsg *);
1452 69fde657 2014-07-09 reyk int config_setproto(struct relayd *, struct protocol *);
1453 591e6ab5 2011-05-19 reyk int config_getproto(struct relayd *, struct imsg *);
1454 69fde657 2014-07-09 reyk int config_setrule(struct relayd *, struct protocol *);
1455 69fde657 2014-07-09 reyk int config_getrule(struct relayd *, struct imsg *);
1456 69fde657 2014-07-09 reyk int config_setrelay(struct relayd *, struct relay *);
1457 591e6ab5 2011-05-19 reyk int config_getrelay(struct relayd *, struct imsg *);
1458 0f7a5e2e 2012-10-03 reyk int config_getrelaytable(struct relayd *, struct imsg *);
1459 ce78c3f2 2017-11-27 claudio int config_getrelayfd(struct relayd *, struct imsg *);
1461 80347df3 2026-02-18 kirill /* proxy_protocol.c */
1462 80347df3 2026-02-18 kirill int proxy_protocol_v1(struct rsession *, struct evbuffer *);
1463 80347df3 2026-02-18 kirill int proxy_protocol_v2(struct rsession *, struct evbuffer *);
1465 d6302b55 2015-06-11 reyk #endif /* RELAYD_H */