Merge pull request #4859 from keszybz/networkd
Networkd man page update and fixes for the fallout
This commit is contained in:
+142
-70
@@ -614,47 +614,57 @@
|
||||
<varlistentry>
|
||||
<term><varname>Bridge=</varname></term>
|
||||
<listitem>
|
||||
<para>The name of the bridge to add the link to.</para>
|
||||
<para>The name of the bridge to add the link to. See
|
||||
<citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>Bond=</varname></term>
|
||||
<listitem>
|
||||
<para>The name of the bond to add the link to.</para>
|
||||
<para>The name of the bond to add the link to. See
|
||||
<citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>VRF=</varname></term>
|
||||
<listitem>
|
||||
<para>The name of the VRF to add the link to.</para>
|
||||
<para>The name of the VRF to add the link to. See
|
||||
<citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>VLAN=</varname></term>
|
||||
<listitem>
|
||||
<para>The name of a VLAN to create on the link. This
|
||||
option may be specified more than once.</para>
|
||||
<para>The name of a VLAN to create on the link. See
|
||||
<citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||
This option may be specified more than once.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>MACVLAN=</varname></term>
|
||||
<listitem>
|
||||
<para>The name of a MACVLAN to create on the link. This
|
||||
option may be specified more than once.</para>
|
||||
<para>The name of a MACVLAN to create on the link. See
|
||||
<citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||
This option may be specified more than once.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>VXLAN=</varname></term>
|
||||
<listitem>
|
||||
<para>The name of a VXLAN to create on the link. This
|
||||
option may be specified more than once.</para>
|
||||
<para>The name of a VXLAN to create on the link. See
|
||||
<citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||
This option may be specified more than once.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>Tunnel=</varname></term>
|
||||
<listitem>
|
||||
<para>The name of a Tunnel to create on the link. This
|
||||
option may be specified more than once.</para>
|
||||
<para>The name of a Tunnel to create on the link. See
|
||||
<citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||
This option may be specified more than once.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
@@ -1293,53 +1303,75 @@
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Example</title>
|
||||
<title>Examples</title>
|
||||
<example>
|
||||
<title>/etc/systemd/network/50-static.network</title>
|
||||
<title>Static network configuration</title>
|
||||
|
||||
<programlisting>[Match]
|
||||
<programlisting># /etc/systemd/network/50-static.network
|
||||
[Match]
|
||||
Name=enp2s0
|
||||
|
||||
[Network]
|
||||
Address=192.168.0.15/24
|
||||
Gateway=192.168.0.1</programlisting>
|
||||
|
||||
<para>This brings interface <literal>enp2s0</literal> up with a static address. The
|
||||
specified gateway will be used for a default route.</para>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>/etc/systemd/network/80-dhcp.network</title>
|
||||
<title>DHCP on ethernet links</title>
|
||||
|
||||
<programlisting>[Match]
|
||||
<programlisting># /etc/systemd/network/80-dhcp.network
|
||||
[Match]
|
||||
Name=en*
|
||||
|
||||
[Network]
|
||||
DHCP=yes</programlisting>
|
||||
|
||||
<para>This will enable DHCPv4 and DHCPv6 on all interfaces with names starting with
|
||||
<literal>en</literal> (i.e. ethernet interfaces).</para>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>/etc/systemd/network/25-bridge-static.network</title>
|
||||
<title>A bridge with two enslaved links</title>
|
||||
|
||||
<programlisting>[Match]
|
||||
<programlisting># /etc/systemd/network/25-bridge-static.network
|
||||
[Match]
|
||||
Name=bridge0
|
||||
|
||||
[Network]
|
||||
Address=192.168.0.15/24
|
||||
Gateway=192.168.0.1
|
||||
DNS=192.168.0.1</programlisting>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>/etc/systemd/network/25-bridge-slave-interface.network</title>
|
||||
|
||||
<programlisting>[Match]
|
||||
<programlisting># /etc/systemd/network/25-bridge-slave-interface-1.network
|
||||
[Match]
|
||||
Name=enp2s0
|
||||
|
||||
[Network]
|
||||
Bridge=bridge0</programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>/etc/systemd/network/25-bridge-slave-interface-vlan.network</title>
|
||||
|
||||
<programlisting>[Match]
|
||||
<programlisting># /etc/systemd/network/25-bridge-slave-interface-2.network
|
||||
[Match]
|
||||
Name=wlp3s0
|
||||
|
||||
[Network]
|
||||
Bridge=bridge0</programlisting>
|
||||
|
||||
<para>This creates a bridge and attaches devices <literal>enp2s0</literal> and
|
||||
<literal>wlp3s0</literal> to it. The bridge will have the specified static address
|
||||
and network assigned, and a default route via the specified gateway will be
|
||||
added. The specified DNS server will be added to the global list of DNS resolvers.
|
||||
</para>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title></title>
|
||||
|
||||
<programlisting>
|
||||
# /etc/systemd/network/20-bridge-slave-interface-vlan.network
|
||||
[Match]
|
||||
Name=enp2s0
|
||||
|
||||
[Network]
|
||||
@@ -1355,66 +1387,106 @@ VLAN=100-200
|
||||
|
||||
[BridgeVLAN]
|
||||
EgressUntagged=300-400</programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>/etc/systemd/network/25-ipip.network</title>
|
||||
|
||||
<programlisting>[Match]
|
||||
Name=em1
|
||||
<para>This overrides the configuration specified in the previous example for the
|
||||
interface <literal>enp2s0</literal>, and enables VLAN on that bridge port. VLAN IDs
|
||||
1-32, 42, 100-400 will be allowed. Packets tagged with VLAN IDs 42, 300-400 will be
|
||||
untagged when they leave on this interface. Untagged packets which arrive on this
|
||||
interface will be assigned VLAN ID 42.</para>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>Various tunnels</title>
|
||||
|
||||
<programlisting>/etc/systemd/network/25-tunnels.network
|
||||
[Match]
|
||||
Name=ens1
|
||||
|
||||
[Network]
|
||||
Tunnel=ipip-tun</programlisting>
|
||||
Tunnel=ipip-tun
|
||||
Tunnel=sit-tun
|
||||
Tunnel=gre-tun
|
||||
Tunnel=vti-tun
|
||||
</programlisting>
|
||||
|
||||
<programlisting>/etc/systemd/network/25-tunnel-ipip.netdev
|
||||
[NetDev]
|
||||
Name=ipip-tun
|
||||
Kind=ipip
|
||||
</programlisting>
|
||||
|
||||
<programlisting>/etc/systemd/network/25-tunnel-sit.netdev
|
||||
[NetDev]
|
||||
Name=sit-tun
|
||||
Kind=sit
|
||||
</programlisting>
|
||||
|
||||
<programlisting>/etc/systemd/network/25-tunnel-gre.netdev
|
||||
[NetDev]
|
||||
Name=gre-tun
|
||||
Kind=gre
|
||||
</programlisting>
|
||||
|
||||
<programlisting>/etc/systemd/network/25-tunnel-vti.netdev
|
||||
[NetDev]
|
||||
Name=vti-tun
|
||||
Kind=vti
|
||||
</programlisting>
|
||||
|
||||
<para>This will bring interface <literal>ens1</literal> up and create an IPIP tunnel,
|
||||
a SIT tunnel, a GRE tunnel, and a VTI tunnel using it.</para>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>/etc/systemd/network/25-sit.network</title>
|
||||
<title>A bond device</title>
|
||||
|
||||
<programlisting>[Match]
|
||||
Name=em1
|
||||
|
||||
[Network]
|
||||
Tunnel=sit-tun</programlisting>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>/etc/systemd/network/25-gre.network</title>
|
||||
|
||||
<programlisting>[Match]
|
||||
Name=em1
|
||||
|
||||
[Network]
|
||||
Tunnel=gre-tun</programlisting>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>/etc/systemd/network/25-vti.network</title>
|
||||
|
||||
<programlisting>[Match]
|
||||
Name=em1
|
||||
|
||||
[Network]
|
||||
Tunnel=vti-tun</programlisting>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>/etc/systemd/network/25-bond.network</title>
|
||||
|
||||
<programlisting>[Match]
|
||||
<programlisting># /etc/systemd/network/30-bond1.network
|
||||
[Match]
|
||||
Name=bond1
|
||||
|
||||
[Network]
|
||||
DHCP=yes
|
||||
DHCP=ipv6
|
||||
</programlisting>
|
||||
|
||||
<programlisting># /etc/systemd/network/30-bond1.netdev
|
||||
[NetDev]
|
||||
Name=bond1
|
||||
Kind=bond
|
||||
</programlisting>
|
||||
|
||||
<programlisting># /etc/systemd/network/30-bond1-dev1.nework
|
||||
[Match]
|
||||
MACAddress=52:54:00:e9:64:41
|
||||
|
||||
[Network]
|
||||
Bond=bond1
|
||||
</programlisting>
|
||||
|
||||
<programlisting># /etc/systemd/network/30-bond1-dev2.nework
|
||||
[Match]
|
||||
MACAddress=52:54:00:e9:64:42
|
||||
|
||||
[Network]
|
||||
Bond=bond1
|
||||
</programlisting>
|
||||
|
||||
<para>This will create a bond device <literal>bond1</literal> and enslave the two
|
||||
devices with MAC addresses 52:54:00:e9:64:41 and 52:54:00:e9:64:42 to it. IPv6 DHCP
|
||||
will be used to acquire an address.</para>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>/etc/systemd/network/25-vrf.network</title>
|
||||
<para>Add the bond1 interface to the VRF master interface vrf-test. This will redirect routes generated on this interface to be within the routing table defined during VRF creation. Traffic won't be redirected towards the VRFs routing table unless specific ip-rules are added.</para>
|
||||
<programlisting>[Match]
|
||||
<title>Virtual Routing and Forwarding (VRF)</title>
|
||||
<para>Add the <literal>bond1</literal> interface to the VRF master interface
|
||||
<literal>vrf1</literal>. This will redirect routes generated on this interface to be
|
||||
within the routing table defined during VRF creation. Traffic won't be redirected
|
||||
towards the VRFs routing table unless specific ip-rules are added.</para>
|
||||
<programlisting># /etc/systemd/network/25-vrf.network
|
||||
[Match]
|
||||
Name=bond1
|
||||
|
||||
[Network]
|
||||
VRF=vrf-test
|
||||
VRF=vrf1
|
||||
</programlisting>
|
||||
</example>
|
||||
|
||||
|
||||
+4
-3
@@ -273,7 +273,9 @@ static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) {
|
||||
if (state == SCOPE_STOP_SIGTERM)
|
||||
skip_signal = bus_scope_send_request_stop(s) > 0;
|
||||
|
||||
if (!skip_signal) {
|
||||
if (skip_signal)
|
||||
r = 1; /* wait */
|
||||
else {
|
||||
r = unit_kill_context(
|
||||
UNIT(s),
|
||||
&s->kill_context,
|
||||
@@ -283,8 +285,7 @@ static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) {
|
||||
-1, -1, false);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
} else
|
||||
r = 1;
|
||||
}
|
||||
|
||||
if (r > 0) {
|
||||
r = scope_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_stop_usec));
|
||||
|
||||
+5
-6
@@ -3755,14 +3755,14 @@ int unit_kill_context(
|
||||
bool main_pid_alien) {
|
||||
|
||||
bool wait_for_exit = false, send_sighup;
|
||||
cg_kill_log_func_t log_func;
|
||||
cg_kill_log_func_t log_func = NULL;
|
||||
int sig, r;
|
||||
|
||||
assert(u);
|
||||
assert(c);
|
||||
|
||||
/* Kill the processes belonging to this unit, in preparation for shutting the unit down. Returns > 0 if we
|
||||
* killed something worth waiting for, 0 otherwise. */
|
||||
/* Kill the processes belonging to this unit, in preparation for shutting the unit down.
|
||||
* Returns > 0 if we killed something worth waiting for, 0 otherwise. */
|
||||
|
||||
if (c->kill_mode == KILL_NONE)
|
||||
return 0;
|
||||
@@ -3774,9 +3774,8 @@ int unit_kill_context(
|
||||
IN_SET(k, KILL_TERMINATE, KILL_TERMINATE_AND_LOG) &&
|
||||
sig != SIGHUP;
|
||||
|
||||
log_func =
|
||||
k != KILL_TERMINATE ||
|
||||
IN_SET(sig, SIGKILL, SIGABRT) ? log_kill : NULL;
|
||||
if (k != KILL_TERMINATE || IN_SET(sig, SIGKILL, SIGABRT))
|
||||
log_func = log_kill;
|
||||
|
||||
if (main_pid > 0) {
|
||||
if (log_func)
|
||||
|
||||
+48
-22
@@ -397,16 +397,31 @@ static int netdev_tunnel_verify(NetDev *netdev, const char *filename) {
|
||||
|
||||
assert(t);
|
||||
|
||||
if (t->family != AF_INET && t->family != AF_INET6 && t->family != 0) {
|
||||
log_warning("Tunnel with invalid address family configured in %s. Ignoring", filename);
|
||||
if (!IN_SET(t->family, AF_INET, AF_INET6, AF_UNSPEC)) {
|
||||
log_netdev_error(netdev,
|
||||
"Tunnel with invalid address family configured in %s. Ignoring", filename);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (netdev->kind == NETDEV_KIND_IP6TNL) {
|
||||
if (t->ip6tnl_mode == _NETDEV_IP6_TNL_MODE_INVALID) {
|
||||
log_warning("IP6 Tunnel without mode configured in %s. Ignoring", filename);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (netdev->kind == NETDEV_KIND_VTI &&
|
||||
(t->family != AF_INET || in_addr_is_null(t->family, &t->local))) {
|
||||
log_netdev_error(netdev,
|
||||
"vti tunnel without a local IPv4 address configured in %s. Ignoring", filename);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (netdev->kind == NETDEV_KIND_VTI6 &&
|
||||
(t->family != AF_INET6 || in_addr_is_null(t->family, &t->local))) {
|
||||
log_netdev_error(netdev,
|
||||
"vti6 tunnel without a local IPv4 address configured in %s. Ignoring", filename);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (netdev->kind == NETDEV_KIND_IP6TNL &&
|
||||
t->ip6tnl_mode == _NETDEV_IP6_TNL_MODE_INVALID) {
|
||||
log_netdev_error(netdev,
|
||||
"ip6tnl without mode configured in %s. Ignoring", filename);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -431,26 +446,40 @@ int config_parse_tunnel_address(const char *unit,
|
||||
assert(rvalue);
|
||||
assert(data);
|
||||
|
||||
/* This is used to parse addresses on both local and remote ends of the tunnel.
|
||||
* Address families must match.
|
||||
*
|
||||
* "any" is a special value which means that the address is unspecified.
|
||||
*/
|
||||
|
||||
if (streq(rvalue, "any")) {
|
||||
t->family = 0;
|
||||
*addr = IN_ADDR_NULL;
|
||||
|
||||
/* As a special case, if both the local and remote addresses are
|
||||
* unspecified, also clear the address family.
|
||||
*/
|
||||
if (t->family != AF_UNSPEC &&
|
||||
in_addr_is_null(t->family, &t->local) &&
|
||||
in_addr_is_null(t->family, &t->remote))
|
||||
t->family = AF_UNSPEC;
|
||||
return 0;
|
||||
} else {
|
||||
}
|
||||
|
||||
r = in_addr_from_string_auto(rvalue, &f, &buffer);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Tunnel address is invalid, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
r = in_addr_from_string_auto(rvalue, &f, &buffer);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r,
|
||||
"Tunnel address \"%s\" invalid, ignoring assignment: %m", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (t->family != AF_UNSPEC && t->family != f) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Tunnel addresses incompatible, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
if (t->family != AF_UNSPEC && t->family != f) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0,
|
||||
"Tunnel addresses incompatible, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
t->family = f;
|
||||
*addr = buffer;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -578,7 +607,6 @@ static void ipip_init(NetDev *n) {
|
||||
assert(t);
|
||||
|
||||
t->pmtudisc = true;
|
||||
t->family = AF_UNSPEC;
|
||||
}
|
||||
|
||||
static void sit_init(NetDev *n) {
|
||||
@@ -588,7 +616,6 @@ static void sit_init(NetDev *n) {
|
||||
assert(t);
|
||||
|
||||
t->pmtudisc = true;
|
||||
t->family = AF_UNSPEC;
|
||||
}
|
||||
|
||||
static void vti_init(NetDev *n) {
|
||||
@@ -619,7 +646,6 @@ static void gre_init(NetDev *n) {
|
||||
assert(t);
|
||||
|
||||
t->pmtudisc = true;
|
||||
t->family = AF_UNSPEC;
|
||||
}
|
||||
|
||||
static void ip6gre_init(NetDev *n) {
|
||||
|
||||
@@ -255,9 +255,10 @@ static int link_enable_ipv6(Link *link) {
|
||||
|
||||
r = write_string_file(p, one_zero(disabled), WRITE_STRING_FILE_VERIFY_ON_FAILURE);
|
||||
if (r < 0)
|
||||
log_link_warning_errno(link, r, "Cannot %s IPv6 for interface %s: %m", disabled ? "disable" : "enable", link->ifname);
|
||||
log_link_warning_errno(link, r, "Cannot %s IPv6 for interface %s: %m",
|
||||
enable_disable(!disabled), link->ifname);
|
||||
else
|
||||
log_link_info(link, "IPv6 %sd for interface: %m", enable_disable(!disabled));
|
||||
log_link_info(link, "IPv6 successfully %sd", enable_disable(!disabled));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user