diff options
Diffstat (limited to 'src/core/settings/plugins/ifcfg-rh')
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("", ""), |