chiark / gitweb /
bus: send memfds as payload only on directed messages and for large parts
[elogind.git] / src / libsystemd-bus / bus-kernel.h
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 2013 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
24 #include "sd-bus.h"
25
26 #define MEMFD_CACHE_MAX 32
27
28 /* When we cache a memfd block for reuse, we will truncate blocks
29  * longer than this in order not to keep too much data around. */
30 #define MEMFD_CACHE_ITEM_SIZE_MAX (32*1024)
31
32 /* This determines at which minimum size we prefer sending memfds over
33  * sending vectors */
34 #define MEMFD_MIN_SIZE (32*1024)
35
36 struct memfd_cache {
37         int fd;
38         void *address;
39         size_t size;
40 };
41
42 int bus_kernel_connect(sd_bus *b);
43 int bus_kernel_take_fd(sd_bus *b);
44
45 int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m);
46 int bus_kernel_read_message(sd_bus *bus, sd_bus_message **m);
47
48 int bus_kernel_create(const char *name, char **s);
49
50 int bus_kernel_pop_memfd(sd_bus *bus, void **address, size_t *size);
51 void bus_kernel_push_memfd(sd_bus *bus, int fd, void *address, size_t size);
52
53 void bus_kernel_flush_memfd(sd_bus *bus);