summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-02-25 21:01:04 +0100
committerThomas Haller <thaller@redhat.com>2022-02-28 17:17:03 +0100
commitb8f689ac5388baf9c9b59fba625d21a88efccef4 (patch)
tree780446cae84584bf0903a6fef0c02adce95052a9
parentb2e559fab2fa5adbf4e159fc1c2cadd3d965b01b (diff)
downloadNetworkManager-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.c9
-rw-r--r--src/core/platform/tests/test-platform-general.c1
-rw-r--r--src/core/platform/tests/test-route.c7
-rw-r--r--src/libnm-core-impl/nm-setting-ip-config.c4
-rw-r--r--src/libnm-core-impl/nm-setting-ip4-config.c3
-rw-r--r--src/libnm-core-impl/nm-setting-ip6-config.c3
-rw-r--r--src/libnm-platform/nm-linux-platform.c3
-rw-r--r--src/libnm-platform/nm-platform.h6
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 */);
}
/**