networkd: make metric of routes configurable

Now route metric can be configuted via conf file:

example conf:

[Match]
Name=em1

[Route]
Gateway=192.168.1.12
Metric=10

Test:
ip route output
default via 192.168.1.12 dev em1 metric 10

[tomegun: squash TODO update and reword man page a bit]
This commit is contained in:
Susant Sahani 2014-07-10 23:09:58 +05:30 committed by Tom Gundersen
parent 5bdd314cd9
commit 5d8e593dce
5 changed files with 46 additions and 2 deletions

1
TODO
View File

@ -624,7 +624,6 @@ Features:
- properly handle routerless dhcp leases
- default to DHCP unicast, but make broadcast opt-in. detect devices that needs broadcast and opt-in automatically (needs kernel patch?)
- add more attribute support for SIT tunnel
- make metric of routes configurable
- work with non-ethernet devices
- add support for more bond options

View File

@ -389,6 +389,12 @@
prefixlength. If ommitted, a full-length host route is assumed.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Metric=</varname></term>
<listitem>
<para>The metric of the route. An unsigned integer</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>

View File

@ -43,7 +43,7 @@ Address.Peer, config_parse_address, 0,
Address.Broadcast, config_parse_broadcast, 0, 0
Address.Label, config_parse_label, 0, 0
Route.Gateway, config_parse_gateway, 0, 0
Route.Destination, config_parse_destination, 0, 0
Route.Metric, config_parse_route_priority, 0, 0
DHCP.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp_dns)
DHCP.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_mtu)
DHCP.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_hostname)

View File

@ -360,3 +360,39 @@ int config_parse_destination(const char *unit,
return 0;
}
int config_parse_route_priority(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;
_cleanup_free_ char *route = NULL;
int r;
assert(filename);
assert(section);
assert(lvalue);
assert(rvalue);
assert(data);
r = route_new_static(network, section_line, &n);
if (r < 0)
return r;
r = config_parse_unsigned(unit, filename, line, section,
section_line, lvalue, ltype,
rvalue, &n->metrics, userdata);
if (r < 0)
return r;
n = NULL;
return 0;
}

View File

@ -467,6 +467,9 @@ int config_parse_destination(const char *unit, const char *filename, unsigned li
const char *section, unsigned section_line, const char *lvalue,
int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_route_priority(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);
/* Address */
int address_new_static(Network *network, unsigned section, Address **ret);
int address_new_dynamic(Address **ret);