REORG: include: split global.h into haproxy/global{,-t}.h

global.h was one of the messiest files, it has accumulated tons of
implicit dependencies and declares many globals that make almost all
other file include it. It managed to silence a dependency loop between
server.h and proxy.h by being well placed to pre-define the required
structs, forcing struct proxy and struct server to be forward-declared
in a significant number of files.

It was split in to, one which is the global struct definition and the
few macros and flags, and the rest containing the functions prototypes.

The UNIX_MAX_PATH definition was moved to compat.h.
diff --git a/contrib/modsecurity/modsec_wrapper.c b/contrib/modsecurity/modsec_wrapper.c
index 8b9d998..9aec538 100644
--- a/contrib/modsecurity/modsec_wrapper.c
+++ b/contrib/modsecurity/modsec_wrapper.c
@@ -16,10 +16,10 @@
 #include <stdio.h>
 #include <stdarg.h>
 
+#include <haproxy/global.h>
 #include <haproxy/hlua.h>
 #include <haproxy/time.h>
 
-#include <types/global.h>
 #include <types/stream.h>
 
 #include <haproxy/arg.h>
diff --git a/contrib/prometheus-exporter/service-prometheus.c b/contrib/prometheus-exporter/service-prometheus.c
index fa36aa7..ed27bc4 100644
--- a/contrib/prometheus-exporter/service-prometheus.c
+++ b/contrib/prometheus-exporter/service-prometheus.c
@@ -17,6 +17,7 @@
 #include <haproxy/api.h>
 #include <common/cfgparse.h>
 #include <haproxy/frontend.h>
+#include <haproxy/global.h>
 #include <haproxy/http.h>
 #include <haproxy/http_htx.h>
 #include <haproxy/htx.h>
@@ -24,8 +25,6 @@
 #include <haproxy/pool.h>
 #include <haproxy/list.h>
 
-#include <types/global.h>
-
 #include <proto/applet.h>
 #include <proto/backend.h>
 #include <haproxy/compression.h>
diff --git a/include/haproxy/compat.h b/include/haproxy/compat.h
index 251dfb2..fdd6fa4 100644
--- a/include/haproxy/compat.h
+++ b/include/haproxy/compat.h
@@ -108,6 +108,11 @@
 #define MAXPATHLEN 128
 #endif
 
+/* longest UNIX socket name */
+#ifndef UNIX_MAX_PATH
+#define UNIX_MAX_PATH 108
+#endif
+
 /* On Linux, allows pipes to be resized */
 #ifndef F_SETPIPE_SZ
 #define F_SETPIPE_SZ (1024 + 7)
diff --git a/include/haproxy/dns-t.h b/include/haproxy/dns-t.h
index fe3938a..54c58ee 100644
--- a/include/haproxy/dns-t.h
+++ b/include/haproxy/dns-t.h
@@ -30,8 +30,6 @@
 
 #include <types/connection.h>
 #include <haproxy/proto_udp-t.h>
-#include <types/proxy.h>
-#include <types/server.h>
 #include <types/task.h>
 
 extern struct pool_head *dns_requester_pool;
@@ -346,6 +344,7 @@
 	DNS_UPD_OBSOLETE_IP,      /* The server IP was obsolete, and no other IP was found */
 };
 
