X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-route.c;h=3eaefa2cc741ffa42e84da99acdd2065d2be1613;hb=ae4c67a7c6bb4efb858822838efe81008c965a98;hp=22604b3afbcefc9818b6997745cdac8e65ab9946;hpb=0a0dc69b655cfb10cab39133f5d521e7b35ce3d5;p=elogind.git diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 22604b3af..3eaefa2cc 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;