diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2015-01-06 12:37:53 +0100 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2015-01-21 15:00:26 +0100 |
commit | 661e3350fd9a1e569bb8102a7ed479323bd33392 (patch) | |
tree | ae60fca2a8e817eb628bc68fa6e87544f1de0c22 | |
parent | a478e01f41e8d95ae41244032358885da2eaf68e (diff) | |
download | NetworkManager-661e3350fd9a1e569bb8102a7ed479323bd33392.tar.gz |
fake-platform: don't return null routes in place of deleted ones
-rw-r--r-- | src/platform/nm-fake-platform.c | 34 |
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); } |