+struct proxy;
 struct dns_srvrq {
 	enum obj_type         obj_type;         /* object type == OBJ_TYPE_SRVRQ */
 	struct dns_resolvers *resolvers;        /* pointer to the resolvers structure used for this server template */
diff --git a/include/haproxy/global-t.h b/include/haproxy/global-t.h
new file mode 100644
index 0000000..bee8de7
--- /dev/null
+++ b/include/haproxy/global-t.h
@@ -0,0 +1,191 @@
+/*
+ * include/haproxy/global-t.h
+ * Global types and macros. Please avoid adding more stuff here!
+ *
+ * Copyright (C) 2000-2020 Willy Tarreau - w@1wt.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, version 2.1
+ * exclusively.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _HAPROXY_GLOBAL_T_H
+#define _HAPROXY_GLOBAL_T_H
+
+#include <haproxy/buf-t.h>
+#include <haproxy/freq_ctr-t.h>
+#include <haproxy/list-t.h>
+#include <haproxy/thread-t.h>
+#include <haproxy/api-t.h>
+#include <haproxy/vars-t.h>
+
+/* modes of operation (global.mode) */
+#define	MODE_DEBUG	0x01
+#define	MODE_DAEMON	0x02
+#define	MODE_QUIET	0x04
+#define	MODE_CHECK	0x08
+#define	MODE_VERBOSE	0x10
+#define	MODE_STARTING	0x20
+#define	MODE_FOREGROUND	0x40
+#define	MODE_MWORKER	0x80    /* Master Worker */
+#define	MODE_MWORKER_WAIT	0x100    /* Master Worker wait mode */
+#define	MODE_ZERO_WARNING       0x200    /* warnings cause a failure */
+
+/* list of last checks to perform, depending on config options */
+#define LSTCHK_CAP_BIND	0x00000001	/* check that we can bind to any port */
+#define LSTCHK_NETADM	0x00000002	/* check that we have CAP_NET_ADMIN */
+
+/* Global tuning options */
+/* available polling mechanisms */
+#define GTUNE_USE_SELECT         (1<<0)
+#define GTUNE_USE_POLL           (1<<1)
+#define GTUNE_USE_EPOLL          (1<<2)
+#define GTUNE_USE_KQUEUE         (1<<3)
+/* platform-specific options */
+#define GTUNE_USE_SPLICE         (1<<4)
+#define GTUNE_USE_GAI            (1<<5)
+#define GTUNE_USE_REUSEPORT      (1<<6)
+#define GTUNE_RESOLVE_DONTFAIL   (1<<7)
+
+#define GTUNE_SOCKET_TRANSFER	 (1<<8)
+#define GTUNE_NOEXIT_ONFAILURE   (1<<9)
+#define GTUNE_USE_SYSTEMD        (1<<10)
+
+#define GTUNE_BUSY_POLLING       (1<<11)
+#define GTUNE_LISTENER_MQ        (1<<12)
+#define GTUNE_SET_DUMPABLE       (1<<13)
+#define GTUNE_USE_EVPORTS        (1<<14)
+#define GTUNE_STRICT_LIMITS      (1<<15)
+#define GTUNE_INSECURE_FORK      (1<<16)
+#define GTUNE_INSECURE_SETUID    (1<<17)
+
+/* SSL server verify mode */
+enum {
+	SSL_SERVER_VERIFY_NONE = 0,
+	SSL_SERVER_VERIFY_REQUIRED = 1,
+};
+
+/* bit values to go with "warned" above */
+#define WARN_ANY                    0x00000001 /* any warning was emitted */
+#define WARN_FORCECLOSE_DEPRECATED  0x00000002
+#define WARN_EXEC_PATH              0x00000004 /* executable path already reported */
+
+/* put there the forward declarations needed for global.h */
+struct proxy;
+
+/* FIXME : this will have to be redefined correctly */
+struct global {
+	int uid;
+	int gid;
+	int external_check;
+	int nbproc;
+	int nbthread;
+	unsigned int hard_stop_after;	/* maximum time allowed to perform a soft-stop */
+	int maxconn, hardmaxconn;
+	int maxsslconn;
+	int ssl_session_max_cost;   /* how many bytes an SSL session may cost */
+	int ssl_handshake_max_cost; /* how many bytes an SSL handshake may use */
+	int ssl_used_frontend;      /* non-zero if SSL is used in a frontend */
+	int ssl_used_backend;       /* non-zero if SSL is used in a backend */
+	int ssl_used_async_engines; /* number of used async engines */
+	unsigned int ssl_server_verify; /* default verify mode on servers side */
+	struct freq_ctr conn_per_sec;
+	struct freq_ctr sess_per_sec;
+	struct freq_ctr ssl_per_sec;
+	struct freq_ctr ssl_fe_keys_per_sec;
+	struct freq_ctr ssl_be_keys_per_sec;
+	struct freq_ctr comp_bps_in;	/* bytes per second, before http compression */
+	struct freq_ctr comp_bps_out;	/* bytes per second, after http compression */
+	struct freq_ctr out_32bps;      /* #of 32-byte blocks emitted per second */
+	unsigned long long out_bytes;   /* total #of bytes emitted */
+	int cps_lim, cps_max;
+	int sps_lim, sps_max;
+	int ssl_lim, ssl_max;
+	int ssl_fe_keys_max, ssl_be_keys_max;
+	unsigned int shctx_lookups, shctx_misses;
+	int comp_rate_lim;           /* HTTP compression rate limit */
+	int maxpipes;		/* max # of pipes */
+	int maxsock;		/* max # of sockets */
+	int rlimit_nofile;	/* default ulimit-n value : 0=unset */
+	int rlimit_memmax_all;	/* default all-process memory limit in megs ; 0=unset */
+	int rlimit_memmax;	/* default per-process memory limit in megs ; 0=unset */
+	long maxzlibmem;        /* max RAM for zlib in bytes */
+	int mode;
+	unsigned int req_count; /* request counter (HTTP or TCP session) for logs and unique_id */
+	int last_checks;
+	int spread_checks;
+	int max_spread_checks;
+	int max_syslog_len;
+	char *chroot;
+	char *pidfile;
+	char *node, *desc;		/* node name & description */
+	struct buffer log_tag;           /* name for syslog */
+	struct list logsrvs;
+	char *log_send_hostname;   /* set hostname in syslog header */
+	char *server_state_base;   /* path to a directory where server state files can be found */
+	char *server_state_file;   /* path to the file where server states are loaded from */
+	struct {
+		int maxpollevents; /* max number of poll events at once */
+		int maxaccept;     /* max number of consecutive accept() */
+		int options;       /* various tuning options */
+		int runqueue_depth;/* max number of tasks to run at once */
+		int recv_enough;   /* how many input bytes at once are "enough" */
+		int bufsize;       /* buffer size in bytes, defaults to BUFSIZE */
+		int maxrewrite;    /* buffer max rewrite size in bytes, defaults to MAXREWRITE */
+		int reserved_bufs; /* how many buffers can only be allocated for response */
+		int buf_limit;     /* if not null, how many total buffers may only be allocated */
+		int client_sndbuf; /* set client sndbuf to this value if not null */
+		int client_rcvbuf; /* set client rcvbuf to this value if not null */
+		int server_sndbuf; /* set server sndbuf to this value if not null */
+		int server_rcvbuf; /* set server rcvbuf to this value if not null */
+		int chksize;       /* check buffer size in bytes, defaults to BUFSIZE */
+		int pipesize;      /* pipe size in bytes, system defaults if zero */
+		int max_http_hdr;  /* max number of HTTP headers, use MAX_HTTP_HDR if zero */
+		int requri_len;    /* max len of request URI, use REQURI_LEN if zero */
+		int cookie_len;    /* max length of cookie captures */
+		int pattern_cache; /* max number of entries in the pattern cache. */
+		int sslcachesize;  /* SSL cache size in session, defaults to 20000 */
+		int comp_maxlevel;    /* max HTTP compression level */
+		int pool_low_ratio;   /* max ratio of FDs used before we stop using new idle connections */
+		int pool_high_ratio;  /* max ratio of FDs used before we start killing idle connections when creating new connections */
+		int pool_low_count;   /* max number of opened fd before we stop using new idle connections */
+		int pool_high_count;  /* max number of opened fd before we start killing idle connections when creating new connections */
+		unsigned short idle_timer; /* how long before an empty buffer is considered idle (ms) */
+	} tune;
+	struct {
+		char *prefix;           /* path prefix of unix bind socket */
+		struct {                /* UNIX socket permissions */
+			uid_t uid;      /* -1 to leave unchanged */
+			gid_t gid;      /* -1 to leave unchanged */
+			mode_t mode;    /* 0 to leave unchanged */
+		} ux;
+	} unix_bind;
+	struct proxy *stats_fe;     /* the frontend holding the stats settings */
+	struct vars   vars;         /* list of variables for the process scope. */
+#ifdef USE_CPU_AFFINITY
+	struct {
+		unsigned long proc[MAX_PROCS];      /* list of CPU masks for the 32/64 first processes */
+		unsigned long proc_t1[MAX_PROCS];   /* list of CPU masks for the 1st thread of each process */
+		unsigned long thread[MAX_THREADS];  /* list of CPU masks for the 32/64 first threads of the 1st process */
+	} cpu_map;
+#endif
+};
+
+#endif /* _HAPROXY_GLOBAL_T_H */
+
+/*
+ * Local variables:
+ *  c-indent-level: 8
+ *  c-basic-offset: 8
+ * End:
+ */
diff --git a/include/haproxy/global.h b/include/haproxy/global.h
new file mode 100644
index 0000000..a3f952c
--- /dev/null
+++ b/include/haproxy/global.h
@@ -0,0 +1,156 @@
+/*
+ * include/haproxy/global.h
+ * Exported global variables and functions.
+ *
+ * Copyright (C) 2000-2020 Willy Tarreau - w@1wt.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, version 2.1
+ * exclusively.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _HAPROXY_GLOBAL_H
+#define _HAPROXY_GLOBAL_H
+
+#include <haproxy/global-t.h>
+#include <haproxy/api-t.h>
+#include <haproxy/thread.h>
+#include <haproxy/vars-t.h>
+#include <haproxy/mworker-t.h>
+
+#include <types/proxy.h>
+
+extern struct global global;
+extern int  pid;                /* current process id */
+extern int  relative_pid;       /* process id starting at 1 */
+extern unsigned long pid_bit;   /* bit corresponding to the process id */
+extern unsigned long all_proc_mask; /* mask of all processes */
+extern int  actconn;            /* # of active sessions */
+extern int  listeners;
+extern int  jobs;               /* # of active jobs (listeners, sessions, open devices) */
+extern int  unstoppable_jobs;   /* # of active jobs that can't be stopped during a soft stop */
+extern int  active_peers;       /* # of active peers (connection attempts and successes) */
+extern int  connected_peers;    /* # of really connected peers */
+extern int nb_oldpids;          /* contains the number of old pids found */
+extern const int zero;
+extern const int one;
+extern const struct linger nolinger;
+extern int stopping;	/* non zero means stopping in progress */
+extern int killed;	/* >0 means a hard-stop is triggered, >1 means hard-stop immediately */
+extern char hostname[MAX_HOSTNAME_LEN];
+extern char localpeer[MAX_HOSTNAME_LEN];
+extern unsigned int warned;     /* bitfield of a few warnings to emit just once */
+extern volatile unsigned long sleeping_thread_mask;
+extern struct list proc_list; /* list of process in mworker mode */
+extern struct mworker_proc *proc_self; /* process structure of current process */
+extern int master; /* 1 if in master, 0 otherwise */
+extern unsigned int rlim_fd_cur_at_boot;
+extern unsigned int rlim_fd_max_at_boot;
+extern int atexit_flag;
+extern unsigned char boot_seed[20];  // per-boot random seed (160 bits initially)
+extern THREAD_LOCAL struct buffer trash;
+
+int main(int argc, char **argv);
+void deinit(void);
+void run_poll_loop(void);
+int tell_old_pids(int sig);
+int delete_oldpid(int pid);
+void hap_register_build_opts(const char *str, int must_free);
+void hap_register_post_check(int (*fct)());
+void hap_register_post_proxy_check(int (*fct)(struct proxy *));
+void hap_register_post_server_check(int (*fct)(struct server *));
+void hap_register_post_deinit(void (*fct)());
+void hap_register_proxy_deinit(void (*fct)(struct proxy *));
+void hap_register_server_deinit(void (*fct)(struct server *));
+
+void hap_register_per_thread_alloc(int (*fct)());
+void hap_register_per_thread_init(int (*fct)());
+void hap_register_per_thread_deinit(void (*fct)());
+void hap_register_per_thread_free(int (*fct)());
+
+void mworker_accept_wrapper(int fd);
+void mworker_reload();
+
+/* to be used with warned and WARN_* */
+static inline int already_warned(unsigned int warning)
+{
+	if (warned & warning)
+		return 1;
+	warned |= warning;
+	return 0;
+}
+
+/* returns a mask if set, otherwise all_proc_mask */
+static inline unsigned long proc_mask(unsigned long mask)
+{
+	return mask ? mask : all_proc_mask;
+}
+
+/* returns a mask if set, otherwise all_threads_mask */
+static inline unsigned long thread_mask(unsigned long mask)
+{
+	return mask ? mask : all_threads_mask;
+}
+
+/* simplified way to declare static build options in a file */
+#define REGISTER_BUILD_OPTS(str) \
+	INITCALL2(STG_REGISTER, hap_register_build_opts, (str), 0)
+
+/* simplified way to declare a post-check callback in a file */
+#define REGISTER_POST_CHECK(fct) \
+	INITCALL1(STG_REGISTER, hap_register_post_check, (fct))
+
+/* simplified way to declare a post-proxy-check callback in a file */
+#define REGISTER_POST_PROXY_CHECK(fct) \
+	INITCALL1(STG_REGISTER, hap_register_post_proxy_check, (fct))
+
+/* simplified way to declare a post-server-check callback in a file */
+#define REGISTER_POST_SERVER_CHECK(fct) \
+	INITCALL1(STG_REGISTER, hap_register_post_server_check, (fct))
+
+/* simplified way to declare a post-deinit callback in a file */
+#define REGISTER_POST_DEINIT(fct) \
+	INITCALL1(STG_REGISTER, hap_register_post_deinit, (fct))
+
+/* simplified way to declare a proxy-deinit callback in a file */
+#define REGISTER_PROXY_DEINIT(fct) \
+	INITCALL1(STG_REGISTER, hap_register_proxy_deinit, (fct))
+
+/* simplified way to declare a proxy-deinit callback in a file */
+#define REGISTER_SERVER_DEINIT(fct) \
+	INITCALL1(STG_REGISTER, hap_register_server_deinit, (fct))
+
+/* simplified way to declare a per-thread allocation callback in a file */
+#define REGISTER_PER_THREAD_ALLOC(fct) \
+	INITCALL1(STG_REGISTER, hap_register_per_thread_alloc, (fct))
+
+/* simplified way to declare a per-thread init callback in a file */
+#define REGISTER_PER_THREAD_INIT(fct) \
+	INITCALL1(STG_REGISTER, hap_register_per_thread_init, (fct))
+
+/* simplified way to declare a per-thread deinit callback in a file */
+#define REGISTER_PER_THREAD_DEINIT(fct) \
+	INITCALL1(STG_REGISTER, hap_register_per_thread_deinit, (fct))
+
+/* simplified way to declare a per-thread free callback in a file */
+#define REGISTER_PER_THREAD_FREE(fct) \
+	INITCALL1(STG_REGISTER, hap_register_per_thread_free, (fct))
+
+#endif /* _HAPROXY_GLOBAL_H */
+
+/*
+ * Local variables:
+ *  c-indent-level: 8
+ *  c-basic-offset: 8
+ * End:
+ */
diff --git a/include/haproxy/lb_chash.h b/include/haproxy/lb_chash.h
index 0d6410d..77d790f 100644
--- a/include/haproxy/lb_chash.h
+++ b/include/haproxy/lb_chash.h
@@ -24,9 +24,9 @@
 
 #include <haproxy/api.h>
 #include <haproxy/lb_chash-t.h>
-#include <types/proxy.h>
-#include <types/server.h>
 
+struct proxy;
+struct server;
 void chash_init_server_tree(struct proxy *p);
 struct server *chash_get_next_server(struct proxy *p, struct server *srvtoavoid);
 struct server *chash_get_server_hash(struct proxy *p, unsigned int hash, const struct server *avoid);
diff --git a/include/proto/channel.h b/include/proto/channel.h
index d391a4a..3547581 100644
--- a/include/proto/channel.h
+++ b/include/proto/channel.h
@@ -30,12 +30,12 @@
 #include <haproxy/api.h>
 #include <haproxy/chunk.h>
 #include <haproxy/dynbuf.h>
+#include <haproxy/global.h>
 #include <haproxy/htx.h>
 #include <haproxy/ticks.h>
 #include <haproxy/time.h>
 
 #include <types/channel.h>
-#include <types/global.h>
 #include <types/stream.h>
 #include <types/stream_interface.h>
 
diff --git a/include/proto/cli.h b/include/proto/cli.h
index 0668508..13490af 100644
--- a/include/proto/cli.h
+++ b/include/proto/cli.h
@@ -23,10 +23,10 @@
 #ifndef _PROTO_CLI_H
 #define _PROTO_CLI_H
 
+#include <haproxy/global.h>
 #include <types/applet.h>
 #include <types/channel.h>
 #include <types/cli.h>
-#include <types/global.h>
 #include <types/stream.h>
 
 
diff --git a/include/proto/proxy.h b/include/proto/proxy.h
index 5e17ffe..6a9aa55 100644
--- a/include/proto/proxy.h
+++ b/include/proto/proxy.h
@@ -27,7 +27,7 @@
 #include <haproxy/ticks.h>
 #include <haproxy/time.h>
 #include <types/applet.h>
-#include <types/global.h>
+#include <haproxy/global-t.h>
 #include <types/proxy.h>
 #include <haproxy/freq_ctr.h>
 
diff --git a/include/proto/session.h b/include/proto/session.h
index 8a17ad9..01e2d94 100644
--- a/include/proto/session.h
+++ b/include/proto/session.h
@@ -26,7 +26,7 @@
 #include <haproxy/obj_type.h>
 #include <haproxy/pool.h>
 
-#include <types/global.h>
+#include <haproxy/global-t.h>
 #include <types/session.h>
 
 #include <proto/stick_table.h>
diff --git a/include/proto/task.h b/include/proto/task.h
index 17a8288..85ec75a 100644
--- a/include/proto/task.h
+++ b/include/proto/task.h
@@ -27,6 +27,7 @@
 
 #include <haproxy/api.h>
 #include <haproxy/pool.h>
+#include <haproxy/global.h>
 #include <haproxy/intops.h>
 #include <haproxy/list.h>
 #include <haproxy/ticks.h>
@@ -35,7 +36,6 @@
 #include <import/eb32sctree.h>
 #include <import/eb32tree.h>
 
-#include <types/global.h>
 #include <types/task.h>
 
 #include <haproxy/fd.h>
diff --git a/include/types/checks.h b/include/types/checks.h
index 9b914d0..371ed43 100644
--- a/include/types/checks.h
+++ b/include/types/checks.h
@@ -23,9 +23,7 @@
 #include <haproxy/buf-t.h>
 
 #include <types/connection.h>
-#include <types/proxy.h>
 #include <haproxy/sample-t.h>
-#include <types/server.h>
 #include <types/session.h>
 #include <types/task.h>
 
@@ -133,6 +131,8 @@
 	HANA_OBS_SIZE
 };
 
