about summary refs log tree commit diff
path: root/src/core/settings/plugins/ifcfg-rh
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/settings/plugins/ifcfg-rh')
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c21
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c34
-rw-r--r--src/core/settings/plugins/ifcfg-rh/shvar.c6
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c29
4 files changed, 59 insertions, 31 deletions
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
index 81964de6..d64052cb 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
@@ -2056,9 +2056,8 @@ make_ip4_setting(shvarFile *ifcfg,
          * Pick up just IPv4 addresses (IPv6 addresses are taken by make_ip6_setting())
          */
         for (i = 1; i < 10000; i++) {
-            int      af;
-            NMIPAddr ip;
-            char     tag[256];
+            NMDnsServer dns;
+            char        tag[256];
 
             numbered_tag(tag, "DNS", i);
             nm_clear_g_free(&value);
@@ -2066,14 +2065,16 @@ make_ip4_setting(shvarFile *ifcfg,
             if (!v)
                 break;
 
-            if (!nm_utils_dnsname_parse(AF_UNSPEC, v, &af, &ip, NULL)) {
+            if (!nm_dns_uri_parse(AF_UNSPEC, v, &dns)) {
                 g_set_error(error,
                             NM_SETTINGS_ERROR,
                             NM_SETTINGS_ERROR_INVALID_CONNECTION,
                             "Invalid DNS server address '%s'",
                             v);
                 return NULL;
-            } else if (af == AF_INET) {
+            }
+
+            if (dns.addr_family == AF_INET) {
                 if (!nm_setting_ip_config_add_dns(s_ip4, v))
                     PARSE_WARNING("duplicate DNS server %s", tag);
             } else {
@@ -2606,9 +2607,8 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
      * Pick up just IPv6 addresses (IPv4 addresses are taken by make_ip4_setting())
      */
     for (i = 1; i < 10000; i++) {
-        int      af;
-        NMIPAddr ip;
-        char     tag[256];
+        NMDnsServer dns;
+        char        tag[256];
 
         numbered_tag(tag, "DNS", i);
         nm_clear_g_free(&value);
@@ -2616,7 +2616,7 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
         if (!v)
             break;
 
-        if (!nm_utils_dnsname_parse(AF_UNSPEC, v, &af, &ip, NULL)) {
+        if (!nm_dns_uri_parse(AF_UNSPEC, v, &dns)) {
             if (is_disabled)
                 continue;
             g_set_error(error,
@@ -2625,7 +2625,8 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
                         "Invalid DNS server address '%s'",
                         v);
             return NULL;
-        } else if (af == AF_INET6) {
+        }
+        if (dns.addr_family == AF_INET6) {
             if (is_disabled) {
                 PARSE_WARNING("ignore DNS server addresses with method disabled/ignore");
                 break;
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
index 21f31d8b..6e0411c6 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
@@ -1454,6 +1454,15 @@ write_ethtool_setting(NMConnection *connection, shvarFile *ifcfg, GError **error
                 return FALSE;
             }
         }
+        if (ethtool_id == NM_ETHTOOL_ID_FEC_MODE) {
+            if (nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                             nm_ethtool_data[ethtool_id]->optname,
+                                             &u32)) {
+                nm_sprintf_buf(prop_name, "ethtool.%s", nm_ethtool_data[ethtool_id]->optname);
+                set_error_unsupported(error, connection, prop_name, FALSE);
+                return FALSE;
+            }
+        }
 
         if (!any_option) {
             /* Write an empty dummy "-A" option without arguments. This is to
@@ -3588,13 +3597,24 @@ do_write_construct(NMConnection                   *connection,
     } else
         route_ignore = FALSE;
 
-    if ((s_ip4 = nm_connection_get_setting_ip4_config(connection))
-        && nm_setting_ip_config_get_dhcp_dscp(s_ip4)) {
-        set_error_unsupported(error,
-                              connection,
-                              NM_SETTING_IP4_CONFIG_SETTING_NAME "." NM_SETTING_IP_CONFIG_DHCP_DSCP,
-                              FALSE);
-        return FALSE;
+    if ((s_ip4 = nm_connection_get_setting_ip4_config(connection))) {
+        if (nm_setting_ip_config_get_dhcp_dscp(s_ip4)) {
+            set_error_unsupported(error,
+                                  connection,
+                                  NM_SETTING_IP4_CONFIG_SETTING_NAME
+                                  "." NM_SETTING_IP_CONFIG_DHCP_DSCP,
+                                  FALSE);
+            return FALSE;
+        }
+        if (nm_setting_ip4_config_get_dhcp_ipv6_only_preferred(NM_SETTING_IP4_CONFIG(s_ip4))
+            != NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_DEFAULT) {
+            set_error_unsupported(error,
+                                  connection,
+                                  NM_SETTING_IP4_CONFIG_SETTING_NAME
+                                  "." NM_SETTING_IP4_CONFIG_DHCP_IPV6_ONLY_PREFERRED,
+                                  FALSE);
+            return FALSE;
+        }
     }
 
     write_ip4_setting(connection,
diff --git a/src/core/settings/plugins/ifcfg-rh/shvar.c b/src/core/settings/plugins/ifcfg-rh/shvar.c
index 1ca2ea60..565e20f7 100644
--- a/src/core/settings/plugins/ifcfg-rh/shvar.c
+++ b/src/core/settings/plugins/ifcfg-rh/shvar.c
@@ -722,7 +722,7 @@ svFile_new(const char *name, int fd, const char *content)
     nm_assert(fd >= -1);
 
     s  = g_slice_new(shvarFile);
-    *s = (shvarFile){
+    *s = (shvarFile) {
         .fileName = g_strdup(name),
         .fd       = fd,
         .lst_head = C_LIST_INIT(s->lst_head),
@@ -796,7 +796,7 @@ line_new_parse(const char *value, gsize len)
     nm_assert(value);
 
     line  = g_slice_new(shvarLine);
-    *line = (shvarLine){
+    *line = (shvarLine) {
         .lst   = C_LIST_INIT(line->lst),
         .dirty = TRUE,
     };
@@ -836,7 +836,7 @@ line_new_build(const char *key, const char *value)
     value = svEscape(value, &value_escaped);
 
     line    = g_slice_new(shvarLine);
-    new_key = g_strdup(key), *line = (shvarLine){
+    new_key = g_strdup(key), *line = (shvarLine) {
                                  .lst             = C_LIST_INIT(line->lst),
                                  .line            = value_escaped ?: g_strdup(value),
                                  .key_with_prefix = new_key,
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index 334662c3..ea978a98 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -3623,7 +3623,8 @@ test_roundtrip_ethtool(void)
             optname = nm_ethtool_data[ethtool_id]->optname;
             vtype   = nm_ethtool_id_get_variant_type(ethtool_id);
 
-            if (nm_ethtool_optname_is_channels(optname) || nm_ethtool_optname_is_eee(optname)) {
+            if (nm_ethtool_optname_is_channels(optname) || nm_ethtool_optname_is_eee(optname)
+                || nm_ethtool_optname_is_fec(optname)) {
                 /* Not supported */
                 continue;
             }
@@ -9520,18 +9521,24 @@ do_svUnescape_combine_ansi(GString                *str_val,
 static void
 test_svUnescape(void)
 {
-#define V0(v_value, v_expected)                                       \
-    {                                                                 \
-        .val = "" v_value "", .exp = v_expected, .can_concat = FALSE, \
+#define V0(v_value, v_expected)      \
+    {                                \
+        .val        = "" v_value "", \
+        .exp        = v_expected,    \
+        .can_concat = FALSE,         \
     }
-#define V1(v_value, v_expected)                                              \
-    {                                                                        \
-        .val = "" v_value "", .exp = v_expected, .can_concat = !!v_expected, \
+#define V1(v_value, v_expected)      \
+    {                                \
+        .val        = "" v_value "", \
+        .exp        = v_expected,    \
+        .can_concat = !!v_expected,  \
     }
-#define V2(v_value, v_expected)                                      \
-    {                                                                \
-        .val = "" v_value "", .exp = v_expected, .can_concat = TRUE, \
-        .needs_ascii_separator = TRUE,                               \
+#define V2(v_value, v_expected)                 \
+    {                                           \
+        .val                   = "" v_value "", \
+        .exp                   = v_expected,    \
+        .can_concat            = TRUE,          \
+        .needs_ascii_separator = TRUE,          \
     }
     const UnescapeTestData data_full[] = {
         V1("", ""),