diff --git a/src/core/NetworkManagerUtils.c b/src/core/NetworkManagerUtils.c
index b7dd104b45..5727aac814 100644
--- a/src/core/NetworkManagerUtils.c
+++ b/src/core/NetworkManagerUtils.c
@@ -1352,8 +1352,13 @@ nm_utils_ip_route_attribute_to_platform(int addr_family,
int type;
type = nm_net_aux_rtnl_rtntype_a2n(g_variant_get_string(variant, NULL));
- nm_assert(
- NM_IN_SET(type, RTN_UNICAST, RTN_LOCAL, RTN_BLACKHOLE, RTN_UNREACHABLE, RTN_PROHIBIT));
+ nm_assert(NM_IN_SET(type,
+ RTN_UNICAST,
+ RTN_LOCAL,
+ RTN_BLACKHOLE,
+ RTN_UNREACHABLE,
+ RTN_PROHIBIT,
+ RTN_THROW));
r->type_coerced = nm_platform_route_type_coerce(type);
} else
diff --git a/src/core/platform/tests/test-platform-general.c b/src/core/platform/tests/test-platform-general.c
index 6d156d2a87..42e05dadfe 100644
--- a/src/core/platform/tests/test-platform-general.c
+++ b/src/core/platform/tests/test-platform-general.c
@@ -762,6 +762,7 @@ test_route_type_is_nodev(void)
case RTN_BLACKHOLE:
case RTN_UNREACHABLE:
case RTN_PROHIBIT:
+ case RTN_THROW:
is_nodev = TRUE;
break;
default:
diff --git a/src/core/platform/tests/test-route.c b/src/core/platform/tests/test-route.c
index cf0236e0e6..e39b17e2cb 100644
--- a/src/core/platform/tests/test-route.c
+++ b/src/core/platform/tests/test-route.c
@@ -1899,14 +1899,17 @@ test_blackhole(gconstpointer test_data)
NMPlatformIPXRoute rr = {};
int r = -1;
int i;
+ guint8 rtn_type;
+
+ rtn_type = nmtst_rand_select(RTN_BLACKHOLE, RTN_UNREACHABLE, RTN_PROHIBIT, RTN_THROW);
if (IS_IPv4) {
rr.r4 = (const NMPlatformIP4Route){
- .type_coerced = nmtst_rand_select(RTN_BLACKHOLE, RTN_UNREACHABLE, RTN_PROHIBIT),
+ .type_coerced = nm_platform_route_type_coerce(rtn_type),
};
} else {
rr.r6 = (const NMPlatformIP6Route){
- .type_coerced = nmtst_rand_select(RTN_BLACKHOLE, RTN_UNREACHABLE, RTN_PROHIBIT),
+ .type_coerced = nm_platform_route_type_coerce(rtn_type),
.metric = 1000,
};
}
diff --git a/src/libnm-core-impl/nm-setting-ip-config.c b/src/libnm-core-impl/nm-setting-ip-config.c
index 46824819dd..cffd5b19ff 100644
--- a/src/libnm-core-impl/nm-setting-ip-config.c
+++ b/src/libnm-core-impl/nm-setting-ip-config.c
@@ -1390,7 +1390,8 @@ _ip_route_attribute_validate(const char *name,
RTN_LOCAL,
RTN_BLACKHOLE,
RTN_UNREACHABLE,
- RTN_PROHIBIT)) {
+ RTN_PROHIBIT,
+ RTN_THROW)) {
g_set_error(error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_INVALID_PROPERTY,
@@ -1494,6 +1495,7 @@ _nm_ip_route_attribute_validate_all(const NMIPRoute *route, GError **error)
case RTN_BLACKHOLE:
case RTN_UNREACHABLE:
case RTN_PROHIBIT:
+ case RTN_THROW:
if (route->next_hop) {
g_set_error(error,
NM_CONNECTION_ERROR,
diff --git a/src/libnm-core-impl/nm-setting-ip4-config.c b/src/libnm-core-impl/nm-setting-ip4-config.c
index 5b06739c11..bf5551684b 100644
--- a/src/libnm-core-impl/nm-setting-ip4-config.c
+++ b/src/libnm-core-impl/nm-setting-ip4-config.c
@@ -1006,7 +1006,8 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass)
*
*
* "type" - one of unicast, local, blackhole,
- * unavailable, prohibit. The default is unicast.
+ * unavailable, prohibit, throw.
+ * The default is unicast.
*
*
* "window" - an unsigned 32 bit integer.
diff --git a/src/libnm-core-impl/nm-setting-ip6-config.c b/src/libnm-core-impl/nm-setting-ip6-config.c
index f4623b2819..01956c3bb1 100644
--- a/src/libnm-core-impl/nm-setting-ip6-config.c
+++ b/src/libnm-core-impl/nm-setting-ip6-config.c
@@ -1042,7 +1042,8 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass)
*
*
* "type" - one of unicast, local, blackhole,
- * unavailable, prohibit. The default is unicast.
+ * unavailable, prohibit, throw.
+ * The default is unicast.
*
*
* "window" - an unsigned 32 bit integer.
diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c
index e3cc7a4dbc..19a661b9f7 100644
--- a/src/libnm-platform/nm-linux-platform.c
+++ b/src/libnm-platform/nm-linux-platform.c
@@ -3455,7 +3455,8 @@ _new_from_nl_route(struct nlmsghdr *nlh, gboolean id_only, ParseNlmsgIter *parse
RTN_LOCAL,
RTN_BLACKHOLE,
RTN_UNREACHABLE,
- RTN_PROHIBIT))
+ RTN_PROHIBIT,
+ RTN_THROW))
return NULL;
if (nlmsg_parse_arr(nlh, sizeof(struct rtmsg), tb, policy) < 0)
diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h
index 0882f240e3..8965336045 100644
--- a/src/libnm-platform/nm-platform.h
+++ b/src/libnm-platform/nm-platform.h
@@ -1411,7 +1411,11 @@ _nm_platform_link_get_inet6_addr_gen_mode(const NMPlatformLink *pllink)
static inline gboolean
nm_platform_route_type_is_nodev(guint8 type)
{
- return NM_IN_SET(type, 6 /* RTN_BLACKHOLE */, 7 /* RTN_UNREACHABLE */, 8 /* RTN_PROHIBIT */);
+ return NM_IN_SET(type,
+ 6 /* RTN_BLACKHOLE */,
+ 7 /* RTN_UNREACHABLE */,
+ 8 /* RTN_PROHIBIT */,
+ 9 /* RTN_THROW */);
}
/**