From b5bf6f645e83f279e3a048f3eb62475420a1af20 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Tue, 25 Apr 2017 13:02:59 +0530 Subject: [PATCH] networkd: make IPv6 route preference configurable (#5700) The work supports route preference configurable. i.e. able to set low, medium and high. --- man/systemd.network.xml | 10 ++++++++ src/network/networkd-network-gperf.gperf | 1 + src/network/networkd-route.c | 31 ++++++++++++++++++++++++ src/network/networkd-route.h | 1 + 4 files changed, 43 insertions(+) diff --git a/man/systemd.network.xml b/man/systemd.network.xml index fdf7d5caaf9..4b80578333f 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -841,6 +841,16 @@ The metric of the route (an unsigned integer). + + IPv6Preference= + + Specifies the route preference as defined in RFC4191 for Router Discovery messages. + Which can be one of low the route has a lowest priority, + medium the route has a default priority or + high the route has a highest priority. + + Scope= diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index abd921ee1ae..37431138252 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 e2a5c77ed19..56f831628ca 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -17,6 +17,8 @@ along with systemd; If not, see . ***/ +#include + #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 e2446b3e921..47ff6f28a09 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); -- 2.39.2