summary refs log tree commit diff
path: root/src/core/devices
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2022-03-23 11:51:40 +0100
committerMichael Biebl <biebl@debian.org>2022-03-23 11:51:40 +0100
commit8c623dddbdebe354cb94bfc559a5371a14865317 (patch)
treeb8c48e415a98834ca1e19c8fa677ac04b9c51d4a /src/core/devices
parent4f887bccf1cde84106588536584a2d54a5b4e6e5 (diff)
New upstream version 1.36.4 upstream/1.36.4
Diffstat (limited to 'src/core/devices')
-rw-r--r--src/core/devices/nm-device-ethernet.c37
-rw-r--r--src/core/devices/nm-device-ppp.c7
-rw-r--r--src/core/devices/team/nm-device-team.c2
3 files changed, 35 insertions, 11 deletions
diff --git a/src/core/devices/nm-device-ethernet.c b/src/core/devices/nm-device-ethernet.c
index 6e18d119..407f8ab8 100644
--- a/src/core/devices/nm-device-ethernet.c
+++ b/src/core/devices/nm-device-ethernet.c
@@ -1160,14 +1160,12 @@ _ppp_mgr_callback(NMPppMgr *ppp_mgr, const NMPppMgrCallbackData *callback_data,
 
     if (device_state < NM_DEVICE_STATE_IP_CONFIG) {
         if (callback_data->data.state >= NM_PPP_MGR_STATE_HAVE_IFINDEX) {
-            gs_free char         *old_name = NULL;
-            gs_free_error GError *error    = NULL;
+            gs_free char *old_name = NULL;
 
-            if (!nm_device_take_over_link(device, callback_data->data.ifindex, &old_name, &error)) {
+            if (!nm_device_set_ip_ifindex(device, callback_data->data.ifindex)) {
                 _LOGW(LOGD_DEVICE | LOGD_PPP,
-                      "could not take control of link %d: %s",
-                      callback_data->data.ifindex,
-                      error->message);
+                      "could not set ip-ifindex %d",
+                      callback_data->data.ifindex);
                 _ppp_mgr_cleanup(self);
                 nm_device_state_changed(device,
                                         NM_DEVICE_STATE_FAILED,
@@ -1892,6 +1890,32 @@ is_available(NMDevice *device, NMDeviceCheckDevAvailableFlags flags)
     return !!nm_device_get_initial_hw_address(device);
 }
 
+static const char *
+get_ip_method_auto(NMDevice *device, int addr_family)
+{
+    NMSettingConnection *s_con;
+
+    s_con = nm_device_get_applied_setting(device, NM_TYPE_SETTING_CONNECTION);
+    g_return_val_if_fail(s_con,
+                         NM_IS_IPv4(addr_family) ? NM_SETTING_IP4_CONFIG_METHOD_AUTO
+                                                 : NM_SETTING_IP6_CONFIG_METHOD_AUTO);
+
+    if (!nm_streq(nm_setting_connection_get_connection_type(s_con),
+                  NM_SETTING_PPPOE_SETTING_NAME)) {
+        return NM_DEVICE_CLASS(nm_device_ethernet_parent_class)
+            ->get_ip_method_auto(device, addr_family);
+    }
+
+    if (NM_IS_IPv4(addr_family)) {
+        /* We cannot do DHCPv4 on a PPP link, instead we get "auto" IP addresses
+         * by pppd. Return "manual" here, which has the suitable effect to a
+         * (zero) manual addresses in addition. */
+        return NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
+    }
+
+    return NM_SETTING_IP6_CONFIG_METHOD_AUTO;
+}
+
 static gboolean
 can_reapply_change(NMDevice   *device,
                    const char *setting_name,
@@ -2047,6 +2071,7 @@ nm_device_ethernet_class_init(NMDeviceEthernetClass *klass)
     device_class->act_stage2_config                              = act_stage2_config;
     device_class->act_stage3_ip_config                           = act_stage3_ip_config;
     device_class->get_configured_mtu                             = get_configured_mtu;
+    device_class->get_ip_method_auto                             = get_ip_method_auto;
     device_class->deactivate                                     = deactivate;
     device_class->get_s390_subchannels                           = get_s390_subchannels;
     device_class->update_connection                              = update_connection;
diff --git a/src/core/devices/nm-device-ppp.c b/src/core/devices/nm-device-ppp.c
index 5ff32401..61e32348 100644
--- a/src/core/devices/nm-device-ppp.c
+++ b/src/core/devices/nm-device-ppp.c
@@ -222,10 +222,9 @@ get_ip_method_auto(NMDevice *device, int addr_family)
         return NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
     }
 
-    /* We can do autoconf6 on an PPP link, but we should already get an IPv6
-     * address from pppd. Use that instead. We however do want to generate our
-     * (own) IPv6 link local address, so return "link-local". */
-    return NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL;
+    /* We get a interface identifier via IPV6CP, used to construct a link-local
+     * address. Method auto means autoconf6 as usual.*/
+    return NM_SETTING_IP6_CONFIG_METHOD_AUTO;
 }
 
 static gboolean
diff --git a/src/core/devices/team/nm-device-team.c b/src/core/devices/team/nm-device-team.c
index 16cd2e87..b67c7100 100644
--- a/src/core/devices/team/nm-device-team.c
+++ b/src/core/devices/team/nm-device-team.c
@@ -957,7 +957,7 @@ constructed(GObject *object)
     NMDeviceTeamPrivate   *priv    = NM_DEVICE_TEAM_GET_PRIVATE(device);
     gs_free char          *tmp_str = NULL;
     gs_unref_object GFile *file    = NULL;
-    GError                *error;
+    gs_free_error GError  *error   = NULL;
 
     G_OBJECT_CLASS(nm_device_team_parent_class)->constructed(object);