Force to set ipv6 method to auto

This commit is contained in:
Florian RICHER 2024-05-19 01:20:22 +02:00 committed by Devin Lin
parent 17e92e72fc
commit 24d5a2f223
4 changed files with 18 additions and 1 deletions

View file

@ -370,6 +370,9 @@ QCoro::Task<void> Modem::addProfile(QString name, QString apn, QString username,
gsmSetting->setInitialized(true); gsmSetting->setInitialized(true);
NetworkManager::Ipv6Setting::Ptr ipv6Setting = settings->setting(NetworkManager::Setting::Ipv6).dynamicCast<NetworkManager::Ipv6Setting>();
ipv6Setting->setMethod(NetworkManager::Ipv6Setting::ConfigMethod::Automatic);
QDBusReply<QDBusObjectPath> reply = co_await NetworkManager::addAndActivateConnection(settings->toMap(), m_nmModem->uni(), ""); QDBusReply<QDBusObjectPath> reply = co_await NetworkManager::addAndActivateConnection(settings->toMap(), m_nmModem->uni(), "");
if (!reply.isValid()) { if (!reply.isValid()) {
qWarning() << QStringLiteral("Error adding connection:") << reply.error().message(); qWarning() << QStringLiteral("Error adding connection:") << reply.error().message();
@ -420,6 +423,9 @@ QCoro::Task<void> Modem::updateProfile(QString connectionUni, QString name, QStr
gsmSetting->setInitialized(true); gsmSetting->setInitialized(true);
NetworkManager::Ipv6Setting::Ptr ipv6Setting = conSettings->setting(NetworkManager::Setting::Ipv6).dynamicCast<NetworkManager::Ipv6Setting>();
ipv6Setting->setMethod(NetworkManager::Ipv6Setting::ConfigMethod::Automatic);
QDBusReply<void> reply = con->update(conSettings->toMap()); QDBusReply<void> reply = con->update(conSettings->toMap());
if (!reply.isValid()) { if (!reply.isValid()) {
qWarning() << QStringLiteral("Error updating connection settings for") << connectionUni << QStringLiteral(":") << reply.error().message() qWarning() << QStringLiteral("Error updating connection settings for") << connectionUni << QStringLiteral(":") << reply.error().message()

View file

@ -14,6 +14,7 @@
#include <NetworkManagerQt/CdmaSetting> #include <NetworkManagerQt/CdmaSetting>
#include <NetworkManagerQt/ConnectionSettings> #include <NetworkManagerQt/ConnectionSettings>
#include <NetworkManagerQt/GsmSetting> #include <NetworkManagerQt/GsmSetting>
#include <NetworkManagerQt/Ipv6Setting>
#include <NetworkManagerQt/Manager> #include <NetworkManagerQt/Manager>
#include <NetworkManagerQt/ModemDevice> #include <NetworkManagerQt/ModemDevice>
#include <NetworkManagerQt/Settings> #include <NetworkManagerQt/Settings>

View file

@ -18,6 +18,7 @@
#include <NetworkManagerQt/CdmaSetting> #include <NetworkManagerQt/CdmaSetting>
#include <NetworkManagerQt/ConnectionSettings> #include <NetworkManagerQt/ConnectionSettings>
#include <NetworkManagerQt/GsmSetting> #include <NetworkManagerQt/GsmSetting>
#include <NetworkManagerQt/Ipv6Setting>
#include <NetworkManagerQt/Manager> #include <NetworkManagerQt/Manager>
#include <NetworkManagerQt/Settings> #include <NetworkManagerQt/Settings>
@ -96,6 +97,14 @@ QCoro::Task<void> AutoDetectAPN::checkAndAddAutodetectedAPN()
gsmSetting->setHomeOnly(false); // TODO respect modem roaming settings? gsmSetting->setHomeOnly(false); // TODO respect modem roaming settings?
gsmSetting->setInitialized(true); gsmSetting->setInitialized(true);
if (
detectedAPN.protocol == QStringLiteral("IPV6")
|| detectedAPN.protocol == QStringLiteral("IPV4V6")
) {
NetworkManager::Ipv6Setting::Ptr ipv6Setting = settings->setting(NetworkManager::Setting::Ipv6).dynamicCast<NetworkManager::Ipv6Setting>();
ipv6Setting->setMethod(NetworkManager::Ipv6Setting::ConfigMethod::Automatic);
}
QDBusReply<QDBusObjectPath> reply = co_await NetworkManager::addAndActivateConnection(settings->toMap(), nmModem->uni(), ""); QDBusReply<QDBusObjectPath> reply = co_await NetworkManager::addAndActivateConnection(settings->toMap(), nmModem->uni(), "");
if (!reply.isValid()) { if (!reply.isValid()) {
qCWarning(LOGGING_CATEGORY) << "Error adding autodetected connection:" << reply.error().message(); qCWarning(LOGGING_CATEGORY) << "Error adding autodetected connection:" << reply.error().message();
@ -152,7 +161,7 @@ std::optional<AutoDetectAPN::APNEntry> AutoDetectAPN::findAPN(const QString &ope
QString mccmnc = element.attribute("mcc") + element.attribute("mnc"); QString mccmnc = element.attribute("mcc") + element.attribute("mnc");
if (mccmnc == operatorCode) { 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); candidates.push_back(entry);
// check if we have an MVNO match and prioritize that // check if we have an MVNO match and prioritize that

View file

@ -21,6 +21,7 @@ public:
struct APNEntry { struct APNEntry {
QString apn; QString apn;
QString carrier; QString carrier;
QString protocol;
}; };
std::optional<APNEntry> findAPN(const QString &operatorCode, const QString &gid1, const QString &spn, const QString &imsi) const; std::optional<APNEntry> findAPN(const QString &operatorCode, const QString &gid1, const QString &spn, const QString &imsi) const;