[systemd-devel] [PATCH] networkd: allow specification of DHCP route metric

Tom Gundersen teg at jklm.no
Mon Sep 8 06:09:32 PDT 2014


Applied. Thanks!

Tom

On Mon, Sep 8, 2014 at 12:26 PM, Angus Gibson <angus at agibson.me> wrote:
> This lets the routing metric for links to be specified per-network,
> still defaulting to DHCP_ROUTE_METRIC (1024) if unspecified. Hopefully
> this helps with multiple interfaces configured via DHCP.
>
> ---
>  man/systemd.network.xml                  | 6 ++++++
>  src/network/networkd-dhcp4.c             | 6 +++---
>  src/network/networkd-network-gperf.gperf | 1 +
>  src/network/networkd-network.c           | 1 +
>  src/network/networkd.h                   | 1 +
>  5 files changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/man/systemd.network.xml b/man/systemd.network.xml
> index 641e02a..4cc13b2 100644
> --- a/man/systemd.network.xml
> +++ b/man/systemd.network.xml
> @@ -494,6 +494,12 @@
>                                                  hand, this must not be enabled on networks where broadcasts are filtered out.</para>
>                                          </listitem>
>                                  </varlistentry>
> +                                <varlistentry>
> +                                        <term><varname>RouteMetric=</varname></term>
> +                                        <listitem>
> +                                                <para>Set the routing metric for routes specified by the DHCP server.</para>
> +                                        </listitem>
> +                                </varlistentry>
>                         </variablelist>
>
>          </refsect1>
> diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
> index 5e4ff2b..6f635a3 100644
> --- a/src/network/networkd-dhcp4.c
> +++ b/src/network/networkd-dhcp4.c
> @@ -93,7 +93,7 @@ static int link_set_dhcp_routes(Link *link) {
>                  route_gw->dst_addr.in = gateway;
>                  route_gw->dst_prefixlen = 32;
>                  route_gw->scope = RT_SCOPE_LINK;
> -                route_gw->metrics = DHCP_ROUTE_METRIC;
> +                route_gw->metrics = link->network->dhcp_route_metric;
>
>                  r = route_configure(route_gw, link, &dhcp4_route_handler);
>                  if (r < 0) {
> @@ -107,7 +107,7 @@ static int link_set_dhcp_routes(Link *link) {
>
>                  route->family = AF_INET;
>                  route->in_addr.in = gateway;
> -                route->metrics = DHCP_ROUTE_METRIC;
> +                route->metrics = link->network->dhcp_route_metric;
>
>                  r = route_configure(route, link, &dhcp4_route_handler);
>                  if (r < 0) {
> @@ -146,7 +146,7 @@ static int link_set_dhcp_routes(Link *link) {
>                  route->in_addr.in = static_routes[i].gw_addr;
>                  route->dst_addr.in = static_routes[i].dst_addr;
>                  route->dst_prefixlen = static_routes[i].dst_prefixlen;
> -                route->metrics = DHCP_ROUTE_METRIC;
> +                route->metrics = link->network->dhcp_route_metric;
>
>                  r = route_configure(route, link, &dhcp4_route_handler);
>                  if (r < 0) {
> diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf
> index c5b9614..a736461 100644
> --- a/src/network/networkd-network-gperf.gperf
> +++ b/src/network/networkd-network-gperf.gperf
> @@ -57,6 +57,7 @@ DHCP.SendHostname,           config_parse_bool,                  0,
>  DHCP.RequestBroadcast,       config_parse_bool,                  0,                             offsetof(Network, dhcp_broadcast)
>  DHCP.CriticalConnection,     config_parse_bool,                  0,                             offsetof(Network, dhcp_critical)
>  DHCP.VendorClassIdentifier,  config_parse_string,                0,                             offsetof(Network, dhcp_vendor_class_identifier)
> +DHCP.RouteMetric,            config_parse_unsigned,              0,                             offsetof(Network, dhcp_route_metric)
>  /* backwards compatibility: do not add new entries to this section */
>  DHCPv4.UseDNS,               config_parse_bool,                  0,                             offsetof(Network, dhcp_dns)
>  DHCPv4.UseMTU,               config_parse_bool,                  0,                             offsetof(Network, dhcp_mtu)
> diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
> index fc62395..a2e27e0 100644
> --- a/src/network/networkd-network.c
> +++ b/src/network/networkd-network.c
> @@ -85,6 +85,7 @@ static int network_load_one(Manager *manager, const char *filename) {
>          network->dhcp_hostname = true;
>          network->dhcp_routes = true;
>          network->dhcp_sendhost = true;
> +        network->dhcp_route_metric = DHCP_ROUTE_METRIC;
>
>          network->llmnr = LLMNR_SUPPORT_YES;
>
> diff --git a/src/network/networkd.h b/src/network/networkd.h
> index ab5df1a..6c1afcd 100644
> --- a/src/network/networkd.h
> +++ b/src/network/networkd.h
> @@ -100,6 +100,7 @@ struct Network {
>          bool dhcp_broadcast;
>          bool dhcp_critical;
>          bool dhcp_routes;
> +        unsigned dhcp_route_metric;
>          bool ipv4ll;
>          bool ipv4ll_route;
>
> --
> 2.1.0
>
> _______________________________________________
> systemd-devel mailing list
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel


More information about the systemd-devel mailing list