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