diff --git a/kcms/cellularnetwork/modem.cpp b/kcms/cellularnetwork/modem.cpp index 564010b5..240bb16e 100644 --- a/kcms/cellularnetwork/modem.cpp +++ b/kcms/cellularnetwork/modem.cpp @@ -370,6 +370,9 @@ QCoro::Task Modem::addProfile(QString name, QString apn, QString username, gsmSetting->setInitialized(true); + NetworkManager::Ipv6Setting::Ptr ipv6Setting = settings->setting(NetworkManager::Setting::Ipv6).dynamicCast(); + ipv6Setting->setMethod(NetworkManager::Ipv6Setting::ConfigMethod::Automatic); + QDBusReply reply = co_await NetworkManager::addAndActivateConnection(settings->toMap(), m_nmModem->uni(), ""); if (!reply.isValid()) { qWarning() << QStringLiteral("Error adding connection:") << reply.error().message(); @@ -420,6 +423,9 @@ QCoro::Task Modem::updateProfile(QString connectionUni, QString name, QStr gsmSetting->setInitialized(true); + NetworkManager::Ipv6Setting::Ptr ipv6Setting = conSettings->setting(NetworkManager::Setting::Ipv6).dynamicCast(); + ipv6Setting->setMethod(NetworkManager::Ipv6Setting::ConfigMethod::Automatic); + QDBusReply reply = con->update(conSettings->toMap()); if (!reply.isValid()) { qWarning() << QStringLiteral("Error updating connection settings for") << connectionUni << QStringLiteral(":") << reply.error().message() diff --git a/kcms/cellularnetwork/modem.h b/kcms/cellularnetwork/modem.h index 12fee4cf..556cd96b 100644 --- a/kcms/cellularnetwork/modem.h +++ b/kcms/cellularnetwork/modem.h @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include diff --git a/kded/autodetectapn/autodetectapn.cpp b/kded/autodetectapn/autodetectapn.cpp index 85393301..eb2109e9 100644 --- a/kded/autodetectapn/autodetectapn.cpp +++ b/kded/autodetectapn/autodetectapn.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -96,6 +97,14 @@ QCoro::Task AutoDetectAPN::checkAndAddAutodetectedAPN() gsmSetting->setHomeOnly(false); // TODO respect modem roaming settings? gsmSetting->setInitialized(true); + if ( + detectedAPN.protocol == QStringLiteral("IPV6") + || detectedAPN.protocol == QStringLiteral("IPV4V6") + ) { + NetworkManager::Ipv6Setting::Ptr ipv6Setting = settings->setting(NetworkManager::Setting::Ipv6).dynamicCast(); + ipv6Setting->setMethod(NetworkManager::Ipv6Setting::ConfigMethod::Automatic); + } + QDBusReply reply = co_await NetworkManager::addAndActivateConnection(settings->toMap(), nmModem->uni(), ""); if (!reply.isValid()) { qCWarning(LOGGING_CATEGORY) << "Error adding autodetected connection:" << reply.error().message(); @@ -152,7 +161,7 @@ std::optional AutoDetectAPN::findAPN(const QString &ope QString mccmnc = element.attribute("mcc") + element.attribute("mnc"); if (mccmnc == operatorCode) { - APNEntry entry{element.attribute("apn"), element.attribute("carrier")}; + APNEntry entry{element.attribute("apn"), element.attribute("carrier"), element.attribute("protocol", "IPV4V6")}; candidates.push_back(entry); // check if we have an MVNO match and prioritize that diff --git a/kded/autodetectapn/autodetectapn.h b/kded/autodetectapn/autodetectapn.h index ec5797f3..c7b6bb1b 100644 --- a/kded/autodetectapn/autodetectapn.h +++ b/kded/autodetectapn/autodetectapn.h @@ -21,6 +21,7 @@ public: struct APNEntry { QString apn; QString carrier; + QString protocol; }; std::optional findAPN(const QString &operatorCode, const QString &gid1, const QString &spn, const QString &imsi) const;