summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2014-12-22 15:10:22 +0100
committerThomas Haller <thaller@redhat.com>2015-01-10 21:10:52 +0100
commit3e33a5a6c553ba9f8d8c888b127e86ad3b462e7d (patch)
tree050ef1d9d95244ac0712e1a1518ff084bdfcccfe
parent207ab013a11bb4c730297a2eedf8600e33f33e23 (diff)
downloadNetworkManager-3e33a5a6c553ba9f8d8c888b127e86ad3b462e7d.tar.gz
ifcfg-rh: support ipvx.route-metric property as IPVX_ROUTE_METRIC
Write ipv4.route-metric and ipv6.route-metric property of NMSettingConnection as IPV4_ROUTE_METRIC and IPV6_ROUTE_METRIC, respectively.
-rw-r--r--libnm-core/nm-setting-ip4-config.c9
-rw-r--r--libnm-core/nm-setting-ip6-config.c9
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.c4
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-open2
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c13
-rw-r--r--src/settings/plugins/ifcfg-rh/writer.c14
6 files changed, 50 insertions, 1 deletions
diff --git a/libnm-core/nm-setting-ip4-config.c b/libnm-core/nm-setting-ip4-config.c
index 686192678a..81cc1f8889 100644
--- a/libnm-core/nm-setting-ip4-config.c
+++ b/libnm-core/nm-setting-ip4-config.c
@@ -571,6 +571,15 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *ip4_class)
* ---end---
*/
+ /* ---ifcfg-rh---
+ * property: route-metric
+ * variable: IPV4_ROUTE_METRIC(+)
+ * default: -1
+ * description: IPV4_ROUTE_METRIC is the default IPv4 metric for routes on this connection.
+ * If set to -1, a default metric based on the device type is used.
+ * ---end---
+ */
+
/**
* NMSettingIP4Config:dhcp-client-id:
*
diff --git a/libnm-core/nm-setting-ip6-config.c b/libnm-core/nm-setting-ip6-config.c
index f5d903340c..29ca551525 100644
--- a/libnm-core/nm-setting-ip6-config.c
+++ b/libnm-core/nm-setting-ip6-config.c
@@ -488,6 +488,15 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *ip6_class)
* ---end---
*/
+ /* ---ifcfg-rh---
+ * property: route-metric
+ * variable: IPV6_ROUTE_METRIC(+)
+ * default: -1
+ * description: IPV6_ROUTE_METRIC is the default IPv6 metric for routes on this connection.
+ * If set to -1, a default metric based on the device type is used.
+ * ---end---
+ */
+
/**
* NMSettingIP6Config:ip6-privacy:
*
diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index fe8112baae..e892394dcf 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -960,6 +960,8 @@ make_ip4_setting (shvarFile *ifcfg,
NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, !svTrueValue (ifcfg, "PEERROUTES", TRUE),
NM_SETTING_IP_CONFIG_NEVER_DEFAULT, never_default,
NM_SETTING_IP_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV4_FAILURE_FATAL", FALSE),
+ NM_SETTING_IP_CONFIG_ROUTE_METRIC, svGetValueInt64 (ifcfg, "IPV4_ROUTE_METRIC", 10,
+ -1, G_MAXUINT32, -1),
NULL);
if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0)
@@ -1356,6 +1358,8 @@ make_ip6_setting (shvarFile *ifcfg,
NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, !svTrueValue (ifcfg, "IPV6_PEERROUTES", TRUE),
NM_SETTING_IP_CONFIG_NEVER_DEFAULT, never_default,
NM_SETTING_IP_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV6_FAILURE_FATAL", FALSE),
+ NM_SETTING_IP_CONFIG_ROUTE_METRIC, svGetValueInt64 (ifcfg, "IPV6_ROUTE_METRIC", 10,
+ -1, G_MAXUINT32, -1),
NM_SETTING_IP6_CONFIG_IP6_PRIVACY, ip6_privacy_val,
NULL);
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-open b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-open
index 48db45b25d..b089103dae 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-open
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-open
@@ -12,3 +12,5 @@ ONBOOT=yes
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
+IPV4_ROUTE_METRIC=104
+IPV6_ROUTE_METRIC=106
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 fecacaed40..e05a4ccb20 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -2439,7 +2439,7 @@ test_read_wifi_open (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip4, *s_ip6;
GError *error = NULL;
const char *tmp;
GBytes *ssid;
@@ -2584,6 +2584,8 @@ test_read_wifi_open (void)
TEST_IFCFG_WIFI_OPEN,
NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ g_assert_cmpint (nm_setting_ip_config_get_route_metric (s_ip4), ==, 104);
+
/* Method */
tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
@@ -2592,6 +2594,10 @@ test_read_wifi_open (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP_CONFIG_METHOD);
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert( s_ip6);
+ g_assert_cmpint (nm_setting_ip_config_get_route_metric (s_ip6), ==, 106);
+
g_object_unref (connection);
}
@@ -5775,6 +5781,7 @@ test_write_wired_static (void)
NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
+ NM_SETTING_IP_CONFIG_ROUTE_METRIC, (gint64) 204,
NULL);
addr = nm_ip_address_new (AF_INET, "1.1.1.3", 24, &error);
@@ -5800,6 +5807,7 @@ test_write_wired_static (void)
g_object_set (s_ip6,
NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_ROUTE_METRIC, (gint64) 206,
NULL);
/* Add addresses */
@@ -5883,6 +5891,9 @@ test_write_wired_static (void)
nm_setting_ip_config_remove_dns_search (reread_s_ip4, 3);
nm_setting_ip_config_remove_dns_search (reread_s_ip4, 2);
+ g_assert_cmpint (nm_setting_ip_config_get_route_metric (reread_s_ip4), ==, 204);
+ g_assert_cmpint (nm_setting_ip_config_get_route_metric (reread_s_ip6), ==, 206);
+
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
"wired-static-write", "written and re-read connection weren't the same.");
diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c
index f4ffffd6a8..300b0c1665 100644
--- a/src/settings/plugins/ifcfg-rh/writer.c
+++ b/src/settings/plugins/ifcfg-rh/writer.c
@@ -1806,6 +1806,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
char *route_path = NULL;
gint32 j;
guint32 i, n, num;
+ gint64 route_metric;
GString *searches;
gboolean success = FALSE;
gboolean fake_ip4 = FALSE;
@@ -2015,6 +2016,11 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
nm_setting_ip_config_get_may_fail (s_ip4) ? "no" : "yes",
FALSE);
+ route_metric = nm_setting_ip_config_get_route_metric (s_ip4);
+ tmp = route_metric != -1 ? g_strdup_printf ("%"G_GINT64_FORMAT, route_metric) : NULL;
+ svSetValue (ifcfg, "IPV4_ROUTE_METRIC", tmp, FALSE);
+ g_free (tmp);
+
/* Static routes - route-<name> file */
route_path = utils_get_route_path (ifcfg->fileName);
if (!route_path) {
@@ -2249,10 +2255,12 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
NMSettingIPConfig *s_ip4;
const char *value;
char *addr_key;
+ char *tmp;
guint32 i, num, num4;
GString *searches;
NMIPAddress *addr;
const char *dns;
+ gint64 route_metric;
GString *ip_str1, *ip_str2, *ip_ptr;
char *route6_path;
@@ -2266,6 +2274,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "IPV6_PEERDNS", "yes", FALSE);
svSetValue (ifcfg, "IPV6_PEERROUTES", "yes", FALSE);
svSetValue (ifcfg, "IPV6_FAILURE_FATAL", "no", FALSE);
+ svSetValue (ifcfg, "IPV6_ROUTE_METRIC", NULL, FALSE);
return TRUE;
}
@@ -2380,6 +2389,11 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
nm_setting_ip_config_get_may_fail (s_ip6) ? "no" : "yes",
FALSE);
+ route_metric = nm_setting_ip_config_get_route_metric (s_ip6);
+ tmp = route_metric != -1 ? g_strdup_printf ("%"G_GINT64_FORMAT, route_metric) : NULL;
+ svSetValue (ifcfg, "IPV6_ROUTE_METRIC", tmp, FALSE);
+ g_free (tmp);
+
/* IPv6 Privacy Extensions */
svSetValue (ifcfg, "IPV6_PRIVACY", NULL, FALSE);
svSetValue (ifcfg, "IPV6_PRIVACY_PREFER_PUBLIC_IP", NULL, FALSE);