core: move route deletion to nm-netlink-utils.c

This commit is contained in:
Dan Williams 2011-07-22 16:12:44 -05:00
parent 3a86b5ae34
commit 8b075fcdf2
4 changed files with 35 additions and 18 deletions

View file

@ -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;
}

View file

@ -22,10 +22,14 @@
#define NM_NETLINK_UTILS_H
#include <glib.h>
#include <netlink/route/rtnl.h>
#include <netlink/route/route.h>
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 */

View file

@ -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 <netlink/route/rtnl.h>
#include "nm-netlink-utils.h"
#include <netlink/route/addr.h>
#include <netlink/route/route.h>
@ -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);

View file

@ -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);