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>
|
<term><option>nofail</option></term>
|
||||||
|
|
||||||
<listitem><para>This device will not be a hard dependency of
|
<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
|
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
|
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
|
particular, if the device is used for a mount point, the mount point itself also needs to
|
||||||
have <option>noauto</option> option, or the boot will fail if the device is not unlocked
|
have the <option>nofail</option> option, or the boot will fail if the device is not unlocked
|
||||||
successfully.</para></listitem>
|
successfully.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
|
|
@ -1348,8 +1348,9 @@
|
||||||
<ulink url="https://getfedora.org">Fedora</ulink> image and start a shell in it</title>
|
<ulink url="https://getfedora.org">Fedora</ulink> image and start a shell in it</title>
|
||||||
|
|
||||||
<programlisting># machinectl pull-raw --verify=no \
|
<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
|
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>
|
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
|
<para>This downloads an image using
|
||||||
<citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
<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
|
/* On Linux the first two RT signals are reserved by
|
||||||
* glibc, and sigaction() will return EINVAL for them. */
|
* 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)
|
if (errno != EINVAL && r >= 0)
|
||||||
r = -errno;
|
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);
|
initialized = sd_device_get_is_initialized(device);
|
||||||
if (initialized < 0) {
|
if (initialized < 0) {
|
||||||
r = initialized;
|
if (initialized != -ENOENT)
|
||||||
|
/* this is necessarily racey, so ignore missing devices */
|
||||||
|
r = initialized;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -639,7 +642,9 @@ static int enumerator_scan_devices_tag(sd_device_enumerator *enumerator, const c
|
||||||
|
|
||||||
k = sd_device_get_subsystem(device, &subsystem);
|
k = sd_device_get_subsystem(device, &subsystem);
|
||||||
if (k < 0) {
|
if (k < 0) {
|
||||||
r = k;
|
if (k != -ENOENT)
|
||||||
|
/* this is necessarily racy, so ignore missing devices */
|
||||||
|
r = k;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,7 @@ static int network_resolve_stacked_netdevs(Network *network) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int network_verify(Network *network) {
|
int network_verify(Network *network) {
|
||||||
|
RoutePrefix *route_prefix, *route_prefix_next;
|
||||||
RoutingPolicyRule *rule, *rule_next;
|
RoutingPolicyRule *rule, *rule_next;
|
||||||
Neighbor *neighbor, *neighbor_next;
|
Neighbor *neighbor, *neighbor_next;
|
||||||
AddressLabel *label, *label_next;
|
AddressLabel *label, *label_next;
|
||||||
|
@ -304,9 +305,9 @@ int network_verify(Network *network) {
|
||||||
if (section_is_invalid(prefix->section))
|
if (section_is_invalid(prefix->section))
|
||||||
prefix_free(prefix);
|
prefix_free(prefix);
|
||||||
|
|
||||||
LIST_FOREACH_SAFE(prefixes, prefix, prefix_next, network->static_route_prefixes)
|
LIST_FOREACH_SAFE(route_prefixes, route_prefix, route_prefix_next, network->static_route_prefixes)
|
||||||
if (section_is_invalid(prefix->section))
|
if (section_is_invalid(route_prefix->section))
|
||||||
route_prefix_free(prefix);
|
route_prefix_free(route_prefix);
|
||||||
|
|
||||||
LIST_FOREACH_SAFE(rules, rule, rule_next, network->rules)
|
LIST_FOREACH_SAFE(rules, rule, rule_next, network->rules)
|
||||||
if (routing_policy_rule_section_verify(rule) < 0)
|
if (routing_policy_rule_section_verify(rule) < 0)
|
||||||
|
@ -577,10 +578,11 @@ failure:
|
||||||
|
|
||||||
static Network *network_free(Network *network) {
|
static Network *network_free(Network *network) {
|
||||||
IPv6ProxyNDPAddress *ipv6_proxy_ndp_address;
|
IPv6ProxyNDPAddress *ipv6_proxy_ndp_address;
|
||||||
|
RoutePrefix *route_prefix;
|
||||||
RoutingPolicyRule *rule;
|
RoutingPolicyRule *rule;
|
||||||
|
AddressLabel *label;
|
||||||
FdbEntry *fdb_entry;
|
FdbEntry *fdb_entry;
|
||||||
Neighbor *neighbor;
|
Neighbor *neighbor;
|
||||||
AddressLabel *label;
|
|
||||||
Address *address;
|
Address *address;
|
||||||
NextHop *nexthop;
|
NextHop *nexthop;
|
||||||
Prefix *prefix;
|
Prefix *prefix;
|
||||||
|
@ -654,8 +656,8 @@ static Network *network_free(Network *network) {
|
||||||
while ((prefix = network->static_prefixes))
|
while ((prefix = network->static_prefixes))
|
||||||
prefix_free(prefix);
|
prefix_free(prefix);
|
||||||
|
|
||||||
while ((prefix = network->static_route_prefixes))
|
while ((route_prefix = network->static_route_prefixes))
|
||||||
route_prefix_free(prefix);
|
route_prefix_free(route_prefix);
|
||||||
|
|
||||||
while ((rule = network->rules))
|
while ((rule = network->rules))
|
||||||
routing_policy_rule_free(rule);
|
routing_policy_rule_free(rule);
|
||||||
|
|
|
@ -245,7 +245,7 @@ struct Network {
|
||||||
LIST_HEAD(Neighbor, neighbors);
|
LIST_HEAD(Neighbor, neighbors);
|
||||||
LIST_HEAD(AddressLabel, address_labels);
|
LIST_HEAD(AddressLabel, address_labels);
|
||||||
LIST_HEAD(Prefix, static_prefixes);
|
LIST_HEAD(Prefix, static_prefixes);
|
||||||
LIST_HEAD(Prefix, static_route_prefixes);
|
LIST_HEAD(RoutePrefix, static_route_prefixes);
|
||||||
LIST_HEAD(RoutingPolicyRule, rules);
|
LIST_HEAD(RoutingPolicyRule, rules);
|
||||||
|
|
||||||
unsigned n_static_addresses;
|
unsigned n_static_addresses;
|
||||||
|
|
|
@ -36,7 +36,7 @@ void prefix_free(Prefix *prefix) {
|
||||||
free(prefix);
|
free(prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
int prefix_new(Prefix **ret) {
|
static int prefix_new(Prefix **ret) {
|
||||||
_cleanup_(prefix_freep) Prefix *prefix = NULL;
|
_cleanup_(prefix_freep) Prefix *prefix = NULL;
|
||||||
|
|
||||||
prefix = new0(Prefix, 1);
|
prefix = new0(Prefix, 1);
|
||||||
|
@ -101,10 +101,10 @@ static int prefix_new_static(Network *network, const char *filename,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int route_prefix_new(Prefix **ret) {
|
static int route_prefix_new(RoutePrefix **ret) {
|
||||||
_cleanup_(prefix_freep) Prefix *prefix = NULL;
|
_cleanup_(route_prefix_freep) RoutePrefix *prefix = NULL;
|
||||||
|
|
||||||
prefix = new0(Prefix, 1);
|
prefix = new0(RoutePrefix, 1);
|
||||||
if (!prefix)
|
if (!prefix)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -116,12 +116,12 @@ int route_prefix_new(Prefix **ret) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void route_prefix_free(Prefix *prefix) {
|
void route_prefix_free(RoutePrefix *prefix) {
|
||||||
if (!prefix)
|
if (!prefix)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (prefix->network) {
|
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);
|
assert(prefix->network->n_static_route_prefixes > 0);
|
||||||
prefix->network->n_static_route_prefixes--;
|
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,
|
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_(network_config_section_freep) NetworkConfigSection *n = NULL;
|
||||||
_cleanup_(prefix_freep) Prefix *prefix = NULL;
|
_cleanup_(route_prefix_freep) RoutePrefix *prefix = NULL;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(network);
|
assert(network);
|
||||||
|
@ -166,7 +166,7 @@ static int route_prefix_new_static(Network *network, const char *filename,
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
prefix->network = network;
|
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++;
|
network->n_static_route_prefixes++;
|
||||||
|
|
||||||
if (filename) {
|
if (filename) {
|
||||||
|
@ -331,7 +331,7 @@ int config_parse_route_prefix(const char *unit,
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
Network *network = 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;
|
uint8_t prefixlen = 64;
|
||||||
union in_addr_union in6addr;
|
union in_addr_union in6addr;
|
||||||
int r;
|
int r;
|
||||||
|
@ -373,7 +373,7 @@ int config_parse_route_prefix_lifetime(const char *unit,
|
||||||
void *data,
|
void *data,
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
Network *network = 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;
|
usec_t usec;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -549,8 +549,9 @@ int radv_emit_dns(Link *link) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int radv_configure(Link *link) {
|
int radv_configure(Link *link) {
|
||||||
int r;
|
RoutePrefix *q;
|
||||||
Prefix *p;
|
Prefix *p;
|
||||||
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
assert(link->network);
|
assert(link->network);
|
||||||
|
@ -609,8 +610,8 @@ int radv_configure(Link *link) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIST_FOREACH(prefixes, p, link->network->static_route_prefixes) {
|
LIST_FOREACH(route_prefixes, q, link->network->static_route_prefixes) {
|
||||||
r = sd_radv_add_route_prefix(link->radv, p->radv_route_prefix, false);
|
r = sd_radv_add_route_prefix(link->radv, q->radv_route_prefix, false);
|
||||||
if (r == -EEXIST)
|
if (r == -EEXIST)
|
||||||
continue;
|
continue;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "networkd-util.h"
|
#include "networkd-util.h"
|
||||||
|
|
||||||
typedef struct Prefix Prefix;
|
typedef struct Prefix Prefix;
|
||||||
|
typedef struct RoutePrefix RoutePrefix;
|
||||||
|
|
||||||
typedef enum RADVPrefixDelegation {
|
typedef enum RADVPrefixDelegation {
|
||||||
RADV_PREFIX_DELEGATION_NONE,
|
RADV_PREFIX_DELEGATION_NONE,
|
||||||
|
@ -26,21 +27,26 @@ struct Prefix {
|
||||||
NetworkConfigSection *section;
|
NetworkConfigSection *section;
|
||||||
|
|
||||||
sd_radv_prefix *radv_prefix;
|
sd_radv_prefix *radv_prefix;
|
||||||
sd_radv_route_prefix *radv_route_prefix;
|
|
||||||
|
|
||||||
LIST_FIELDS(Prefix, prefixes);
|
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);
|
void prefix_free(Prefix *prefix);
|
||||||
|
|
||||||
DEFINE_NETWORK_SECTION_FUNCTIONS(Prefix, prefix_free);
|
DEFINE_NETWORK_SECTION_FUNCTIONS(Prefix, prefix_free);
|
||||||
|
|
||||||
int route_prefix_new(Prefix **ret);
|
void route_prefix_free(RoutePrefix *prefix);
|
||||||
void route_prefix_free(Prefix *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_emit_dns(Link *link);
|
||||||
int radv_configure(Link *link);
|
int radv_configure(Link *link);
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "alloc-util.h"
|
#include "alloc-util.h"
|
||||||
#include "fd-util.h"
|
#include "fd-util.h"
|
||||||
|
@ -1611,10 +1612,12 @@ int table_print(Table *t, FILE *f) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate effective table width */
|
/* Calculate effective table width */
|
||||||
if (t->width == (size_t) -1)
|
if (t->width != (size_t) -1)
|
||||||
table_effective_width = pager_have() ? table_requested_width : MIN(table_requested_width, columns());
|
|
||||||
else
|
|
||||||
table_effective_width = t->width;
|
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)
|
if (table_maximum_width != (size_t) -1 && table_effective_width > table_maximum_width)
|
||||||
table_effective_width = table_maximum_width;
|
table_effective_width = table_maximum_width;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "alloc-util.h"
|
#include "alloc-util.h"
|
||||||
#include "format-table.h"
|
#include "format-table.h"
|
||||||
#include "string-util.h"
|
#include "string-util.h"
|
||||||
|
@ -154,12 +156,20 @@ int main(int argc, char *argv[]) {
|
||||||
assert_se(table_format(t, &formatted) >= 0);
|
assert_se(table_format(t, &formatted) >= 0);
|
||||||
printf("%s\n", formatted);
|
printf("%s\n", formatted);
|
||||||
|
|
||||||
assert_se(streq(formatted,
|
if (isatty(STDOUT_FILENO))
|
||||||
" no a long f… no a long f… a long fi…\n"
|
assert_se(streq(formatted,
|
||||||
" no fäää no fäää fäää \n"
|
" no a long f… no a long f… a long fi…\n"
|
||||||
" yes fäää yes fäää fäää \n"
|
" no fäää no fäää fäää \n"
|
||||||
" yes xxx yes xxx xxx \n"
|
" yes fäää yes fäää fäää \n"
|
||||||
"5min 5min \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();
|
test_issue_9549();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue