summary refs log tree commit diff
path: root/src/core/NetworkManagerUtils.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2023-02-10 11:50:34 +0100
committerMichael Biebl <biebl@debian.org>2023-02-10 11:50:34 +0100
commit1372848511cb896b80b51ed1a3e9606bd9816631 (patch)
tree674792b9385bdef935988894b45f06b2af39f88c /src/core/NetworkManagerUtils.c
parent40ec077ea305994c1fc2130add6787ca0c73e2c6 (diff)
New upstream version 1.42.0 upstream/1.42.0
Diffstat (limited to 'src/core/NetworkManagerUtils.c')
-rw-r--r--src/core/NetworkManagerUtils.c73
1 files changed, 37 insertions, 36 deletions
diff --git a/src/core/NetworkManagerUtils.c b/src/core/NetworkManagerUtils.c
index f5b7666b..6f4c60f8 100644
--- a/src/core/NetworkManagerUtils.c
+++ b/src/core/NetworkManagerUtils.c
@@ -419,8 +419,8 @@ route_compare(NMIPRoute *route1, NMIPRoute *route2, gint64 default_metric)
         nm_assert_not_reached();
     if (!inet_pton(family, nm_ip_route_get_dest(route2), &a2))
         nm_assert_not_reached();
-    nm_utils_ipx_address_clear_host_address(family, &a1, NULL, plen);
-    nm_utils_ipx_address_clear_host_address(family, &a2, NULL, plen);
+    nm_ip_addr_clear_host_address(family, &a1, NULL, plen);
+    nm_ip_addr_clear_host_address(family, &a2, NULL, plen);
     NM_CMP_DIRECT_MEMCMP(&a1, &a2, nm_utils_addr_family_to_size(family));
 
     return 0;
@@ -1382,11 +1382,16 @@ nm_utils_ip_route_attribute_to_platform(int                addr_family,
 
         GET_ATTR(NM_IP_ROUTE_ATTRIBUTE_TOS, r4->tos, BYTE, byte, 0);
         GET_ATTR(NM_IP_ROUTE_ATTRIBUTE_SCOPE, scope, BYTE, byte, RT_SCOPE_NOWHERE);
+        GET_ATTR(NM_IP_ROUTE_ATTRIBUTE_WEIGHT, r4->weight, UINT32, uint32, 0);
         r4->scope_inv = nm_platform_route_scope_inv(scope);
     }
 
+    /* Note that for IPv4 routes in kernel, the onlink flag can be set for
+     * each next hop separately (rtnh_flags). Not for NetworkManager. We can
+     * only merge routes as ECMP routes (when setting a weight) if they all
+     * share the same onlink flag. See NM_PLATFORM_IP_ROUTE_CMP_TYPE_ECMP_ID.
+     * That simplifies the code. */
     GET_ATTR(NM_IP_ROUTE_ATTRIBUTE_ONLINK, onlink, BOOLEAN, boolean, FALSE);
-
     r->r_rtm_flags = ((onlink) ? (unsigned) RTNH_F_ONLINK : 0u);
 
     GET_ATTR(NM_IP_ROUTE_ATTRIBUTE_ADVMSS, r->mss, UINT32, uint32, 0);
