From 31b83a676bca0c0da58195aefb6dd2f618cdac17 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 8 Aug 2009 21:11:58 -0700 Subject: [PATCH] Fix issue with gateway notification for non default routes --- src/rtnl.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/rtnl.c b/src/rtnl.c index c6fd27e..785a1de 100644 --- a/src/rtnl.c +++ b/src/rtnl.c @@ -425,32 +425,38 @@ static void process_delroute(unsigned char family, unsigned char scope, static void process_newgateway(struct rtmsg *msg, int bytes) { GSList *list; - struct in_addr addr; + struct in_addr dst = { INADDR_ANY }, gateway = { INADDR_ANY }; int index = -1; - extract_route(msg, bytes, &index, NULL, &addr); + extract_route(msg, bytes, &index, &dst, &gateway); + + if (dst.s_addr != INADDR_ANY) + return; for (list = rtnl_list; list; list = list->next) { struct connman_rtnl *rtnl = list->data; if (rtnl->newgateway) - rtnl->newgateway(index, inet_ntoa(addr)); + rtnl->newgateway(index, inet_ntoa(gateway)); } } static void process_delgateway(struct rtmsg *msg, int bytes) { GSList *list; - struct in_addr addr; + struct in_addr dst = { INADDR_ANY }, gateway = { INADDR_ANY }; int index = -1; - extract_route(msg, bytes, &index, NULL, &addr); + extract_route(msg, bytes, &index, &dst, &gateway); + + if (dst.s_addr != INADDR_ANY) + return; for (list = rtnl_list; list; list = list->next) { struct connman_rtnl *rtnl = list->data; if (rtnl->delgateway) - rtnl->delgateway(index, inet_ntoa(addr)); + rtnl->delgateway(index, inet_ntoa(gateway)); } } -- 2.7.4