summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2015-01-06 12:37:53 +0100
committerLubomir Rintel <lkundrak@v3.sk>2015-01-21 15:00:26 +0100
commit661e3350fd9a1e569bb8102a7ed479323bd33392 (patch)
treeae60fca2a8e817eb628bc68fa6e87544f1de0c22
parenta478e01f41e8d95ae41244032358885da2eaf68e (diff)
downloadNetworkManager-661e3350fd9a1e569bb8102a7ed479323bd33392.tar.gz
fake-platform: don't return null routes in place of deleted ones
-rw-r--r--src/platform/nm-fake-platform.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/src/platform/nm-fake-platform.c b/src/platform/nm-fake-platform.c
index b4bad844f0..2162f43e7a 100644
--- a/src/platform/nm-fake-platform.c
+++ b/src/platform/nm-fake-platform.c
@@ -1177,12 +1177,21 @@ ip6_route_get (NMPlatform *platform, int ifindex, struct in6_addr network, int p
static gboolean
ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen, guint32 metric)
{
- NMPlatformIP4Route *route = ip4_route_get (platform, ifindex, network, plen, metric);
- NMPlatformIP4Route deleted_route;
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ int i;
+
+ for (i = 0; i < priv->ip4_routes->len; i++) {
+ NMPlatformIP4Route *route = &g_array_index (priv->ip4_routes, NMPlatformIP4Route, i);
+ NMPlatformIP4Route deleted_route;
+
+ if ( route->ifindex != ifindex
+ || route->network != network
+ || route->plen != plen
+ || route->metric != metric)
+ continue;
- if (route) {
memcpy (&deleted_route, route, sizeof (deleted_route));
- memset (route, 0, sizeof (*route));
+ g_array_remove_index (priv->ip4_routes, i);
g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, ifindex, &deleted_route, NM_PLATFORM_SIGNAL_REMOVED, NM_PLATFORM_REASON_INTERNAL);
}
@@ -1192,12 +1201,21 @@ ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen
static gboolean
ip6_route_delete (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, guint32 metric)
{
- NMPlatformIP6Route *route = ip6_route_get (platform, ifindex, network, plen, metric);
- NMPlatformIP6Route deleted_route;
+ NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
+ int i;
+
+ for (i = 0; i < priv->ip6_routes->len; i++) {
+ NMPlatformIP6Route *route = &g_array_index (priv->ip6_routes, NMPlatformIP6Route, i);
+ NMPlatformIP6Route deleted_route;
+
+ if ( route->ifindex != ifindex
+ || !IN6_ARE_ADDR_EQUAL (&route->network, &network)
+ || route->plen != plen
+ || route->metric != metric)
+ continue;
- if (route) {
memcpy (&deleted_route, route, sizeof (deleted_route));
- memset (route, 0, sizeof (*route));
+ g_array_remove_index (priv->ip6_routes, i);
g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, ifindex, &deleted_route, NM_PLATFORM_SIGNAL_REMOVED, NM_PLATFORM_REASON_INTERNAL);
}