@@ -1418,11 +1423,11 @@ nm_utils_ip_route_attribute_to_platform(int                addr_family,
         && g_variant_is_of_type(variant, G_VARIANT_TYPE_STRING)) {
         int prefix;
 
-        if (nm_utils_parse_inaddr_prefix_bin(addr_family,
-                                             g_variant_get_string(variant, NULL),
-                                             NULL,
-                                             &addr,
-                                             &prefix)) {
+        if (nm_inet_parse_with_prefix_bin(addr_family,
+                                          g_variant_get_string(variant, NULL),
+                                          NULL,
+                                          &addr,
+                                          &prefix)) {
             if (prefix < 0)
                 prefix = 128;
             r6->src      = addr.addr6;
@@ -1444,7 +1449,7 @@ nm_utils_ip_addresses_to_dbus(int                          addr_family,
     const int        IS_IPv4 = NM_IS_IPv4(addr_family);
     GVariantBuilder  builder_data;
     GVariantBuilder  builder_legacy;
-    char             addr_str[NM_UTILS_INET_ADDRSTRLEN];
+    char             addr_str[NM_INET_ADDRSTRLEN];
     NMDedupMultiIter iter;
     const NMPObject *obj;
     guint            i;
@@ -1479,8 +1484,7 @@ nm_utils_ip_addresses_to_dbus(int                          addr_family,
                 &addr_builder,
                 "{sv}",
                 "address",
-                g_variant_new_string(
-                    nm_utils_inet_ntop(addr_family, address->ax.address_ptr, addr_str)));
+                g_variant_new_string(nm_inet_ntop(addr_family, address->ax.address_ptr, addr_str)));
 
             g_variant_builder_add(&addr_builder,
                                   "{sv}",
@@ -1497,11 +1501,10 @@ nm_utils_ip_addresses_to_dbus(int                          addr_family,
                     p = &address->a6.peer_address;
             }
             if (p) {
-                g_variant_builder_add(
-                    &addr_builder,
-                    "{sv}",
-                    "peer",
-                    g_variant_new_string(nm_utils_inet_ntop(addr_family, p, addr_str)));
+                g_variant_builder_add(&addr_builder,
+                                      "{sv}",
+                                      "peer",
+                                      g_variant_new_string(nm_inet_ntop(addr_family, p, addr_str)));
             }
 
             if (IS_IPv4) {
@@ -1559,7 +1562,7 @@ nm_utils_ip_routes_to_dbus(int                          addr_family,
     const NMPObject *obj;
     GVariantBuilder  builder_data;
     GVariantBuilder  builder_legacy;
-    char             addr_str[NM_UTILS_INET_ADDRSTRLEN];
+    char             addr_str[NM_INET_ADDRSTRLEN];
 
     nm_assert_addr_family(addr_family);
 
@@ -1580,14 +1583,12 @@ nm_utils_ip_routes_to_dbus(int                          addr_family,
         nm_assert(r);
         nm_assert(r->rx.plen <= 8u * nm_utils_addr_family_to_size(addr_family));
         nm_assert(!IS_IPv4
-                  || r->r4.network
-                         == nm_utils_ip4_address_clear_host_address(r->r4.network, r->r4.plen));
-        nm_assert(
-            IS_IPv4
-            || (memcmp(&r->r6.network,
-                       nm_utils_ip6_address_clear_host_address(&n, &r->r6.network, r->r6.plen),
-                       sizeof(n))
-                == 0));
+                  || r->r4.network == nm_ip4_addr_clear_host_address(r->r4.network, r->r4.plen));
+        nm_assert(IS_IPv4
+                  || (memcmp(&r->r6.network,
+                             nm_ip6_addr_clear_host_address(&n, &r->r6.network, r->r6.plen),
+                             sizeof(n))
+                      == 0));
 
         if (r->rx.type_coerced != nm_platform_route_type_coerce(RTN_UNICAST))
             continue;
@@ -1602,7 +1603,7 @@ nm_utils_ip_routes_to_dbus(int                          addr_family,
                 &route_builder,
                 "{sv}",
                 "dest",
-                g_variant_new_string(nm_utils_inet_ntop(addr_family, r->rx.network_ptr, addr_str)));
+                g_variant_new_string(nm_inet_ntop(addr_family, r->rx.network_ptr, addr_str)));
 
             g_variant_builder_add(&route_builder,
                                   "{sv}",
@@ -1615,7 +1616,7 @@ nm_utils_ip_routes_to_dbus(int                          addr_family,
                     &route_builder,
                     "{sv}",
                     "next-hop",
-                    g_variant_new_string(nm_utils_inet_ntop(addr_family, gateway, addr_str)));
+                    g_variant_new_string(nm_inet_ntop(addr_family, gateway, addr_str)));
             }
 
             g_variant_builder_add(&route_builder,
@@ -1680,7 +1681,7 @@ nm_utils_platform_capture_ip_setting(NMPlatform *platform,
     NMDedupMultiIter                   iter;
     const NMPObject                   *obj;
     const char                        *method = NULL;
-    char                               sbuf[NM_UTILS_INET_ADDRSTRLEN];
+    char                               sbuf[NM_INET_ADDRSTRLEN];
     const NMPlatformIPXRoute          *best_default_route = NULL;
 
     s_ip =
@@ -1782,13 +1783,13 @@ nm_utils_platform_capture_ip_setting(NMPlatform *platform,
     }
 
     if (best_default_route && nm_setting_ip_config_get_num_addresses(s_ip) > 0) {
-        g_object_set(s_ip,
-                     NM_SETTING_IP_CONFIG_GATEWAY,
-                     nm_utils_inet_ntop(
-                         addr_family,
+        g_object_set(
+            s_ip,
+            NM_SETTING_IP_CONFIG_GATEWAY,
+            nm_inet_ntop(addr_family,
                          nm_platform_ip_route_get_gateway(addr_family, &best_default_route->rx),
                          sbuf),
-                     NULL);
+            NULL);
     }
 
     return NM_SETTING(g_steal_pointer(&s_ip));
@@ -1839,7 +1840,7 @@ nm_platform_setup(NMPlatform *instance)
  * Returns: (transfer none): The #NMPlatform singleton reference.
  */
 NMPlatform *
-nm_platform_get()
+nm_platform_get(void)
 {
     g_assert(singleton_instance);
 
@@ -1851,11 +1852,11 @@ nm_platform_get()
 void
 nm_linux_platform_setup(void)
 {
-    nm_platform_setup(nm_linux_platform_new(FALSE, FALSE, FALSE));
+    nm_platform_setup(nm_linux_platform_new(NULL, FALSE, FALSE, FALSE));
 }
 
 void
 nm_linux_platform_setup_with_tc_cache(void)
 {
-    nm_platform_setup(nm_linux_platform_new(FALSE, FALSE, TRUE));
+    nm_platform_setup(nm_linux_platform_new(NULL, FALSE, FALSE, TRUE));
 }