diff options
-rw-r--r-- | src/nm-default-route-manager.c | 4 | ||||
-rw-r--r-- | src/nm-route-manager.c | 10 | ||||
-rw-r--r-- | src/platform/nm-fake-platform.c | 25 | ||||
-rw-r--r-- | src/platform/nm-linux-platform.c | 74 | ||||
-rw-r--r-- | src/platform/nm-platform.c | 83 | ||||
-rw-r--r-- | src/platform/nm-platform.h | 37 | ||||
-rw-r--r-- | src/platform/tests/test-common.c | 4 | ||||
-rw-r--r-- | src/platform/tests/test-route.c | 4 | ||||
-rw-r--r-- | src/tests/test-route-manager.c | 2 |
9 files changed, 138 insertions, 105 deletions
diff --git a/src/nm-default-route-manager.c b/src/nm-default-route-manager.c index eeaf38fc4e..d80d39450f 100644 --- a/src/nm-default-route-manager.c +++ b/src/nm-default-route-manager.c @@ -304,7 +304,7 @@ _platform_route_sync_add (const VTableIP *vtable, NMDefaultRouteManager *self, g rt.plen = 0; rt.metric = entry->effective_metric; - success = nm_platform_ip4_route_add (priv->platform, &rt); + success = nm_platform_ip4_route_add (priv->platform, NMP_NLM_FLAG_REPLACE, &rt); } else { NMPlatformIP6Route rt = entry->route.r6; @@ -312,7 +312,7 @@ _platform_route_sync_add (const VTableIP *vtable, NMDefaultRouteManager *self, g rt.plen = 0; rt.metric = entry->effective_metric; - success = nm_platform_ip6_route_add (priv->platform, &rt); + success = nm_platform_ip6_route_add (priv->platform, NMP_NLM_FLAG_REPLACE, &rt); } if (!success) { _LOGW (vtable->vt->addr_family, "failed to add default route %s with effective metric %u", diff --git a/src/nm-route-manager.c b/src/nm-route-manager.c index 07947d790c..ebd0594fb5 100644 --- a/src/nm-route-manager.c +++ b/src/nm-route-manager.c @@ -896,15 +896,16 @@ next: gateway_routes = g_array_new (FALSE, FALSE, sizeof (guint)); g_array_append_val (gateway_routes, i_ipx_routes); } else - vtable->vt->route_add (priv->platform, 0, cur_ipx_route, *p_effective_metric); + vtable->vt->route_add (priv->platform, NMP_NLM_FLAG_REPLACE, + cur_ipx_route, 0, *p_effective_metric); } if (gateway_routes) { for (i = 0; i < gateway_routes->len; i++) { i_ipx_routes = g_array_index (gateway_routes, guint, i); - vtable->vt->route_add (priv->platform, 0, + vtable->vt->route_add (priv->platform, NMP_NLM_FLAG_REPLACE, ipx_routes->index->entries[i_ipx_routes], - effective_metrics[i_ipx_routes]); + 0, effective_metrics[i_ipx_routes]); } g_array_unref (gateway_routes); } @@ -953,7 +954,8 @@ next: || route_dest_cmp_result != 0 || !_route_equals_ignoring_ifindex (vtable, cur_plat_route, cur_ipx_route, *p_effective_metric)) { - if (!vtable->vt->route_add (priv->platform, ifindex, cur_ipx_route, *p_effective_metric)) { + if (!vtable->vt->route_add (priv->platform, NMP_NLM_FLAG_REPLACE, + cur_ipx_route, ifindex, *p_effective_metric)) { if (cur_ipx_route->rx.rt_source < NM_IP_CONFIG_SOURCE_USER) { _LOGD (vtable->vt->addr_family, "ignore error adding IPv%c route to kernel: %s", diff --git a/src/platform/nm-fake-platform.c b/src/platform/nm-fake-platform.c index f817bfb571..338b022e79 100644 --- a/src/platform/nm-fake-platform.c +++ b/src/platform/nm-fake-platform.c @@ -1192,7 +1192,10 @@ ip_route_delete (NMPlatform *platform, const NMPObject *obj) } static gboolean -ipx_route_add (NMPlatform *platform, int addr_family, const NMPlatformObject *route) +ip_route_add (NMPlatform *platform, + NMPNlmFlags flags, + int addr_family, + const NMPlatformIPRoute *route) { NMDedupMultiIter iter; nm_auto_nmpobj NMPObject *obj = NULL; @@ -1208,10 +1211,13 @@ ipx_route_add (NMPlatform *platform, int addr_family, const NMPlatformObject *ro g_assert (NM_IN_SET (addr_family, AF_INET, AF_INET6)); + /* currently, only replace is implemented. */ + g_assert (flags == NMP_NLM_FLAG_REPLACE); + obj = nmp_object_new (addr_family == AF_INET ? NMP_OBJECT_TYPE_IP4_ROUTE : NMP_OBJECT_TYPE_IP6_ROUTE, - route); + (const NMPlatformObject *) route); rt = &obj->ip_route; rt->rt_source = nmp_utils_ip_config_source_round_trip_rtprot (rt->rt_source); @@ -1274,18 +1280,6 @@ ipx_route_add (NMPlatform *platform, int addr_family, const NMPlatformObject *ro return TRUE; } -static gboolean -ip4_route_add (NMPlatform *platform, const NMPlatformIP4Route *route) -{ - return ipx_route_add (platform, AF_INET, (const NMPlatformObject *) route); -} - -static gboolean -ip6_route_add (NMPlatform *platform, const NMPlatformIP6Route *route) -{ - return ipx_route_add (platform, AF_INET6, (const NMPlatformObject *) route); -} - /*****************************************************************************/ static void @@ -1396,7 +1390,6 @@ nm_fake_platform_class_init (NMFakePlatformClass *klass) platform_class->ip4_address_delete = ip4_address_delete; platform_class->ip6_address_delete = ip6_address_delete; - platform_class->ip4_route_add = ip4_route_add; - platform_class->ip6_route_add = ip6_route_add; + platform_class->ip_route_add = ip_route_add; platform_class->ip_route_delete = ip_route_delete; } diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c index 3722c90319..42a77c5066 100644 --- a/src/platform/nm-linux-platform.c +++ b/src/platform/nm-linux-platform.c @@ -2430,7 +2430,7 @@ ip_route_get_lock_flag (const NMPlatformIPRoute *route) /* Copied and modified from libnl3's build_route_msg() and rtnl_route_build_msg(). */ static struct nl_msg * _nl_msg_new_route (int nlmsg_type, - int nlmsg_flags, + NMPNlmFlags nlmsgflags, const NMPObject *obj) { struct nl_msg *msg; @@ -2460,7 +2460,8 @@ _nl_msg_new_route (int nlmsg_type, nm_assert (NM_IN_SET (NMP_OBJECT_GET_TYPE (obj), NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE)); nm_assert (NM_IN_SET (nlmsg_type, RTM_NEWROUTE, RTM_DELROUTE)); - msg = nlmsg_alloc_simple (nlmsg_type, nlmsg_flags); + nm_assert (((NMPNlmFlags) ((int) nlmsgflags)) == nlmsgflags); + msg = nlmsg_alloc_simple (nlmsg_type, (int) nlmsgflags); if (!msg) g_return_val_if_reached (NULL); @@ -5699,41 +5700,39 @@ ip6_address_delete (NMPlatform *platform, int ifindex, struct in6_addr addr, gui /*****************************************************************************/ static gboolean -ip4_route_add (NMPlatform *platform, const NMPlatformIP4Route *route) +ip_route_add (NMPlatform *platform, + NMPNlmFlags flags, + int addr_family, + const NMPlatformIPRoute *route) { - NMPObject obj; - NMPlatformIP4Route *r; nm_auto_nlmsg struct nl_msg *nlmsg = NULL; - - nmp_object_stackinit (&obj, NMP_OBJECT_TYPE_IP4_ROUTE, (const NMPlatformObject *) route); - r = NMP_OBJECT_CAST_IP4_ROUTE (&obj); - r->network = nm_utils_ip4_address_clear_host_address (r->network, r->plen); - r->rt_source = nmp_utils_ip_config_source_round_trip_rtprot (r->rt_source), - r->scope_inv = nm_platform_route_scope_inv (!r->gateway - ? RT_SCOPE_LINK : RT_SCOPE_UNIVERSE); - - nlmsg = _nl_msg_new_route (RTM_NEWROUTE, - NLM_F_CREATE | NLM_F_REPLACE, - &obj); - return do_add_addrroute (platform, &obj, nlmsg); -} - -static gboolean -ip6_route_add (NMPlatform *platform, const NMPlatformIP6Route *route) -{ NMPObject obj; - NMPlatformIP6Route *r; - nm_auto_nlmsg struct nl_msg *nlmsg = NULL; - - nmp_object_stackinit (&obj, NMP_OBJECT_TYPE_IP6_ROUTE, (const NMPlatformObject *) route); - r = NMP_OBJECT_CAST_IP6_ROUTE (&obj); - nm_utils_ip6_address_clear_host_address (&r->network, &r->network, r->plen); - r->rt_source = nmp_utils_ip_config_source_round_trip_rtprot (r->rt_source), - nm_utils_ip6_address_clear_host_address (&r->src, &r->src, r->src_plen); + NMPlatformIP4Route *r4; + NMPlatformIP6Route *r6; + + switch (addr_family) { + case AF_INET: + nmp_object_stackinit (&obj, NMP_OBJECT_TYPE_IP4_ROUTE, (const NMPlatformObject *) route); + r4 = NMP_OBJECT_CAST_IP4_ROUTE (&obj); + r4->network = nm_utils_ip4_address_clear_host_address (r4->network, r4->plen); + r4->rt_source = nmp_utils_ip_config_source_round_trip_rtprot (r4->rt_source), + r4->scope_inv = nm_platform_route_scope_inv (!r4->gateway + ? RT_SCOPE_LINK : RT_SCOPE_UNIVERSE); + break; + case AF_INET6: + nmp_object_stackinit (&obj, NMP_OBJECT_TYPE_IP6_ROUTE, (const NMPlatformObject *) route); + r6 = NMP_OBJECT_CAST_IP6_ROUTE (&obj); + nm_utils_ip6_address_clear_host_address (&r6->network, &r6->network, r6->plen); + r6->rt_source = nmp_utils_ip_config_source_round_trip_rtprot (r6->rt_source), + nm_utils_ip6_address_clear_host_address (&r6->src, &r6->src, r6->src_plen); + break; + default: + nm_assert_not_reached (); + } - nlmsg = _nl_msg_new_route (RTM_NEWROUTE, - NLM_F_CREATE | NLM_F_REPLACE, - &obj); + nlmsg = _nl_msg_new_route (RTM_NEWROUTE, flags, &obj); + if (!nlmsg) + g_return_val_if_reached (FALSE); return do_add_addrroute (platform, &obj, nlmsg); } @@ -5781,11 +5780,9 @@ ip_route_delete (NMPlatform *platform, } } - nlmsg = _nl_msg_new_route (RTM_DELROUTE, - 0, - obj); + nlmsg = _nl_msg_new_route (RTM_DELROUTE, 0, obj); if (!nlmsg) - return FALSE; + g_return_val_if_reached (FALSE); return do_delete_object (platform, obj, nlmsg); } @@ -6516,8 +6513,7 @@ nm_linux_platform_class_init (NMLinuxPlatformClass *klass) platform_class->ip4_address_delete = ip4_address_delete; platform_class->ip6_address_delete = ip6_address_delete; - platform_class->ip4_route_add = ip4_route_add; - platform_class->ip6_route_add = ip6_route_add; + platform_class->ip_route_add = ip_route_add; platform_class->ip_route_delete = ip_route_delete; platform_class->check_support_kernel_extended_ifa_flags = check_support_kernel_extended_ifa_flags; diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index 0386981eba..03dc6943b6 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -3409,53 +3409,60 @@ nm_platform_address_flush (NMPlatform *self, int ifindex) /*****************************************************************************/ -/** - * nm_platform_ip4_route_add: - * @self: - * @route: - * - * For kernel, a gateway can be either explicitly set or left - * at zero (0.0.0.0). In addition, there is the scope of the IPv4 - * route. - * When adding a route with - * $ ip route add default dev $IFNAME - * the resulting route will have gateway 0.0.0.0 and scope "link". - * Contrary to - * $ ip route add default via 0.0.0.0 dev $IFNAME - * which adds the route with scope "global". - * - * NetworkManager's Platform can currently only add on-link-routes with scope - * "link" (and gateway 0.0.0.0) or gateway-routes with scope "global" (and - * gateway not 0.0.0.0). - * - * It does not support adding globally scoped routes via 0.0.0.0. - * - * Returns: %TRUE in case of success. - */ +NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_nmp_nlm_flag_to_string_lookup, NMPNlmFlags, + NM_UTILS_LOOKUP_DEFAULT (NULL), + NM_UTILS_LOOKUP_ITEM (NMP_NLM_FLAG_ADD, "add"), + NM_UTILS_LOOKUP_ITEM (NMP_NLM_FLAG_CHANGE, "change"), + NM_UTILS_LOOKUP_ITEM (NMP_NLM_FLAG_REPLACE, "replace"), + NM_UTILS_LOOKUP_ITEM (NMP_NLM_FLAG_PREPEND, "prepend"), + NM_UTILS_LOOKUP_ITEM (NMP_NLM_FLAG_APPEND, "append"), + NM_UTILS_LOOKUP_ITEM (NMP_NLM_FLAG_TEST, "test"), + NM_UTILS_LOOKUP_ITEM_IGNORE (NMP_NLM_FLAG_F_APPEND), +); + +#define _nmp_nlm_flag_to_string(flags) \ + ({ \ + NMPNlmFlags _flags = (flags); \ + \ + _nmp_nlm_flag_to_string_lookup (flags) ?: nm_sprintf_bufa (100, "new[0x%x]", (unsigned) _flags); \ + }) + gboolean -nm_platform_ip4_route_add (NMPlatform *self, const NMPlatformIP4Route *route) +nm_platform_ip4_route_add (NMPlatform *self, + NMPNlmFlags flags, + const NMPlatformIP4Route *route) { + char sbuf[sizeof (_nm_utils_to_string_buffer)]; + _CHECK_SELF (self, klass, FALSE); g_return_val_if_fail (route, FALSE); g_return_val_if_fail (route->plen <= 32, FALSE); - _LOGD ("route: adding or updating IPv4 route: %s", nm_platform_ip4_route_to_string (route, NULL, 0)); + _LOGD ("route: %-10s IPv4 route: %s", + _nmp_nlm_flag_to_string (flags), + nm_platform_ip4_route_to_string (route, sbuf, sizeof (sbuf))); - return klass->ip4_route_add (self, route); + return klass->ip_route_add (self, flags, AF_INET, (const NMPlatformIPRoute *) route); } gboolean -nm_platform_ip6_route_add (NMPlatform *self, const NMPlatformIP6Route *route) +nm_platform_ip6_route_add (NMPlatform *self, + NMPNlmFlags flags, + const NMPlatformIP6Route *route) { + char sbuf[sizeof (_nm_utils_to_string_buffer)]; + _CHECK_SELF (self, klass, FALSE); g_return_val_if_fail (route, FALSE); g_return_val_if_fail (route->plen <= 128, FALSE); - _LOGD ("route: adding or updating IPv6 route: %s", nm_platform_ip6_route_to_string (route, NULL, 0)); + _LOGD ("route: %-10s IPv6 route: %s", + _nmp_nlm_flag_to_string (flags), + nm_platform_ip6_route_to_string (route, sbuf, sizeof (sbuf))); - return klass->ip6_route_add (self, route); + return klass->ip_route_add (self, flags, AF_INET6, (const NMPlatformIPRoute *) route); } gboolean @@ -3467,7 +3474,7 @@ nm_platform_ip_route_delete (NMPlatform *self, nm_assert (NM_IN_SET (NMP_OBJECT_GET_TYPE (obj), NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE)); - _LOGD ("route: deleting IPv%c route %s", + _LOGD ("route: delete IPv%c route %s", NMP_OBJECT_GET_TYPE (obj) == NMP_OBJECT_TYPE_IP4_ROUTE ? '4' : '6', nmp_object_to_string (obj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); @@ -5177,7 +5184,11 @@ nm_platform_netns_push (NMPlatform *self, NMPNetns **netns) /*****************************************************************************/ static gboolean -_vtr_v4_route_add (NMPlatform *self, int ifindex, const NMPlatformIPXRoute *route, gint64 metric) +_vtr_v4_route_add (NMPlatform *self, + NMPNlmFlags flags, + const NMPlatformIPXRoute *route, + int ifindex, + gint64 metric) { NMPlatformIP4Route rt = route->r4; @@ -5186,11 +5197,15 @@ _vtr_v4_route_add (NMPlatform *self, int ifindex, const NMPlatformIPXRoute *rout if (metric >= 0) rt.metric = metric; - return nm_platform_ip4_route_add (self, &rt); + return nm_platform_ip4_route_add (self, flags, &rt); } static gboolean -_vtr_v6_route_add (NMPlatform *self, int ifindex, const NMPlatformIPXRoute *route, gint64 metric) +_vtr_v6_route_add (NMPlatform *self, + NMPNlmFlags flags, + const NMPlatformIPXRoute *route, + int ifindex, + gint64 metric) { NMPlatformIP6Route rt = route->r6; @@ -5199,7 +5214,7 @@ _vtr_v6_route_add (NMPlatform *self, int ifindex, const NMPlatformIPXRoute *rout if (metric >= 0) rt.metric = metric; - return nm_platform_ip6_route_add (self, &rt); + return nm_platform_ip6_route_add (self, flags, &rt); } static guint32 diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index 9f04d08917..a40d33f43d 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -74,6 +74,25 @@ struct udev_device; #define NM_GRE_KEY 0x2000 typedef enum { + /* use our own platform enum for the nlmsg-flags. Otherwise, we'd have + * to include <linux/netlink.h> */ + NMP_NLM_FLAG_F_REPLACE = 0x100, /* NLM_F_REPLACE, Override existing */ + NMP_NLM_FLAG_F_EXCL = 0x200, /* NLM_F_EXCL, Do not touch, if it exists */ + NMP_NLM_FLAG_F_CREATE = 0x400, /* NLM_F_CREATE, Create, if it does not exist */ + NMP_NLM_FLAG_F_APPEND = 0x800, /* NLM_F_APPEND, Add to end of list */ + + /* the following aliases correspond to iproute2's `ip route CMD` for + * RTM_NEWROUTE, with CMD being one of add, change, replace, prepend, + * append and test. */ + NMP_NLM_FLAG_ADD = NMP_NLM_FLAG_F_CREATE | NMP_NLM_FLAG_F_EXCL, + NMP_NLM_FLAG_CHANGE = NMP_NLM_FLAG_F_REPLACE, + NMP_NLM_FLAG_REPLACE = NMP_NLM_FLAG_F_CREATE | NMP_NLM_FLAG_F_REPLACE, + NMP_NLM_FLAG_PREPEND = NMP_NLM_FLAG_F_CREATE, + NMP_NLM_FLAG_APPEND = NMP_NLM_FLAG_F_CREATE | NMP_NLM_FLAG_F_APPEND, + NMP_NLM_FLAG_TEST = NMP_NLM_FLAG_F_EXCL, +} NMPNlmFlags; + +typedef enum { /* compare fields which kernel considers as similar routes. * It is a looser comparisong then NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID * and means that `ip route add` would fail to add two routes @@ -489,7 +508,11 @@ typedef struct { gsize sizeof_route; int (*route_cmp) (const NMPlatformIPXRoute *a, const NMPlatformIPXRoute *b, NMPlatformIPRouteCmpType cmp_type); const char *(*route_to_string) (const NMPlatformIPXRoute *route, char *buf, gsize len); - gboolean (*route_add) (NMPlatform *self, int ifindex, const NMPlatformIPXRoute *route, gint64 metric); + gboolean (*route_add) (NMPlatform *self, + NMPNlmFlags flags, + const NMPlatformIPXRoute *route, + int ifindex, + gint64 metric); guint32 (*metric_normalize) (guint32 metric); } NMPlatformVTableRoute; @@ -763,8 +786,10 @@ typedef struct { gboolean (*ip4_address_delete) (NMPlatform *, int ifindex, in_addr_t address, guint8 plen, in_addr_t peer_address); gboolean (*ip6_address_delete) (NMPlatform *, int ifindex, struct in6_addr address, guint8 plen); - gboolean (*ip4_route_add) (NMPlatform *, const NMPlatformIP4Route *route); - gboolean (*ip6_route_add) (NMPlatform *, const NMPlatformIP6Route *route); + gboolean (*ip_route_add) (NMPlatform *, + NMPNlmFlags flags, + int addr_family, + const NMPlatformIPRoute *route); gboolean (*ip_route_delete) (NMPlatform *, const NMPObject *obj); gboolean (*check_support_kernel_extended_ifa_flags) (NMPlatform *); @@ -1077,8 +1102,10 @@ gboolean nm_platform_address_flush (NMPlatform *self, int ifindex); const NMPlatformIP4Route *nm_platform_ip4_route_get (NMPlatform *self, int ifindex, in_addr_t network, guint8 plen, guint32 metric); const NMPlatformIP6Route *nm_platform_ip6_route_get (NMPlatform *self, int ifindex, struct in6_addr network, guint8 plen, guint32 metric); -gboolean nm_platform_ip4_route_add (NMPlatform *self, const NMPlatformIP4Route *route); -gboolean nm_platform_ip6_route_add (NMPlatform *self, const NMPlatformIP6Route *route); + +gboolean nm_platform_ip4_route_add (NMPlatform *self, NMPNlmFlags flags, const NMPlatformIP4Route *route); +gboolean nm_platform_ip6_route_add (NMPlatform *self, NMPNlmFlags flags, const NMPlatformIP6Route *route); + gboolean nm_platform_ip_route_delete (NMPlatform *self, const NMPObject *route); const char *nm_platform_link_to_string (const NMPlatformLink *link, char *buf, gsize len); diff --git a/src/platform/tests/test-common.c b/src/platform/tests/test-common.c index 51234cf17a..feef869f4f 100644 --- a/src/platform/tests/test-common.c +++ b/src/platform/tests/test-common.c @@ -903,7 +903,7 @@ void nmtstp_ip4_route_add (NMPlatform *platform, route.metric = metric; route.mss = mss; - g_assert (nm_platform_ip4_route_add (platform, &route)); + g_assert (nm_platform_ip4_route_add (platform, NMP_NLM_FLAG_REPLACE, &route)); } void nmtstp_ip6_route_add (NMPlatform *platform, @@ -927,7 +927,7 @@ void nmtstp_ip6_route_add (NMPlatform *platform, route.metric = metric; route.mss = mss; - g_assert (nm_platform_ip6_route_add (platform, &route)); + g_assert (nm_platform_ip6_route_add (platform, NMP_NLM_FLAG_REPLACE, &route)); } /*****************************************************************************/ diff --git a/src/platform/tests/test-route.c b/src/platform/tests/test-route.c index ac3aa80b8b..94be799bb5 100644 --- a/src/platform/tests/test-route.c +++ b/src/platform/tests/test-route.c @@ -432,7 +432,7 @@ test_ip4_route_options (void) route.mtu = 1350; route.lock_cwnd = TRUE; - g_assert (nm_platform_ip4_route_add (NM_PLATFORM_GET, &route)); + g_assert (nm_platform_ip4_route_add (NM_PLATFORM_GET, NMP_NLM_FLAG_REPLACE, &route)); /* Test route listing */ routes = nmtstp_ip4_route_get_all (NM_PLATFORM_GET, ifindex); @@ -532,7 +532,7 @@ test_ip6_route_options (gconstpointer test_data) _wait_for_ipv6_addr_non_tentative (NM_PLATFORM_GET, 400, IFINDEX, addr_n, addr_in6); for (i = 0; i < rts_n; i++) - g_assert (nm_platform_ip6_route_add (NM_PLATFORM_GET, &rts_add[i])); + g_assert (nm_platform_ip6_route_add (NM_PLATFORM_GET, NMP_NLM_FLAG_REPLACE, &rts_add[i])); routes = nmtstp_ip6_route_get_all (NM_PLATFORM_GET, IFINDEX); switch (TEST_IDX) { diff --git a/src/tests/test-route-manager.c b/src/tests/test-route-manager.c index e6b72ac87e..e7d0321a1e 100644 --- a/src/tests/test-route-manager.c +++ b/src/tests/test-route-manager.c @@ -857,7 +857,7 @@ test_ip4_full_sync (test_fixture *fixture, gconstpointer user_data) _assert_route_check (vtable, TRUE, (const NMPlatformIPXRoute *) &r02); _assert_route_check (vtable, FALSE, (const NMPlatformIPXRoute *) &r03); - vtable->route_add (NM_PLATFORM_GET, 0, (const NMPlatformIPXRoute *) &r03, -1); + vtable->route_add (NM_PLATFORM_GET, NMP_NLM_FLAG_REPLACE, (const NMPlatformIPXRoute *) &r03, 0, -1); _assert_route_check (vtable, TRUE, (const NMPlatformIPXRoute *) &r01); _assert_route_check (vtable, TRUE, (const NMPlatformIPXRoute *) &r02); |