diff options
author | Tom Gundersen <teg@jklm.no> | 2013-12-07 23:03:19 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2013-12-17 09:24:57 +0100 |
commit | ae4c67a7c6bb4efb858822838efe81008c965a98 (patch) | |
tree | 790634281d976affd7572fbcfb8b3b107dc98618 /src | |
parent | b0d27a25089e3aa7d9222497005a1d9fff71e59d (diff) |
networkd: add support for Route sections
Diffstat (limited to 'src')
-rw-r--r-- | src/network/networkd-gperf.gperf | 2 | ||||
-rw-r--r-- | src/network/networkd-route.c | 47 |
2 files changed, 32 insertions, 17 deletions
diff --git a/src/network/networkd-gperf.gperf b/src/network/networkd-gperf.gperf index 385f1bb856..f710df6bf6 100644 --- a/src/network/networkd-gperf.gperf +++ b/src/network/networkd-gperf.gperf @@ -26,5 +26,7 @@ Network.Address, config_parse_address, 0, 0 Network.Gateway, config_parse_gateway, 0, 0 Address.Address, config_parse_address, 0, 0 Address.Label, config_parse_label, 0, 0 +Route.Gateway, config_parse_gateway, 0, 0 +Route.Destination, config_parse_destination, 0, 0 Bridge.Description, config_parse_string, 0, offsetof(Bridge, description) Bridge.Name, config_parse_ifname, 0, offsetof(Bridge, name) diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 22604b3afb..3eaefa2cc7 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -110,12 +110,12 @@ int route_configure(Route *route, Link *link, log_error("Could not append RTA_DST attribute: %s", strerror(-r)); return r; } - } - r = sd_rtnl_message_route_set_dst_prefixlen(req, route->dst_prefixlen); - if (r < 0) { - log_error("Could not set destination prefix length: %s", strerror(-r)); - return r; + r = sd_rtnl_message_route_set_dst_prefixlen(req, route->dst_prefixlen); + if (r < 0) { + log_error("Could not set destination prefix length: %s", strerror(-r)); + return r; + } } r = sd_rtnl_message_append_u32(req, RTA_OIF, link->ifindex); @@ -204,20 +204,9 @@ int config_parse_destination(const char *unit, /* Destination=address/prefixlen */ - /* prefixlen */ + /* address */ e = strchr(rvalue, '/'); if (e) { - unsigned i; - r = safe_atou(e + 1, &i); - if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "Route destination prefix length is invalid, " - "ignoring assignment: %s", e + 1); - return 0; - } - - n->dst_prefixlen = (unsigned char) i; - address = strndup(rvalue, e - rvalue); if (!address) return log_oom(); @@ -234,6 +223,30 @@ int config_parse_destination(const char *unit, return 0; } + /* prefixlen */ + if (e) { + unsigned i; + + r = safe_atou(e + 1, &i); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, EINVAL, + "Route destination prefix length is invalid, " + "ignoring assignment: %s", e + 1); + return 0; + } + + n->dst_prefixlen = (unsigned char) i; + } else { + switch (n->family) { + case AF_INET: + n->dst_prefixlen = 32; + break; + case AF_INET6: + n->dst_prefixlen = 128; + break; + } + } + n = NULL; return 0; |