File indexing completed on 2024-04-28 15:33:10

0001 /*
0002     SPDX-FileCopyrightText: 2012-2013 Jan Grulich <jgrulich@redhat.com>
0003     SPDX-FileCopyrightText: 2013 Daniel Nicoletti <dantti12@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006 */
0007 
0008 #include "connectionsettings.h"
0009 #include "connectionsettings_p.h"
0010 
0011 #include "adslsetting.h"
0012 #include "bluetoothsetting.h"
0013 #include "bondsetting.h"
0014 #include "bridgeportsetting.h"
0015 #include "bridgesetting.h"
0016 #include "cdmasetting.h"
0017 #include "gsmsetting.h"
0018 #include "infinibandsetting.h"
0019 #include "iptunnelsetting.h"
0020 #include "ipv4setting.h"
0021 #include "ipv6setting.h"
0022 #include "olpcmeshsetting.h"
0023 #include "pppoesetting.h"
0024 #include "pppsetting.h"
0025 #include "security8021xsetting.h"
0026 #include "serialsetting.h"
0027 #include "tunsetting.h"
0028 #include "vlansetting.h"
0029 #include "vpnsetting.h"
0030 #include "wimaxsetting.h"
0031 #include "wiredsetting.h"
0032 #include "wireguardsetting.h"
0033 #include "wirelesssecuritysetting.h"
0034 #include "wirelesssetting.h"
0035 
0036 #undef signals
0037 
0038 #if !NM_CHECK_VERSION(1, 6, 0)
0039 #define NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES "autoconnect-retries"
0040 #endif
0041 
0042 #if !NM_CHECK_VERSION(1, 12, 0)
0043 #define NM_SETTING_CONNECTION_MDNS "mdns"
0044 #endif
0045 
0046 #if !NM_CHECK_VERSION(1, 16, 0)
0047 #define NM_SETTING_WIREGUARD_SETTING_NAME "wireguard"
0048 #endif
0049 
0050 #include "genericsetting.h"
0051 #include "teamsetting.h"
0052 
0053 #include <QUuid>
0054 
0055 namespace NetworkManager
0056 {
0057 extern bool checkVersion(const int x, const int y, const int z);
0058 }
0059 
0060 NetworkManager::ConnectionSettingsPrivate::ConnectionSettingsPrivate(ConnectionSettings *q)
0061     : name(NM_SETTING_CONNECTION_SETTING_NAME)
0062     , uuid(QUuid().toString())
0063     , type(ConnectionSettings::Wired)
0064     , autoconnect(true)
0065     , readOnly(false)
0066     , gatewayPingTimeout(0)
0067     , autoconnectPriority(0)
0068     , autoconnectRetries(-1)
0069     , autoconnectSlaves(ConnectionSettings::SlavesDefault)
0070     , lldp(ConnectionSettings::LldpDefault)
0071     , metered(ConnectionSettings::MeteredUnknown)
0072     , mdns(ConnectionSettings::MdnsDefault)
0073     , q_ptr(q)
0074 {
0075 }
0076 
0077 void NetworkManager::ConnectionSettingsPrivate::addSetting(const NetworkManager::Setting::Ptr &setting)
0078 {
0079     settings.push_back(setting);
0080 }
0081 
0082 void NetworkManager::ConnectionSettingsPrivate::clearSettings()
0083 {
0084     settings.clear();
0085 }
0086 
0087 void NetworkManager::ConnectionSettingsPrivate::initSettings(NMBluetoothCapabilities bt_cap)
0088 {
0089     clearSettings();
0090 
0091     switch (type) {
0092     case ConnectionSettings::Adsl:
0093         addSetting(Setting::Ptr(new AdslSetting()));
0094         addSetting(Setting::Ptr(new Ipv4Setting()));
0095         addSetting(Setting::Ptr(new Ipv6Setting()));
0096         break;
0097     case ConnectionSettings::Bond:
0098         addSetting(Setting::Ptr(new BondSetting()));
0099         addSetting(Setting::Ptr(new Ipv4Setting()));
0100         addSetting(Setting::Ptr(new Ipv6Setting()));
0101         break;
0102     case ConnectionSettings::Bluetooth:
0103         addSetting(Setting::Ptr(new BluetoothSetting()));
0104         addSetting(Setting::Ptr(new Ipv4Setting()));
0105         // addSetting(Setting::Ptr(new Ipv6Setting()));
0106         if (bt_cap == NM_BT_CAPABILITY_DUN) {
0107             addSetting(Setting::Ptr(new GsmSetting()));
0108             addSetting(Setting::Ptr(new PppSetting()));
0109             addSetting(Setting::Ptr(new SerialSetting()));
0110         }
0111         break;
0112     case ConnectionSettings::Bridge:
0113         addSetting(Setting::Ptr(new BridgeSetting()));
0114         addSetting(Setting::Ptr(new Ipv4Setting()));
0115         addSetting(Setting::Ptr(new Ipv6Setting()));
0116         break;
0117     case ConnectionSettings::Cdma:
0118         addSetting(Setting::Ptr(new CdmaSetting()));
0119         addSetting(Setting::Ptr(new Ipv4Setting()));
0120         if (NetworkManager::checkVersion(1, 0, 0)) {
0121             addSetting(Setting::Ptr(new Ipv6Setting()));
0122         }
0123         addSetting(Setting::Ptr(new PppSetting()));
0124         break;
0125     case ConnectionSettings::Gsm:
0126         addSetting(Setting::Ptr(new GsmSetting()));
0127         addSetting(Setting::Ptr(new Ipv4Setting()));
0128         if (NetworkManager::checkVersion(1, 0, 0)) {
0129             addSetting(Setting::Ptr(new Ipv6Setting()));
0130         }
0131         addSetting(Setting::Ptr(new PppSetting()));
0132         break;
0133     case ConnectionSettings::Infiniband:
0134         addSetting(Setting::Ptr(new InfinibandSetting()));
0135         addSetting(Setting::Ptr(new Ipv4Setting()));
0136         addSetting(Setting::Ptr(new Ipv6Setting()));
0137         break;
0138     case ConnectionSettings::OLPCMesh:
0139         addSetting(Setting::Ptr(new Ipv4Setting()));
0140         addSetting(Setting::Ptr(new Ipv6Setting()));
0141         addSetting(Setting::Ptr(new OlpcMeshSetting()));
0142         break;
0143     case ConnectionSettings::Pppoe:
0144         addSetting(Setting::Ptr(new Ipv4Setting()));
0145         // addSetting(new Ipv6Setting()));
0146         addSetting(Setting::Ptr(new PppSetting()));
0147         addSetting(Setting::Ptr(new PppoeSetting()));
0148         addSetting(Setting::Ptr(new WiredSetting()));
0149         break;
0150     case ConnectionSettings::Vlan:
0151         addSetting(Setting::Ptr(new Ipv4Setting()));
0152         addSetting(Setting::Ptr(new Ipv6Setting()));
0153         addSetting(Setting::Ptr(new VlanSetting()));
0154         break;
0155     case ConnectionSettings::Vpn:
0156         addSetting(Setting::Ptr(new Ipv4Setting()));
0157         addSetting(Setting::Ptr(new Ipv6Setting()));
0158         addSetting(Setting::Ptr(new VpnSetting()));
0159         break;
0160     case ConnectionSettings::Wimax:
0161         addSetting(Setting::Ptr(new Ipv4Setting()));
0162         addSetting(Setting::Ptr(new Ipv6Setting()));
0163         addSetting(Setting::Ptr(new WimaxSetting()));
0164         break;
0165     case ConnectionSettings::Wired:
0166         addSetting(Setting::Ptr(new Ipv4Setting()));
0167         addSetting(Setting::Ptr(new Ipv6Setting()));
0168         addSetting(Setting::Ptr(new Security8021xSetting()));
0169         addSetting(Setting::Ptr(new WiredSetting()));
0170         break;
0171     case ConnectionSettings::Wireless:
0172         addSetting(Setting::Ptr(new Ipv4Setting()));
0173         addSetting(Setting::Ptr(new Ipv6Setting()));
0174         addSetting(Setting::Ptr(new Security8021xSetting()));
0175         addSetting(Setting::Ptr(new WirelessSetting()));
0176         addSetting(Setting::Ptr(new WirelessSecuritySetting()));
0177         break;
0178     case ConnectionSettings::Team:
0179         addSetting(Setting::Ptr(new TeamSetting()));
0180         addSetting(Setting::Ptr(new Ipv4Setting()));
0181         addSetting(Setting::Ptr(new Ipv6Setting()));
0182         break;
0183     case ConnectionSettings::Generic:
0184         addSetting(Setting::Ptr(new GenericSetting()));
0185         addSetting(Setting::Ptr(new Ipv4Setting()));
0186         addSetting(Setting::Ptr(new Ipv6Setting()));
0187         break;
0188     case ConnectionSettings::Tun:
0189         addSetting(Setting::Ptr(new TunSetting()));
0190         addSetting(Setting::Ptr(new Ipv4Setting()));
0191         addSetting(Setting::Ptr(new Ipv6Setting()));
0192         break;
0193     case ConnectionSettings::IpTunnel:
0194         addSetting(Setting::Ptr(new IpTunnelSetting()));
0195         addSetting(Setting::Ptr(new Ipv4Setting()));
0196         addSetting(Setting::Ptr(new Ipv6Setting()));
0197         break;
0198     case ConnectionSettings::WireGuard:
0199         addSetting(Setting::Ptr(new WireGuardSetting()));
0200         addSetting(Setting::Ptr(new Ipv4Setting()));
0201         addSetting(Setting::Ptr(new Ipv6Setting()));
0202         break;
0203     case ConnectionSettings::Unknown:
0204     default:
0205         break;
0206     }
0207 }
0208 
0209 void NetworkManager::ConnectionSettingsPrivate::initSettings(const NetworkManager::ConnectionSettings::Ptr &connectionSettings)
0210 {
0211     Q_Q(ConnectionSettings);
0212 
0213     clearSettings();
0214 
0215     switch (type) {
0216     case ConnectionSettings::Adsl:
0217         addSetting(connectionSettings->setting(Setting::Adsl));
0218         addSetting(connectionSettings->setting(Setting::Ipv4));
0219         addSetting(connectionSettings->setting(Setting::Ipv6));
0220         break;
0221     case ConnectionSettings::Bond:
0222         addSetting(connectionSettings->setting(Setting::Bond));
0223         addSetting(connectionSettings->setting(Setting::Ipv4));
0224         addSetting(connectionSettings->setting(Setting::Ipv6));
0225         break;
0226     case ConnectionSettings::Bluetooth:
0227         addSetting(connectionSettings->setting(Setting::Bluetooth));
0228         addSetting(connectionSettings->setting(Setting::Ipv4));
0229         if (NetworkManager::checkVersion(1, 0, 0)) {
0230             addSetting(connectionSettings->setting(Setting::Ipv6));
0231         }
0232         if (q->setting(Setting::Gsm) && q->setting(Setting::Ppp) && q->setting(Setting::Serial)) {
0233             addSetting(connectionSettings->setting(Setting::Gsm));
0234             addSetting(connectionSettings->setting(Setting::Ppp));
0235             addSetting(connectionSettings->setting(Setting::Serial));
0236         }
0237         break;
0238     case ConnectionSettings::Bridge:
0239         addSetting(connectionSettings->setting(Setting::Bridge));
0240         addSetting(connectionSettings->setting(Setting::Ipv4));
0241         addSetting(connectionSettings->setting(Setting::Ipv6));
0242         break;
0243     case ConnectionSettings::Cdma:
0244         addSetting(connectionSettings->setting(Setting::Cdma));
0245         addSetting(connectionSettings->setting(Setting::Ipv4));
0246         if (NetworkManager::checkVersion(1, 0, 0)) {
0247             addSetting(connectionSettings->setting(Setting::Ipv6));
0248         }
0249         addSetting(connectionSettings->setting(Setting::Ppp));
0250         break;
0251     case ConnectionSettings::Gsm:
0252         addSetting(connectionSettings->setting(Setting::Gsm));
0253         addSetting(connectionSettings->setting(Setting::Ipv4));
0254         if (NetworkManager::checkVersion(1, 0, 0)) {
0255             addSetting(connectionSettings->setting(Setting::Ipv6));
0256         }
0257         addSetting(connectionSettings->setting(Setting::Ppp));
0258         break;
0259     case ConnectionSettings::Infiniband:
0260         addSetting(connectionSettings->setting(Setting::Infiniband));
0261         addSetting(connectionSettings->setting(Setting::Ipv4));
0262         addSetting(connectionSettings->setting(Setting::Ipv6));
0263         break;
0264     case ConnectionSettings::OLPCMesh:
0265         addSetting(connectionSettings->setting(Setting::Ipv4));
0266         addSetting(connectionSettings->setting(Setting::Ipv6));
0267         addSetting(connectionSettings->setting(Setting::OlpcMesh));
0268         break;
0269     case ConnectionSettings::Pppoe:
0270         addSetting(connectionSettings->setting(Setting::Ipv4));
0271         // addSetting(Ipv6Setting(connectionSettings->setting(Setting::Ipv6));
0272         addSetting(connectionSettings->setting(Setting::Ppp));
0273         addSetting(connectionSettings->setting(Setting::Pppoe));
0274         addSetting(connectionSettings->setting(Setting::Wired));
0275         break;
0276     case ConnectionSettings::Vlan:
0277         addSetting(connectionSettings->setting(Setting::Ipv4));
0278         addSetting(connectionSettings->setting(Setting::Ipv6));
0279         addSetting(connectionSettings->setting(Setting::Vlan));
0280         break;
0281     case ConnectionSettings::Vpn:
0282         addSetting(connectionSettings->setting(Setting::Ipv4));
0283         addSetting(connectionSettings->setting(Setting::Ipv6));
0284         addSetting(connectionSettings->setting(Setting::Vpn));
0285         break;
0286     case ConnectionSettings::Wimax:
0287         addSetting(connectionSettings->setting(Setting::Ipv4));
0288         addSetting(connectionSettings->setting(Setting::Ipv6));
0289         addSetting(connectionSettings->setting(Setting::Wimax));
0290         break;
0291     case ConnectionSettings::Wired:
0292         addSetting(connectionSettings->setting(Setting::Ipv4));
0293         addSetting(connectionSettings->setting(Setting::Ipv6));
0294         addSetting(connectionSettings->setting(Setting::Security8021x));
0295         addSetting(connectionSettings->setting(Setting::Wired));
0296         break;
0297     case ConnectionSettings::Wireless:
0298         addSetting(connectionSettings->setting(Setting::Ipv4));
0299         addSetting(connectionSettings->setting(Setting::Ipv6));
0300         addSetting(connectionSettings->setting(Setting::Security8021x));
0301         addSetting(connectionSettings->setting(Setting::Wireless));
0302         addSetting(connectionSettings->setting(Setting::WirelessSecurity));
0303         break;
0304     case ConnectionSettings::Team:
0305         addSetting(connectionSettings->setting(Setting::Team));
0306         addSetting(connectionSettings->setting(Setting::Ipv4));
0307         addSetting(connectionSettings->setting(Setting::Ipv6));
0308         break;
0309     case ConnectionSettings::Generic:
0310         addSetting(connectionSettings->setting(Setting::Generic));
0311         addSetting(connectionSettings->setting(Setting::Ipv4));
0312         addSetting(connectionSettings->setting(Setting::Ipv6));
0313         break;
0314     case ConnectionSettings::Tun:
0315         addSetting(connectionSettings->setting(Setting::Tun));
0316         addSetting(connectionSettings->setting(Setting::Ipv4));
0317         addSetting(connectionSettings->setting(Setting::Ipv6));
0318         break;
0319     case ConnectionSettings::IpTunnel:
0320         addSetting(connectionSettings->setting(Setting::IpTunnel));
0321         addSetting(connectionSettings->setting(Setting::Ipv4));
0322         addSetting(connectionSettings->setting(Setting::Ipv6));
0323         break;
0324     case ConnectionSettings::WireGuard:
0325         addSetting(connectionSettings->setting(Setting::WireGuard));
0326         addSetting(connectionSettings->setting(Setting::Ipv4));
0327         addSetting(connectionSettings->setting(Setting::Ipv6));
0328         break;
0329     case ConnectionSettings::Unknown:
0330     default:
0331         break;
0332     }
0333 }
0334 
0335 NetworkManager::ConnectionSettings::ConnectionType NetworkManager::ConnectionSettings::typeFromString(const QString &typeString)
0336 {
0337     ConnectionSettings::ConnectionType type = Wired;
0338 
0339     if (typeString == QLatin1String(NM_SETTING_ADSL_SETTING_NAME)) {
0340         type = Adsl;
0341     } else if (typeString == QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME)) {
0342         type = Bluetooth;
0343     } else if (typeString == QLatin1String(NM_SETTING_BOND_SETTING_NAME)) {
0344         type = Bond;
0345     } else if (typeString == QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME)) {
0346         type = Bridge;
0347     } else if (typeString == QLatin1String(NM_SETTING_CDMA_SETTING_NAME)) {
0348         type = Cdma;
0349     } else if (typeString == QLatin1String(NM_SETTING_GSM_SETTING_NAME)) {
0350         type = Gsm;
0351     } else if (typeString == QLatin1String(NM_SETTING_INFINIBAND_SETTING_NAME)) {
0352         type = Infiniband;
0353     } else if (typeString == QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME)) {
0354         type = OLPCMesh;
0355     } else if (typeString == QLatin1String(NM_SETTING_PPPOE_SETTING_NAME)) {
0356         type = Pppoe;
0357     } else if (typeString == QLatin1String(NM_SETTING_VLAN_SETTING_NAME)) {
0358         type = Vlan;
0359     } else if (typeString == QLatin1String(NM_SETTING_VPN_SETTING_NAME)) {
0360         type = Vpn;
0361     } else if (typeString == QLatin1String(NM_SETTING_WIMAX_SETTING_NAME)) {
0362         type = Wimax;
0363     } else if (typeString == QLatin1String(NM_SETTING_WIRED_SETTING_NAME)) {
0364         type = Wired;
0365     } else if (typeString == QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME)) {
0366         type = Wireless;
0367     } else if (typeString == QLatin1String(NM_SETTING_TEAM_SETTING_NAME)) {
0368         type = Team;
0369     } else if (typeString == QLatin1String(NM_SETTING_GENERIC_SETTING_NAME)) {
0370         type = Generic;
0371     } else if (typeString == QLatin1String(NM_SETTING_TUN_SETTING_NAME)) {
0372         type = Tun;
0373     } else if (typeString == QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME)) {
0374         type = IpTunnel;
0375     } else if (typeString == QLatin1String(NM_SETTING_WIREGUARD_SETTING_NAME)) {
0376         type = WireGuard;
0377     }
0378 
0379     return type;
0380 }
0381 
0382 QString NetworkManager::ConnectionSettings::typeAsString(NetworkManager::ConnectionSettings::ConnectionType type)
0383 {
0384     QString typeString;
0385 
0386     switch (type) {
0387     case Adsl:
0388         typeString = QLatin1String(NM_SETTING_ADSL_SETTING_NAME);
0389         break;
0390     case Bond:
0391         typeString = QLatin1String(NM_SETTING_BOND_SETTING_NAME);
0392         break;
0393     case Bluetooth:
0394         typeString = QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME);
0395         break;
0396     case Bridge:
0397         typeString = QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME);
0398         break;
0399     case Cdma:
0400         typeString = QLatin1String(NM_SETTING_CDMA_SETTING_NAME);
0401         break;
0402     case Gsm:
0403         typeString = QLatin1String(NM_SETTING_GSM_SETTING_NAME);
0404         break;
0405     case Infiniband:
0406         typeString = QLatin1String(NM_SETTING_INFINIBAND_SETTING_NAME);
0407         break;
0408     case OLPCMesh:
0409         typeString = QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME);
0410         break;
0411     case Pppoe:
0412         typeString = QLatin1String(NM_SETTING_PPPOE_SETTING_NAME);
0413         break;
0414     case Vlan:
0415         typeString = QLatin1String(NM_SETTING_VLAN_SETTING_NAME);
0416         break;
0417     case Vpn:
0418         typeString = QLatin1String(NM_SETTING_VPN_SETTING_NAME);
0419         break;
0420     case Wimax:
0421         typeString = QLatin1String(NM_SETTING_WIMAX_SETTING_NAME);
0422         break;
0423     case Wired:
0424         typeString = QLatin1String(NM_SETTING_WIRED_SETTING_NAME);
0425         break;
0426     case Wireless:
0427         typeString = QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME);
0428         break;
0429     case Team:
0430         typeString = QLatin1String(NM_SETTING_TEAM_SETTING_NAME);
0431         break;
0432     case Generic:
0433         typeString = QLatin1String(NM_SETTING_GENERIC_SETTING_NAME);
0434         break;
0435     case Tun:
0436         typeString = QLatin1String(NM_SETTING_TUN_SETTING_NAME);
0437         break;
0438     case IpTunnel:
0439         typeString = QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME);
0440         break;
0441     case WireGuard:
0442         typeString = QLatin1String(NM_SETTING_WIREGUARD_SETTING_NAME);
0443         break;
0444     default:
0445         break;
0446     };
0447 
0448     return typeString;
0449 }
0450 
0451 QString NetworkManager::ConnectionSettings::createNewUuid()
0452 {
0453     return QUuid::createUuid().toString().mid(1, QUuid::createUuid().toString().length() - 2);
0454 }
0455 
0456 NetworkManager::ConnectionSettings::ConnectionSettings()
0457     : d_ptr(new ConnectionSettingsPrivate(this))
0458 {
0459 }
0460 
0461 NetworkManager::ConnectionSettings::ConnectionSettings(NetworkManager::ConnectionSettings::ConnectionType type, NMBluetoothCapabilities bt_cap)
0462     : d_ptr(new ConnectionSettingsPrivate(this))
0463 {
0464     setConnectionType(type, bt_cap);
0465 }
0466 
0467 NetworkManager::ConnectionSettings::ConnectionSettings(const NetworkManager::ConnectionSettings::Ptr &other)
0468     : d_ptr(new ConnectionSettingsPrivate(this))
0469 {
0470     Q_D(ConnectionSettings);
0471 
0472     setId(other->id());
0473     setUuid(other->uuid());
0474     setInterfaceName(other->interfaceName());
0475     setConnectionType(other->connectionType());
0476     setPermissions(other->permissions());
0477     setAutoconnect(other->autoconnect());
0478     setAutoconnectPriority(other->autoconnectPriority());
0479     setTimestamp(other->timestamp());
0480     setReadOnly(other->readOnly());
0481     setZone(other->zone());
0482     setMaster(other->master());
0483     setSlaveType(other->slaveType());
0484     setGatewayPingTimeout(other->gatewayPingTimeout());
0485     setAutoconnectRetries(other->autoconnectRetries());
0486     setAutoconnectSlaves(other->autoconnectSlaves());
0487     setLldp(other->lldp());
0488     setMetered(other->metered());
0489     setMdns(other->mdns());
0490     setStableId(other->stableId());
0491 
0492     d->initSettings(other);
0493 }
0494 
0495 NetworkManager::ConnectionSettings::ConnectionSettings(const NMVariantMapMap &map)
0496     : d_ptr(new ConnectionSettingsPrivate(this))
0497 {
0498     fromMap(map);
0499 }
0500 
0501 NetworkManager::ConnectionSettings::~ConnectionSettings()
0502 {
0503     d_ptr->clearSettings();
0504 
0505     delete d_ptr;
0506 }
0507 
0508 void NetworkManager::ConnectionSettings::fromMap(const NMVariantMapMap &map)
0509 {
0510     QVariantMap connectionSettings = map.value(QLatin1String(NM_SETTING_CONNECTION_SETTING_NAME));
0511 
0512     setId(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_ID)).toString());
0513     setUuid(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_UUID)).toString());
0514     setConnectionType(typeFromString(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_TYPE)).toString()));
0515 
0516     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_INTERFACE_NAME))) {
0517         setInterfaceName(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_INTERFACE_NAME)).toString());
0518     }
0519     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_PERMISSIONS))) {
0520         const QStringList permissions = connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_PERMISSIONS)).toStringList();
0521         for (const QString &permission : permissions) {
0522             const QStringList split = permission.split(QLatin1Char(':'), Qt::KeepEmptyParts);
0523             addToPermissions(split.at(1), split.at(2));
0524         }
0525     }
0526 
0527     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT))) {
0528         setAutoconnect(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT)).toBool());
0529     }
0530 
0531     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY))) {
0532         setAutoconnectPriority(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY)).toInt());
0533     }
0534 
0535     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_TIMESTAMP))) {
0536         const int timestamp = connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_TIMESTAMP)).toInt();
0537         setTimestamp(QDateTime::fromSecsSinceEpoch(timestamp));
0538     }
0539 
0540     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_READ_ONLY))) {
0541         setReadOnly(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_READ_ONLY)).toBool());
0542     }
0543 
0544     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_ZONE))) {
0545         setZone(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_ZONE)).toString());
0546     }
0547 
0548     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_MASTER))) {
0549         setMaster(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_MASTER)).toString());
0550     }
0551 
0552     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_SLAVE_TYPE))) {
0553         setSlaveType(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_SLAVE_TYPE)).toString());
0554     }
0555 
0556     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_SECONDARIES))) {
0557         setSecondaries(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_SECONDARIES)).toStringList());
0558     }
0559 
0560     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT))) {
0561         setGatewayPingTimeout(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT)).toUInt());
0562     }
0563 
0564     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES))) {
0565         setAutoconnectRetries(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES)).toInt());
0566     }
0567 
0568     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES))) {
0569         setAutoconnectSlaves(
0570             (NetworkManager::ConnectionSettings::AutoconnectSlaves)connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES)).toInt());
0571     }
0572 
0573     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_LLDP))) {
0574         setLldp((NetworkManager::ConnectionSettings::Lldp)connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_LLDP)).toInt());
0575     }
0576 
0577     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_METERED))) {
0578         setMetered((NetworkManager::ConnectionSettings::Metered)connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_METERED)).toInt());
0579     }
0580 
0581     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_MDNS))) {
0582         setMdns((NetworkManager::ConnectionSettings::Mdns)connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_MDNS)).toInt());
0583     }
0584 
0585     if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_STABLE_ID))) {
0586         setStableId(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_STABLE_ID)).toString());
0587     }
0588 
0589     const auto settingsList = settings();
0590     for (const Setting::Ptr &setting : settingsList) {
0591         if (map.contains(setting->name())) {
0592             setting->fromMap(map.value(setting->name()));
0593             setting->setInitialized(true);
0594         } else {
0595             setting->setInitialized(false);
0596         }
0597     }
0598 }
0599 
0600 NMVariantMapMap NetworkManager::ConnectionSettings::toMap() const
0601 {
0602     NMVariantMapMap result;
0603     QVariantMap connectionSetting;
0604 
0605     if (!id().isEmpty()) {
0606         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_ID), id());
0607     }
0608 
0609     if (!uuid().isEmpty()) {
0610         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_UUID), uuid());
0611     }
0612 
0613     if (connectionType()) {
0614         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_TYPE), typeAsString(connectionType()));
0615     }
0616 
0617     if (!interfaceName().isEmpty()) {
0618         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_INTERFACE_NAME), interfaceName());
0619     }
0620 
0621     if (!permissions().isEmpty()) {
0622         QStringList perm;
0623         QHash<QString, QString> perms = permissions();
0624         QHash<QString, QString>::const_iterator it = perms.constBegin();
0625         while (it != perms.constEnd()) {
0626             const QString tmp = "user:" + it.key() + ':' + it.value();
0627             perm << tmp;
0628             ++it;
0629         }
0630 
0631         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_PERMISSIONS), perm);
0632     }
0633 
0634     if (!autoconnect()) {
0635         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT), autoconnect());
0636     }
0637 
0638     if (autoconnectPriority()) {
0639         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY), autoconnectPriority());
0640     }
0641 
0642     if (timestamp().isValid()) {
0643         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_TIMESTAMP), timestamp().toSecsSinceEpoch());
0644     }
0645 
0646     if (readOnly()) {
0647         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_READ_ONLY), readOnly());
0648     }
0649 
0650     if (!zone().isEmpty()) {
0651         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_ZONE), zone());
0652     }
0653 
0654     if (!master().isEmpty()) {
0655         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_MASTER), master());
0656     }
0657 
0658     if (!slaveType().isEmpty()) {
0659         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_SLAVE_TYPE), slaveType());
0660     }
0661 
0662     if (!secondaries().isEmpty()) {
0663         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_SECONDARIES), secondaries());
0664     }
0665 
0666     if (gatewayPingTimeout()) {
0667         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT), gatewayPingTimeout());
0668     }
0669 
0670     if (autoconnectRetries() >= 0) {
0671         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES), autoconnectRetries());
0672     }
0673 
0674     connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES), autoconnectSlaves());
0675     connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_LLDP), lldp());
0676     connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_METERED), metered());
0677 
0678     if (mdns() != MdnsDefault) {
0679         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_MDNS), mdns());
0680     }
0681 
0682     if (!stableId().isEmpty()) {
0683         connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_STABLE_ID), stableId());
0684     }
0685 
0686     result.insert(QLatin1String(NM_SETTING_CONNECTION_SETTING_NAME), connectionSetting);
0687 
0688     const auto settingsList = settings();
0689     for (const Setting::Ptr &setting : settingsList) {
0690         QVariantMap map = setting->toMap();
0691         if (!setting->isNull()) {
0692             result.insert(setting->name(), map);
0693         }
0694     }
0695     return result;
0696 }
0697 
0698 QString NetworkManager::ConnectionSettings::name() const
0699 {
0700     Q_D(const ConnectionSettings);
0701 
0702     return d->name;
0703 }
0704 
0705 void NetworkManager::ConnectionSettings::setId(const QString &id)
0706 {
0707     Q_D(ConnectionSettings);
0708 
0709     d->id = id;
0710 }
0711 
0712 QString NetworkManager::ConnectionSettings::id() const
0713 {
0714     Q_D(const ConnectionSettings);
0715 
0716     return d->id;
0717 }
0718 
0719 void NetworkManager::ConnectionSettings::setUuid(const QString &uuid)
0720 {
0721     Q_D(ConnectionSettings);
0722 
0723     d->uuid = uuid;
0724 }
0725 
0726 QString NetworkManager::ConnectionSettings::uuid() const
0727 {
0728     Q_D(const ConnectionSettings);
0729 
0730     return d->uuid;
0731 }
0732 
0733 void NetworkManager::ConnectionSettings::setInterfaceName(const QString &interfaceName)
0734 {
0735     Q_D(ConnectionSettings);
0736 
0737     d->interfaceName = interfaceName;
0738 }
0739 
0740 QString NetworkManager::ConnectionSettings::interfaceName() const
0741 {
0742     Q_D(const ConnectionSettings);
0743 
0744     return d->interfaceName;
0745 }
0746 
0747 void NetworkManager::ConnectionSettings::setConnectionType(NetworkManager::ConnectionSettings::ConnectionType type, NMBluetoothCapabilities bt_cap)
0748 {
0749     Q_D(ConnectionSettings);
0750 
0751     d->type = type;
0752     d->initSettings(bt_cap);
0753 }
0754 
0755 NetworkManager::ConnectionSettings::ConnectionType NetworkManager::ConnectionSettings::connectionType() const
0756 {
0757     Q_D(const ConnectionSettings);
0758 
0759     return d->type;
0760 }
0761 
0762 void NetworkManager::ConnectionSettings::addToPermissions(const QString &user, const QString &type)
0763 {
0764     Q_D(ConnectionSettings);
0765 
0766     d->permissions.insert(user, type);
0767 }
0768 
0769 void NetworkManager::ConnectionSettings::setPermissions(const QHash<QString, QString> &perm)
0770 {
0771     Q_D(ConnectionSettings);
0772 
0773     d->permissions = perm;
0774 }
0775 
0776 QHash<QString, QString> NetworkManager::ConnectionSettings::permissions() const
0777 {
0778     Q_D(const ConnectionSettings);
0779 
0780     return d->permissions;
0781 }
0782 
0783 void NetworkManager::ConnectionSettings::setAutoconnect(bool autoconnect)
0784 {
0785     Q_D(ConnectionSettings);
0786 
0787     d->autoconnect = autoconnect;
0788 }
0789 
0790 bool NetworkManager::ConnectionSettings::autoconnect() const
0791 {
0792     Q_D(const ConnectionSettings);
0793 
0794     return d->autoconnect;
0795 }
0796 
0797 void NetworkManager::ConnectionSettings::setAutoconnectPriority(int priority)
0798 {
0799     Q_D(ConnectionSettings);
0800 
0801     d->autoconnectPriority = priority;
0802 }
0803 
0804 int NetworkManager::ConnectionSettings::autoconnectPriority() const
0805 {
0806     Q_D(const ConnectionSettings);
0807 
0808     return d->autoconnectPriority;
0809 }
0810 
0811 void NetworkManager::ConnectionSettings::setTimestamp(const QDateTime &timestamp)
0812 {
0813     Q_D(ConnectionSettings);
0814 
0815     d->timestamp = timestamp;
0816 }
0817 
0818 QDateTime NetworkManager::ConnectionSettings::timestamp() const
0819 {
0820     Q_D(const ConnectionSettings);
0821 
0822     return d->timestamp;
0823 }
0824 
0825 void NetworkManager::ConnectionSettings::setReadOnly(bool readonly)
0826 {
0827     Q_D(ConnectionSettings);
0828 
0829     d->readOnly = readonly;
0830 }
0831 
0832 bool NetworkManager::ConnectionSettings::readOnly() const
0833 {
0834     Q_D(const ConnectionSettings);
0835 
0836     return d->readOnly;
0837 }
0838 
0839 void NetworkManager::ConnectionSettings::setZone(const QString &zone)
0840 {
0841     Q_D(ConnectionSettings);
0842 
0843     d->zone = zone;
0844 }
0845 
0846 QString NetworkManager::ConnectionSettings::zone() const
0847 {
0848     Q_D(const ConnectionSettings);
0849 
0850     return d->zone;
0851 }
0852 
0853 bool NetworkManager::ConnectionSettings::isSlave() const
0854 {
0855     Q_D(const ConnectionSettings);
0856 
0857     return !d->master.isEmpty() && !d->slaveType.isEmpty();
0858 }
0859 
0860 void NetworkManager::ConnectionSettings::setMaster(const QString &master)
0861 {
0862     Q_D(ConnectionSettings);
0863 
0864     d->master = master;
0865 }
0866 
0867 QString NetworkManager::ConnectionSettings::master() const
0868 {
0869     Q_D(const ConnectionSettings);
0870 
0871     return d->master;
0872 }
0873 
0874 void NetworkManager::ConnectionSettings::setSlaveType(const QString &type)
0875 {
0876     Q_D(ConnectionSettings);
0877 
0878     d->slaveType = type;
0879 }
0880 
0881 QString NetworkManager::ConnectionSettings::slaveType() const
0882 {
0883     Q_D(const ConnectionSettings);
0884 
0885     return d->slaveType;
0886 }
0887 
0888 void NetworkManager::ConnectionSettings::setSecondaries(const QStringList &secondaries)
0889 {
0890     Q_D(ConnectionSettings);
0891 
0892     d->secondaries = secondaries;
0893 }
0894 
0895 QStringList NetworkManager::ConnectionSettings::secondaries() const
0896 {
0897     Q_D(const ConnectionSettings);
0898 
0899     return d->secondaries;
0900 }
0901 
0902 void NetworkManager::ConnectionSettings::setGatewayPingTimeout(quint32 timeout)
0903 {
0904     Q_D(ConnectionSettings);
0905 
0906     d->gatewayPingTimeout = timeout;
0907 }
0908 
0909 quint32 NetworkManager::ConnectionSettings::gatewayPingTimeout() const
0910 {
0911     Q_D(const ConnectionSettings);
0912 
0913     return d->gatewayPingTimeout;
0914 }
0915 
0916 int NetworkManager::ConnectionSettings::autoconnectRetries() const
0917 {
0918     Q_D(const ConnectionSettings);
0919 
0920     return d->autoconnectRetries;
0921 }
0922 
0923 void NetworkManager::ConnectionSettings::setAutoconnectRetries(int retries)
0924 {
0925     Q_D(ConnectionSettings);
0926 
0927     d->autoconnectRetries = retries;
0928 }
0929 
0930 NetworkManager::ConnectionSettings::AutoconnectSlaves NetworkManager::ConnectionSettings::autoconnectSlaves() const
0931 {
0932     Q_D(const ConnectionSettings);
0933 
0934     return d->autoconnectSlaves;
0935 }
0936 
0937 void NetworkManager::ConnectionSettings::setAutoconnectSlaves(NetworkManager::ConnectionSettings::AutoconnectSlaves autoconnectSlaves)
0938 {
0939     Q_D(ConnectionSettings);
0940 
0941     d->autoconnectSlaves = autoconnectSlaves;
0942 }
0943 
0944 NetworkManager::ConnectionSettings::Lldp NetworkManager::ConnectionSettings::lldp() const
0945 {
0946     Q_D(const ConnectionSettings);
0947 
0948     return d->lldp;
0949 }
0950 
0951 void NetworkManager::ConnectionSettings::setLldp(NetworkManager::ConnectionSettings::Lldp lldp)
0952 {
0953     Q_D(ConnectionSettings);
0954 
0955     d->lldp = lldp;
0956 }
0957 
0958 NetworkManager::ConnectionSettings::Metered NetworkManager::ConnectionSettings::metered() const
0959 {
0960     Q_D(const ConnectionSettings);
0961 
0962     return d->metered;
0963 }
0964 
0965 void NetworkManager::ConnectionSettings::setMetered(NetworkManager::ConnectionSettings::Metered metered)
0966 {
0967     Q_D(ConnectionSettings);
0968 
0969     d->metered = metered;
0970 }
0971 
0972 NetworkManager::ConnectionSettings::Mdns NetworkManager::ConnectionSettings::mdns() const
0973 {
0974     Q_D(const ConnectionSettings);
0975 
0976     return d->mdns;
0977 }
0978 
0979 void NetworkManager::ConnectionSettings::setMdns(NetworkManager::ConnectionSettings::Mdns mdns)
0980 {
0981     Q_D(ConnectionSettings);
0982 
0983     d->mdns = mdns;
0984 }
0985 
0986 QString NetworkManager::ConnectionSettings::stableId() const
0987 {
0988     Q_D(const ConnectionSettings);
0989 
0990     return d->stableId;
0991 }
0992 
0993 void NetworkManager::ConnectionSettings::setStableId(const QString &stableId)
0994 {
0995     Q_D(ConnectionSettings);
0996 
0997     d->stableId = stableId;
0998 }
0999 
1000 NetworkManager::Setting::Ptr NetworkManager::ConnectionSettings::setting(Setting::SettingType type) const
1001 {
1002     const auto settingsList = settings();
1003     for (const Setting::Ptr &setting : settingsList) {
1004         if (setting->type() == type) {
1005             return setting;
1006         }
1007     }
1008 
1009     return Setting::Ptr();
1010 }
1011 
1012 NetworkManager::Setting::Ptr NetworkManager::ConnectionSettings::setting(const QString &type) const
1013 {
1014     return setting(Setting::typeFromString(type));
1015 }
1016 
1017 NetworkManager::Setting::List NetworkManager::ConnectionSettings::settings() const
1018 {
1019     Q_D(const ConnectionSettings);
1020 
1021     return d->settings;
1022 }
1023 
1024 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::ConnectionSettings &setting)
1025 {
1026     dbg.nospace() << "CONNECTION SETTINGS\n";
1027     dbg.nospace() << "===================\n";
1028 
1029     dbg.nospace() << NM_SETTING_CONNECTION_ID << ": " << setting.id() << '\n';
1030     dbg.nospace() << NM_SETTING_CONNECTION_UUID << ": " << setting.uuid() << '\n';
1031     dbg.nospace() << NM_SETTING_CONNECTION_INTERFACE_NAME << ": " << setting.interfaceName() << '\n';
1032     dbg.nospace() << NM_SETTING_CONNECTION_TYPE << ": " << setting.typeAsString(setting.connectionType()) << '\n';
1033     dbg.nospace() << NM_SETTING_CONNECTION_PERMISSIONS << ": " << setting.permissions() << '\n';
1034     dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT << ": " << setting.autoconnect() << '\n';
1035     dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY << ": " << setting.autoconnectPriority() << '\n';
1036     dbg.nospace() << NM_SETTING_CONNECTION_TIMESTAMP << ": " << setting.timestamp().toSecsSinceEpoch() << '\n';
1037     dbg.nospace() << NM_SETTING_CONNECTION_READ_ONLY << ": " << setting.readOnly() << '\n';
1038     dbg.nospace() << NM_SETTING_CONNECTION_ZONE << ": " << setting.zone() << '\n';
1039     dbg.nospace() << NM_SETTING_CONNECTION_MASTER << ": " << setting.master() << '\n';
1040     dbg.nospace() << NM_SETTING_CONNECTION_SLAVE_TYPE << ": " << setting.slaveType() << '\n';
1041     dbg.nospace() << NM_SETTING_CONNECTION_SECONDARIES << ": " << setting.secondaries() << '\n';
1042     dbg.nospace() << NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT << ": " << setting.gatewayPingTimeout() << '\n';
1043     dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES << ": " << setting.autoconnectRetries() << '\n';
1044     dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES << ": " << setting.autoconnectSlaves() << '\n';
1045     dbg.nospace() << NM_SETTING_CONNECTION_LLDP << ": " << setting.lldp() << '\n';
1046     dbg.nospace() << NM_SETTING_CONNECTION_METERED << ": " << setting.metered() << '\n';
1047     dbg.nospace() << NM_SETTING_CONNECTION_MDNS << ": " << setting.mdns() << '\n';
1048     dbg.nospace() << NM_SETTING_CONNECTION_STABLE_ID << ": " << setting.stableId() << '\n';
1049     dbg.nospace() << "===================\n";
1050     const auto settingsList = setting.settings();
1051     for (const Setting::Ptr &settingPtr : settingsList) {
1052         dbg.nospace() << settingPtr->typeAsString(settingPtr->type()).toUpper() << " SETTINGS\n";
1053         dbg.nospace() << "---------------------------\n";
1054         switch (settingPtr->type()) {
1055         case Setting::Adsl:
1056             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::AdslSetting>().data());
1057             break;
1058         case Setting::Bond:
1059             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::BondSetting>().data());
1060             break;
1061         case Setting::Bluetooth:
1062             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::BluetoothSetting>().data());
1063             break;
1064         case Setting::Bridge:
1065             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::BridgeSetting>().data());
1066             break;
1067         case Setting::BridgePort:
1068             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::BridgePortSetting>().data());
1069             break;
1070         case Setting::Cdma:
1071             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::CdmaSetting>().data());
1072             break;
1073         case Setting::Gsm:
1074             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::GsmSetting>().data());
1075             break;
1076         case Setting::Infiniband:
1077             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::InfinibandSetting>().data());
1078             break;
1079         case Setting::Ipv4:
1080             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::Ipv4Setting>().data());
1081             break;
1082         case Setting::Ipv6:
1083             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::Ipv6Setting>().data());
1084             break;
1085         case Setting::OlpcMesh:
1086             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::OlpcMeshSetting>().data());
1087             break;
1088         case Setting::Ppp:
1089             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::PppSetting>().data());
1090             break;
1091         case Setting::Pppoe:
1092             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::PppoeSetting>().data());
1093             break;
1094         case Setting::Security8021x:
1095             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::Security8021xSetting>().data());
1096             break;
1097         case Setting::Serial:
1098             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::SerialSetting>().data());
1099             break;
1100         case Setting::Vlan:
1101             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::VlanSetting>().data());
1102             break;
1103         case Setting::Vpn:
1104             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::VpnSetting>().data());
1105             break;
1106         case Setting::Wimax:
1107             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WimaxSetting>().data());
1108             break;
1109         case Setting::Wired:
1110             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WiredSetting>().data());
1111             break;
1112         case Setting::Wireless:
1113             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WirelessSetting>().data());
1114             break;
1115         case Setting::WirelessSecurity:
1116             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WirelessSecuritySetting>().data());
1117             break;
1118         case Setting::Team:
1119             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::TeamSetting>().data());
1120             break;
1121         case Setting::Tun:
1122             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::TunSetting>().data());
1123             break;
1124         case Setting::IpTunnel:
1125             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::IpTunnelSetting>().data());
1126             break;
1127         case Setting::WireGuard:
1128             dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WireGuardSetting>().data());
1129             break;
1130         default:
1131             dbg.nospace() << *settingPtr.data();
1132         }
1133 
1134         dbg.nospace() << '\n';
1135     }
1136     return dbg.maybeSpace();
1137 }