+struct proxy;
+struct server;
 struct check {
 	enum obj_type obj_type;                 /* object type == OBJ_TYPE_CHECK */
 	struct session *sess;			/* Health check session. */
diff --git a/include/types/global.h b/include/types/global.h
deleted file mode 100644
index 56e7678..0000000
--- a/include/types/global.h
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * include/types/global.h
- * Global variables.
- *
- * Copyright (C) 2000-2012 Willy Tarreau - w@1wt.eu
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation, version 2.1
- * exclusively.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef _TYPES_GLOBAL_H
-#define _TYPES_GLOBAL_H
-
-#include <netinet/in.h>
-
-#include <haproxy/api-t.h>
-#include <haproxy/thread.h>
-#include <haproxy/vars-t.h>
-
-#include <haproxy/freq_ctr-t.h>
-#include <types/proxy.h>
-#include <types/task.h>
-
-#ifndef UNIX_MAX_PATH
-#define UNIX_MAX_PATH 108
-#endif
-
-/* modes of operation (global.mode) */
-#define	MODE_DEBUG	0x01
-#define	MODE_DAEMON	0x02
-#define	MODE_QUIET	0x04
-#define	MODE_CHECK	0x08
-#define	MODE_VERBOSE	0x10
-#define	MODE_STARTING	0x20
-#define	MODE_FOREGROUND	0x40
-#define	MODE_MWORKER	0x80    /* Master Worker */
-#define	MODE_MWORKER_WAIT	0x100    /* Master Worker wait mode */
-#define	MODE_ZERO_WARNING       0x200    /* warnings cause a failure */
-
-/* list of last checks to perform, depending on config options */
-#define LSTCHK_CAP_BIND	0x00000001	/* check that we can bind to any port */
-#define LSTCHK_NETADM	0x00000002	/* check that we have CAP_NET_ADMIN */
-
-/* Global tuning options */
-/* available polling mechanisms */
-#define GTUNE_USE_SELECT         (1<<0)
-#define GTUNE_USE_POLL           (1<<1)
-#define GTUNE_USE_EPOLL          (1<<2)
-#define GTUNE_USE_KQUEUE         (1<<3)
-/* platform-specific options */
-#define GTUNE_USE_SPLICE         (1<<4)
-#define GTUNE_USE_GAI            (1<<5)
-#define GTUNE_USE_REUSEPORT      (1<<6)
-#define GTUNE_RESOLVE_DONTFAIL   (1<<7)
-
-#define GTUNE_SOCKET_TRANSFER	 (1<<8)
-#define GTUNE_NOEXIT_ONFAILURE   (1<<9)
-#define GTUNE_USE_SYSTEMD        (1<<10)
-
-#define GTUNE_BUSY_POLLING       (1<<11)
-#define GTUNE_LISTENER_MQ        (1<<12)
-#define GTUNE_SET_DUMPABLE       (1<<13)
-#define GTUNE_USE_EVPORTS        (1<<14)
-#define GTUNE_STRICT_LIMITS      (1<<15)
-#define GTUNE_INSECURE_FORK      (1<<16)
-#define GTUNE_INSECURE_SETUID    (1<<17)
-
-/* SSL server verify mode */
-enum {
-	SSL_SERVER_VERIFY_NONE = 0,
-	SSL_SERVER_VERIFY_REQUIRED = 1,
-};
-
-/* FIXME : this will have to be redefined correctly */
-struct global {
-	int uid;
-	int gid;
-	int external_check;
-	int nbproc;
-	int nbthread;
-	unsigned int hard_stop_after;	/* maximum time allowed to perform a soft-stop */
-	int maxconn, hardmaxconn;
-	int maxsslconn;
-	int ssl_session_max_cost;   /* how many bytes an SSL session may cost */
-	int ssl_handshake_max_cost; /* how many bytes an SSL handshake may use */
-	int ssl_used_frontend;      /* non-zero if SSL is used in a frontend */
-	int ssl_used_backend;       /* non-zero if SSL is used in a backend */
-	int ssl_used_async_engines; /* number of used async engines */
-	unsigned int ssl_server_verify; /* default verify mode on servers side */
-	struct freq_ctr conn_per_sec;
-	struct freq_ctr sess_per_sec;
-	struct freq_ctr ssl_per_sec;
-	struct freq_ctr ssl_fe_keys_per_sec;
-	struct freq_ctr ssl_be_keys_per_sec;
-	struct freq_ctr comp_bps_in;	/* bytes per second, before http compression */
-	struct freq_ctr comp_bps_out;	/* bytes per second, after http compression */
-	struct freq_ctr out_32bps;      /* #of 32-byte blocks emitted per second */
-	unsigned long long out_bytes;   /* total #of bytes emitted */
-	int cps_lim, cps_max;
-	int sps_lim, sps_max;
-	int ssl_lim, ssl_max;
-	int ssl_fe_keys_max, ssl_be_keys_max;
-	unsigned int shctx_lookups, shctx_misses;
-	int comp_rate_lim;           /* HTTP compression rate limit */
-	int maxpipes;		/* max # of pipes */
-	int maxsock;		/* max # of sockets */
-	int rlimit_nofile;	/* default ulimit-n value : 0=unset */
-	int rlimit_memmax_all;	/* default all-process memory limit in megs ; 0=unset */
-	int rlimit_memmax;	/* default per-process memory limit in megs ; 0=unset */
-	long maxzlibmem;        /* max RAM for zlib in bytes */
-	int mode;
-	unsigned int req_count; /* request counter (HTTP or TCP session) for logs and unique_id */
-	int last_checks;
-	int spread_checks;
-	int max_spread_checks;
-	int max_syslog_len;
-	char *chroot;
-	char *pidfile;
-	char *node, *desc;		/* node name & description */
-	struct buffer log_tag;           /* name for syslog */
-	struct list logsrvs;
-	char *log_send_hostname;   /* set hostname in syslog header */
-	char *server_state_base;   /* path to a directory where server state files can be found */
-	char *server_state_file;   /* path to the file where server states are loaded from */
-	struct {
-		int maxpollevents; /* max number of poll events at once */
-		int maxaccept;     /* max number of consecutive accept() */
-		int options;       /* various tuning options */
-		int runqueue_depth;/* max number of tasks to run at once */
-		int recv_enough;   /* how many input bytes at once are "enough" */
-		int bufsize;       /* buffer size in bytes, defaults to BUFSIZE */
-		int maxrewrite;    /* buffer max rewrite size in bytes, defaults to MAXREWRITE */
-		int reserved_bufs; /* how many buffers can only be allocated for response */
-		int buf_limit;     /* if not null, how many total buffers may only be allocated */
-		int client_sndbuf; /* set client sndbuf to this value if not null */
-		int client_rcvbuf; /* set client rcvbuf to this value if not null */
-		int server_sndbuf; /* set server sndbuf to this value if not null */
-		int server_rcvbuf; /* set server rcvbuf to this value if not null */
-		int chksize;       /* check buffer size in bytes, defaults to BUFSIZE */
-		int pipesize;      /* pipe size in bytes, system defaults if zero */
-		int max_http_hdr;  /* max number of HTTP headers, use MAX_HTTP_HDR if zero */
-		int requri_len;    /* max len of request URI, use REQURI_LEN if zero */
-		int cookie_len;    /* max length of cookie captures */
-		int pattern_cache; /* max number of entries in the pattern cache. */
-		int sslcachesize;  /* SSL cache size in session, defaults to 20000 */
-		int comp_maxlevel;    /* max HTTP compression level */
-		int pool_low_ratio;   /* max ratio of FDs used before we stop using new idle connections */
-		int pool_high_ratio;  /* max ratio of FDs used before we start killing idle connections when creating new connections */
-		int pool_low_count;   /* max number of opened fd before we stop using new idle connections */
-		int pool_high_count;  /* max number of opened fd before we start killing idle connections when creating new connections */
-		unsigned short idle_timer; /* how long before an empty buffer is considered idle (ms) */
-	} tune;
-	struct {
-		char *prefix;           /* path prefix of unix bind socket */
-		struct {                /* UNIX socket permissions */
-			uid_t uid;      /* -1 to leave unchanged */
-			gid_t gid;      /* -1 to leave unchanged */
-			mode_t mode;    /* 0 to leave unchanged */
-		} ux;
-	} unix_bind;
-	struct proxy *stats_fe;     /* the frontend holding the stats settings */
-	struct vars   vars;         /* list of variables for the process scope. */
-#ifdef USE_CPU_AFFINITY
-	struct {
-		unsigned long proc[MAX_PROCS];      /* list of CPU masks for the 32/64 first processes */
-		unsigned long proc_t1[MAX_PROCS];   /* list of CPU masks for the 1st thread of each process */
-		unsigned long thread[MAX_THREADS];  /* list of CPU masks for the 32/64 first threads of the 1st process */
-	} cpu_map;
-#endif
-};
-
-extern struct global global;
-extern int  pid;                /* current process id */
-extern int  relative_pid;       /* process id starting at 1 */
-extern unsigned long pid_bit;   /* bit corresponding to the process id */
-extern unsigned long all_proc_mask; /* mask of all processes */
-extern int  actconn;            /* # of active sessions */
-extern int  listeners;
-extern int  jobs;               /* # of active jobs (listeners, sessions, open devices) */
-extern int  unstoppable_jobs;   /* # of active jobs that can't be stopped during a soft stop */
-extern int  active_peers;       /* # of active peers (connection attempts and successes) */
-extern int  connected_peers;    /* # of really connected peers */
-extern THREAD_LOCAL struct buffer trash;
-extern int nb_oldpids;          /* contains the number of old pids found */
-extern const int zero;
-extern const int one;
-extern const struct linger nolinger;
-extern int stopping;	/* non zero means stopping in progress */
-extern int killed;	/* >0 means a hard-stop is triggered, >1 means hard-stop immediately */
-extern char hostname[MAX_HOSTNAME_LEN];
-extern char localpeer[MAX_HOSTNAME_LEN];
-extern unsigned int warned;     /* bitfield of a few warnings to emit just once */
-extern volatile unsigned long sleeping_thread_mask;
-extern struct list proc_list; /* list of process in mworker mode */
-extern struct mworker_proc *proc_self; /* process structure of current process */
-extern int master; /* 1 if in master, 0 otherwise */
-extern unsigned int rlim_fd_cur_at_boot;
-extern unsigned int rlim_fd_max_at_boot;
-extern int atexit_flag;
-extern unsigned char boot_seed[20];  // per-boot random seed (160 bits initially)
-
-/* bit values to go with "warned" above */
-#define WARN_ANY                    0x00000001 /* any warning was emitted */
-#define WARN_FORCECLOSE_DEPRECATED  0x00000002
-#define WARN_EXEC_PATH              0x00000004 /* executable path already reported */
-
-
-/* to be used with warned and WARN_* */
-static inline int already_warned(unsigned int warning)
-{
-	if (warned & warning)
-		return 1;
-	warned |= warning;
-	return 0;
-}
-
-/* returns a mask if set, otherwise all_proc_mask */
-static inline unsigned long proc_mask(unsigned long mask)
-{
-	return mask ? mask : all_proc_mask;
-}
-
-/* returns a mask if set, otherwise all_threads_mask */
-static inline unsigned long thread_mask(unsigned long mask)
-{
-	return mask ? mask : all_threads_mask;
-}
-
-int tell_old_pids(int sig);
-int delete_oldpid(int pid);
-
-int main(int argc, char **argv);
-void deinit(void);
-void run_poll_loop(void);
-void hap_register_build_opts(const char *str, int must_free);
-void hap_register_post_check(int (*fct)());
-void hap_register_post_proxy_check(int (*fct)(struct proxy *));
-void hap_register_post_server_check(int (*fct)(struct server *));
-void hap_register_post_deinit(void (*fct)());
-void hap_register_proxy_deinit(void (*fct)(struct proxy *));
-void hap_register_server_deinit(void (*fct)(struct server *));
-
-void hap_register_per_thread_alloc(int (*fct)());
-void hap_register_per_thread_init(int (*fct)());
-void hap_register_per_thread_deinit(void (*fct)());
-void hap_register_per_thread_free(int (*fct)());
-
-void mworker_accept_wrapper(int fd);
-void mworker_reload();
-
-/* simplified way to declare static build options in a file */
-#define REGISTER_BUILD_OPTS(str) \
-	INITCALL2(STG_REGISTER, hap_register_build_opts, (str), 0)
-
-/* simplified way to declare a post-check callback in a file */
-#define REGISTER_POST_CHECK(fct) \
-	INITCALL1(STG_REGISTER, hap_register_post_check, (fct))
-
-/* simplified way to declare a post-proxy-check callback in a file */
-#define REGISTER_POST_PROXY_CHECK(fct) \
-	INITCALL1(STG_REGISTER, hap_register_post_proxy_check, (fct))
-
-/* simplified way to declare a post-server-check callback in a file */
-#define REGISTER_POST_SERVER_CHECK(fct) \
-	INITCALL1(STG_REGISTER, hap_register_post_server_check, (fct))
-
-/* simplified way to declare a post-deinit callback in a file */
-#define REGISTER_POST_DEINIT(fct) \
-	INITCALL1(STG_REGISTER, hap_register_post_deinit, (fct))
-
-/* simplified way to declare a proxy-deinit callback in a file */
-#define REGISTER_PROXY_DEINIT(fct) \
-	INITCALL1(STG_REGISTER, hap_register_proxy_deinit, (fct))
-
-/* simplified way to declare a proxy-deinit callback in a file */
-#define REGISTER_SERVER_DEINIT(fct) \
-	INITCALL1(STG_REGISTER, hap_register_server_deinit, (fct))
-
-/* simplified way to declare a per-thread allocation callback in a file */
-#define REGISTER_PER_THREAD_ALLOC(fct) \
-	INITCALL1(STG_REGISTER, hap_register_per_thread_alloc, (fct))
-
-/* simplified way to declare a per-thread init callback in a file */
-#define REGISTER_PER_THREAD_INIT(fct) \
-	INITCALL1(STG_REGISTER, hap_register_per_thread_init, (fct))
-
-/* simplified way to declare a per-thread deinit callback in a file */
-#define REGISTER_PER_THREAD_DEINIT(fct) \
-	INITCALL1(STG_REGISTER, hap_register_per_thread_deinit, (fct))
-
-/* simplified way to declare a per-thread free callback in a file */
-#define REGISTER_PER_THREAD_FREE(fct) \
-	INITCALL1(STG_REGISTER, hap_register_per_thread_free, (fct))
-
-#endif /* _TYPES_GLOBAL_H */
-
-/*
- * Local variables:
- *  c-indent-level: 8
- *  c-basic-offset: 8
- * End:
- */
diff --git a/include/types/server.h b/include/types/server.h
index 770a472..a9d333e 100644
--- a/include/types/server.h
+++ b/include/types/server.h
@@ -38,7 +38,6 @@
 
 #include <types/connection.h>
 #include <haproxy/freq_ctr-t.h>
-#include <types/proxy.h>
 #include <types/queue.h>
 #include <types/ssl_sock.h>
 #include <types/task.h>
@@ -204,6 +203,7 @@
 	struct eb32_node node;
 };
 
