Compare commits
8 Commits
c631c3d6a3
...
b12a67ae14
Author | SHA1 | Date |
---|---|---|
Anita Zhang | b12a67ae14 | |
Anita Zhang | 7792d9cdd4 | |
Anita Zhang | f03378805f | |
Anita Zhang | 9087384d39 | |
Yu Watanabe | 3126d64e5f | |
Zbigniew Jędrzejewski-Szmek | 0db41a8f1f | |
Yu Watanabe | 95081e08d7 | |
Zbigniew Jędrzejewski-Szmek | 08e82b84ca |
|
@ -208,11 +208,11 @@
|
|||
<term><option>nofail</option></term>
|
||||
|
||||
<listitem><para>This device will not be a hard dependency of
|
||||
<filename>cryptsetup.target</filename>. It'll be still pulled in and started, but the system
|
||||
<filename>cryptsetup.target</filename>. It'll still be pulled in and started, but the system
|
||||
will not wait for the device to show up and be unlocked, and boot will not fail if this is
|
||||
unsuccessful. Note that other units that depend on the unlocked device may still fail. In
|
||||
particular, if the device is used for a mount point, the mount point itself is also needs to
|
||||
have <option>noauto</option> option, or the boot will fail if the device is not unlocked
|
||||
particular, if the device is used for a mount point, the mount point itself also needs to
|
||||
have the <option>nofail</option> option, or the boot will fail if the device is not unlocked
|
||||
successfully.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
|
|
@ -1348,8 +1348,9 @@
|
|||
<ulink url="https://getfedora.org">Fedora</ulink> image and start a shell in it</title>
|
||||
|
||||
<programlisting># machinectl pull-raw --verify=no \
|
||||
https://download.fedoraproject.org/pub/fedora/linux/releases/&fedora_latest_version;/Cloud/x86_64/images/Fedora-Cloud-Base-&fedora_latest_version;-&fedora_cloud_release;.x86_64.raw.xz
|
||||
# systemd-nspawn -M Fedora-Cloud-Base-&fedora_latest_version;-&fedora_cloud_release;.x86_64</programlisting>
|
||||
https://download.fedoraproject.org/pub/fedora/linux/releases/&fedora_latest_version;/Cloud/x86_64/images/Fedora-Cloud-Base-&fedora_latest_version;-&fedora_cloud_release;.x86_64.raw.xz \
|
||||
Fedora-Cloud-Base-&fedora_latest_version;-&fedora_cloud_release;.x86-64
|
||||
# systemd-nspawn -M Fedora-Cloud-Base-&fedora_latest_version;-&fedora_cloud_release;.x86-64</programlisting>
|
||||
|
||||
<para>This downloads an image using
|
||||
<citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||
|
|
|
@ -25,7 +25,7 @@ int reset_all_signal_handlers(void) {
|
|||
|
||||
/* On Linux the first two RT signals are reserved by
|
||||
* glibc, and sigaction() will return EINVAL for them. */
|
||||
if ((sigaction(sig, &sa, NULL) < 0))
|
||||
if (sigaction(sig, &sa, NULL) < 0)
|
||||
if (errno != EINVAL && r >= 0)
|
||||
r = -errno;
|
||||
}
|
||||
|
|
|
@ -506,7 +506,10 @@ static int enumerator_scan_dir_and_add_devices(sd_device_enumerator *enumerator,
|
|||
|
||||
initialized = sd_device_get_is_initialized(device);
|
||||
if (initialized < 0) {
|
||||
r = initialized;
|
||||
if (initialized != -ENOENT)
|
||||
/* this is necessarily racey, so ignore missing devices */
|
||||
r = initialized;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -639,7 +642,9 @@ static int enumerator_scan_devices_tag(sd_device_enumerator *enumerator, const c
|
|||
|
||||
k = sd_device_get_subsystem(device, &subsystem);
|
||||
if (k < 0) {
|
||||
r = k;
|
||||
if (k != -ENOENT)
|
||||
/* this is necessarily racy, so ignore missing devices */
|
||||
r = k;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -145,6 +145,7 @@ static int network_resolve_stacked_netdevs(Network *network) {
|
|||
}
|
||||
|
||||
int network_verify(Network *network) {
|
||||
RoutePrefix *route_prefix, *route_prefix_next;
|
||||
RoutingPolicyRule *rule, *rule_next;
|
||||
Neighbor *neighbor, *neighbor_next;
|
||||
AddressLabel *label, *label_next;
|
||||
|
@ -304,9 +305,9 @@ int network_verify(Network *network) {
|
|||
if (section_is_invalid(prefix->section))
|
||||
prefix_free(prefix);
|
||||
|
||||
LIST_FOREACH_SAFE(prefixes, prefix, prefix_next, network->static_route_prefixes)
|
||||
if (section_is_invalid(prefix->section))
|
||||
route_prefix_free(prefix);
|
||||
LIST_FOREACH_SAFE(route_prefixes, route_prefix, route_prefix_next, network->static_route_prefixes)
|
||||
if (section_is_invalid(route_prefix->section))
|
||||
route_prefix_free(route_prefix);
|
||||
|
||||
LIST_FOREACH_SAFE(rules, rule, rule_next, network->rules)
|
||||
if (routing_policy_rule_section_verify(rule) < 0)
|
||||
|
@ -577,10 +578,11 @@ failure:
|
|||
|
||||
static Network *network_free(Network *network) {
|
||||
IPv6ProxyNDPAddress *ipv6_proxy_ndp_address;
|
||||
RoutePrefix *route_prefix;
|
||||
RoutingPolicyRule *rule;
|
||||
AddressLabel *label;
|
||||
FdbEntry *fdb_entry;
|
||||
Neighbor *neighbor;
|
||||
AddressLabel *label;
|
||||
Address *address;
|
||||
NextHop *nexthop;
|
||||
Prefix *prefix;
|
||||
|
@ -654,8 +656,8 @@ static Network *network_free(Network *network) {
|
|||
while ((prefix = network->static_prefixes))
|
||||
prefix_free(prefix);
|
||||
|
||||
while ((prefix = network->static_route_prefixes))
|
||||
route_prefix_free(prefix);
|
||||
while ((route_prefix = network->static_route_prefixes))
|
||||
route_prefix_free(route_prefix);
|
||||
|
||||
while ((rule = network->rules))
|
||||
routing_policy_rule_free(rule);
|
||||
|
|
|
@ -245,7 +245,7 @@ struct Network {
|
|||
LIST_HEAD(Neighbor, neighbors);
|
||||
LIST_HEAD(AddressLabel, address_labels);
|
||||
LIST_HEAD(Prefix, static_prefixes);
|
||||
LIST_HEAD(Prefix, static_route_prefixes);
|
||||
LIST_HEAD(RoutePrefix, static_route_prefixes);
|
||||
LIST_HEAD(RoutingPolicyRule, rules);
|
||||
|
||||
unsigned n_static_addresses;
|
||||
|
|
|
@ -36,7 +36,7 @@ void prefix_free(Prefix *prefix) {
|
|||
free(prefix);
|
||||
}
|
||||
|
||||
int prefix_new(Prefix **ret) {
|
||||
static int prefix_new(Prefix **ret) {
|
||||
_cleanup_(prefix_freep) Prefix *prefix = NULL;
|
||||
|
||||
prefix = new0(Prefix, 1);
|
||||
|
@ -101,10 +101,10 @@ static int prefix_new_static(Network *network, const char *filename,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int route_prefix_new(Prefix **ret) {
|
||||
_cleanup_(prefix_freep) Prefix *prefix = NULL;
|
||||
static int route_prefix_new(RoutePrefix **ret) {
|
||||
_cleanup_(route_prefix_freep) RoutePrefix *prefix = NULL;
|
||||
|
||||
prefix = new0(Prefix, 1);
|
||||
prefix = new0(RoutePrefix, 1);
|
||||
if (!prefix)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -116,12 +116,12 @@ int route_prefix_new(Prefix **ret) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
void route_prefix_free(Prefix *prefix) {
|
||||
void route_prefix_free(RoutePrefix *prefix) {
|
||||
if (!prefix)
|
||||
return;
|
||||
|
||||
if (prefix->network) {
|
||||
LIST_REMOVE(prefixes, prefix->network->static_route_prefixes, prefix);
|
||||
LIST_REMOVE(route_prefixes, prefix->network->static_route_prefixes, prefix);
|
||||
assert(prefix->network->n_static_route_prefixes > 0);
|
||||
prefix->network->n_static_route_prefixes--;
|
||||
|
||||
|
@ -137,9 +137,9 @@ void route_prefix_free(Prefix *prefix) {
|
|||
}
|
||||
|
||||
static int route_prefix_new_static(Network *network, const char *filename,
|
||||
unsigned section_line, Prefix **ret) {
|
||||
unsigned section_line, RoutePrefix **ret) {
|
||||
_cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
|
||||
_cleanup_(prefix_freep) Prefix *prefix = NULL;
|
||||
_cleanup_(route_prefix_freep) RoutePrefix *prefix = NULL;
|
||||
int r;
|
||||
|
||||
assert(network);
|
||||
|
@ -166,7 +166,7 @@ static int route_prefix_new_static(Network *network, const char *filename,
|
|||
return r;
|
||||
|
||||
prefix->network = network;
|
||||
LIST_APPEND(prefixes, network->static_route_prefixes, prefix);
|
||||
LIST_APPEND(route_prefixes, network->static_route_prefixes, prefix);
|
||||
network->n_static_route_prefixes++;
|
||||
|
||||
if (filename) {
|
||||
|
@ -331,7 +331,7 @@ int config_parse_route_prefix(const char *unit,
|
|||
void *userdata) {
|
||||
|
||||
Network *network = userdata;
|
||||
_cleanup_(route_prefix_free_or_set_invalidp) Prefix *p = NULL;
|
||||
_cleanup_(route_prefix_free_or_set_invalidp) RoutePrefix *p = NULL;
|
||||
uint8_t prefixlen = 64;
|
||||
union in_addr_union in6addr;
|
||||
int r;
|
||||
|
@ -373,7 +373,7 @@ int config_parse_route_prefix_lifetime(const char *unit,
|
|||
void *data,
|
||||
void *userdata) {
|
||||
Network *network = userdata;
|
||||
_cleanup_(route_prefix_free_or_set_invalidp) Prefix *p = NULL;
|
||||
_cleanup_(route_prefix_free_or_set_invalidp) RoutePrefix *p = NULL;
|
||||
usec_t usec;
|
||||
int r;
|
||||
|
||||
|
@ -549,8 +549,9 @@ int radv_emit_dns(Link *link) {
|
|||
}
|
||||
|
||||
int radv_configure(Link *link) {
|
||||
int r;
|
||||
RoutePrefix *q;
|
||||
Prefix *p;
|
||||
int r;
|
||||
|
||||
assert(link);
|
||||
assert(link->network);
|
||||
|
@ -609,8 +610,8 @@ int radv_configure(Link *link) {
|
|||
return r;
|
||||
}
|
||||
|
||||
LIST_FOREACH(prefixes, p, link->network->static_route_prefixes) {
|
||||
r = sd_radv_add_route_prefix(link->radv, p->radv_route_prefix, false);
|
||||
LIST_FOREACH(route_prefixes, q, link->network->static_route_prefixes) {
|
||||
r = sd_radv_add_route_prefix(link->radv, q->radv_route_prefix, false);
|
||||
if (r == -EEXIST)
|
||||
continue;
|
||||
if (r < 0)
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "networkd-util.h"
|
||||
|
||||
typedef struct Prefix Prefix;
|
||||
typedef struct RoutePrefix RoutePrefix;
|
||||
|
||||
typedef enum RADVPrefixDelegation {
|
||||
RADV_PREFIX_DELEGATION_NONE,
|
||||
|
@ -26,21 +27,26 @@ struct Prefix {
|
|||
NetworkConfigSection *section;
|
||||
|
||||
sd_radv_prefix *radv_prefix;
|
||||
sd_radv_route_prefix *radv_route_prefix;
|
||||
|
||||
LIST_FIELDS(Prefix, prefixes);
|
||||
LIST_FIELDS(Prefix, route_prefixes);
|
||||
};
|
||||
|
||||
int prefix_new(Prefix **ret);
|
||||
struct RoutePrefix {
|
||||
Network *network;
|
||||
NetworkConfigSection *section;
|
||||
|
||||
sd_radv_route_prefix *radv_route_prefix;
|
||||
|
||||
LIST_FIELDS(RoutePrefix, route_prefixes);
|
||||
};
|
||||
|
||||
void prefix_free(Prefix *prefix);
|
||||
|
||||
DEFINE_NETWORK_SECTION_FUNCTIONS(Prefix, prefix_free);
|
||||
|
||||
int route_prefix_new(Prefix **ret);
|
||||
void route_prefix_free(Prefix *prefix);
|
||||
void route_prefix_free(RoutePrefix *prefix);
|
||||
|
||||
DEFINE_NETWORK_SECTION_FUNCTIONS(Prefix, route_prefix_free);
|
||||
DEFINE_NETWORK_SECTION_FUNCTIONS(RoutePrefix, route_prefix_free);
|
||||
|
||||
int radv_emit_dns(Link *link);
|
||||
int radv_configure(Link *link);
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <ctype.h>
|
||||
#include <net/if.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "fd-util.h"
|
||||
|
@ -1611,10 +1612,12 @@ int table_print(Table *t, FILE *f) {
|
|||
}
|
||||
|
||||
/* Calculate effective table width */
|
||||
if (t->width == (size_t) -1)
|
||||
table_effective_width = pager_have() ? table_requested_width : MIN(table_requested_width, columns());
|
||||
else
|
||||
if (t->width != (size_t) -1)
|
||||
table_effective_width = t->width;
|
||||
else if (pager_have() || !isatty(STDOUT_FILENO))
|
||||
table_effective_width = table_requested_width;
|
||||
else
|
||||
table_effective_width = MIN(table_requested_width, columns());
|
||||
|
||||
if (table_maximum_width != (size_t) -1 && table_effective_width > table_maximum_width)
|
||||
table_effective_width = table_maximum_width;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "format-table.h"
|
||||
#include "string-util.h"
|
||||
|
@ -154,12 +156,20 @@ int main(int argc, char *argv[]) {
|
|||
assert_se(table_format(t, &formatted) >= 0);
|
||||
printf("%s\n", formatted);
|
||||
|
||||
assert_se(streq(formatted,
|
||||
" no a long f… no a long f… a long fi…\n"
|
||||
" no fäää no fäää fäää \n"
|
||||
" yes fäää yes fäää fäää \n"
|
||||
" yes xxx yes xxx xxx \n"
|
||||
"5min 5min \n"));
|
||||
if (isatty(STDOUT_FILENO))
|
||||
assert_se(streq(formatted,
|
||||
" no a long f… no a long f… a long fi…\n"
|
||||
" no fäää no fäää fäää \n"
|
||||
" yes fäää yes fäää fäää \n"
|
||||
" yes xxx yes xxx xxx \n"
|
||||
"5min 5min \n"));
|
||||
else
|
||||
assert_se(streq(formatted,
|
||||
" no a long field no a long field a long field\n"
|
||||
" no fäää no fäää fäää \n"
|
||||
" yes fäää yes fäää fäää \n"
|
||||
" yes xxx yes xxx xxx \n"
|
||||
"5min 5min \n"));
|
||||
|
||||
test_issue_9549();
|
||||
|
||||
|
|
Loading…
Reference in New Issue