bus-kernel.h revision bb19cb17076bbec942ad08f94d41ba36b28a5a13
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#pragma once
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering/***
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering This file is part of systemd.
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering Copyright 2013 Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering systemd is free software; you can redistribute it and/or modify it
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering under the terms of the GNU Lesser General Public License as published by
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering (at your option) any later version.
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering systemd is distributed in the hope that it will be useful, but
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering Lesser General Public License for more details.
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering You should have received a copy of the GNU Lesser General Public License
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering***/
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#include <stdbool.h>
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
4ad490007b70e6ac18d3cb04fa2ed92eba1451faLennart Poettering#include "busname.h"
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#include "sd-bus.h"
4ad490007b70e6ac18d3cb04fa2ed92eba1451faLennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#define KDBUS_ITEM_NEXT(item) \
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering (typeof(item))(((uint8_t *)item) + ALIGN8((item)->size))
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#define KDBUS_ITEM_FOREACH(part, head, first) \
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering for (part = (head)->first; \
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering ((uint8_t *)(part) < (uint8_t *)(head) + (head)->size) && \
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering ((uint8_t *) part >= (uint8_t *) head); \
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering part = KDBUS_ITEM_NEXT(part))
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#define KDBUS_ITEM_HEADER_SIZE offsetof(struct kdbus_item, data)
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#define KDBUS_ITEM_SIZE(s) ALIGN8((s) + KDBUS_ITEM_HEADER_SIZE)
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#define MEMFD_CACHE_MAX 32
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering/* When we cache a memfd block for reuse, we will truncate blocks
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering * longer than this in order not to keep too much data around. */
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#define MEMFD_CACHE_ITEM_SIZE_MAX (128*1024)
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering/* This determines at which minimum size we prefer sending memfds over
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering * sending vectors */
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#define MEMFD_MIN_SIZE (512*1024)
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
4ad490007b70e6ac18d3cb04fa2ed92eba1451faLennart Poettering/* The size of the per-connection memory pool that we set up and where
4ad490007b70e6ac18d3cb04fa2ed92eba1451faLennart Poettering * the kernel places our incoming messages */
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering#define KDBUS_POOL_SIZE (16*1024*1024)
4ad490007b70e6ac18d3cb04fa2ed92eba1451faLennart Poettering
4ad490007b70e6ac18d3cb04fa2ed92eba1451faLennart Poetteringstruct memfd_cache {
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering int fd;
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering void *address;
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering size_t mapped;
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering size_t allocated;
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering};
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poettering
a016b9228f338cb9b380ce7e00826ef462767d98Lennart Poetteringint bus_kernel_connect(sd_bus *b);
int bus_kernel_take_fd(sd_bus *b);
int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m, bool hint_sync_call);
int bus_kernel_read_message(sd_bus *bus, bool hint_priority, int64_t priority);
int bus_kernel_open_bus_fd(const char *bus, char **path);
int bus_kernel_make_starter(int fd, const char *name, bool activating, bool accept_fd, BusNamePolicy *policy, BusNamePolicyAccess world_policy);
int bus_kernel_create_bus(const char *name, bool world, char **s);
int bus_kernel_create_domain(const char *name, char **s);
int bus_kernel_pop_memfd(sd_bus *bus, void **address, size_t *mapped, size_t *allocated);
void bus_kernel_push_memfd(sd_bus *bus, int fd, void *address, size_t mapped, size_t allocated);
void bus_kernel_flush_memfd(sd_bus *bus);
int bus_kernel_parse_unique_name(const char *s, uint64_t *id);
int kdbus_translate_request_name_flags(uint64_t sd_bus_flags, uint64_t *kdbus_flags);
int kdbus_translate_attach_flags(uint64_t sd_bus_flags, uint64_t *kdbus_flags);
int bus_kernel_try_close(sd_bus *bus);
int bus_kernel_drop_one(int fd);