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 */); } /**