Compare commits
8 Commits
9667e10b1a
...
ecb040643d
Author | SHA1 | Date |
---|---|---|
Lennart Poettering | ecb040643d | |
Yu Watanabe | de697db05b | |
Lennart Poettering | 0c8e33b6e9 | |
Zbigniew Jędrzejewski-Szmek | b012a1f455 | |
Lennart Poettering | 27b4b3cc92 | |
Lennart Poettering | 5cddd924aa | |
Zbigniew Jędrzejewski-Szmek | 4023637a8a | |
Zbigniew Jędrzejewski-Szmek | 1b49e3e3c4 |
2
TODO
2
TODO
|
@ -37,8 +37,6 @@ Features:
|
|||
waitid() only on the children with the highest priority until one is waitable
|
||||
and ignore all lower-prio ones from that point on
|
||||
|
||||
* sd-event: drop stack allocated epoll_event buffer in sd_event_wait()
|
||||
|
||||
* maybe introduce xattrs that can be set on the root dir of the root fs
|
||||
partition that declare the volatility mode to use the image in. Previously I
|
||||
thought marking this via GPT partition flags but that's not ideal since
|
||||
|
|
|
@ -1007,12 +1007,10 @@
|
|||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>PrefixRoute=</varname></term>
|
||||
<term><varname>AddPrefixRoute=</varname></term>
|
||||
<listitem>
|
||||
<para>Takes a boolean. When adding or modifying an IPv6 address, the userspace
|
||||
application needs a way to suppress adding a prefix route. This is for example relevant
|
||||
together with IFA_F_MANAGERTEMPADDR, where userspace creates autoconf generated addresses,
|
||||
but depending on on-link, no route for the prefix should be added. Defaults to false.</para>
|
||||
<para>Takes a boolean. When true, the prefix route for the address is automatically added.
|
||||
Defaults to true.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
|
|
|
@ -102,6 +102,7 @@ BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_common_errors[] = {
|
|||
|
||||
SD_BUS_ERROR_MAP(BUS_ERROR_NO_PRODUCT_UUID, EOPNOTSUPP),
|
||||
|
||||
SD_BUS_ERROR_MAP(BUS_ERROR_SPEED_METER_INACTIVE, EOPNOTSUPP),
|
||||
SD_BUS_ERROR_MAP(BUS_ERROR_UNMANAGED_INTERFACE, EOPNOTSUPP),
|
||||
|
||||
SD_BUS_ERROR_MAP_END
|
||||
|
|
|
@ -81,6 +81,7 @@
|
|||
|
||||
#define BUS_ERROR_NO_PRODUCT_UUID "org.freedesktop.hostname1.NoProductUUID"
|
||||
|
||||
#define BUS_ERROR_SPEED_METER_INACTIVE "org.freedesktop.network1.SpeedMeterInactive"
|
||||
#define BUS_ERROR_UNMANAGED_INTERFACE "org.freedesktop.network1.UnmanagedInterface"
|
||||
|
||||
BUS_ERROR_MAP_ELF_USE(bus_common_errors);
|
||||
|
|
|
@ -115,6 +115,9 @@ struct sd_event {
|
|||
|
||||
unsigned n_sources;
|
||||
|
||||
struct epoll_event *event_queue;
|
||||
size_t event_queue_allocated;
|
||||
|
||||
LIST_HEAD(sd_event_source, sources);
|
||||
|
||||
usec_t last_run, last_log;
|
||||
|
@ -286,6 +289,8 @@ static sd_event *event_free(sd_event *e) {
|
|||
hashmap_free(e->child_sources);
|
||||
set_free(e->post_sources);
|
||||
|
||||
free(e->event_queue);
|
||||
|
||||
return mfree(e);
|
||||
}
|
||||
|
||||
|
@ -3477,8 +3482,7 @@ pending:
|
|||
}
|
||||
|
||||
_public_ int sd_event_wait(sd_event *e, uint64_t timeout) {
|
||||
struct epoll_event *ev_queue;
|
||||
unsigned ev_queue_max;
|
||||
size_t event_queue_max;
|
||||
int r, m, i;
|
||||
|
||||
assert_return(e, -EINVAL);
|
||||
|
@ -3492,14 +3496,15 @@ _public_ int sd_event_wait(sd_event *e, uint64_t timeout) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
ev_queue_max = MAX(e->n_sources, 1u);
|
||||
ev_queue = newa(struct epoll_event, ev_queue_max);
|
||||
event_queue_max = MAX(e->n_sources, 1u);
|
||||
if (!GREEDY_REALLOC(e->event_queue, e->event_queue_allocated, event_queue_max))
|
||||
return -ENOMEM;
|
||||
|
||||
/* If we still have inotify data buffered, then query the other fds, but don't wait on it */
|
||||
if (e->inotify_data_buffered)
|
||||
timeout = 0;
|
||||
|
||||
m = epoll_wait(e->epoll_fd, ev_queue, ev_queue_max,
|
||||
m = epoll_wait(e->epoll_fd, e->event_queue, event_queue_max,
|
||||
timeout == (uint64_t) -1 ? -1 : (int) DIV_ROUND_UP(timeout, USEC_PER_MSEC));
|
||||
if (m < 0) {
|
||||
if (errno == EINTR) {
|
||||
|
@ -3515,26 +3520,26 @@ _public_ int sd_event_wait(sd_event *e, uint64_t timeout) {
|
|||
|
||||
for (i = 0; i < m; i++) {
|
||||
|
||||
if (ev_queue[i].data.ptr == INT_TO_PTR(SOURCE_WATCHDOG))
|
||||
r = flush_timer(e, e->watchdog_fd, ev_queue[i].events, NULL);
|
||||
if (e->event_queue[i].data.ptr == INT_TO_PTR(SOURCE_WATCHDOG))
|
||||
r = flush_timer(e, e->watchdog_fd, e->event_queue[i].events, NULL);
|
||||
else {
|
||||
WakeupType *t = ev_queue[i].data.ptr;
|
||||
WakeupType *t = e->event_queue[i].data.ptr;
|
||||
|
||||
switch (*t) {
|
||||
|
||||
case WAKEUP_EVENT_SOURCE: {
|
||||
sd_event_source *s = ev_queue[i].data.ptr;
|
||||
sd_event_source *s = e->event_queue[i].data.ptr;
|
||||
|
||||
assert(s);
|
||||
|
||||
switch (s->type) {
|
||||
|
||||
case SOURCE_IO:
|
||||
r = process_io(e, s, ev_queue[i].events);
|
||||
r = process_io(e, s, e->event_queue[i].events);
|
||||
break;
|
||||
|
||||
case SOURCE_CHILD:
|
||||
r = process_pidfd(e, s, ev_queue[i].events);
|
||||
r = process_pidfd(e, s, e->event_queue[i].events);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -3545,20 +3550,20 @@ _public_ int sd_event_wait(sd_event *e, uint64_t timeout) {
|
|||
}
|
||||
|
||||
case WAKEUP_CLOCK_DATA: {
|
||||
struct clock_data *d = ev_queue[i].data.ptr;
|
||||
struct clock_data *d = e->event_queue[i].data.ptr;
|
||||
|
||||
assert(d);
|
||||
|
||||
r = flush_timer(e, d->fd, ev_queue[i].events, &d->next);
|
||||
r = flush_timer(e, d->fd, e->event_queue[i].events, &d->next);
|
||||
break;
|
||||
}
|
||||
|
||||
case WAKEUP_SIGNAL_DATA:
|
||||
r = process_signal(e, ev_queue[i].data.ptr, ev_queue[i].events);
|
||||
r = process_signal(e, e->event_queue[i].data.ptr, e->event_queue[i].events);
|
||||
break;
|
||||
|
||||
case WAKEUP_INOTIFY_DATA:
|
||||
r = event_inotify_data_read(e, ev_queue[i].data.ptr, ev_queue[i].events);
|
||||
r = event_inotify_data_read(e, e->event_queue[i].data.ptr, e->event_queue[i].events);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -366,7 +366,8 @@ static int acquire_link_bitrates(sd_bus *bus, LinkInfo *link) {
|
|||
"org.freedesktop.network1.Link",
|
||||
"BitRates");
|
||||
if (r < 0) {
|
||||
bool quiet = sd_bus_error_has_name(&error, SD_BUS_ERROR_UNKNOWN_PROPERTY);
|
||||
bool quiet = sd_bus_error_has_name(&error, SD_BUS_ERROR_UNKNOWN_PROPERTY) ||
|
||||
sd_bus_error_has_name(&error, BUS_ERROR_SPEED_METER_INACTIVE);
|
||||
|
||||
return log_full_errno(quiet ? LOG_DEBUG : LOG_WARNING,
|
||||
r, "Failed to query link bit rates: %s", bus_error_message(&error, r));
|
||||
|
|
|
@ -33,6 +33,7 @@ int address_new(Address **ret) {
|
|||
.cinfo.ifa_prefered = CACHE_INFO_INFINITY_LIFE_TIME,
|
||||
.cinfo.ifa_valid = CACHE_INFO_INFINITY_LIFE_TIME,
|
||||
.duplicate_address_detection = ADDRESS_FAMILY_IPV6,
|
||||
.prefix_route = true,
|
||||
};
|
||||
|
||||
*ret = TAKE_PTR(address);
|
||||
|
@ -596,7 +597,7 @@ int address_configure(
|
|||
if (address->manage_temporary_address)
|
||||
address->flags |= IFA_F_MANAGETEMPADDR;
|
||||
|
||||
if (address->prefix_route)
|
||||
if (!address->prefix_route)
|
||||
address->flags |= IFA_F_NOPREFIXROUTE;
|
||||
|
||||
if (address->autojoin)
|
||||
|
@ -1001,6 +1002,8 @@ int config_parse_address_flags(const char *unit,
|
|||
else if (streq(lvalue, "ManageTemporaryAddress"))
|
||||
n->manage_temporary_address = r;
|
||||
else if (streq(lvalue, "PrefixRoute"))
|
||||
n->prefix_route = !r;
|
||||
else if (streq(lvalue, "AddPrefixRoute"))
|
||||
n->prefix_route = r;
|
||||
else if (streq(lvalue, "AutoJoin"))
|
||||
n->autojoin = r;
|
||||
|
|
|
@ -111,10 +111,10 @@ static int route_scope_from_address(const Route *route, const struct in_addr *se
|
|||
return RT_SCOPE_UNIVERSE;
|
||||
}
|
||||
|
||||
static bool link_noprefixroute(Link *link) {
|
||||
return link->network->dhcp_route_table_set &&
|
||||
link->network->dhcp_route_table != RT_TABLE_MAIN &&
|
||||
!link->manager->dhcp4_prefix_root_cannot_set_table;
|
||||
static bool link_prefixroute(Link *link) {
|
||||
return !link->network->dhcp_route_table_set ||
|
||||
link->network->dhcp_route_table == RT_TABLE_MAIN ||
|
||||
link->manager->dhcp4_prefix_root_cannot_set_table;
|
||||
}
|
||||
|
||||
static int dhcp_route_configure(Route **route, Link *link) {
|
||||
|
@ -254,7 +254,7 @@ static int link_set_dhcp_routes(Link *link) {
|
|||
if (r < 0)
|
||||
return log_link_warning_errno(link, r, "DHCP error: could not get address: %m");
|
||||
|
||||
if (link_noprefixroute(link)) {
|
||||
if (!link_prefixroute(link)) {
|
||||
_cleanup_(route_freep) Route *prefix_route = NULL;
|
||||
|
||||
r = dhcp_prefix_route_from_lease(link->dhcp_lease, table, &address, &prefix_route);
|
||||
|
@ -516,7 +516,7 @@ static int dhcp_remove_dns_routes(Link *link, sd_dhcp_lease *lease, const struct
|
|||
(void) route_remove(route, link, NULL);
|
||||
}
|
||||
|
||||
if (link_noprefixroute(link)) {
|
||||
if (!link_prefixroute(link)) {
|
||||
_cleanup_(route_freep) Route *prefix_route = NULL;
|
||||
|
||||
r = dhcp_prefix_route_from_lease(lease, table, address, &prefix_route);
|
||||
|
@ -719,7 +719,7 @@ static int dhcp4_update_address(Link *link,
|
|||
addr->cinfo.ifa_valid = lifetime;
|
||||
addr->prefixlen = prefixlen;
|
||||
addr->broadcast.s_addr = address->s_addr | ~netmask->s_addr;
|
||||
addr->prefix_route = link_noprefixroute(link);
|
||||
addr->prefix_route = link_prefixroute(link);
|
||||
|
||||
/* allow reusing an existing address and simply update its lifetime
|
||||
* in case it already exists */
|
||||
|
|
|
@ -106,7 +106,8 @@ Address.Label, config_parse_label,
|
|||
Address.PreferredLifetime, config_parse_lifetime, 0, 0
|
||||
Address.HomeAddress, config_parse_address_flags, 0, 0
|
||||
Address.ManageTemporaryAddress, config_parse_address_flags, 0, 0
|
||||
Address.PrefixRoute, config_parse_address_flags, 0, 0
|
||||
Address.PrefixRoute, config_parse_address_flags, 0, 0 /* deprecated */
|
||||
Address.AddPrefixRoute, config_parse_address_flags, 0, 0
|
||||
Address.AutoJoin, config_parse_address_flags, 0, 0
|
||||
Address.DuplicateAddressDetection, config_parse_duplicate_address_detection, 0, 0
|
||||
Address.Scope, config_parse_address_scope, 0, 0
|
||||
|
|
|
@ -29,7 +29,7 @@ static void cleanup_clear_loop_close(int *fd) {
|
|||
}
|
||||
}
|
||||
|
||||
int loop_device_make_full(
|
||||
int loop_device_make(
|
||||
int fd,
|
||||
int open_flags,
|
||||
uint64_t offset,
|
||||
|
@ -166,7 +166,7 @@ int loop_device_make_by_path(const char *path, int open_flags, uint32_t loop_fla
|
|||
if (fd < 0)
|
||||
return -errno;
|
||||
|
||||
return loop_device_make_full(fd, open_flags, 0, 0, loop_flags, ret);
|
||||
return loop_device_make(fd, open_flags, 0, 0, loop_flags, ret);
|
||||
}
|
||||
|
||||
LoopDevice* loop_device_unref(LoopDevice *d) {
|
||||
|
|
|
@ -14,7 +14,7 @@ struct LoopDevice {
|
|||
bool relinquished;
|
||||
};
|
||||
|
||||
int loop_device_make_full(int fd, int open_flags, uint64_t offset, uint64_t size, uint32_t loop_flags, LoopDevice **ret);
|
||||
int loop_device_make(int fd, int open_flags, uint64_t offset, uint64_t size, uint32_t loop_flags, LoopDevice **ret);
|
||||
int loop_device_make_by_path(const char *path, int open_flags, uint32_t loop_flags, LoopDevice **ret);
|
||||
int loop_device_open(const char *loop_path, int open_flags, LoopDevice **ret);
|
||||
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||
#pragma once
|
||||
|
||||
#include <openssl/pem.h>
|
||||
#if HAVE_OPENSSL
|
||||
# include <openssl/pem.h>
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(X509*, X509_free);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(X509_NAME*, X509_NAME_free);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(EVP_PKEY_CTX*, EVP_PKEY_CTX_free);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(EVP_CIPHER_CTX*, EVP_CIPHER_CTX_free);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -4,15 +4,12 @@
|
|||
#include <stdbool.h>
|
||||
|
||||
#if HAVE_P11KIT
|
||||
#include <p11-kit/p11-kit.h>
|
||||
#include <p11-kit/uri.h>
|
||||
|
||||
#if HAVE_OPENSSL
|
||||
#include <openssl/pem.h>
|
||||
#endif
|
||||
# include <p11-kit/p11-kit.h>
|
||||
# include <p11-kit/uri.h>
|
||||
#endif
|
||||
|
||||
#include "macro.h"
|
||||
#include "openssl-util.h"
|
||||
#include "time-util.h"
|
||||
|
||||
bool pkcs11_uri_valid(const char *uri);
|
||||
|
|
|
@ -202,6 +202,7 @@ Address=
|
|||
Scope=
|
||||
HomeAddress=
|
||||
PrefixRoute=
|
||||
AddPrefixRoute=
|
||||
ManageTemporaryAddress=
|
||||
Broadcast=
|
||||
Peer=
|
||||
|
|
Loading…
Reference in New Issue