mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-24 21:34:08 +03:00
networkd: add support for Route sections
This commit is contained in:
parent
b0d27a2508
commit
ae4c67a7c6
@ -209,6 +209,24 @@
|
||||
<para>An address label.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>The <literal>[Route]</literal> section accepts the following keys:</para>
|
||||
|
||||
<variablelist class='network-directives'>
|
||||
<varlistentry>
|
||||
<term><varname>Gateway</varname></term>
|
||||
<listitem>
|
||||
<para>As in the <literal>[Network]</literal> section.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>Destination</varname></term>
|
||||
<listitem>
|
||||
<para>The destination prefix of the route. Possibly followed by a slash and the
|
||||
prefixlength, if ommitted a full-length host route is assumed.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect2>
|
||||
</refsect1>
|
||||
|
@ -26,5 +26,7 @@ Network.Address, config_parse_address, 0, 0
|
||||
Network.Gateway, config_parse_gateway, 0, 0
|
||||
Address.Address, config_parse_address, 0, 0
|
||||
Address.Label, config_parse_label, 0, 0
|
||||
Route.Gateway, config_parse_gateway, 0, 0
|
||||
Route.Destination, config_parse_destination, 0, 0
|
||||
Bridge.Description, config_parse_string, 0, offsetof(Bridge, description)
|
||||
Bridge.Name, config_parse_ifname, 0, offsetof(Bridge, name)
|
||||
|
@ -110,12 +110,12 @@ int route_configure(Route *route, Link *link,
|
||||
log_error("Could not append RTA_DST attribute: %s", strerror(-r));
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
r = sd_rtnl_message_route_set_dst_prefixlen(req, route->dst_prefixlen);
|
||||
if (r < 0) {
|
||||
log_error("Could not set destination prefix length: %s", strerror(-r));
|
||||
return r;
|
||||
r = sd_rtnl_message_route_set_dst_prefixlen(req, route->dst_prefixlen);
|
||||
if (r < 0) {
|
||||
log_error("Could not set destination prefix length: %s", strerror(-r));
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
r = sd_rtnl_message_append_u32(req, RTA_OIF, link->ifindex);
|
||||
@ -204,20 +204,9 @@ int config_parse_destination(const char *unit,
|
||||
|
||||
/* Destination=address/prefixlen */
|
||||
|
||||
/* prefixlen */
|
||||
/* address */
|
||||
e = strchr(rvalue, '/');
|
||||
if (e) {
|
||||
unsigned i;
|
||||
r = safe_atou(e + 1, &i);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Route destination prefix length is invalid, "
|
||||
"ignoring assignment: %s", e + 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
n->dst_prefixlen = (unsigned char) i;
|
||||
|
||||
address = strndup(rvalue, e - rvalue);
|
||||
if (!address)
|
||||
return log_oom();
|
||||
@ -234,6 +223,30 @@ int config_parse_destination(const char *unit,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* prefixlen */
|
||||
if (e) {
|
||||
unsigned i;
|
||||
|
||||
r = safe_atou(e + 1, &i);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Route destination prefix length is invalid, "
|
||||
"ignoring assignment: %s", e + 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
n->dst_prefixlen = (unsigned char) i;
|
||||
} else {
|
||||
switch (n->family) {
|
||||
case AF_INET:
|
||||
n->dst_prefixlen = 32;
|
||||
break;
|
||||
case AF_INET6:
|
||||
n->dst_prefixlen = 128;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
n = NULL;
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user