about summary refs log tree commit diff
path: root/src/settings
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2020-06-29 22:15:58 +0200
committerMichael Biebl <biebl@debian.org>2020-06-29 22:15:58 +0200
commit10ae7d8cd706062742d0cdb1803d49909aef9e06 (patch)
treecb89e8b475cec18f22b1abfe45f1d63da7e3f440 /src/settings
parenta54ac63bbf9b2c71026ac9028a8ffaf186cf3c82 (diff)
New upstream version 1.25.91 upstream/1.25.91
Diffstat (limited to 'src/settings')
-rw-r--r--src/settings/nm-settings.c7
-rw-r--r--src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c40
-rw-r--r--src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c8
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes4
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes-legacy1
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c18
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection4
-rw-r--r--src/settings/plugins/keyfile/tests/test-keyfile-settings.c9
8 files changed, 81 insertions, 10 deletions
diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c
index 5899b079..0a1e7b47 100644
--- a/src/settings/nm-settings.c
+++ b/src/settings/nm-settings.c
@@ -1996,11 +1996,10 @@ nm_settings_update_connection (NMSettings *self,
 		 */
 		device = nm_settings_connection_default_wired_get_device (sett_conn);
 		if (device) {
+
 			nm_assert (cur_in_memory);
-			nm_assert (!NM_FLAGS_ANY (nm_settings_connection_get_flags (sett_conn),
-			                            NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED
-			                          | NM_SETTINGS_CONNECTION_INT_FLAGS_VOLATILE
-			                          | NM_SETTINGS_CONNECTION_INT_FLAGS_EXTERNAL));
+			nm_assert (NM_FLAGS_HAS (nm_settings_connection_get_flags (sett_conn),
+			                         NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED));
 
 			default_wired_clear_tag (self, device, sett_conn, FALSE);
 
diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
index d65ae555..1a9df92c 100644
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
@@ -800,6 +800,7 @@ typedef struct {
 	union {
 		guint8 uint8;
 		guint32 uint32;
+		const char *str;
 		struct {
 			guint32 uint32;
 			bool lock:1;
@@ -815,6 +816,7 @@ typedef struct {
 
 enum {
 	/* route attributes */
+	PARSE_LINE_ATTR_ROUTE_TYPE,
 	PARSE_LINE_ATTR_ROUTE_TABLE,
 	PARSE_LINE_ATTR_ROUTE_SRC,
 	PARSE_LINE_ATTR_ROUTE_FROM,
@@ -844,6 +846,7 @@ enum {
 #define PARSE_LINE_TYPE_IFNAME            'i'
 #define PARSE_LINE_TYPE_FLAG              'f'
 #define PARSE_LINE_TYPE_ROUTE_SCOPE       'S'
+#define PARSE_LINE_TYPE_STRING            's'
 
 /**
  * parse_route_line:
@@ -875,6 +878,8 @@ parse_route_line (const char *line,
                   GError **error)
 {
 	static const ParseLineInfo parse_infos[] = {
+		[PARSE_LINE_ATTR_ROUTE_TYPE]      = { .key = NM_IP_ROUTE_ATTRIBUTE_TYPE,
+		                                      .type = PARSE_LINE_TYPE_STRING, },
 		[PARSE_LINE_ATTR_ROUTE_TABLE]     = { .key = NM_IP_ROUTE_ATTRIBUTE_TABLE,
 		                                      .type = PARSE_LINE_TYPE_UINT32, },
 		[PARSE_LINE_ATTR_ROUTE_SRC]       = { .key = NM_IP_ROUTE_ATTRIBUTE_SRC,
@@ -1010,6 +1015,23 @@ parse_route_line (const char *line,
 			}
 		}
 
+		p_info = &parse_infos[PARSE_LINE_ATTR_ROUTE_TYPE];
+		p_data = &parse_datas[PARSE_LINE_ATTR_ROUTE_TYPE];
+		if (   !p_data->has
+		    && NM_IN_STRSET (w,
+		                     "local",
+		                     "unicast",
+		                     "broadcast"
+		                     "multicast",
+		                     "throw",
+		                     "unreachable",
+		                     "prohibit",
+		                     "blackhole",
+		                     "nat")) {
+			p_data->has = TRUE;
+			goto parse_line_type_string;
+		}
+
 		/* "to" is also accepted unqualified... (once) */
 		p_info = &parse_infos[PARSE_LINE_ATTR_ROUTE_TO];
 		p_data = &parse_datas[PARSE_LINE_ATTR_ROUTE_TO];
@@ -1160,6 +1182,15 @@ parse_line_type_addr_with_prefix:
 		i_words++;
 		goto next;
 
+parse_line_type_string:
+		s = words[i_words];
+		if (!s)
+			goto err_word_missing_argument;
+
+		p_data->v.str = s;
+		i_words++;
+		goto next;
+
 err_word_missing_argument:
 		g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
 		             "Missing argument for \"%s\"", w);
@@ -1253,13 +1284,18 @@ next:
 			                           p_info->key,
 			                           g_variant_new_boolean (TRUE));
 			break;
+		case PARSE_LINE_TYPE_STRING:
+			nm_ip_route_set_attribute (route,
+			                           p_info->key,
+			                           g_variant_new_string (p_data->v.str));
+			break;
 		default:
 			nm_assert_not_reached ();
 			break;
 		}
 	}
 
-	nm_assert (_nm_ip_route_attribute_validate_all (route));
+	nm_assert (_nm_ip_route_attribute_validate_all (route, NULL));
 
 	NM_SET_OUT (out_route, g_steal_pointer (&route));
 	return 0;
@@ -2479,7 +2515,7 @@ make_tc_setting (shvarFile *ifcfg)
 		NMTCTfilter *tfilter = NULL;
 		gs_free char *value_to_free = NULL;
 		const char *value = NULL;
-		GError *local = NULL;
+		gs_free_error GError *local = NULL;
 
 		value = svGetValueStr (ifcfg, numbered_tag (tag, "FILTER", i), &value_to_free);
 		if (!value)
diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
index 199e8e4e..e6526944 100644
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
@@ -2099,7 +2099,15 @@ get_route_attributes_string (NMIPRoute *route, int family)
 
 	str = g_string_new ("");
 
+	attr = nm_ip_route_get_attribute (route, NM_IP_ROUTE_ATTRIBUTE_TYPE);
+	if (   attr
+	    && nm_ip_route_attribute_validate (NM_IP_ROUTE_ATTRIBUTE_TYPE, attr, family, NULL, NULL))
+		g_string_append_printf (str, "%s ", g_variant_get_string (attr, NULL));
+
 	for (i = 0; i < len; i++) {
+		if (nm_streq (names[i], NM_IP_ROUTE_ATTRIBUTE_TYPE))
+			continue;
+
 		attr = nm_ip_route_get_attribute (route, names[i]);
 
 		if (!nm_ip_route_attribute_validate (names[i], attr, family, NULL, NULL))
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes b/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes
index 5d02c62e..9c05417e 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes
@@ -13,3 +13,7 @@ NETMASK2=255.255.255.255
 GATEWAY2=192.168.1.8
 METRIC2=3
 OPTIONS2="mtu lock 9000 cwnd 12 src 1.1.1.1 tos 0x28 onlink window 30000 initcwnd lock 13 initrwnd 14 scope link"
+
+ADDRESS3=1.2.3.4
+NETMASK3=255.255.255.255
+OPTIONS3="local scope host"
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes-legacy b/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes-legacy
index faa247d8..1fef7e97 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes-legacy
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes-legacy
@@ -6,3 +6,4 @@
  43.53.0.0/16 metric 3 via 7.7.7.7 dev eth2 cwnd 14 mtu lock 9000  initrwnd 20 window lock 10000 initcwnd lock 42 src 1.2.3.4
 
 7.7.7.8/32 via (null) metric 18
+local 1.2.3.4
diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index a5025f3b..40d1bb8c 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -1323,7 +1323,7 @@ test_read_wired_static_routes (void)
 	g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
 
 	/* Routes */
-	g_assert_cmpint (nm_setting_ip_config_get_num_routes (s_ip4), ==, 3);
+	g_assert_cmpint (nm_setting_ip_config_get_num_routes (s_ip4), ==, 4);
 
 	ip4_route = nm_setting_ip_config_get_route (s_ip4, 0);
 	g_assert (ip4_route);
@@ -1367,6 +1367,13 @@ test_read_wired_static_routes (void)
 	nmtst_assert_route_attribute_boolean (ip4_route, NM_IP_ROUTE_ATTRIBUTE_ONLINK, TRUE);
 	nmtst_assert_route_attribute_byte (ip4_route, NM_IP_ROUTE_ATTRIBUTE_SCOPE, 253);
 
+	ip4_route = nm_setting_ip_config_get_route (s_ip4, 3);
+	g_assert (ip4_route);
+	g_assert_cmpstr (nm_ip_route_get_dest (ip4_route), ==, "1.2.3.4");
+	g_assert_cmpint (nm_ip_route_get_prefix (ip4_route), ==, 32);
+	nmtst_assert_route_attribute_string (ip4_route, NM_IP_ROUTE_ATTRIBUTE_TYPE, "local");
+	nmtst_assert_route_attribute_byte (ip4_route, NM_IP_ROUTE_ATTRIBUTE_SCOPE, 254);
+
 	g_object_unref (connection);
 }
 
@@ -1402,7 +1409,7 @@ test_read_wired_static_routes_legacy (void)
 	g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
 
 	/* Routes */
-	g_assert_cmpint (nm_setting_ip_config_get_num_routes (s_ip4), ==, 4);
+	g_assert_cmpint (nm_setting_ip_config_get_num_routes (s_ip4), ==, 5);
 
 	/* Route #1 */
 	ip4_route = nm_setting_ip_config_get_route (s_ip4, 0);
@@ -1443,6 +1450,13 @@ test_read_wired_static_routes_legacy (void)
 	g_assert_cmpstr (nm_ip_route_get_next_hop (ip4_route), ==, NULL);
 	g_assert_cmpint (nm_ip_route_get_metric (ip4_route), ==, 18);
 
+
+	/* Route #5 */
+	ip4_route = nm_setting_ip_config_get_route (s_ip4, 4);
+	g_assert (ip4_route != NULL);
+	g_assert_cmpstr (nm_ip_route_get_dest (ip4_route), ==, "1.2.3.4");
+	nmtst_assert_route_attribute_string (ip4_route, NM_IP_ROUTE_ATTRIBUTE_TYPE, "local");
+
 	g_object_unref (connection);
 }
 
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection b/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection
index 1e62f4b3..f9ccc003 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection
@@ -36,7 +36,9 @@ routes9=1.1.1.9/19,0.0.0.0,0
 route10=1.1.1.10/21,,0
 routes10=1.1.1.10/20,,0
 routes11=1.1.1.11/21,,21
-routes11_options=cwnd=10,lock-cwnd=true,mtu=1430,src=7.7.7.7
+routes11_options=cwnd=10,lock-cwnd=true,mtu=1430,src=7.7.7.7,type=unicast
+routes12=1.2.3.4/32
+routes12_options=type=local
 address30=1.2.3.30/24
 addresses30=1.2.3.30/25
 addresses31=1.2.3.31/25
diff --git a/src/settings/plugins/keyfile/tests/test-keyfile-settings.c b/src/settings/plugins/keyfile/tests/test-keyfile-settings.c
index 1a9482e5..98820272 100644
--- a/src/settings/plugins/keyfile/tests/test-keyfile-settings.c
+++ b/src/settings/plugins/keyfile/tests/test-keyfile-settings.c
@@ -274,7 +274,7 @@ test_read_valid_wired_connection (void)
 	g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "2.3.4.6");
 
 	/* IPv4 routes */
-	g_assert_cmpint (nm_setting_ip_config_get_num_routes (s_ip4), ==, 13);
+	g_assert_cmpint (nm_setting_ip_config_get_num_routes (s_ip4), ==, 14);
 	check_ip_route (s_ip4, 0, "5.6.7.8", 32, NULL, -1);
 	check_ip_route (s_ip4, 1, "1.2.3.0", 24, "2.3.4.8", 99);
 	check_ip_route (s_ip4, 2, "1.1.1.2", 12, NULL, -1);
@@ -288,6 +288,7 @@ test_read_valid_wired_connection (void)
 	check_ip_route (s_ip4, 10, "1.1.1.10", 21, NULL, 0);
 	check_ip_route (s_ip4, 11, "1.1.1.10", 20, NULL, 0);
 	check_ip_route (s_ip4, 12, "1.1.1.11", 21, NULL, 21);
+	check_ip_route (s_ip4, 13, "1.2.3.4", 32, NULL, -1);
 
 	/* Route attributes */
 	route = nm_setting_ip_config_get_route (s_ip4, 12);
@@ -297,6 +298,12 @@ test_read_valid_wired_connection (void)
 	nmtst_assert_route_attribute_uint32  (route, NM_IP_ROUTE_ATTRIBUTE_MTU, 1430);
 	nmtst_assert_route_attribute_boolean (route, NM_IP_ROUTE_ATTRIBUTE_LOCK_CWND, TRUE);
 	nmtst_assert_route_attribute_string  (route, NM_IP_ROUTE_ATTRIBUTE_SRC, "7.7.7.7");
+	nmtst_assert_route_attribute_string  (route, NM_IP_ROUTE_ATTRIBUTE_TYPE, "unicast");
+
+	route = nm_setting_ip_config_get_route (s_ip4, 13);
+	g_assert (route);
+
+	nmtst_assert_route_attribute_string  (route, NM_IP_ROUTE_ATTRIBUTE_TYPE, "local");
 
 	s_ip6 = nm_connection_get_setting_ip6_config (connection);
 	g_assert (s_ip6);