From: Thomas Haller Date: Thu, 13 Feb 2014 20:31:37 +0000 (+0100) Subject: route: rtnl_route_build_msg() should not overwrite the route scope X-Git-Tag: libnl3_2_25rc1~61 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=85ec9c7ad80c60f4f619472f2bb9d9595da93b26;p=libnl route: rtnl_route_build_msg() should not overwrite the route scope rtnl_route_build_msg() should allow the user to set the route scope explicitly to RT_SCOPE_NOWHERE. This is useful for IPv4 routes, because when deleting a route, the kernel requires the scope to match, unless the scope is set to RT_SCOPE_NOWHERE. Thus by setting the scope to RT_SCOPE_NOWHERE, the user can delete a route, even without knowing its scope. rtnl_route_build_msg() should only try to guess the scope, if it was not explicitly specified. Signed-off-by: Thomas Haller Acked-by: Thomas Graf --- diff --git a/lib/route/route_obj.c b/lib/route/route_obj.c index f2de523..dd4bf49 100644 --- a/lib/route/route_obj.c +++ b/lib/route/route_obj.c @@ -1198,7 +1198,7 @@ int rtnl_route_build_msg(struct nl_msg *msg, struct rtnl_route *route) if (route->rt_src) rtmsg.rtm_src_len = nl_addr_get_prefixlen(route->rt_src); - if (rtmsg.rtm_scope == RT_SCOPE_NOWHERE) + if (!(route->ce_mask & ROUTE_ATTR_SCOPE)) rtmsg.rtm_scope = rtnl_route_guess_scope(route); if (rtnl_route_get_nnexthops(route) == 1) {