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