mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-25 00:10:07 +01:00
core: move route deletion to nm-netlink-utils.c
This commit is contained in:
parent
3a86b5ae34
commit
8b075fcdf2
4 changed files with 35 additions and 18 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue