diff options
author | Susant Sahani <ssahani@users.noreply.github.com> | 2017-04-25 13:02:59 +0530 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2017-04-25 09:32:59 +0200 |
commit | b5bf6f645e83f279e3a048f3eb62475420a1af20 (patch) | |
tree | 57216aea03f6a33d6409d2d4884d631f45762948 | |
parent | 19fe49f62cc916f1237ea92a04fc80ee75285dde (diff) |
networkd: make IPv6 route preference configurable (#5700)
The work supports route preference configurable.
i.e. able to set low, medium and high.
-rw-r--r-- | man/systemd.network.xml | 10 | ||||
-rw-r--r-- | src/network/networkd-network-gperf.gperf | 1 | ||||
-rw-r--r-- | src/network/networkd-route.c | 31 | ||||
-rw-r--r-- | src/network/networkd-route.h | 1 |
4 files changed, 43 insertions, 0 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml index fdf7d5caaf..4b80578333 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -842,6 +842,16 @@ </listitem> </varlistentry> <varlistentry> + <term><varname>IPv6Preference=</varname></term> + <listitem> + <para>Specifies the route preference as defined in <ulink + url="https://tools.ietf.org/html/rfc4191">RFC4191</ulink> for Router Discovery messages. + Which can be one of <literal>low</literal> the route has a lowest priority, + <literal>medium</literal> the route has a default priority or + <literal>high</literal> the route has a highest priority.</para> + </listitem> + </varlistentry> + <varlistentry> <term><varname>Scope=</varname></term> <listitem> <para>The scope of the route, which can be <literal>global</literal>, diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index abd921ee1a..3743113825 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -87,6 +87,7 @@ Route.Scope, config_parse_route_scope, Route.PreferredSource, config_parse_preferred_src, 0, 0 Route.Table, config_parse_route_table, 0, 0 Route.GatewayOnlink, config_parse_gateway_onlink, 0, 0 +Route.IPv6Preference, config_parse_ipv6_route_preference, 0, 0 DHCP.ClientIdentifier, config_parse_dhcp_client_identifier, 0, offsetof(Network, dhcp_client_identifier) DHCP.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp_use_dns) DHCP.UseNTP, config_parse_bool, 0, offsetof(Network, dhcp_use_ntp) diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index e2a5c77ed1..56f831628c 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -17,6 +17,8 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. ***/ +#include <linux/icmpv6.h> + #include "alloc-util.h" #include "conf-parser.h" #include "in-addr-util.h" @@ -975,6 +977,35 @@ int config_parse_gateway_onlink(const char *unit, n->flags |= RTNH_F_ONLINK; else n->flags &= ~RTNH_F_ONLINK; + n = NULL; + + return 0; +} + +int config_parse_ipv6_route_preference(const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + Network *network = userdata; + _cleanup_route_free_ Route *n = NULL; + int r; + + if (streq(rvalue, "low")) + n->pref = ICMPV6_ROUTER_PREF_LOW; + else if (streq(rvalue, "medium")) + n->pref = ICMPV6_ROUTER_PREF_MEDIUM; + else if (streq(rvalue, "high")) + n->pref = ICMPV6_ROUTER_PREF_HIGH; + else { + log_syntax(unit, LOG_ERR, filename, line, 0, "Unknown route preference: %s", rvalue); + return 0; + } n = NULL; diff --git a/src/network/networkd-route.h b/src/network/networkd-route.h index e2446b3e92..47ff6f28a0 100644 --- a/src/network/networkd-route.h +++ b/src/network/networkd-route.h @@ -76,3 +76,4 @@ int config_parse_route_priority(const char *unit, const char *filename, unsigned int config_parse_route_scope(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); int config_parse_route_table(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); int config_parse_gateway_onlink(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_ipv6_route_preference(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); |