about summary refs log tree commit diff
path: root/src/core/settings/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/settings/plugins')
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.h2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c92
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.h2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c15
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c22
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Vlan_test-vlan-interface.cexpected1
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-13
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-1.cexpected3
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-interface1
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-static-routes2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c41
-rw-r--r--src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c6
-rw-r--r--src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.h2
-rw-r--r--src/core/settings/plugins/keyfile/nms-keyfile-plugin.h2
-rw-r--r--src/core/settings/plugins/keyfile/nms-keyfile-storage.h2
-rw-r--r--src/core/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection2
-rw-r--r--src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c4
19 files changed, 137 insertions, 69 deletions
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.h b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.h
index dc1a01c8..49e04291 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.h
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.h
@@ -10,7 +10,7 @@
 
 #define NMS_TYPE_IFCFG_RH_PLUGIN (nms_ifcfg_rh_plugin_get_type())
 #define NMS_IFCFG_RH_PLUGIN(obj) \
-    (G_TYPE_CHECK_INSTANCE_CAST((obj), NMS_TYPE_IFCFG_RH_PLUGIN, NMSIfcfgRHPlugin))
+    (_NM_G_TYPE_CHECK_INSTANCE_CAST((obj), NMS_TYPE_IFCFG_RH_PLUGIN, NMSIfcfgRHPlugin))
 #define NMS_IFCFG_RH_PLUGIN_CLASS(klass) \
     (G_TYPE_CHECK_CLASS_CAST((klass), NMS_TYPE_IFCFG_RH_PLUGIN, NMSIfcfgRHPluginClass))
 #define NMS_IS_IFCFG_RH_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NMS_TYPE_IFCFG_RH_PLUGIN))
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 4d8e7bd6..0eeead8a 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
@@ -739,7 +739,7 @@ read_full_ip4_address(shvarFile    *ifcfg,
     int           prefix = 0;
     gboolean      has_key;
     guint32       a;
-    char          inet_buf[NM_UTILS_INET_ADDRSTRLEN];
+    char          inet_buf[NM_INET_ADDRSTRLEN];
 
     g_return_val_if_fail(which >= -1, FALSE);
     g_return_val_if_fail(ifcfg != NULL, FALSE);
@@ -761,7 +761,7 @@ read_full_ip4_address(shvarFile    *ifcfg,
         if (!read_ip4_address(ifcfg, numbered_tag(tag, "GATEWAY", which), &has_key, &a, error))
             return FALSE;
         if (has_key)
-            *out_gateway = nm_utils_inet4_ntop_dup(a);
+            *out_gateway = nm_inet4_ntop_dup(a);
     }
 
     /* Prefix */
@@ -782,16 +782,16 @@ read_full_ip4_address(shvarFile    *ifcfg,
         if (!read_ip4_address(ifcfg, numbered_tag(tag, "NETMASK", which), &has_key, &a, error))
             return FALSE;
         if (has_key)
-            prefix = _nm_utils_ip4_netmask_to_prefix(a);
+            prefix = nm_ip4_addr_netmask_to_prefix(a);
         else {
             if (base_addr)
                 prefix = nm_ip_address_get_prefix(base_addr);
             else {
                 /* Try to autodetermine the prefix for the address' class */
-                prefix = _nm_utils_ip4_get_default_prefix(ipaddr);
+                prefix = nm_ip4_addr_get_default_prefix(ipaddr);
                 PARSE_WARNING("missing %s, assuming %s/%d",
                               prefix_tag,
-                              _nm_utils_inet4_ntop(ipaddr, inet_buf),
+                              nm_inet4_ntop(ipaddr, inet_buf),
                               prefix);
             }
         }
@@ -887,6 +887,7 @@ enum {
     PARSE_LINE_ATTR_ROUTE_ADVMSS,
     PARSE_LINE_ATTR_ROUTE_RTO_MIN,
     PARSE_LINE_ATTR_ROUTE_QUICKACK,
+    PARSE_LINE_ATTR_ROUTE_WEIGHT,
 
     /* iproute2 arguments that only matter when parsing the file. */
     PARSE_LINE_ATTR_ROUTE_TO,
@@ -966,6 +967,12 @@ parse_route_line(const char *line,
                 .int_base_16 = TRUE,
                 .ignore      = PARSE_LINE_AF_FLAG_FOR_IPV6,
             },
+        [PARSE_LINE_ATTR_ROUTE_WEIGHT] =
+            {
+                .key      = NM_IP_ROUTE_ATTRIBUTE_WEIGHT,
+                .type     = PARSE_LINE_TYPE_UINT32,
+                .disabled = PARSE_LINE_AF_FLAG_FOR_IPV6,
+            },
         [PARSE_LINE_ATTR_ROUTE_SCOPE] =
             {
                 .key    = NM_IP_ROUTE_ATTRIBUTE_SCOPE,
@@ -1282,7 +1289,7 @@ parse_line_type_addr_with_prefix:
             int prefix = -1;
 
             if (p_info->type == PARSE_LINE_TYPE_ADDR) {
-                if (!nm_utils_parse_inaddr_bin(addr_family, s, NULL, &p_data->v.addr.addr)) {
+                if (!nm_inet_parse_bin(addr_family, s, NULL, &p_data->v.addr.addr)) {
                     if (p_info == &parse_infos[PARSE_LINE_ATTR_ROUTE_VIA]
                         && nm_streq(s, "(null)")) {
                         /* Due to a bug, would older versions of NM write "via (null)"
@@ -1313,11 +1320,11 @@ parse_line_type_addr_with_prefix:
                 if (p_info == &parse_infos[PARSE_LINE_ATTR_ROUTE_TO] && nm_streq(s, "default")) {
                     memset(&p_data->v.addr.addr, 0, sizeof(p_data->v.addr.addr));
                     prefix = 0;
-                } else if (!nm_utils_parse_inaddr_prefix_bin(addr_family,
-                                                             s,
-                                                             NULL,
-                                                             &p_data->v.addr.addr,
-                                                             &prefix)) {
+                } else if (!nm_inet_parse_with_prefix_bin(addr_family,
+                                                          s,
+                                                          NULL,
+                                                          &p_data->v.addr.addr,
+                                                          &prefix)) {
                     g_set_error(error,
                                 NM_SETTINGS_ERROR,
                                 NM_SETTINGS_ERROR_INVALID_CONNECTION,
@@ -1468,7 +1475,7 @@ read_one_ip4_route(shvarFile *ifcfg, guint32 which, NMIPRoute **out_route, GErro
     const char   *v;
     gs_free char *value = NULL;
     gint64        prefix, metric;
-    char          inet_buf[NM_UTILS_INET_ADDRSTRLEN];
+    char          inet_buf[NM_INET_ADDRSTRLEN];
 
     g_return_val_if_fail(ifcfg != NULL, FALSE);
     g_return_val_if_fail(out_route && !*out_route, FALSE);
@@ -1496,14 +1503,14 @@ read_one_ip4_route(shvarFile *ifcfg, guint32 which, NMIPRoute **out_route, GErro
                           error))
         return FALSE;
     if (has_key) {
-        prefix = _nm_utils_ip4_netmask_to_prefix(netmask);
-        if (netmask != _nm_utils_ip4_prefix_to_netmask(prefix)) {
+        prefix = nm_ip4_addr_netmask_to_prefix(netmask);
+        if (netmask != nm_ip4_addr_netmask_from_prefix(prefix)) {
             g_set_error(error,
                         NM_SETTINGS_ERROR,
                         NM_SETTINGS_ERROR_INVALID_CONNECTION,
                         "Invalid IP4 netmask '%s' \"%s\"",
                         netmask_tag,
-                        _nm_utils_inet4_ntop(netmask, inet_buf));
+                        nm_inet4_ntop(netmask, inet_buf));
             return FALSE;
         }
     } else {
@@ -1667,7 +1674,7 @@ parse_full_ip6_address(shvarFile    *ifcfg,
     nm_assert(out_address && !*out_address);
     nm_assert(!error || !*error);
 
-    if (!nm_utils_parse_inaddr_prefix_bin(AF_INET6, addr_str, NULL, &addr_bin, &prefix)) {
+    if (!nm_inet_parse_with_prefix_bin(AF_INET6, addr_str, NULL, &addr_bin, &prefix)) {
         g_set_error(error,
                     NM_SETTINGS_ERROR,
                     NM_SETTINGS_ERROR_INVALID_CONNECTION,
@@ -1935,6 +1942,8 @@ make_ip4_setting(shvarFile *ifcfg,
                  (guint) route_table,
                  NM_SETTING_IP4_CONFIG_LINK_LOCAL,
                  ipv4_link_local,
+                 NM_SETTING_IP_CONFIG_AUTO_ROUTE_EXT_GW,
+                 svGetValueTernary(ifcfg, "IPV4_AUTO_ROUTE_EXT_GW"),
                  NULL);
 
     if (nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED))
@@ -2027,7 +2036,7 @@ make_ip4_setting(shvarFile *ifcfg,
                                   "because the connection has no static addresses",
                                   f);
                 } else
-                    gateway = nm_utils_inet4_ntop_dup(a);
+                    gateway = nm_inet4_ntop_dup(a);
             }
         }
     }
@@ -2047,7 +2056,9 @@ make_ip4_setting(shvarFile *ifcfg,
          * Pick up just IPv4 addresses (IPv6 addresses are taken by make_ip6_setting())
          */
         for (i = 1; i < 10000; i++) {
-            char tag[256];
+            int      af;
+            NMIPAddr ip;
+            char     tag[256];
 
             numbered_tag(tag, "DNS", i);
             nm_clear_g_free(&value);
@@ -2055,18 +2066,18 @@ make_ip4_setting(shvarFile *ifcfg,
             if (!v)
                 break;
 
-            if (nm_utils_ipaddr_is_valid(AF_INET, v)) {
-                if (!nm_setting_ip_config_add_dns(s_ip4, v))
-                    PARSE_WARNING("duplicate DNS server %s", tag);
-            } else if (nm_utils_ipaddr_is_valid(AF_INET6, v)) {
-                /* Ignore IPv6 addresses */
-            } else {
+            if (!nm_utils_dnsname_parse(AF_UNSPEC, v, &af, &ip, NULL)) {
                 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 (!nm_setting_ip_config_add_dns(s_ip4, v))
+                    PARSE_WARNING("duplicate DNS server %s", tag);
+            } else {
+                /* Ignore IPv6 addresses */
             }
         }
 
@@ -2446,6 +2457,8 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
                  (guint) route_table,
                  NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
                  ip6_privacy_val,
+                 NM_SETTING_IP_CONFIG_AUTO_ROUTE_EXT_GW,
+                 svGetValueTernary(ifcfg, "IPV6_AUTO_ROUTE_EXT_GW"),
                  NULL);
 
     /* Don't bother to read IP, DNS and routes when IPv6 is disabled */
@@ -2546,7 +2559,7 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
 
             if ((ptr = strchr(v, '%')) != NULL)
                 *ptr = '\0'; /* remove %interface prefix if present */
-            if (!nm_utils_ipaddr_is_valid(AF_INET6, v)) {
+            if (!nm_inet_is_valid(AF_INET6, v)) {
                 if (!is_disabled) {
                     g_set_error(error,
                                 NM_SETTINGS_ERROR,
@@ -2586,7 +2599,9 @@ 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++) {
-        char tag[256];
+        int      af;
+        NMIPAddr ip;
+        char     tag[256];
 
         numbered_tag(tag, "DNS", i);
         nm_clear_g_free(&value);
@@ -2594,16 +2609,7 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
         if (!v)
             break;
 
-        if (nm_utils_ipaddr_is_valid(AF_INET6, v)) {
-            if (is_disabled) {
-                PARSE_WARNING("ignore DNS server addresses with method disabled/ignore");
-                break;
-            }
-            if (!nm_setting_ip_config_add_dns(s_ip6, v))
-                PARSE_WARNING("duplicate DNS server %s", tag);
-        } else if (nm_utils_ipaddr_is_valid(AF_INET, v)) {
-            /* Ignore IPv4 addresses */
-        } else {
+        if (!nm_utils_dnsname_parse(AF_UNSPEC, v, &af, &ip, NULL)) {
             if (is_disabled)
                 continue;
             g_set_error(error,
@@ -2612,6 +2618,15 @@ 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 (is_disabled) {
+                PARSE_WARNING("ignore DNS server addresses with method disabled/ignore");
+                break;
+            }
+            if (!nm_setting_ip_config_add_dns(s_ip6, v))
+                PARSE_WARNING("duplicate DNS server %s", tag);
+        } else {
+            /* Ignore IPv4 addresses */
         }
     }
 
@@ -6227,6 +6242,11 @@ make_vlan_setting(shvarFile *ifcfg, const char *file, GError **error)
     }
     g_object_set(s_vlan, NM_SETTING_VLAN_PARENT, parent, NULL);
 
+    v = svGetValueStr(ifcfg, "VLAN_PROTOCOL", &value);
+    if (v) {
+        g_object_set(s_vlan, NM_SETTING_VLAN_PROTOCOL, v, NULL);
+    }
+
     vlan_flags |= NM_VLAN_FLAG_REORDER_HEADERS;
 
     gvrp = svGetValueBoolean(ifcfg, "GVRP", -1);
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.h b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.h
index 2ab6beb6..737c9614 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.h
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.h
@@ -13,7 +13,7 @@
 
 #define NMS_TYPE_IFCFG_RH_STORAGE (nms_ifcfg_rh_storage_get_type())
 #define NMS_IFCFG_RH_STORAGE(obj) \
-    (G_TYPE_CHECK_INSTANCE_CAST((obj), NMS_TYPE_IFCFG_RH_STORAGE, NMSIfcfgRHStorage))
+    (_NM_G_TYPE_CHECK_INSTANCE_CAST((obj), NMS_TYPE_IFCFG_RH_STORAGE, NMSIfcfgRHStorage))
 #define NMS_IFCFG_RH_STORAGE_CLASS(klass) \
     (G_TYPE_CHECK_CLASS_CAST((klass), NMS_TYPE_IFCFG_RH_STORAGE, NMSIfcfgRHStorageClass))
 #define NMS_IS_IFCFG_RH_STORAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NMS_TYPE_IFCFG_RH_STORAGE))
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c
index e1ef8174..85a0eb26 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c
@@ -957,6 +957,7 @@ const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = {
     _KEY_TYPE("IEEE_8021X_SUBJECT_MATCH", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("IEEE_8021X_SYSTEM_CA_CERTS", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("IPADDR", NMS_IFCFG_KEY_TYPE_IS_NUMBERED),
+    _KEY_TYPE("IPV4_AUTO_ROUTE_EXT_GW", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("IPV4_DHCP_TIMEOUT", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("IPV4_DNS_PRIORITY", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("IPV4_FAILURE_FATAL", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
@@ -971,6 +972,7 @@ const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = {
     _KEY_TYPE("IPV6TUNNELIPV4", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("IPV6_ADDR_GEN_MODE", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("IPV6_AUTOCONF", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
+    _KEY_TYPE("IPV6_AUTO_ROUTE_EXT_GW", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("IPV6_DEFAULTDEV", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("IPV6_DEFAULTGW", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("IPV6_DEFROUTE", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
@@ -1061,6 +1063,7 @@ const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = {
     _KEY_TYPE("VLAN_FLAGS", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("VLAN_ID", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("VLAN_INGRESS_PRIORITY_MAP", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
+    _KEY_TYPE("VLAN_PROTOCOL", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("VRF", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("VRF_UUID", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("WAIT_ACTIVATION_DELAY", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
@@ -1080,12 +1083,12 @@ nms_ifcfg_well_known_key_find_info(const char *key, gssize *out_idx)
 
     G_STATIC_ASSERT(G_STRUCT_OFFSET(NMSIfcfgKeyTypeInfo, key_name) == 0);
 
-    idx = nm_utils_array_find_binary_search(nms_ifcfg_well_known_keys,
-                                            sizeof(nms_ifcfg_well_known_keys[0]),
-                                            G_N_ELEMENTS(nms_ifcfg_well_known_keys),
-                                            &key,
-                                            nm_strcmp_p_with_data,
-                                            NULL);
+    idx = nm_array_find_bsearch(nms_ifcfg_well_known_keys,
+                                G_N_ELEMENTS(nms_ifcfg_well_known_keys),
+                                sizeof(nms_ifcfg_well_known_keys[0]),
+                                &key,
+                                nm_strcmp_p_with_data,
+                                NULL);
     NM_SET_OUT(out_idx, idx);
     if (idx < 0)
         return NULL;
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h
index d1f8dbad..31064274 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h
@@ -33,7 +33,7 @@ typedef struct {
     NMSIfcfgKeyTypeFlags key_flags;
 } NMSIfcfgKeyTypeInfo;
 
-extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[256];
+extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[259];
 
 const NMSIfcfgKeyTypeInfo *nms_ifcfg_well_known_key_find_info(const char *key, gssize *out_idx);
 
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 e8948c3d..2ea097fd 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
@@ -1453,6 +1453,7 @@ write_vlan_setting(NMConnection *connection, shvarFile *ifcfg, gboolean *wired,
     svSetValueStr(ifcfg, "TYPE", TYPE_VLAN);
     svSetValueStr(ifcfg, "PHYSDEV", nm_setting_vlan_get_parent(s_vlan));
     svSetValueInt64(ifcfg, "VLAN_ID", nm_setting_vlan_get_id(s_vlan));
+    svSetValueStr(ifcfg, "VLAN_PROTOCOL", nm_setting_vlan_get_protocol(s_vlan));
 
     vlan_flags = nm_setting_vlan_get_flags(s_vlan);
     svSetValueBoolean(ifcfg, "REORDER_HDR", NM_FLAGS_HAS(vlan_flags, NM_VLAN_FLAG_REORDER_HEADERS));
@@ -2359,13 +2360,14 @@ get_route_attributes_string(NMIPRoute *route, int family)
                 /* we also have a corresponding attribute with the numeric value. The
                  * lock setting is handled above. */
             }
-        } else if (nm_streq(names[i], NM_IP_ROUTE_ATTRIBUTE_SCOPE)) {
+        } else if (NM_IN_STRSET(names[i], NM_IP_ROUTE_ATTRIBUTE_SCOPE)) {
             g_string_append_printf(str, "%s %u", names[i], (unsigned) g_variant_get_byte(attr));
         } else if (nm_streq(names[i], NM_IP_ROUTE_ATTRIBUTE_TOS)) {
             g_string_append_printf(str, "%s 0x%02x", names[i], (unsigned) g_variant_get_byte(attr));
         } else if (NM_IN_STRSET(names[i],
+                                NM_IP_ROUTE_ATTRIBUTE_RTO_MIN,
                                 NM_IP_ROUTE_ATTRIBUTE_TABLE,
-                                NM_IP_ROUTE_ATTRIBUTE_RTO_MIN)) {
+                                NM_IP_ROUTE_ATTRIBUTE_WEIGHT)) {
             g_string_append_printf(str, "%s %u", names[i], (unsigned) g_variant_get_uint32(attr));
         } else if (nm_streq(names[i], NM_IP_ROUTE_ATTRIBUTE_QUICKACK)) {
             g_string_append_printf(str, "%s %u", names[i], (unsigned) g_variant_get_boolean(attr));
@@ -2416,8 +2418,8 @@ write_route_file_svformat(const char *filename, NMSettingIPConfig *s_ip4)
 
         svSetValueStr(routefile, addr_key, nm_ip_route_get_dest(route));
 
-        netmask = _nm_utils_ip4_prefix_to_netmask(nm_ip_route_get_prefix(route));
-        svSetValueStr(routefile, netmask_key, _nm_utils_inet4_ntop(netmask, buf));
+        netmask = nm_ip4_addr_netmask_from_prefix(nm_ip_route_get_prefix(route));
+        svSetValueStr(routefile, netmask_key, nm_inet4_ntop(netmask, buf));
 
         svSetValueStr(routefile, gw_key, nm_ip_route_get_next_hop(route));
 
@@ -2826,9 +2828,7 @@ write_ip4_setting(NMConnection *connection,
         if (has_netmask) {
             char buf[INET_ADDRSTRLEN];
 
-            svSetValueStr(ifcfg,
-                          tag,
-                          _nm_utils_inet4_ntop(_nm_utils_ip4_prefix_to_netmask(prefix), buf));
+            svSetValueStr(ifcfg, tag, nm_inet4_ntop(nm_ip4_addr_netmask_from_prefix(prefix), buf));
         }
 
         n++;
@@ -2937,6 +2937,10 @@ write_ip4_setting(NMConnection *connection,
         }
         svSetValueStr(ifcfg, "DHCP_REJECT_SERVERS", str->str);
     }
+
+    svSetValueTernary(ifcfg,
+                      "IPV4_AUTO_ROUTE_EXT_GW",
+                      nm_setting_ip_config_get_auto_route_ext_gw(s_ip4));
 }
 
 static void
@@ -3197,6 +3201,10 @@ write_ip6_setting(NMConnection *connection, shvarFile *ifcfg, GString **out_rout
     write_res_options(ifcfg, s_ip6, "IPV6_RES_OPTIONS");
 
     NM_SET_OUT(out_route6_content, write_route_file(s_ip6));
+
+    svSetValueTernary(ifcfg,
+                      "IPV6_AUTO_ROUTE_EXT_GW",
+                      nm_setting_ip_config_get_auto_route_ext_gw(s_ip6));
 }
 
 static void
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Vlan_test-vlan-interface.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Vlan_test-vlan-interface.cexpected
index 6ad151aa..6373da90 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Vlan_test-vlan-interface.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Vlan_test-vlan-interface.cexpected
@@ -2,6 +2,7 @@ VLAN=yes
 TYPE=Vlan
 PHYSDEV=eth9
 VLAN_ID=43
+VLAN_PROTOCOL=802.1ad
 REORDER_HDR=yes
 GVRP=yes
 VLAN_FLAGS=LOOSE_BINDING
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-1 b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-1
index ecb36c37..5e40362e 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-1
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-1
@@ -1,4 +1,7 @@
 DNS1="192.0.2.1"
+DNS2="192.0.2.2#adfs.afddsaf"
+DNS3="1::2"
+DNS4="1::3#dfdf.er"
 IPADDR="102.0.2.2"
 GATEWAY="192.0.2.1"
 NETMASK="255.254.0.0"
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-1.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-1.cexpected
index 87493ac2..d0eeeb99 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-1.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-1.cexpected
@@ -1,4 +1,7 @@
 DNS1=192.0.2.1
+DNS2=192.0.2.2#adfs.afddsaf
+DNS3=1::2
+DNS4=1::3#dfdf.er
 IPADDR=102.0.2.2
 GATEWAY=192.0.2.1
 NETMASK=255.254.0.0
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-interface b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-interface
index d8d9193f..38fe4069 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-interface
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-interface
@@ -5,6 +5,7 @@ PHYSDEV=eth9
 VLAN_FLAGS=GVRP,LOOSE_BINDING
 VLAN_INGRESS_PRIORITY_MAP=0:1,2:5
 VLAN_EGRESS_PRIORITY_MAP=12:3,14:7,3:1
+VLAN_PROTOCOL=802.1ad
 ONBOOT=yes
 BOOTPROTO=static
 IPADDR=192.168.43.149
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-static-routes b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-static-routes
index 7faf49bd..fac9a5a2 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-static-routes
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-static-routes
@@ -9,7 +9,7 @@ IPV6INIT=no
 MTU=1492
 NM_CONTROLLED=yes
 DNS1=4.2.2.1
-DNS2=4.2.2.2
+DNS2=4.2.2.2#dns.name
 IPADDR=192.168.1.5
 NETMASK=255.255.255.0
 GATEWAY=192.168.1.1
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes
index 717ad1ac..728e8e96 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/route-test-wired-static-routes
@@ -6,7 +6,7 @@ ADDRESS1=44.55.66.77
 NETMASK1=255.255.255.255
 GATEWAY1=192.168.1.7
 METRIC1=3
-OPTIONS1="mtu lock 9000 cwnd 12 src 1.1.1.1 tos 0x28 window 30000 scope 10 initcwnd lock 13 initrwnd 14 rto_min 300 advmss 1300 quickack 1"
+OPTIONS1="mtu lock 9000 cwnd 12 src 1.1.1.1 tos 0x28 window 30000 scope 10 initcwnd lock 13 initrwnd 14 rto_min 300 advmss 1300 quickack 1 weight 5"
 
 ADDRESS2=44.55.66.78
 NETMASK2=255.255.255.255
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 886a605f..40ff7c67 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
@@ -461,6 +461,7 @@ test_read_netmask_1(void)
     gs_free char                 *content    = NULL;
     NMSettingConnection          *s_con;
     NMSettingIPConfig            *s_ip4;
+    NMSettingIPConfig            *s_ip6;
     NMIPAddress                  *ip4_addr;
     const char                   *FILENAME = TEST_IFCFG_DIR "/ifcfg-netmask-1";
 
@@ -470,12 +471,20 @@ test_read_netmask_1(void)
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System netmask-1");
 
     s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
-    g_assert_cmpuint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 1);
+    g_assert_cmpuint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 2);
+    g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip4, 0), ==, "192.0.2.1");
+    g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip4, 1), ==, "192.0.2.2#adfs.afddsaf");
+
     ip4_addr = nm_setting_ip_config_get_address(s_ip4, 0);
     g_assert(ip4_addr);
     g_assert_cmpstr(nm_ip_address_get_address(ip4_addr), ==, "102.0.2.2");
     g_assert_cmpint(nm_ip_address_get_prefix(ip4_addr), ==, 15);
 
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
+    g_assert_cmpuint(nm_setting_ip_config_get_num_dns(s_ip6), ==, 2);
+    g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip6, 0), ==, "1::2");
+    g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip6, 1), ==, "1::3#dfdf.er");
+
     nmtst_assert_connection_verifies_without_normalization(connection);
 
     content = nmtst_file_get_contents(FILENAME);
@@ -1356,6 +1365,7 @@ test_read_wired_static_routes(void)
     nmtst_assert_route_attribute_byte(ip4_route, NM_IP_ROUTE_ATTRIBUTE_TOS, 0x28);
     nmtst_assert_route_attribute_uint32(ip4_route, NM_IP_ROUTE_ATTRIBUTE_WINDOW, 30000);
     nmtst_assert_route_attribute_uint32(ip4_route, NM_IP_ROUTE_ATTRIBUTE_CWND, 12);
+    nmtst_assert_route_attribute_uint32(ip4_route, NM_IP_ROUTE_ATTRIBUTE_WEIGHT, 5);
     nmtst_assert_route_attribute_uint32(ip4_route, NM_IP_ROUTE_ATTRIBUTE_INITCWND, 13);
     nmtst_assert_route_attribute_uint32(ip4_route, NM_IP_ROUTE_ATTRIBUTE_INITRWND, 14);
     nmtst_assert_route_attribute_uint32(ip4_route, NM_IP_ROUTE_ATTRIBUTE_MTU, 9000);
@@ -1390,6 +1400,10 @@ test_read_wired_static_routes(void)
     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_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 2);
+    g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip4, 0), ==, "4.2.2.1");
+    g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip4, 1), ==, "4.2.2.2#dns.name");
 }
 
 static void
@@ -2036,11 +2050,11 @@ test_read_wired_aliases_good(gconstpointer test_data)
                                                           NULL};
     const char                   *expected_address_3[] = {"192.168.1.5", "192.168.1.6", NULL};
     const char                   *expected_label_0[]   = {
-                            NULL,
-                            "aliasem0:1",
-                            "aliasem0:2",
-                            "aliasem0:99",
-                            NULL,
+        NULL,
+        "aliasem0:1",
+        "aliasem0:2",
+        "aliasem0:99",
+        NULL,
     };
     const char *expected_label_3[] = {
         NULL,
@@ -2082,7 +2096,7 @@ test_read_wired_aliases_good(gconstpointer test_data)
         g_assert(ip4_addr != NULL);
 
         addr = nm_ip_address_get_address(ip4_addr);
-        g_assert(nm_utils_ipaddr_is_valid(AF_INET, addr));
+        g_assert(nm_inet_is_valid(AF_INET, addr));
 
         for (j = 0; j < expected_num_addresses; j++) {
             if (!g_strcmp0(addr, expected_address[j]))
@@ -4266,6 +4280,7 @@ static void
 test_write_wired_static(void)
 {
     nmtst_auto_unlinkfile char   *testfile   = NULL;
+    nmtst_auto_unlinkfile char   *route4file = NULL;
     nmtst_auto_unlinkfile char   *route6file = NULL;
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
@@ -4275,6 +4290,7 @@ test_write_wired_static(void)
     NMSettingIPConfig            *s_ip6, *reread_s_ip6;
     NMIPAddress                  *addr;
     NMIPAddress                  *addr6;
+    NMIPRoute                    *route4;
     NMIPRoute                    *route6;
     GError                       *error = NULL;
 
@@ -4379,6 +4395,13 @@ test_write_wired_static(void)
     nm_setting_ip_config_add_route(s_ip6, route6);
     nm_ip_route_unref(route6);
 
+    route4 = nm_ip_route_new(AF_INET, "1.1.1.1", 24, "1.2.3.4", 99, &error);
+    g_assert_no_error(error);
+    nm_ip_route_set_attribute(route4, NM_IP_ROUTE_ATTRIBUTE_CWND, g_variant_new_uint32(100));
+    nm_ip_route_set_attribute(route4, NM_IP_ROUTE_ATTRIBUTE_WEIGHT, g_variant_new_uint32(5));
+    nm_setting_ip_config_add_route(s_ip4, route4);
+    nm_ip_route_unref(route4);
+
     /* DNS servers */
     nm_setting_ip_config_add_dns(s_ip6, "fade:0102:0103::face");
     nm_setting_ip_config_add_dns(s_ip6, "cafe:ffff:eeee:dddd:cccc:bbbb:aaaa:feed");
@@ -4390,7 +4413,9 @@ test_write_wired_static(void)
     nmtst_assert_connection_verifies(connection);
 
     _writer_new_connection(connection, TEST_SCRATCH_DIR, &testfile);
+
     route6file = utils_get_route6_path(testfile);
+    route4file = utils_get_route_path(testfile);
 
     reread = _connection_from_file(testfile, NULL, TYPE_ETHERNET, NULL);
 
@@ -7754,6 +7779,7 @@ test_read_vlan_interface(void)
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth9");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 43);
+    g_assert_cmpstr(nm_setting_vlan_get_protocol(s_vlan), ==, "802.1ad");
     g_assert_cmpint(nm_setting_vlan_get_flags(s_vlan),
                     ==,
                     NM_VLAN_FLAG_GVRP | NM_VLAN_FLAG_LOOSE_BINDING | NM_VLAN_FLAG_REORDER_HEADERS);
@@ -7930,6 +7956,7 @@ test_read_vlan_flags_1(void)
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth9");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 44);
+    g_assert_cmpstr(nm_setting_vlan_get_protocol(s_vlan), ==, NULL);
     g_assert_cmpint(nm_setting_vlan_get_flags(s_vlan),
                     ==,
                     NM_VLAN_FLAG_LOOSE_BINDING | NM_VLAN_FLAG_REORDER_HEADERS);
diff --git a/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c b/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c
index a1d6781b..3bdd78c9 100644
--- a/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c
+++ b/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c
@@ -451,7 +451,7 @@ update_ip4_setting_from_if_block(NMConnection *connection, if_block *block, GErr
                             netmask_v);
                 return FALSE;
             } else {
-                netmask_int = _nm_utils_ip4_netmask_to_prefix(tmp_mask);
+                netmask_int = nm_ip4_addr_netmask_to_prefix(tmp_mask);
             }
         }
 
@@ -470,7 +470,7 @@ update_ip4_setting_from_if_block(NMConnection *connection, if_block *block, GErr
         /* gateway */
         gateway_v = ifparser_getkey(block, "gateway");
         if (gateway_v) {
-            if (!nm_utils_ipaddr_is_valid(AF_INET, gateway_v)) {
+            if (!nm_inet_is_valid(AF_INET, gateway_v)) {
                 g_set_error(error,
                             NM_SETTINGS_ERROR,
                             NM_SETTINGS_ERROR_INVALID_CONNECTION,
@@ -579,7 +579,7 @@ update_ip6_setting_from_if_block(NMConnection *connection, if_block *block, GErr
 
         gateway_v = ifparser_getkey(block, "gateway");
         if (gateway_v) {
-            if (!nm_utils_ipaddr_is_valid(AF_INET6, gateway_v)) {
+            if (!nm_inet_is_valid(AF_INET6, gateway_v)) {
                 g_set_error(error,
                             NM_SETTINGS_ERROR,
                             NM_SETTINGS_ERROR_INVALID_CONNECTION,
diff --git a/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.h b/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.h
index edf1b317..570bf2a3 100644
--- a/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.h
+++ b/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.h
@@ -11,7 +11,7 @@
 
 #define NMS_TYPE_IFUPDOWN_PLUGIN (nms_ifupdown_plugin_get_type())
 #define NMS_IFUPDOWN_PLUGIN(obj) \
-    (G_TYPE_CHECK_INSTANCE_CAST((obj), NMS_TYPE_IFUPDOWN_PLUGIN, NMSIfupdownPlugin))
+    (_NM_G_TYPE_CHECK_INSTANCE_CAST((obj), NMS_TYPE_IFUPDOWN_PLUGIN, NMSIfupdownPlugin))
 #define NMS_IFUPDOWN_PLUGIN_CLASS(klass) \
     (G_TYPE_CHECK_CLASS_CAST((klass), NMS_TYPE_IFUPDOWN_PLUGIN, NMSIfupdownPluginClass))
 #define NMS_IS_IFUPDOWN_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NMS_TYPE_IFUPDOWN_PLUGIN))
diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-plugin.h b/src/core/settings/plugins/keyfile/nms-keyfile-plugin.h
index 19e4122d..03a47526 100644
--- a/src/core/settings/plugins/keyfile/nms-keyfile-plugin.h
+++ b/src/core/settings/plugins/keyfile/nms-keyfile-plugin.h
@@ -14,7 +14,7 @@
 
 #define NMS_TYPE_KEYFILE_PLUGIN (nms_keyfile_plugin_get_type())
 #define NMS_KEYFILE_PLUGIN(obj) \
-    (G_TYPE_CHECK_INSTANCE_CAST((obj), NMS_TYPE_KEYFILE_PLUGIN, NMSKeyfilePlugin))
+    (_NM_G_TYPE_CHECK_INSTANCE_CAST((obj), NMS_TYPE_KEYFILE_PLUGIN, NMSKeyfilePlugin))
 #define NMS_KEYFILE_PLUGIN_CLASS(klass) \
     (G_TYPE_CHECK_CLASS_CAST((klass), NMS_TYPE_KEYFILE_PLUGIN, NMSKeyfilePluginClass))
 #define NMS_IS_KEYFILE_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NMS_TYPE_KEYFILE_PLUGIN))
diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-storage.h b/src/core/settings/plugins/keyfile/nms-keyfile-storage.h
index 8343cb2b..66521618 100644
--- a/src/core/settings/plugins/keyfile/nms-keyfile-storage.h
+++ b/src/core/settings/plugins/keyfile/nms-keyfile-storage.h
@@ -14,7 +14,7 @@
 
 #define NMS_TYPE_KEYFILE_STORAGE (nms_keyfile_storage_get_type())
 #define NMS_KEYFILE_STORAGE(obj) \
-    (G_TYPE_CHECK_INSTANCE_CAST((obj), NMS_TYPE_KEYFILE_STORAGE, NMSKeyfileStorage))
+    (_NM_G_TYPE_CHECK_INSTANCE_CAST((obj), NMS_TYPE_KEYFILE_STORAGE, NMSKeyfileStorage))
 #define NMS_KEYFILE_STORAGE_CLASS(klass) \
     (G_TYPE_CHECK_CLASS_CAST((klass), NMS_TYPE_KEYFILE_STORAGE, NMSKeyfileStorageClass))
 #define NMS_IS_KEYFILE_STORAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NMS_TYPE_KEYFILE_STORAGE))
diff --git a/src/core/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection b/src/core/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection
index f9ccc003..eb3754a2 100644
--- a/src/core/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection
+++ b/src/core/settings/plugins/keyfile/tests/keyfiles/Test_Wired_Connection
@@ -36,7 +36,7 @@ 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,type=unicast
+routes11_options=cwnd=10,lock-cwnd=true,mtu=1430,src=7.7.7.7,type=unicast,weight=5
 routes12=1.2.3.4/32
 routes12_options=type=local
 address30=1.2.3.30/24
diff --git a/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c b/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c
index 47be3a5e..83019bab 100644
--- a/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c
+++ b/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c
@@ -311,6 +311,7 @@ test_read_valid_wired_connection(void)
 
     nmtst_assert_route_attribute_uint32(route, NM_IP_ROUTE_ATTRIBUTE_CWND, 10);
     nmtst_assert_route_attribute_uint32(route, NM_IP_ROUTE_ATTRIBUTE_MTU, 1430);
+    nmtst_assert_route_attribute_uint32(route, NM_IP_ROUTE_ATTRIBUTE_WEIGHT, 5);
     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");
@@ -495,6 +496,7 @@ test_write_wired_connection(void)
     g_assert_no_error(error);
     nm_ip_route_set_attribute(rt, NM_IP_ROUTE_ATTRIBUTE_CWND, g_variant_new_uint32(10));
     nm_ip_route_set_attribute(rt, NM_IP_ROUTE_ATTRIBUTE_MTU, g_variant_new_uint32(1492));
+    nm_ip_route_set_attribute(rt, NM_IP_ROUTE_ATTRIBUTE_WEIGHT, g_variant_new_uint32(5));
     nm_ip_route_set_attribute(rt, NM_IP_ROUTE_ATTRIBUTE_SRC, g_variant_new_string("1.2.3.4"));
     g_assert(nm_setting_ip_config_add_route(s_ip4, rt));
     nm_ip_route_unref(rt);
@@ -2298,7 +2300,7 @@ test_read_missing_id_uuid(void)
     const char                   *FILENAME       = TEST_KEYFILES_DIR "/Test_Missing_ID_UUID";
     const char                    F[] = "keyfile\0" TEST_KEYFILES_DIR "/Test_Missing_ID_UUID";
 
-    expected_uuid = nm_uuid_generate_from_strings("keyfile", FILENAME, NULL);
+    expected_uuid = nm_uuid_generate_from_strings_old("keyfile", FILENAME);
 
     expected_uuid2 =
         nm_uuid_generate_from_string_str(F, sizeof(F), NM_UUID_TYPE_VERSION3, &nm_uuid_ns_1);