diff options
author | Thomas Haller <thaller@redhat.com> | 2022-02-25 21:01:04 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2022-02-28 17:17:03 +0100 |
commit | b8f689ac5388baf9c9b59fba625d21a88efccef4 (patch) | |
tree | 780446cae84584bf0903a6fef0c02adce95052a9 | |
parent | b2e559fab2fa5adbf4e159fc1c2cadd3d965b01b (diff) | |
download | NetworkManager-b8f689ac5388baf9c9b59fba625d21a88efccef4.tar.gz |
all: add support for route type "throw"
After adding support for "blackhole", "unreachable" and "prohibit" route
types, let's also add support for "throw" type. It works basically the
same as the other types, so supporting it seems very straight forward.
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1124
-rw-r--r-- | src/core/NetworkManagerUtils.c | 9 | ||||
-rw-r--r-- | src/core/platform/tests/test-platform-general.c | 1 | ||||
-rw-r--r-- | src/core/platform/tests/test-route.c | 7 | ||||
-rw-r--r-- | src/libnm-core-impl/nm-setting-ip-config.c | 4 | ||||
-rw-r--r-- | src/libnm-core-impl/nm-setting-ip4-config.c | 3 | ||||
-rw-r--r-- | src/libnm-core-impl/nm-setting-ip6-config.c | 3 | ||||
-rw-r--r-- | src/libnm-platform/nm-linux-platform.c | 3 | ||||
-rw-r--r-- | src/libnm-platform/nm-platform.h | 6 |
8 files changed, 27 insertions, 9 deletions
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) * </listitem> * <listitem> * <para><literal>"type"</literal> - one of <literal>unicast</literal>, <literal>local</literal>, <literal>blackhole</literal>, - * <literal>unavailable</literal>, <literal>prohibit</literal>. The default is <literal>unicast</literal>.</para> + * <literal>unavailable</literal>, <literal>prohibit</literal>, <literal>throw</literal>. + * The default is <literal>unicast</literal>.</para> * </listitem> * <listitem> * <para><literal>"window"</literal> - an unsigned 32 bit integer.</para> 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) * </listitem> * <listitem> * <para><literal>"type"</literal> - one of <literal>unicast</literal>, <literal>local</literal>, <literal>blackhole</literal>, - * <literal>unavailable</literal>, <literal>prohibit</literal>. The default is <literal>unicast</literal>.</para> + * <literal>unavailable</literal>, <literal>prohibit</literal>, <literal>throw</literal>. + * The default is <literal>unicast</literal>.</para> * </listitem> * <listitem> * <para><literal>"window"</literal> - an unsigned 32 bit integer.</para> 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 */); } /** |