]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/dbus-socket.c
bus: decorate the various object vtables with SD_BUS_VTABLE_PROPERTY_CONST where...
[thirdparty/systemd.git] / src / core / dbus-socket.c
CommitLineData
d6c9574f 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4139c1b2
LP
2
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
4139c1b2
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.
4139c1b2 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
4139c1b2
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
718db961
LP
22#include "unit.h"
23#include "socket.h"
4139c1b2 24#include "dbus-unit.h"
4139c1b2 25#include "dbus-execute.h"
4819ff03 26#include "dbus-kill.h"
4ad49000 27#include "dbus-cgroup.h"
4ad49000 28#include "dbus-socket.h"
718db961
LP
29#include "bus-util.h"
30
31static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result, socket_result, SocketResult);
32static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_bind_ipv6_only, socket_address_bind_ipv6_only, SocketAddressBindIPv6Only);
33
34static int property_get_listen(
35 sd_bus *bus,
36 const char *path,
37 const char *interface,
38 const char *property,
39 sd_bus_message *reply,
ebcf1f97
LP
40 void *userdata,
41 sd_bus_error *error) {
4139c1b2 42
718db961
LP
43
44 Socket *s = SOCKET(userdata);
67419600 45 SocketPort *p;
718db961 46 int r;
67419600 47
718db961
LP
48 assert(bus);
49 assert(reply);
67419600
OS
50 assert(s);
51
718db961
LP
52 r = sd_bus_message_open_container(reply, 'a', "(ss)");
53 if (r < 0)
54 return r;
67419600
OS
55
56 LIST_FOREACH(port, p, s->ports) {
7fd1b19b 57 _cleanup_free_ char *address = NULL;
67419600
OS
58 const char *a;
59
67419600
OS
60 switch (p->type) {
61 case SOCKET_SOCKET: {
67419600 62 r = socket_address_print(&p->address, &address);
718db961 63 if (r)
67419600 64 return r;
718db961 65
67419600
OS
66 a = address;
67 break;
68 }
69
70 case SOCKET_SPECIAL:
71 case SOCKET_MQUEUE:
72 case SOCKET_FIFO:
73 a = p->path;
74 break;
75
76 default:
718db961 77 assert_not_reached("Unknown socket type");
67419600
OS
78 }
79
718db961
LP
80 r = sd_bus_message_append(reply, "(ss)", socket_port_type_to_string(p), a);
81 if (r < 0)
82 return r;
67419600
OS
83 }
84
718db961 85 return sd_bus_message_close_container(reply);
67419600
OS
86}
87
718db961
LP
88const sd_bus_vtable bus_socket_vtable[] = {
89 SD_BUS_VTABLE_START(0),
556089dc
LP
90 SD_BUS_PROPERTY("BindIPv6Only", "s", property_get_bind_ipv6_only, offsetof(Socket, bind_ipv6_only), SD_BUS_VTABLE_PROPERTY_CONST),
91 SD_BUS_PROPERTY("Backlog", "u", bus_property_get_unsigned, offsetof(Socket, backlog), SD_BUS_VTABLE_PROPERTY_CONST),
92 SD_BUS_PROPERTY("TimeoutUSec", "t", bus_property_get_usec, offsetof(Socket, timeout_usec), SD_BUS_VTABLE_PROPERTY_CONST),
718db961 93 SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid, offsetof(Socket, control_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
556089dc
LP
94 SD_BUS_PROPERTY("BindToDevice", "s", NULL, offsetof(Socket, bind_to_device), SD_BUS_VTABLE_PROPERTY_CONST),
95 SD_BUS_PROPERTY("DirectoryMode", "u", bus_property_get_mode, offsetof(Socket, directory_mode), SD_BUS_VTABLE_PROPERTY_CONST),
96 SD_BUS_PROPERTY("SocketMode", "u", bus_property_get_mode, offsetof(Socket, socket_mode), SD_BUS_VTABLE_PROPERTY_CONST),
97 SD_BUS_PROPERTY("Accept", "b", bus_property_get_bool, offsetof(Socket, accept), SD_BUS_VTABLE_PROPERTY_CONST),
98 SD_BUS_PROPERTY("KeepAlive", "b", bus_property_get_bool, offsetof(Socket, keep_alive), SD_BUS_VTABLE_PROPERTY_CONST),
99 SD_BUS_PROPERTY("Priority", "i", bus_property_get_int, offsetof(Socket, priority), SD_BUS_VTABLE_PROPERTY_CONST),
100 SD_BUS_PROPERTY("ReceiveBuffer", "t", bus_property_get_size, offsetof(Socket, receive_buffer), SD_BUS_VTABLE_PROPERTY_CONST),
101 SD_BUS_PROPERTY("SendBuffer", "t", bus_property_get_size, offsetof(Socket, send_buffer), SD_BUS_VTABLE_PROPERTY_CONST),
102 SD_BUS_PROPERTY("IPTOS", "i", bus_property_get_int, offsetof(Socket, ip_tos), SD_BUS_VTABLE_PROPERTY_CONST),
103 SD_BUS_PROPERTY("IPTTL", "i", bus_property_get_int, offsetof(Socket, ip_ttl), SD_BUS_VTABLE_PROPERTY_CONST),
104 SD_BUS_PROPERTY("PipeSize", "t", bus_property_get_size, offsetof(Socket, pipe_size), SD_BUS_VTABLE_PROPERTY_CONST),
105 SD_BUS_PROPERTY("FreeBind", "b", bus_property_get_bool, offsetof(Socket, free_bind), SD_BUS_VTABLE_PROPERTY_CONST),
106 SD_BUS_PROPERTY("Transparent", "b", bus_property_get_bool, offsetof(Socket, transparent), SD_BUS_VTABLE_PROPERTY_CONST),
107 SD_BUS_PROPERTY("Broadcast", "b", bus_property_get_bool, offsetof(Socket, broadcast), SD_BUS_VTABLE_PROPERTY_CONST),
108 SD_BUS_PROPERTY("PassCredentials", "b", bus_property_get_bool, offsetof(Socket, pass_cred), SD_BUS_VTABLE_PROPERTY_CONST),
109 SD_BUS_PROPERTY("PassSecurity", "b", bus_property_get_bool, offsetof(Socket, pass_sec), SD_BUS_VTABLE_PROPERTY_CONST),
110 SD_BUS_PROPERTY("Listen", "a(ss)", property_get_listen, 0, SD_BUS_VTABLE_PROPERTY_CONST),
111 SD_BUS_PROPERTY("Mark", "i", bus_property_get_int, offsetof(Socket, mark), SD_BUS_VTABLE_PROPERTY_CONST),
112 SD_BUS_PROPERTY("MaxConnections", "u", bus_property_get_unsigned, offsetof(Socket, max_connections), SD_BUS_VTABLE_PROPERTY_CONST),
113 SD_BUS_PROPERTY("NConnections", "u", bus_property_get_unsigned, offsetof(Socket, n_connections), 0),
114 SD_BUS_PROPERTY("NAccepted", "u", bus_property_get_unsigned, offsetof(Socket, n_accepted), 0),
115 SD_BUS_PROPERTY("MessageQueueMaxMessages", "x", bus_property_get_long, offsetof(Socket, mq_maxmsg), SD_BUS_VTABLE_PROPERTY_CONST),
116 SD_BUS_PROPERTY("MessageQueueMessageSize", "x", bus_property_get_long, offsetof(Socket, mq_msgsize), SD_BUS_VTABLE_PROPERTY_CONST),
718db961 117 SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Socket, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
556089dc
LP
118 SD_BUS_PROPERTY("ReusePort", "b", bus_property_get_bool, offsetof(Socket, reuse_port), SD_BUS_VTABLE_PROPERTY_CONST),
119 SD_BUS_PROPERTY("SmackLabel", "s", NULL, offsetof(Socket, smack), SD_BUS_VTABLE_PROPERTY_CONST),
120 SD_BUS_PROPERTY("SmackLabelIPIn", "s", NULL, offsetof(Socket, smack_ip_in), SD_BUS_VTABLE_PROPERTY_CONST),
121 SD_BUS_PROPERTY("SmackLabelIPOut", "s", NULL, offsetof(Socket, smack_ip_out), SD_BUS_VTABLE_PROPERTY_CONST),
122 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPre", offsetof(Socket, exec_command[SOCKET_EXEC_START_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
123 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPost", offsetof(Socket, exec_command[SOCKET_EXEC_START_POST]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
124 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStopPre", offsetof(Socket, exec_command[SOCKET_EXEC_STOP_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
125 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStopPost", offsetof(Socket, exec_command[SOCKET_EXEC_STOP_POST]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
718db961 126 SD_BUS_VTABLE_END
d200735e
MS
127};
128
718db961
LP
129const char* const bus_socket_changing_properties[] = {
130 "ControlPID",
131 "NAccepted",
132 "NConnections",
133 "Result",
134 NULL
135};
74c964d3
LP
136
137int bus_socket_set_property(
138 Unit *u,
139 const char *name,
718db961 140 sd_bus_message *message,
74c964d3 141 UnitSetPropertiesMode mode,
718db961 142 sd_bus_error *error) {
74c964d3
LP
143
144 Socket *s = SOCKET(u);
74c964d3 145
718db961 146 assert(s);
74c964d3 147 assert(name);
718db961 148 assert(message);
74c964d3 149
718db961 150 return bus_cgroup_set_property(u, &s->cgroup_context, name, message, mode, error);
74c964d3
LP
151}
152
153int bus_socket_commit_properties(Unit *u) {
154 assert(u);
155
156 unit_realize_cgroup(u);
157 return 0;
158}