chiark / gitweb /
networkd: allow specification of DHCP route metric
authorAngus Gibson <angus@agibson.me>
Mon, 8 Sep 2014 10:26:47 +0000 (20:26 +1000)
committerTom Gundersen <teg@jklm.no>
Mon, 8 Sep 2014 13:09:08 +0000 (15:09 +0200)
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
src/network/networkd-dhcp4.c
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd.h

index 641e02aab120258ab470dae289f463e9371575f2..4cc13b2afcbea6e1942866c43b8430e2a139d0da 100644 (file)
                                                 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>
index b87fa730826daba3650477c430495523ab09054d..e0b3acad1b8ede49512bc337519693dc89e032fd 100644 (file)
@@ -103,7 +103,7 @@ static int link_set_dhcp_routes(Link *link) {
                 route_gw->dst_prefixlen = 32;
                 route_gw->prefsrc_addr.in = address;
                 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) {
@@ -118,7 +118,7 @@ static int link_set_dhcp_routes(Link *link) {
                 route->family = AF_INET;
                 route->in_addr.in = gateway;
                 route->prefsrc_addr.in = address;
-                route->metrics = DHCP_ROUTE_METRIC;
+                route->metrics = link->network->dhcp_route_metric;
 
                 r = route_configure(route, link, &dhcp4_route_handler);
                 if (r < 0) {
@@ -157,7 +157,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) {
index c5b9614a2b5937848c14186f16b6aec279bbbdf2..a73646187ea3fa060fc6c21da1a1ed7225b262de 100644 (file)
@@ -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)
index fc62395217fd5032a8ae8f331514a4ae8b08c9e6..a2e27e09103e10b212519f8cb4857be5a9739200 100644 (file)
@@ -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;
 
index c6e6b22c383e04413fffed24031410c2695dc190..7c5459b6ac218b2c945d2189bc2eaf19294f2418 100644 (file)
@@ -100,6 +100,7 @@ struct Network {
         bool dhcp_broadcast;
         bool dhcp_critical;
         bool dhcp_routes;
+        unsigned dhcp_route_metric;
         bool ipv4ll;
         bool ipv4ll_route;