]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/socket.h
When warning about unsupported options, be more detailed
[thirdparty/systemd.git] / src / core / socket.h
CommitLineData
03467c88 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
5cb5a6ff 2
c2f1db8f 3#pragma once
5cb5a6ff 4
a7334b09
LP
5/***
6 This file is part of systemd.
7
8 Copyright 2010 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 18 Lesser General Public License for more details.
a7334b09 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
5cb5a6ff
LP
24typedef struct Socket Socket;
25
acbb0225 26#include "manager.h"
87f0e418 27#include "unit.h"
542563ba 28#include "socket-util.h"
6e2ef85b 29#include "mount.h"
57020a3a 30#include "service.h"
5cb5a6ff
LP
31
32typedef enum SocketState {
33 SOCKET_DEAD,
34 SOCKET_START_PRE,
3900e5fd 35 SOCKET_START_CHOWN,
5cb5a6ff
LP
36 SOCKET_START_POST,
37 SOCKET_LISTENING,
38 SOCKET_RUNNING,
39 SOCKET_STOP_PRE,
034c6ed7
LP
40 SOCKET_STOP_PRE_SIGTERM,
41 SOCKET_STOP_PRE_SIGKILL,
5cb5a6ff 42 SOCKET_STOP_POST,
80876c20
LP
43 SOCKET_FINAL_SIGTERM,
44 SOCKET_FINAL_SIGKILL,
fdf20a31 45 SOCKET_FAILED,
e537352b
LP
46 _SOCKET_STATE_MAX,
47 _SOCKET_STATE_INVALID = -1
5cb5a6ff
LP
48} SocketState;
49
50typedef enum SocketExecCommand {
51 SOCKET_EXEC_START_PRE,
3900e5fd 52 SOCKET_EXEC_START_CHOWN,
5cb5a6ff
LP
53 SOCKET_EXEC_START_POST,
54 SOCKET_EXEC_STOP_PRE,
55 SOCKET_EXEC_STOP_POST,
e537352b
LP
56 _SOCKET_EXEC_COMMAND_MAX,
57 _SOCKET_EXEC_COMMAND_INVALID = -1
5cb5a6ff
LP
58} SocketExecCommand;
59
542563ba
LP
60typedef enum SocketType {
61 SOCKET_SOCKET,
e537352b 62 SOCKET_FIFO,
b0a3f2bc 63 SOCKET_SPECIAL,
916abb21 64 SOCKET_MQUEUE,
e537352b
LP
65 _SOCKET_FIFO_MAX,
66 _SOCKET_FIFO_INVALID = -1
542563ba
LP
67} SocketType;
68
cfc4eb4c
LP
69typedef enum SocketResult {
70 SOCKET_SUCCESS,
71 SOCKET_FAILURE_RESOURCES,
72 SOCKET_FAILURE_TIMEOUT,
73 SOCKET_FAILURE_EXIT_CODE,
74 SOCKET_FAILURE_SIGNAL,
75 SOCKET_FAILURE_CORE_DUMP,
6bda96a0 76 SOCKET_FAILURE_SERVICE_FAILED_PERMANENT,
cfc4eb4c
LP
77 _SOCKET_RESULT_MAX,
78 _SOCKET_RESULT_INVALID = -1
79} SocketResult;
80
01f78473 81typedef struct SocketPort {
718db961
LP
82 Socket *socket;
83
542563ba 84 SocketType type;
9d58f1db 85 int fd;
542563ba
LP
86
87 SocketAddress address;
88 char *path;
718db961 89 sd_event_source *event_source;
542563ba 90
01f78473
LP
91 LIST_FIELDS(struct SocketPort, port);
92} SocketPort;
542563ba 93
5cb5a6ff 94struct Socket {
ac155bb8 95 Unit meta;
5cb5a6ff 96
542563ba
LP
97 LIST_HEAD(SocketPort, ports);
98
7fab9d01
LP
99 unsigned n_accepted;
100 unsigned n_connections;
101 unsigned max_connections;
102
542563ba 103 unsigned backlog;
209e9dcd 104 unsigned keep_alive_cnt;
034c6ed7 105 usec_t timeout_usec;
209e9dcd
SS
106 usec_t keep_alive_time;
107 usec_t keep_alive_interval;
cc567c9b 108 usec_t defer_accept;
034c6ed7 109
e537352b 110 ExecCommand* exec_command[_SOCKET_EXEC_COMMAND_MAX];
5cb5a6ff 111 ExecContext exec_context;
4819ff03 112 KillContext kill_context;
4ad49000 113 CGroupContext cgroup_context;
613b411c 114 ExecRuntime *exec_runtime;
5cb5a6ff 115
b15bdda8
LP
116 /* For Accept=no sockets refers to the one service we'll
117 activate. For Accept=yes sockets is either NULL, or filled
118 when the next service we spawn. */
57020a3a 119 UnitRef service;
034c6ed7 120
a16e1123 121 SocketState state, deserialized_state;
034c6ed7 122
718db961 123 sd_event_source *timer_event_source;
7fab9d01 124
034c6ed7 125 ExecCommand* control_command;
a16e1123 126 SocketExecCommand control_command_id;
5cb5a6ff
LP
127 pid_t control_pid;
128
7fab9d01
LP
129 mode_t directory_mode;
130 mode_t socket_mode;
4f2d528d 131
cfc4eb4c 132 SocketResult result;
7fab9d01 133
811ba7a0
LP
134 char **symlinks;
135
7fab9d01 136 bool accept;
bd1fe7c7 137 bool remove_on_stop;
4fd5948e
LP
138
139 /* Socket options */
140 bool keep_alive;
4427c3f4 141 bool no_delay;
7fab9d01 142 bool free_bind;
6b6d2dee 143 bool transparent;
ec6370a2 144 bool broadcast;
d68af586 145 bool pass_cred;
54ecda32 146 bool pass_sec;
68667801
ZJS
147
148 /* Only for INET6 sockets: issue IPV6_V6ONLY sockopt */
149 SocketAddressBindIPv6Only bind_ipv6_only;
150
4fd5948e 151 int priority;
7fab9d01 152 int mark;
4fd5948e
LP
153 size_t receive_buffer;
154 size_t send_buffer;
155 int ip_tos;
156 int ip_ttl;
157 size_t pipe_size;
4fd5948e 158 char *bind_to_device;
cebf8b20 159 char *tcp_congestion;
718db961 160 bool reuse_port;
916abb21
LP
161 long mq_maxmsg;
162 long mq_msgsize;
57020a3a 163
0eb59ccf
AK
164 char *smack;
165 char *smack_ip_in;
166 char *smack_ip_out;
3900e5fd 167
16115b0a
MS
168 bool selinux_context_from_net;
169
3900e5fd 170 char *user, *group;
5cb5a6ff
LP
171};
172
44d8db9e
LP
173/* Called from the service code when collecting fds */
174int socket_collect_fds(Socket *s, int **fds, unsigned *n_fds);
175
6cf6bbc2
LP
176/* Called from the service code when a per-connection service ended */
177void socket_connection_unref(Socket *s);
178
74051b9b
LP
179void socket_free_ports(Socket *s);
180
87f0e418 181extern const UnitVTable socket_vtable;
5cb5a6ff 182
44a6b1b6
ZJS
183const char* socket_state_to_string(SocketState i) _const_;
184SocketState socket_state_from_string(const char *s) _pure_;
a16e1123 185
44a6b1b6
ZJS
186const char* socket_exec_command_to_string(SocketExecCommand i) _const_;
187SocketExecCommand socket_exec_command_from_string(const char *s) _pure_;
a16e1123 188
44a6b1b6
ZJS
189const char* socket_result_to_string(SocketResult i) _const_;
190SocketResult socket_result_from_string(const char *s) _pure_;
67419600 191
44a6b1b6 192const char* socket_port_type_to_string(SocketPort *p) _pure_;
8b835fcc
ZJS
193
194int socket_instantiate_service(Socket *s);