+struct proxy;
 struct server {
 	enum obj_type obj_type;                 /* object type == OBJ_TYPE_SERVER */
 	enum srv_state next_state, cur_state;   /* server state among SRV_ST_* */
diff --git a/include/types/session.h b/include/types/session.h
index 70d10a8..3e49b46 100644
--- a/include/types/session.h
+++ b/include/types/session.h
@@ -33,7 +33,6 @@
 #include <haproxy/obj_type-t.h>
 #include <haproxy/vars-t.h>
 
-#include <types/proxy.h>
 #include <types/stick_table.h>
 #include <types/task.h>
 
@@ -51,6 +50,7 @@
 	SESS_FL_PREFER_LAST   = 0x00000001, /* NTML authent, we should reuse last conn */
 };
 
+struct proxy;
 struct session {
 	struct proxy *fe;               /* the proxy this session depends on for the client side */
 	struct listener *listener;      /* the listener by which the request arrived */
diff --git a/src/51d.c b/src/51d.c
index 2309592..529a8ba 100644
--- a/src/51d.c
+++ b/src/51d.c
@@ -7,7 +7,7 @@
 #include <haproxy/errors.h>
 #include <haproxy/http_htx.h>
 #include <haproxy/thread.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <haproxy/arg.h>
 #include <proto/http_fetch.h>
 #include <proto/log.h>
diff --git a/src/acl.c b/src/acl.c
index d2187e8..caa9dd1 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -21,7 +21,7 @@
 #include <haproxy/tools.h>
 #include <common/uri_auth.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 
 #include <proto/acl.h>
 #include <haproxy/arg.h>
diff --git a/src/arg.c b/src/arg.c
index 467929b..a0f9a59 100644
--- a/src/arg.c
+++ b/src/arg.c
@@ -16,7 +16,7 @@
 
 #include <haproxy/tools.h>
 #include <haproxy/chunk.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <haproxy/arg.h>
 
 const char *arg_type_names[ARGT_NBTYPES] = {
diff --git a/src/auth.c b/src/auth.c
index b28d6dd..fe21a45 100644
--- a/src/auth.c
+++ b/src/auth.c
@@ -27,7 +27,7 @@
 
 #include <haproxy/auth-t.h>
 #include <haproxy/api.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <haproxy/errors.h>
 #include <haproxy/pattern-t.h>
 #include <haproxy/thread.h>
diff --git a/src/backend.c b/src/backend.c
index e12f207..18ac583 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -35,7 +35,7 @@
 #include <haproxy/time.h>
 #include <haproxy/namespace.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 
 #include <proto/acl.h>
 #include <haproxy/arg.h>
diff --git a/src/buffer.c b/src/buffer.c
index b41716b..e0db429 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -19,7 +19,7 @@
 #include <haproxy/list.h>
 #include <haproxy/pool.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 
 struct pool_head *pool_head_buffer;
 
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 6c675c4..8ea64a1 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -58,7 +58,7 @@
 #include <haproxy/thread.h>
 
 #include <types/filters.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/peers.h>
 #include <types/stats.h>
 
diff --git a/src/checks.c b/src/checks.c
index 0793a82..af34ebe 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -47,7 +47,7 @@
 #include <haproxy/htx.h>
 #include <haproxy/vars.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/stats.h>
 
 #include <haproxy/arg.h>
diff --git a/src/chunk.c b/src/chunk.c
index f9e6fe5..6f9aa39 100644
--- a/src/chunk.c
+++ b/src/chunk.c
@@ -19,7 +19,7 @@
 #include <haproxy/chunk.h>
 #include <haproxy/tools.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 
 /* trash chunks used for various conversions */
 static THREAD_LOCAL struct buffer *trash_chunk;
diff --git a/src/cli.c b/src/cli.c
index f5f197f..b9481c1 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -43,7 +43,7 @@
 #include <haproxy/base64.h>
 
 #include <types/applet.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/stats.h>
 
 #include <haproxy/activity.h>
diff --git a/src/compression.c b/src/compression.c
index 77da405..081bf03 100644
--- a/src/compression.c
+++ b/src/compression.c
@@ -32,7 +32,7 @@
 #include <haproxy/thread.h>
 #include <haproxy/pool.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <haproxy/compression-t.h>
 
 #include <proto/acl.h>
diff --git a/src/da.c b/src/da.c
index aef12a2..20afdfc 100644
--- a/src/da.c
+++ b/src/da.c
@@ -5,7 +5,7 @@
 #include <haproxy/errors.h>
 #include <haproxy/http.h>
 #include <haproxy/http_htx.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <haproxy/arg.h>
 #include <proto/http_fetch.h>
 #include <proto/log.h>
diff --git a/src/debug.c b/src/debug.c
index 18fed01..c179652 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -28,7 +28,7 @@
 #include <haproxy/net_helper.h>
 #include <haproxy/tools.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/signal.h>
 
 #include <proto/cli.h>
diff --git a/src/dns.c b/src/dns.c
index a3e02e9..4fec311 100644
--- a/src/dns.c
+++ b/src/dns.c
@@ -33,7 +33,7 @@
 
 #include <types/applet.h>
 #include <types/cli.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/stats.h>
 
 #include <proto/channel.h>
diff --git a/src/ev_epoll.c b/src/ev_epoll.c
index d5717e7..0a12262 100644
--- a/src/ev_epoll.c
+++ b/src/ev_epoll.c
@@ -15,13 +15,12 @@
 #include <sys/types.h>
 
 #include <haproxy/api.h>
+#include <haproxy/global.h>
 #include <haproxy/thread-t.h>
 #include <haproxy/tools.h>
 #include <haproxy/ticks.h>
 #include <haproxy/time.h>
 
-#include <types/global.h>
-
 #include <haproxy/activity.h>
 #include <haproxy/fd.h>
 #include <proto/signal.h>
diff --git a/src/ev_evports.c b/src/ev_evports.c
index 0a18bd3..cfd053b 100644
--- a/src/ev_evports.c
+++ b/src/ev_evports.c
@@ -23,7 +23,7 @@
 #include <haproxy/ticks.h>
 #include <haproxy/time.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 
 #include <haproxy/activity.h>
 #include <haproxy/fd.h>
diff --git a/src/ev_kqueue.c b/src/ev_kqueue.c
index 5746f1a..a4c3bce 100644
--- a/src/ev_kqueue.c
+++ b/src/ev_kqueue.c
@@ -22,7 +22,7 @@
 #include <haproxy/ticks.h>
 #include <haproxy/time.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 
 #include <haproxy/activity.h>
 #include <haproxy/fd.h>
diff --git a/src/ev_poll.c b/src/ev_poll.c
index 344b6d4..8781e6c 100644
--- a/src/ev_poll.c
+++ b/src/ev_poll.c
@@ -22,7 +22,7 @@
 #include <haproxy/ticks.h>
 #include <haproxy/time.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 
 #include <haproxy/activity.h>
 #include <haproxy/fd.h>
diff --git a/src/ev_select.c b/src/ev_select.c
index 6a5d2f8..cee5e8e 100644
--- a/src/ev_select.c
+++ b/src/ev_select.c
@@ -19,7 +19,7 @@
 #include <haproxy/ticks.h>
 #include <haproxy/time.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 
 #include <haproxy/activity.h>
 #include <haproxy/fd.h>
diff --git a/src/fcgi-app.c b/src/fcgi-app.c
index 6d02e89..10a8de5 100644
--- a/src/fcgi-app.c
+++ b/src/fcgi-app.c
@@ -19,7 +19,7 @@
 #include <haproxy/sample.h>
 #include <haproxy/tools.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 
 #include <proto/acl.h>
 #include <proto/fcgi-app.h>
diff --git a/src/fd.c b/src/fd.c
index 60db19c..82f6196 100644
--- a/src/fd.c
+++ b/src/fd.c
@@ -89,7 +89,7 @@
 
 
 #include <haproxy/api.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 
 #include <haproxy/fd.h>
 #include <proto/log.h>
diff --git a/src/flt_spoe.c b/src/flt_spoe.c
index 6acb9f4..64650ae 100644
--- a/src/flt_spoe.c
+++ b/src/flt_spoe.c
@@ -24,7 +24,7 @@
 #include <haproxy/vars.h>
 
 #include <haproxy/arg-t.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/spoe.h>
 
 #include <proto/acl.h>
diff --git a/src/flt_trace.c b/src/flt_trace.c
index 362040c..1c200ce 100644
--- a/src/flt_trace.c
+++ b/src/flt_trace.c
@@ -20,7 +20,7 @@
 
 #include <types/channel.h>
 #include <types/filters.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/proxy.h>
 #include <types/stream.h>
 
diff --git a/src/frontend.c b/src/frontend.c
index 00c31d8..44ac151 100644
--- a/src/frontend.c
+++ b/src/frontend.c
@@ -29,7 +29,7 @@
 #include <haproxy/tools.h>
 #include <haproxy/time.h>
 
-#include <types/global.h>
+#include <haproxy/global.h>
 
 #include <proto/acl.h>
 #include <haproxy/arg.h>
diff --git a/src/h2.c b/src/h2.c
index 7e58113..bd46ffc 100644
--- a/src/h2.c
+++ b/src/h2.c
@@ -32,7 +32,7 @@
 #include <haproxy/http-hdr-t.h>
 #include <haproxy/htx.h>
 #include <import/ist.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 
 struct h2_frame_definition h2_frame_definition[H2_FT_ENTRIES] =	{
 	 [H2_FT_DATA         ] = { .dir = 3, .min_id = 1, .max_id = H2_MAX_STREAM_ID, .min_len = 0, .max_len = H2_MAX_FRAME_LEN, },
diff --git a/src/haproxy.c b/src/haproxy.c
index 5a7cbf3..377bb2e 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -110,7 +110,7 @@
 #include <haproxy/capture-t.h>
 #include <types/cli.h>
 #include <types/filters.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/acl.h>
 #include <types/peers.h>
 
diff --git a/src/hpack-dec.c b/src/hpack-dec.c
index c9808d3..987165c 100644
--- a/src/hpack-dec.c
+++ b/src/hpack-dec.c
@@ -38,8 +38,6 @@
 #include <haproxy/h2.h>
 #include <import/ist.h>
 
-#include <types/global.h>
-
 
 #if defined(DEBUG_HPACK)
 #define hpack_debug_printf printf
diff --git a/src/hpack-enc.c b/src/hpack-enc.c
index 62c6652..64cca78 100644
--- a/src/hpack-enc.c
+++ b/src/hpack-enc.c
@@ -34,8 +34,6 @@
 #include <haproxy/http-hdr-t.h>
 #include <import/ist.h>
 
-#include <types/global.h>
-
 /*
  * HPACK encoding: these tables were generated using gen-enc.c
  */
diff --git a/src/hpack-tbl.c b/src/hpack-tbl.c
index 8c56a0d..ac6408c 100644
--- a/src/hpack-tbl.c
+++ b/src/hpack-tbl.c
@@ -34,8 +34,6 @@
 #include <haproxy/hpack-tbl.h>
 #include <import/ist.h>
 
-#include <types/global.h>
-
 /* static header table as in RFC7541 Appendix A. [0] unused. */
 const struct http_hdr hpack_sht[HPACK_SHT_SIZE] = {
 	[ 1] = { .n = IST(":authority"),                   .v = IST("")              },
diff --git a/src/http_acl.c b/src/http_acl.c
index b2de967..0b6adfd 100644
--- a/src/http_acl.c
+++ b/src/http_acl.c
@@ -25,8 +25,6 @@
 #include <haproxy/tools.h>
 #include <haproxy/version.h>
 
-#include <types/global.h>
-
 #include <proto/acl.h>
 #include <haproxy/arg.h>
 
diff --git a/src/http_act.c b/src/http_act.c
index 0549bc0..356d572 100644
--- a/src/http_act.c
+++ b/src/http_act.c
@@ -20,6 +20,7 @@
 #include <haproxy/api.h>
 #include <common/cfgparse.h>
 #include <haproxy/chunk.h>
+#include <haproxy/global.h>
 #include <haproxy/http.h>
 #include <haproxy/http_htx.h>
 #include <haproxy/http_rules.h>
@@ -32,7 +33,6 @@
 #include <haproxy/version.h>
 
 #include <haproxy/capture-t.h>
-#include <types/global.h>
 
 #include <proto/acl.h>
 #include <haproxy/arg.h>
diff --git a/src/http_conv.c b/src/http_conv.c
index 730809a..bee2f90 100644
--- a/src/http_conv.c
+++ b/src/http_conv.c
@@ -25,7 +25,6 @@
 #include <haproxy/version.h>
 
 #include <haproxy/capture-t.h>
-#include <types/global.h>
 
 #include <haproxy/arg.h>
 #include <proto/stream.h>
diff --git a/src/http_fetch.c b/src/http_fetch.c
index 634847a..6f367fe 100644
--- a/src/http_fetch.c
+++ b/src/http_fetch.c
@@ -20,6 +20,7 @@
 #include <haproxy/api.h>
 #include <haproxy/base64.h>
 #include <haproxy/chunk.h>
+#include <haproxy/global.h>
 #include <haproxy/h1.h>
 #include <haproxy/h1_htx.h>
 #include <haproxy/http.h>
@@ -31,8 +32,6 @@
 #include <haproxy/tools.h>
 #include <haproxy/version.h>
 
-#include <types/global.h>
-
 #include <haproxy/arg.h>
 #include <proto/channel.h>
 #include <proto/connection.h>
diff --git a/src/http_htx.c b/src/http_htx.c
index d018ca5..35bb2c6 100644
--- a/src/http_htx.c
+++ b/src/http_htx.c
@@ -15,9 +15,9 @@
 #include <unistd.h>
 
 #include <haproxy/api.h>
+#include <haproxy/global.h>
 #include <haproxy/regex.h>
 #include <haproxy/sample.h>
-#include <types/global.h>
 
 #include <common/cfgparse.h>
 #include <haproxy/h1.h>
diff --git a/src/http_rules.c b/src/http_rules.c
index 79c9936..955c04f 100644
--- a/src/http_rules.c
+++ b/src/http_rules.c
@@ -27,7 +27,6 @@
 #include <haproxy/version.h>
 
 #include <haproxy/capture-t.h>
-#include <types/global.h>
 
 #include <proto/acl.h>
 #include <haproxy/arg.h>
diff --git a/src/lb_chash.c b/src/lb_chash.c
index 0fc18d9..4cb97ad 100644
--- a/src/lb_chash.c
+++ b/src/lb_chash.c
@@ -20,7 +20,6 @@
 #include <haproxy/tools.h>
 #include <import/eb32tree.h>
 
-#include <types/global.h>
 #include <types/server.h>
 
 #include <proto/backend.h>
diff --git a/src/lb_fas.c b/src/lb_fas.c
index 72e9c9c..ae1297e 100644
--- a/src/lb_fas.c
+++ b/src/lb_fas.c
@@ -19,7 +19,6 @@
 #include <haproxy/api.h>
 #include <import/eb32tree.h>
 
-#include <types/global.h>
 #include <types/server.h>
 
 #include <proto/backend.h>
diff --git a/src/lb_fwlc.c b/src/lb_fwlc.c
index b9cc987..3aa050f 100644
--- a/src/lb_fwlc.c
+++ b/src/lb_fwlc.c
@@ -13,7 +13,6 @@
 #include <haproxy/api.h>
 #include <import/eb32tree.h>
 
-#include <types/global.h>
 #include <types/server.h>
 
 #include <proto/backend.h>
diff --git a/src/lb_fwrr.c b/src/lb_fwrr.c
index 6f87697..7eafe48 100644
--- a/src/lb_fwrr.c
+++ b/src/lb_fwrr.c
@@ -13,7 +13,6 @@
 #include <haproxy/api.h>
 #include <import/eb32tree.h>
 
-#include <types/global.h>
 #include <types/server.h>
 
 #include <proto/backend.h>
diff --git a/src/lb_map.c b/src/lb_map.c
index 8d2461f..c5e0f89 100644
--- a/src/lb_map.c
+++ b/src/lb_map.c
@@ -13,7 +13,6 @@
 #include <haproxy/api.h>
 #include <import/eb32tree.h>
 
-#include <types/global.h>
 #include <types/server.h>
 
 #include <proto/backend.h>
diff --git a/src/listener.c b/src/listener.c
index 3f6230f..417a902 100644
--- a/src/listener.c
+++ b/src/listener.c
@@ -21,12 +21,12 @@
 #include <haproxy/api.h>
 #include <common/cfgparse.h>
 #include <haproxy/errors.h>
+#include <haproxy/global.h>
 #include <haproxy/list.h>
 #include <haproxy/listener.h>
 #include <haproxy/tools.h>
 #include <haproxy/time.h>
 
-#include <types/global.h>
 #include <haproxy/protocol-t.h>
 
 #include <proto/acl.h>
diff --git a/src/log.c b/src/log.c
index 2bc0990..d9bbecd 100644
--- a/src/log.c
+++ b/src/log.c
@@ -32,7 +32,7 @@
 #include <haproxy/version.h>
 
 #include <types/cli.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/log.h>
 
 #include <proto/applet.h>
diff --git a/src/map.c b/src/map.c
index 33f24dd..7435fb1 100644
--- a/src/map.c
+++ b/src/map.c
@@ -20,7 +20,6 @@
 
 #include <types/applet.h>
 #include <types/cli.h>
-#include <types/global.h>
 #include <types/stats.h>
 
 #include <proto/applet.h>
diff --git a/src/mworker.c b/src/mworker.c
index 4ba43d2..9e5b826 100644
--- a/src/mworker.c
+++ b/src/mworker.c
@@ -25,7 +25,7 @@
 #include <haproxy/version.h>
 
 #include <types/cli.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/peers.h>
 #include <types/signal.h>
 
diff --git a/src/namespace.c b/src/namespace.c
index 4f82c62..616dbea 100644
--- a/src/namespace.c
+++ b/src/namespace.c
@@ -16,7 +16,6 @@
 #include <haproxy/errors.h>
 #include <proto/log.h>
 #include <proto/signal.h>
-#include <types/global.h>
 
 /* Opens the namespace <ns_name> and returns the FD or -1 in case of error
  * (check errno).
diff --git a/src/pattern.c b/src/pattern.c
index 9397234..0ec22c1 100644
--- a/src/pattern.c
+++ b/src/pattern.c
@@ -15,13 +15,12 @@
 #include <errno.h>
 
 #include <haproxy/api.h>
+#include <haproxy/global.h>
 #include <haproxy/net_helper.h>
 #include <haproxy/pattern.h>
 #include <haproxy/regex.h>
 #include <haproxy/tools.h>
 
-#include <types/global.h>
-
 #include <proto/log.h>
 #include <haproxy/sample.h>
 
diff --git a/src/peers.c b/src/peers.c
index 8a07cdb..3724346 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -29,7 +29,6 @@
 #include <haproxy/tools.h>
 #include <haproxy/thread.h>
 
-#include <types/global.h>
 #include <types/peers.h>
 #include <types/stats.h>
 
diff --git a/src/pipe.c b/src/pipe.c
index 992c77b..59b8312 100644
--- a/src/pipe.c
+++ b/src/pipe.c
@@ -14,10 +14,10 @@
 #include <fcntl.h>
 
 #include <haproxy/api.h>
+#include <haproxy/global.h>
 #include <haproxy/thread.h>
 #include <haproxy/pool.h>
 
-#include <types/global.h>
 #include <haproxy/pipe-t.h>
 
 DECLARE_STATIC_POOL(pool_head_pipe, "pipe", sizeof(struct pipe));
diff --git a/src/pool.c b/src/pool.c
index 4ff97b6..2f32b58 100644
--- a/src/pool.c
+++ b/src/pool.c
@@ -14,7 +14,7 @@
 #include <haproxy/api.h>
 #include <types/applet.h>
 #include <types/cli.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <types/stats.h>
 
 #include <common/cfgparse.h>
diff --git a/src/proto_sockpair.c b/src/proto_sockpair.c
index 7d7dce4..a0453c1 100644
--- a/src/proto_sockpair.c
+++ b/src/proto_sockpair.c
@@ -28,14 +28,13 @@
 
 #include <haproxy/api.h>
 #include <haproxy/errors.h>
+#include <haproxy/global.h>
 #include <haproxy/list.h>
 #include <haproxy/listener.h>
 #include <haproxy/tools.h>
 #include <haproxy/time.h>
 #include <haproxy/version.h>
 
-#include <types/global.h>
-
 #include <proto/connection.h>
 #include <haproxy/fd.h>
 #include <haproxy/freq_ctr.h>
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index de001c2..e6eae99 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -33,6 +33,7 @@
 #include <haproxy/action-t.h>
 #include <haproxy/api.h>
 #include <haproxy/errors.h>
+#include <haproxy/global.h>
 #include <haproxy/http_rules.h>
 #include <haproxy/list.h>
 #include <haproxy/listener.h>
@@ -41,7 +42,6 @@
 #include <haproxy/namespace.h>
 
 #include <types/connection.h>
-#include <types/global.h>
 #include <types/stream.h>
 
 #include <haproxy/arg.h>
diff --git a/src/proto_udp.c b/src/proto_udp.c
index 93c0389..617df1a 100644
--- a/src/proto_udp.c
+++ b/src/proto_udp.c
@@ -10,7 +10,6 @@
  *
  */
 
-#include <types/global.h>
 #include <haproxy/fd-t.h>
 #include <haproxy/proto_udp-t.h>
 
diff --git a/src/proto_uxst.c b/src/proto_uxst.c
index f0a38e7..6925373 100644
--- a/src/proto_uxst.c
+++ b/src/proto_uxst.c
@@ -28,14 +28,13 @@
 
 #include <haproxy/api.h>
 #include <haproxy/errors.h>
+#include <haproxy/global.h>
 #include <haproxy/list.h>
 #include <haproxy/listener.h>
 #include <haproxy/tools.h>
 #include <haproxy/time.h>
 #include <haproxy/version.h>
 
-#include <types/global.h>
-
 #include <proto/connection.h>
 #include <haproxy/fd.h>
 #include <proto/log.h>
diff --git a/src/proxy.c b/src/proxy.c
index 2b5368d..5d42217 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -20,6 +20,7 @@
 #include <haproxy/api.h>
 #include <common/cfgparse.h>
 #include <haproxy/errors.h>
+#include <haproxy/global.h>
 #include <haproxy/listener.h>
 #include <haproxy/obj_type-t.h>
 #include <haproxy/pool.h>
@@ -30,7 +31,6 @@
 
 #include <haproxy/capture-t.h>
 #include <types/cli.h>
-#include <types/global.h>
 #include <types/peers.h>
 #include <types/stats.h>
 
diff --git a/src/raw_sock.c b/src/raw_sock.c
index 1ece79b..b5538d6 100644
--- a/src/raw_sock.c
+++ b/src/raw_sock.c
@@ -24,6 +24,7 @@
 
 #include <haproxy/api.h>
 #include <haproxy/buf.h>
+#include <haproxy/global.h>
 #include <haproxy/tools.h>
 #include <haproxy/ticks.h>
 #include <haproxy/time.h>
@@ -36,8 +37,6 @@
 #include <proto/stream_interface.h>
 #include <proto/task.h>
 
-#include <types/global.h>
-
 
 #if defined(USE_LINUX_SPLICE)
 
diff --git a/src/regex.c b/src/regex.c
index bebbaa7..b2f325d 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -15,7 +15,6 @@
 #include <string.h>
 
 #include <haproxy/api.h>
-#include <types/global.h>
 #include <haproxy/regex.h>
 #include <haproxy/tools.h>
 #include <proto/log.h>
diff --git a/src/sample.c b/src/sample.c
index ef79834..828cf26 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -17,11 +17,11 @@
 #include <stdio.h>
 
 #include <haproxy/api.h>
-#include <types/global.h>
 
 #include <haproxy/auth.h>
 #include <haproxy/buf.h>
 #include <haproxy/chunk.h>
+#include <haproxy/global.h>
 #include <haproxy/hash.h>
 #include <haproxy/http.h>
 #include <haproxy/net_helper.h>
diff --git a/src/server.c b/src/server.c
index ae4f044..ddc6187 100644
--- a/src/server.c
+++ b/src/server.c
@@ -21,13 +21,13 @@
 #include <haproxy/dict-t.h>
 #include <haproxy/dns.h>
 #include <haproxy/errors.h>
+#include <haproxy/global.h>
 #include <haproxy/namespace.h>
 #include <haproxy/sample.h>
 #include <haproxy/time.h>
 
 #include <types/applet.h>
 #include <types/cli.h>
-#include <types/global.h>
 #include <types/cli.h>
 #include <types/stats.h>
 
diff --git a/src/session.c b/src/session.c
index afbcf2b..92041f5 100644
--- a/src/session.c
+++ b/src/session.c
@@ -11,12 +11,12 @@
  */
 
 #include <haproxy/api.h>
+#include <haproxy/global.h>
 #include <haproxy/http.h>
 #include <haproxy/listener.h>
 #include <haproxy/pool.h>
 #include <haproxy/vars.h>
 
-#include <types/global.h>
 #include <types/session.h>
 
 #include <proto/connection.h>
diff --git a/src/shctx.c b/src/shctx.c
index 1a38b91..f4002a4 100644
--- a/src/shctx.c
+++ b/src/shctx.c
@@ -14,7 +14,6 @@
 #include <sys/mman.h>
 #include <arpa/inet.h>
 #include <import/ebmbtree.h>
-#include <types/global.h>
 #include <haproxy/list.h>
 #include <haproxy/shctx.h>
 
diff --git a/src/ssl_sock.c b/src/ssl_sock.c
index 6d9d713..c1f239a 100644
--- a/src/ssl_sock.c
+++ b/src/ssl_sock.c
@@ -48,6 +48,7 @@
 #include <haproxy/chunk.h>
 #include <haproxy/errors.h>
 #include <haproxy/frontend.h>
+#include <haproxy/global.h>
 #include <haproxy/http_rules.h>
 #include <haproxy/openssl-compat.h>
 #include <haproxy/pattern-t.h>
@@ -66,7 +67,6 @@
 
 #include <types/applet.h>
 #include <types/cli.h>
-#include <types/global.h>
 #include <types/ssl_sock.h>
 #include <types/stats.h>
 
diff --git a/src/stats.c b/src/stats.c
index 6e53934..555b561 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -30,6 +30,7 @@
 #include <haproxy/debug.h>
 #include <haproxy/dns.h>
 #include <haproxy/frontend.h>
+#include <haproxy/global.h>
 #include <haproxy/http.h>
 #include <haproxy/http_htx.h>
 #include <haproxy/htx.h>
@@ -47,7 +48,6 @@
 
 #include <types/applet.h>
 #include <types/cli.h>
-#include <types/global.h>
 #include <types/stats.h>
 
 #include <proto/backend.h>
diff --git a/src/stick_table.c b/src/stick_table.c
index 7026e39..638d30c 100644
--- a/src/stick_table.c
+++ b/src/stick_table.c
@@ -16,6 +16,7 @@
 
 #include <haproxy/api.h>
 #include <common/cfgparse.h>
+#include <haproxy/global.h>
 #include <haproxy/http_rules.h>
 #include <haproxy/pool.h>
 #include <haproxy/list.h>
@@ -27,7 +28,6 @@
 #include <import/ebsttree.h>
 
 #include <types/cli.h>
-#include <types/global.h>
 #include <types/stats.h>
 
 #include <haproxy/arg.h>
diff --git a/src/stream.c b/src/stream.c
index 248dfe2..3531e52 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -22,6 +22,7 @@
 #include <haproxy/dns.h>
 #include <haproxy/dynbuf.h>
 #include <haproxy/frontend.h>
+#include <haproxy/global.h>
 #include <haproxy/hlua.h>
 #include <haproxy/http_rules.h>
 #include <haproxy/istbuf.h>
@@ -33,7 +34,6 @@
 #include <types/applet.h>
 #include <types/cli.h>
 #include <types/filters.h>
-#include <types/global.h>
 #include <types/stats.h>
 
 #include <proto/acl.h>
diff --git a/src/tcp_rules.c b/src/tcp_rules.c
index 6a878fb..e2f8a29 100644
--- a/src/tcp_rules.c
+++ b/src/tcp_rules.c
@@ -13,6 +13,7 @@
 #include <haproxy/api.h>
 #include <haproxy/capture-t.h>
 #include <common/cfgparse.h>
+#include <haproxy/global.h>
 #include <haproxy/list.h>
 #include <haproxy/sample.h>
 #include <haproxy/tools.h>
@@ -21,7 +22,6 @@
 
 #include <haproxy/arg-t.h>
 #include <types/connection.h>
-#include <types/global.h>
 
 #include <proto/acl.h>
 #include <proto/channel.h>
diff --git a/src/thread.c b/src/thread.c
index 0ee9332..b0cbd34 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -26,7 +26,7 @@
 #include <common/cfgparse.h>
 #include <haproxy/thread.h>
 #include <haproxy/tools.h>
-#include <types/global.h>
+#include <haproxy/global.h>
 #include <haproxy/fd.h>
 
 struct thread_info ha_thread_info[MAX_THREADS] = { };
diff --git a/src/tools.c b/src/tools.c
index cfec66a..6dda8aa 100644
--- a/src/tools.c
+++ b/src/tools.c
@@ -42,11 +42,11 @@
 #include <haproxy/api.h>
 #include <haproxy/chunk.h>
 #include <haproxy/dns.h>
+#include <haproxy/global.h>
 #include <haproxy/hlua.h>
 #include <haproxy/listener.h>
 #include <haproxy/namespace.h>
 #include <haproxy/tools.h>
-#include <types/global.h>
 #include <proto/applet.h>
 #include <haproxy/proto_udp.h>
 #include <proto/ssl_sock.h>
diff --git a/src/wdt.c b/src/wdt.c
index 1248beb..93b3224 100644
--- a/src/wdt.c
+++ b/src/wdt.c
@@ -14,9 +14,9 @@
 
 #include <haproxy/api.h>
 #include <haproxy/debug.h>
+#include <haproxy/global.h>
 #include <haproxy/thread.h>
 #include <haproxy/tools.h>
-#include <types/global.h>
 #include <types/signal.h>
 #include <proto/log.h>
 
diff --git a/src/wurfl.c b/src/wurfl.c
index 43cedf5..bbc2f3d 100644
--- a/src/wurfl.c
+++ b/src/wurfl.c
@@ -6,8 +6,8 @@
 #include <common/cfgparse.h>
 #include <haproxy/chunk.h>
 #include <haproxy/errors.h>
+#include <haproxy/global.h>
 #include <haproxy/http_htx.h>
-#include <types/global.h>
 #include <haproxy/arg.h>
 #include <proto/log.h>
 #include <proto/http_ana.h>