From 8b075fcdf224dc8ca4ef65cbd387be655bf0e19c Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 22 Jul 2011 16:12:44 -0500 Subject: [PATCH] core: move route deletion to nm-netlink-utils.c --- src/nm-netlink-utils.c | 19 +++++++++++++++++++ src/nm-netlink-utils.h | 4 ++++ src/nm-system.c | 27 ++++++++++----------------- src/vpn-manager/nm-vpn-connection.c | 3 ++- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/nm-netlink-utils.c b/src/nm-netlink-utils.c index a0e998315b..3e855b42df 100644 --- a/src/nm-netlink-utils.c +++ b/src/nm-netlink-utils.c @@ -117,3 +117,22 @@ nm_netlink_find_address (int ifindex, return info.found; } +/** + * nm_netlink_route_delete: + * @route: the route to delete + * + * Returns: %TRUE if the request was successful, %FALSE if it failed + **/ +gboolean +nm_netlink_route_delete (struct rtnl_route *route) +{ + struct nl_handle *nlh; + int err; + + g_return_val_if_fail (route != NULL, FALSE); + + nlh = nm_netlink_get_default_handle (); + err = rtnl_route_del (nlh, route, 0); + return err == 0 ? TRUE : FALSE; +} + diff --git a/src/nm-netlink-utils.h b/src/nm-netlink-utils.h index 0e74470b6a..b85b98ad62 100644 --- a/src/nm-netlink-utils.h +++ b/src/nm-netlink-utils.h @@ -22,10 +22,14 @@ #define NM_NETLINK_UTILS_H #include +#include +#include gboolean nm_netlink_find_address (int ifindex, int family, void *addr, /* struct in_addr or struct in6_addr */ int prefix_); +gboolean nm_netlink_route_delete (struct rtnl_route *route); + #endif /* NM_NETLINK_MONITOR_H */ diff --git a/src/nm-system.c b/src/nm-system.c index 144d0c4ee8..032990aad3 100644 --- a/src/nm-system.c +++ b/src/nm-system.c @@ -48,9 +48,7 @@ #include "nm-utils.h" #include "nm-logging.h" #include "nm-netlink-monitor.h" - -/* Because of a bug in libnl, rtnl.h should be included before route.h */ -#include +#include "nm-netlink-utils.h" #include #include @@ -170,7 +168,7 @@ nm_system_device_set_ip4_route (int ifindex, /* Try adding the route again */ err = rtnl_route_add (nlh, route, 0); if (err) - rtnl_route_del (nlh, route2, 0); + nm_netlink_route_delete (route2); } rtnl_route_put (route2); } @@ -564,7 +562,7 @@ nm_system_set_ip6_route (int ifindex, /* Try adding the route again */ err = rtnl_route_add (nlh, route, 0); if (err) - rtnl_route_del (nlh, route2, 0); + nm_netlink_route_delete (route2); } rtnl_route_put (route2); } @@ -1007,7 +1005,7 @@ nm_system_replace_default_ip4_route_vpn (int ifindex, /* Try adding the original route again */ err = replace_default_ip4_route (ifindex, int_gw, mss); if (err != 0) { - rtnl_route_del (nlh, gw_route, 0); + nm_netlink_route_delete (gw_route); nm_log_err (LOGD_DEVICE | LOGD_IP4, "(%s): failed to set IPv4 default route (pass #2): %d", iface, err); @@ -1057,7 +1055,7 @@ nm_system_replace_default_ip4_route (int ifindex, guint32 gw, guint32 mss) /* Try adding the original route again */ err = replace_default_ip4_route (ifindex, gw, mss); if (err != 0) { - rtnl_route_del (nlh, gw_route, 0); + nm_netlink_route_delete (gw_route); nm_log_err (LOGD_DEVICE | LOGD_IP4, "(%s): failed to set IPv4 default route (pass #2): %d", iface, err); @@ -1208,7 +1206,7 @@ nm_system_replace_default_ip6_route (int ifindex, const struct in6_addr *gw) /* Try adding the original route again */ err = replace_default_ip6_route (ifindex, gw); if (err != 0) { - rtnl_route_del (nlh, gw_route, 0); + nm_netlink_route_delete (gw_route); nm_log_err (LOGD_DEVICE | LOGD_IP6, "(%s): failed to set IPv6 default route (pass #2): %d", iface, err); @@ -1298,7 +1296,6 @@ check_one_route (struct nl_object *object, void *user_data) { RouteCheckData *data = (RouteCheckData *) user_data; struct rtnl_route *route = (struct rtnl_route *) object; - int err; guint32 log_level = LOGD_IP4 | LOGD_IP6; if (nm_logging_level_enabled (LOGL_DEBUG)) @@ -1337,12 +1334,8 @@ check_one_route (struct nl_object *object, void *user_data) log_level = LOGD_IP6; nm_log_dbg (log_level, " deleting route"); - err = rtnl_route_del (nm_netlink_get_default_handle (), route, 0); - if (err < 0 && (err != -ERANGE)) { - nm_log_err (LOGD_DEVICE, - "(%s): error %d returned from rtnl_route_del(): %s", - data->iface, err, nl_geterror ()); - } + if (!nm_netlink_route_delete (route)) + nm_log_err (LOGD_DEVICE, "(%s): failed to delete route", data->iface); } /** @@ -1443,9 +1436,9 @@ nm_system_device_set_priority (int ifindex, foreach_route (find_route, &info); if (info.route) { - nlh = nm_netlink_get_default_handle (); - rtnl_route_del (nlh, info.route, 0); + nm_netlink_route_delete (info.route); + nlh = nm_netlink_get_default_handle (); rtnl_route_set_prio (info.route, priority); rtnl_route_add (nlh, info.route, 0); rtnl_route_put (info.route); diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c index 3520f292d2..75ba645128 100644 --- a/src/vpn-manager/nm-vpn-connection.c +++ b/src/vpn-manager/nm-vpn-connection.c @@ -46,6 +46,7 @@ #include "NetworkManagerUtils.h" #include "nm-dns-manager.h" #include "nm-netlink-monitor.h" +#include "nm-netlink-utils.h" #include "nm-glib-compat.h" #include "settings/nm-settings-connection.h" @@ -974,7 +975,7 @@ vpn_cleanup (NMVPNConnection *connection) /* Remove any previously added VPN gateway host route */ if (priv->gw_route) - rtnl_route_del (nm_netlink_get_default_handle (), priv->gw_route, 0); + nm_netlink_route_delete (priv->gw_route); /* Reset routes and addresses of the currently active device */ parent_config = nm_device_get_ip4_config (priv->parent_dev);