[PATCH] route_obj: don't add empty destination to nlmsg

David Lamparter equinox at diac24.net
Tue Sep 28 09:09:48 EDT 2010


don't try to give the kernel an empty RTA_DST attribute. this would
previously happening on trying to delete the default route as returned
from the kernel. the kernel doesn't add a RTA_DST atttribute, so libnl
does nl_addr_alloc(0) and inserts a zero-length RTA_DST attribute into
the deletion request, which the kernel then refuses with ERANGE.

Signed-off-by: David Lamparter <equinox at diac24.net>
---
 lib/route/route_obj.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/lib/route/route_obj.c b/lib/route/route_obj.c
index 4e14d6d..7f26bfd 100644
--- a/lib/route/route_obj.c
+++ b/lib/route/route_obj.c
@@ -1108,7 +1108,8 @@ int rtnl_route_build_msg(struct nl_msg *msg, struct rtnl_route *route)
 	 * required to allow more than 256 tables. */
 	NLA_PUT_U32(msg, RTA_TABLE, route->rt_table);
 
-	NLA_PUT_ADDR(msg, RTA_DST, route->rt_dst);
+	if (nl_addr_get_len(route->rt_dst))
+		NLA_PUT_ADDR(msg, RTA_DST, route->rt_dst);
 	NLA_PUT_U32(msg, RTA_PRIORITY, route->rt_prio);
 
 	if (route->ce_mask & ROUTE_ATTR_SRC)
-- 
1.7.0.4




More information about the libnl mailing list