]> git.proxmox.com Git - systemd.git/blame - src/core/socket.h
Imported Upstream version 217
[systemd.git] / src / core / socket.h
CommitLineData
663996b3
MS
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#pragma once
4
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
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
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
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
24typedef struct Socket Socket;
25
26#include "manager.h"
27#include "unit.h"
28#include "socket-util.h"
29#include "mount.h"
30#include "service.h"
31
32typedef enum SocketState {
33 SOCKET_DEAD,
34 SOCKET_START_PRE,
60f067b4 35 SOCKET_START_CHOWN,
663996b3
MS
36 SOCKET_START_POST,
37 SOCKET_LISTENING,
38 SOCKET_RUNNING,
39 SOCKET_STOP_PRE,
40 SOCKET_STOP_PRE_SIGTERM,
41 SOCKET_STOP_PRE_SIGKILL,
42 SOCKET_STOP_POST,
43 SOCKET_FINAL_SIGTERM,
44 SOCKET_FINAL_SIGKILL,
45 SOCKET_FAILED,
46 _SOCKET_STATE_MAX,
47 _SOCKET_STATE_INVALID = -1
48} SocketState;
49
50typedef enum SocketExecCommand {
51 SOCKET_EXEC_START_PRE,
60f067b4 52 SOCKET_EXEC_START_CHOWN,
663996b3
MS
53 SOCKET_EXEC_START_POST,
54 SOCKET_EXEC_STOP_PRE,
55 SOCKET_EXEC_STOP_POST,
56 _SOCKET_EXEC_COMMAND_MAX,
57 _SOCKET_EXEC_COMMAND_INVALID = -1
58} SocketExecCommand;
59
60typedef enum SocketType {
61 SOCKET_SOCKET,
62 SOCKET_FIFO,
63 SOCKET_SPECIAL,
64 SOCKET_MQUEUE,
65 _SOCKET_FIFO_MAX,
66 _SOCKET_FIFO_INVALID = -1
67} SocketType;
68
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,
76 SOCKET_FAILURE_SERVICE_FAILED_PERMANENT,
77 _SOCKET_RESULT_MAX,
78 _SOCKET_RESULT_INVALID = -1
79} SocketResult;
80
81typedef struct SocketPort {
60f067b4
JS
82 Socket *socket;
83
663996b3
MS
84 SocketType type;
85 int fd;
86
87 SocketAddress address;
88 char *path;
60f067b4 89 sd_event_source *event_source;
663996b3
MS
90
91 LIST_FIELDS(struct SocketPort, port);
92} SocketPort;
93
94struct Socket {
95 Unit meta;
96
97 LIST_HEAD(SocketPort, ports);
98
99 unsigned n_accepted;
100 unsigned n_connections;
101 unsigned max_connections;
102
103 unsigned backlog;
5eef597e 104 unsigned keep_alive_cnt;
663996b3 105 usec_t timeout_usec;
5eef597e
MP
106 usec_t keep_alive_time;
107 usec_t keep_alive_interval;
108 usec_t defer_accept;
663996b3
MS
109
110 ExecCommand* exec_command[_SOCKET_EXEC_COMMAND_MAX];
111 ExecContext exec_context;
112 KillContext kill_context;
14228c0d 113 CGroupContext cgroup_context;
60f067b4 114 ExecRuntime *exec_runtime;
663996b3
MS
115
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. */
119 UnitRef service;
120
121 SocketState state, deserialized_state;
122
60f067b4 123 sd_event_source *timer_event_source;
663996b3
MS
124
125 ExecCommand* control_command;
126 SocketExecCommand control_command_id;
127 pid_t control_pid;
128
129 mode_t directory_mode;
130 mode_t socket_mode;
131
132 SocketResult result;
133
60f067b4
JS
134 char **symlinks;
135
663996b3 136 bool accept;
60f067b4 137 bool remove_on_stop;
663996b3
MS
138
139 /* Socket options */
140 bool keep_alive;
5eef597e 141 bool no_delay;
663996b3
MS
142 bool free_bind;
143 bool transparent;
144 bool broadcast;
145 bool pass_cred;
146 bool pass_sec;
147
148 /* Only for INET6 sockets: issue IPV6_V6ONLY sockopt */
149 SocketAddressBindIPv6Only bind_ipv6_only;
150
151 int priority;
152 int mark;
153 size_t receive_buffer;
154 size_t send_buffer;
155 int ip_tos;
156 int ip_ttl;
157 size_t pipe_size;
158 char *bind_to_device;
159 char *tcp_congestion;
60f067b4 160 bool reuse_port;
663996b3
MS
161 long mq_maxmsg;
162 long mq_msgsize;
163
164 char *smack;
165 char *smack_ip_in;
166 char *smack_ip_out;
60f067b4 167
5eef597e
MP
168 bool selinux_context_from_net;
169
60f067b4 170 char *user, *group;
663996b3
MS
171};
172
173/* Called from the service code when collecting fds */
174int socket_collect_fds(Socket *s, int **fds, unsigned *n_fds);
175
663996b3
MS
176/* Called from the service code when a per-connection service ended */
177void socket_connection_unref(Socket *s);
178
179void socket_free_ports(Socket *s);
180
181extern const UnitVTable socket_vtable;
182
183const char* socket_state_to_string(SocketState i) _const_;
184SocketState socket_state_from_string(const char *s) _pure_;
185
186const char* socket_exec_command_to_string(SocketExecCommand i) _const_;
187SocketExecCommand socket_exec_command_from_string(const char *s) _pure_;
188
189const char* socket_result_to_string(SocketResult i) _const_;
190SocketResult socket_result_from_string(const char *s) _pure_;
191
192const char* socket_port_type_to_string(SocketPort *p) _pure_;
5eef597e
MP
193
194int socket_instantiate_service(Socket *s);