1/*
2 SPDX-FileCopyrightText: 2012-2013 Jan Grulich <jgrulich@redhat.com>
3 SPDX-FileCopyrightText: 2013 Daniel Nicoletti <dantti12@gmail.com>
4 SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7*/
8
9#include "connectionsettings.h"
10#include "connectionsettings_p.h"
11
12#include "adslsetting.h"
13#include "bluetoothsetting.h"
14#include "bondsetting.h"
15#include "bridgeportsetting.h"
16#include "bridgesetting.h"
17#include "cdmasetting.h"
18#include "gsmsetting.h"
19#include "infinibandsetting.h"
20#include "iptunnelsetting.h"
21#include "ipv4setting.h"
22#include "ipv6setting.h"
23#include "olpcmeshsetting.h"
24#include "pppoesetting.h"
25#include "pppsetting.h"
26#include "security8021xsetting.h"
27#include "serialsetting.h"
28#include "tunsetting.h"
29#include "vlansetting.h"
30#include "vpnsetting.h"
31#include "wifip2psetting.h"
32#include "wimaxsetting.h"
33#include "wiredsetting.h"
34#include "wireguardsetting.h"
35#include "wirelesssecuritysetting.h"
36#include "wirelesssetting.h"
37
38#undef signals
39
40#if !NM_CHECK_VERSION(1, 6, 0)
41#define NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES "autoconnect-retries"
42#endif
43
44#if !NM_CHECK_VERSION(1, 12, 0)
45#define NM_SETTING_CONNECTION_MDNS "mdns"
46#endif
47
48#if !NM_CHECK_VERSION(1, 16, 0)
49#define NM_SETTING_WIREGUARD_SETTING_NAME "wireguard"
50#endif
51
52#if !NM_CHECK_VERSION(1, 42, 0)
53#define NM_SETTING_LOOPBACK_SETTING_NAME "loopback"
54#endif
55
56#include "genericsetting.h"
57#include "teamsetting.h"
58
59#include <QUuid>
60
61namespace NetworkManager
62{
63extern bool checkVersion(const int x, const int y, const int z);
64}
65
66NetworkManager::ConnectionSettingsPrivate::ConnectionSettingsPrivate(ConnectionSettings *q)
67 : name(NM_SETTING_CONNECTION_SETTING_NAME)
68 , uuid(QUuid().toString())
69 , type(ConnectionSettings::Wired)
70 , autoconnect(true)
71 , readOnly(false)
72 , gatewayPingTimeout(0)
73 , autoconnectPriority(0)
74 , autoconnectRetries(-1)
75 , autoconnectSlaves(ConnectionSettings::SlavesDefault)
76 , lldp(ConnectionSettings::LldpDefault)
77 , metered(ConnectionSettings::MeteredUnknown)
78 , mdns(ConnectionSettings::MdnsDefault)
79 , q_ptr(q)
80{
81}
82
83void NetworkManager::ConnectionSettingsPrivate::addSetting(const NetworkManager::Setting::Ptr &setting)
84{
85 settings.push_back(t: setting);
86}
87
88void NetworkManager::ConnectionSettingsPrivate::clearSettings()
89{
90 settings.clear();
91}
92
93void NetworkManager::ConnectionSettingsPrivate::initSettings(NMBluetoothCapabilities bt_cap)
94{
95 clearSettings();
96
97 switch (type) {
98 case ConnectionSettings::Adsl:
99 addSetting(setting: Setting::Ptr(new AdslSetting()));
100 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
101 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
102 break;
103 case ConnectionSettings::Bond:
104 addSetting(setting: Setting::Ptr(new BondSetting()));
105 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
106 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
107 break;
108 case ConnectionSettings::Bluetooth:
109 addSetting(setting: Setting::Ptr(new BluetoothSetting()));
110 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
111 // addSetting(Setting::Ptr(new Ipv6Setting()));
112 if (bt_cap == NM_BT_CAPABILITY_DUN) {
113 addSetting(setting: Setting::Ptr(new GsmSetting()));
114 addSetting(setting: Setting::Ptr(new PppSetting()));
115 addSetting(setting: Setting::Ptr(new SerialSetting()));
116 }
117 break;
118 case ConnectionSettings::Bridge:
119 addSetting(setting: Setting::Ptr(new BridgeSetting()));
120 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
121 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
122 break;
123 case ConnectionSettings::Cdma:
124 addSetting(setting: Setting::Ptr(new CdmaSetting()));
125 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
126 if (NetworkManager::checkVersion(x: 1, y: 0, z: 0)) {
127 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
128 }
129 addSetting(setting: Setting::Ptr(new PppSetting()));
130 break;
131 case ConnectionSettings::Gsm:
132 addSetting(setting: Setting::Ptr(new GsmSetting()));
133 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
134 if (NetworkManager::checkVersion(x: 1, y: 0, z: 0)) {
135 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
136 }
137 addSetting(setting: Setting::Ptr(new PppSetting()));
138 break;
139 case ConnectionSettings::Infiniband:
140 addSetting(setting: Setting::Ptr(new InfinibandSetting()));
141 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
142 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
143 break;
144 case ConnectionSettings::OLPCMesh:
145 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
146 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
147 addSetting(setting: Setting::Ptr(new OlpcMeshSetting()));
148 break;
149 case ConnectionSettings::Pppoe:
150 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
151 // addSetting(new Ipv6Setting()));
152 addSetting(setting: Setting::Ptr(new PppSetting()));
153 addSetting(setting: Setting::Ptr(new PppoeSetting()));
154 addSetting(setting: Setting::Ptr(new WiredSetting()));
155 break;
156 case ConnectionSettings::Vlan:
157 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
158 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
159 addSetting(setting: Setting::Ptr(new VlanSetting()));
160 break;
161 case ConnectionSettings::Vpn:
162 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
163 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
164 addSetting(setting: Setting::Ptr(new VpnSetting()));
165 break;
166 case ConnectionSettings::WifiP2P:
167 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
168 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
169 addSetting(setting: Setting::Ptr(new WifiP2PSetting()));
170 break;
171 case ConnectionSettings::Wimax:
172 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
173 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
174 addSetting(setting: Setting::Ptr(new WimaxSetting()));
175 break;
176 case ConnectionSettings::Wired:
177 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
178 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
179 addSetting(setting: Setting::Ptr(new Security8021xSetting()));
180 addSetting(setting: Setting::Ptr(new WiredSetting()));
181 break;
182 case ConnectionSettings::Wireless:
183 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
184 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
185 addSetting(setting: Setting::Ptr(new Security8021xSetting()));
186 addSetting(setting: Setting::Ptr(new WirelessSetting()));
187 addSetting(setting: Setting::Ptr(new WirelessSecuritySetting()));
188 break;
189 case ConnectionSettings::Team:
190 addSetting(setting: Setting::Ptr(new TeamSetting()));
191 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
192 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
193 break;
194 case ConnectionSettings::Generic:
195 addSetting(setting: Setting::Ptr(new GenericSetting()));
196 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
197 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
198 break;
199 case ConnectionSettings::Tun:
200 addSetting(setting: Setting::Ptr(new TunSetting()));
201 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
202 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
203 break;
204 case ConnectionSettings::IpTunnel:
205 addSetting(setting: Setting::Ptr(new IpTunnelSetting()));
206 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
207 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
208 break;
209 case ConnectionSettings::WireGuard:
210 addSetting(setting: Setting::Ptr(new WireGuardSetting()));
211 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
212 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
213 break;
214 case ConnectionSettings::Loopback:
215 addSetting(setting: Setting::Ptr(new Ipv4Setting()));
216 addSetting(setting: Setting::Ptr(new Ipv6Setting()));
217 case ConnectionSettings::Unknown:
218 default:
219 break;
220 }
221}
222
223void NetworkManager::ConnectionSettingsPrivate::initSettings(const NetworkManager::ConnectionSettings::Ptr &connectionSettings)
224{
225 Q_Q(ConnectionSettings);
226
227 clearSettings();
228
229 switch (type) {
230 case ConnectionSettings::Adsl:
231 addSetting(setting: connectionSettings->setting(Setting::Adsl));
232 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
233 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
234 break;
235 case ConnectionSettings::Bond:
236 addSetting(setting: connectionSettings->setting(Setting::Bond));
237 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
238 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
239 break;
240 case ConnectionSettings::Bluetooth:
241 addSetting(setting: connectionSettings->setting(Setting::Bluetooth));
242 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
243 if (NetworkManager::checkVersion(x: 1, y: 0, z: 0)) {
244 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
245 }
246 if (q->setting(Setting::Gsm) && q->setting(Setting::Ppp) && q->setting(Setting::Serial)) {
247 addSetting(setting: connectionSettings->setting(Setting::Gsm));
248 addSetting(setting: connectionSettings->setting(Setting::Ppp));
249 addSetting(setting: connectionSettings->setting(Setting::Serial));
250 }
251 break;
252 case ConnectionSettings::Bridge:
253 addSetting(setting: connectionSettings->setting(Setting::Bridge));
254 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
255 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
256 break;
257 case ConnectionSettings::Cdma:
258 addSetting(setting: connectionSettings->setting(Setting::Cdma));
259 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
260 if (NetworkManager::checkVersion(x: 1, y: 0, z: 0)) {
261 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
262 }
263 addSetting(setting: connectionSettings->setting(Setting::Ppp));
264 break;
265 case ConnectionSettings::Gsm:
266 addSetting(setting: connectionSettings->setting(Setting::Gsm));
267 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
268 if (NetworkManager::checkVersion(x: 1, y: 0, z: 0)) {
269 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
270 }
271 addSetting(setting: connectionSettings->setting(Setting::Ppp));
272 break;
273 case ConnectionSettings::Infiniband:
274 addSetting(setting: connectionSettings->setting(Setting::Infiniband));
275 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
276 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
277 break;
278 case ConnectionSettings::OLPCMesh:
279 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
280 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
281 addSetting(setting: connectionSettings->setting(Setting::OlpcMesh));
282 break;
283 case ConnectionSettings::Pppoe:
284 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
285 // addSetting(Ipv6Setting(connectionSettings->setting(Setting::Ipv6));
286 addSetting(setting: connectionSettings->setting(Setting::Ppp));
287 addSetting(setting: connectionSettings->setting(Setting::Pppoe));
288 addSetting(setting: connectionSettings->setting(Setting::Wired));
289 break;
290 case ConnectionSettings::Vlan:
291 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
292 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
293 addSetting(setting: connectionSettings->setting(Setting::Vlan));
294 break;
295 case ConnectionSettings::Vpn:
296 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
297 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
298 addSetting(setting: connectionSettings->setting(Setting::Vpn));
299 break;
300 case ConnectionSettings::WifiP2P:
301 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
302 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
303 addSetting(setting: connectionSettings->setting(Setting::WifiP2P));
304 break;
305 case ConnectionSettings::Wimax:
306 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
307 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
308 addSetting(setting: connectionSettings->setting(Setting::Wimax));
309 break;
310 case ConnectionSettings::Wired:
311 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
312 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
313 addSetting(setting: connectionSettings->setting(Setting::Security8021x));
314 addSetting(setting: connectionSettings->setting(Setting::Wired));
315 break;
316 case ConnectionSettings::Wireless:
317 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
318 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
319 addSetting(setting: connectionSettings->setting(Setting::Security8021x));
320 addSetting(setting: connectionSettings->setting(Setting::Wireless));
321 addSetting(setting: connectionSettings->setting(Setting::WirelessSecurity));
322 break;
323 case ConnectionSettings::Team:
324 addSetting(setting: connectionSettings->setting(Setting::Team));
325 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
326 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
327 break;
328 case ConnectionSettings::Generic:
329 addSetting(setting: connectionSettings->setting(Setting::Generic));
330 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
331 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
332 break;
333 case ConnectionSettings::Tun:
334 addSetting(setting: connectionSettings->setting(Setting::Tun));
335 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
336 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
337 break;
338 case ConnectionSettings::IpTunnel:
339 addSetting(setting: connectionSettings->setting(Setting::IpTunnel));
340 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
341 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
342 break;
343 case ConnectionSettings::WireGuard:
344 addSetting(setting: connectionSettings->setting(Setting::WireGuard));
345 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
346 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
347 break;
348 case ConnectionSettings::Loopback:
349 addSetting(setting: connectionSettings->setting(Setting::Ipv4));
350 addSetting(setting: connectionSettings->setting(Setting::Ipv6));
351 break;
352 case ConnectionSettings::Unknown:
353 default:
354 break;
355 }
356}
357
358NetworkManager::ConnectionSettings::ConnectionType NetworkManager::ConnectionSettings::typeFromString(const QString &typeString)
359{
360 ConnectionSettings::ConnectionType type = Wired;
361
362 if (typeString == QLatin1String(NM_SETTING_ADSL_SETTING_NAME)) {
363 type = Adsl;
364 } else if (typeString == QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME)) {
365 type = Bluetooth;
366 } else if (typeString == QLatin1String(NM_SETTING_BOND_SETTING_NAME)) {
367 type = Bond;
368 } else if (typeString == QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME)) {
369 type = Bridge;
370 } else if (typeString == QLatin1String(NM_SETTING_CDMA_SETTING_NAME)) {
371 type = Cdma;
372 } else if (typeString == QLatin1String(NM_SETTING_GSM_SETTING_NAME)) {
373 type = Gsm;
374 } else if (typeString == QLatin1String(NM_SETTING_INFINIBAND_SETTING_NAME)) {
375 type = Infiniband;
376 } else if (typeString == QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME)) {
377 type = OLPCMesh;
378 } else if (typeString == QLatin1String(NM_SETTING_PPPOE_SETTING_NAME)) {
379 type = Pppoe;
380 } else if (typeString == QLatin1String(NM_SETTING_VLAN_SETTING_NAME)) {
381 type = Vlan;
382 } else if (typeString == QLatin1String(NM_SETTING_VPN_SETTING_NAME)) {
383 type = Vpn;
384 } else if (typeString == QLatin1String(NM_SETTING_WIFI_P2P_SETTING_NAME)) {
385 type = WifiP2P;
386 } else if (typeString == QLatin1String(NM_SETTING_WIMAX_SETTING_NAME)) {
387 type = Wimax;
388 } else if (typeString == QLatin1String(NM_SETTING_WIRED_SETTING_NAME)) {
389 type = Wired;
390 } else if (typeString == QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME)) {
391 type = Wireless;
392 } else if (typeString == QLatin1String(NM_SETTING_TEAM_SETTING_NAME)) {
393 type = Team;
394 } else if (typeString == QLatin1String(NM_SETTING_GENERIC_SETTING_NAME)) {
395 type = Generic;
396 } else if (typeString == QLatin1String(NM_SETTING_TUN_SETTING_NAME)) {
397 type = Tun;
398 } else if (typeString == QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME)) {
399 type = IpTunnel;
400 } else if (typeString == QLatin1String(NM_SETTING_WIREGUARD_SETTING_NAME)) {
401 type = WireGuard;
402 } else if (typeString == QLatin1String(NM_SETTING_LOOPBACK_SETTING_NAME)) {
403 type = Loopback;
404 }
405
406 return type;
407}
408
409QString NetworkManager::ConnectionSettings::typeAsString(NetworkManager::ConnectionSettings::ConnectionType type)
410{
411 QString typeString;
412
413 switch (type) {
414 case Adsl:
415 typeString = QLatin1String(NM_SETTING_ADSL_SETTING_NAME);
416 break;
417 case Bond:
418 typeString = QLatin1String(NM_SETTING_BOND_SETTING_NAME);
419 break;
420 case Bluetooth:
421 typeString = QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME);
422 break;
423 case Bridge:
424 typeString = QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME);
425 break;
426 case Cdma:
427 typeString = QLatin1String(NM_SETTING_CDMA_SETTING_NAME);
428 break;
429 case Gsm:
430 typeString = QLatin1String(NM_SETTING_GSM_SETTING_NAME);
431 break;
432 case Infiniband:
433 typeString = QLatin1String(NM_SETTING_INFINIBAND_SETTING_NAME);
434 break;
435 case OLPCMesh:
436 typeString = QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME);
437 break;
438 case Pppoe:
439 typeString = QLatin1String(NM_SETTING_PPPOE_SETTING_NAME);
440 break;
441 case Vlan:
442 typeString = QLatin1String(NM_SETTING_VLAN_SETTING_NAME);
443 break;
444 case Vpn:
445 typeString = QLatin1String(NM_SETTING_VPN_SETTING_NAME);
446 break;
447 case WifiP2P:
448 typeString = QLatin1String(NM_SETTING_WIFI_P2P_SETTING_NAME);
449 break;
450 case Wimax:
451 typeString = QLatin1String(NM_SETTING_WIMAX_SETTING_NAME);
452 break;
453 case Wired:
454 typeString = QLatin1String(NM_SETTING_WIRED_SETTING_NAME);
455 break;
456 case Wireless:
457 typeString = QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME);
458 break;
459 case Team:
460 typeString = QLatin1String(NM_SETTING_TEAM_SETTING_NAME);
461 break;
462 case Generic:
463 typeString = QLatin1String(NM_SETTING_GENERIC_SETTING_NAME);
464 break;
465 case Tun:
466 typeString = QLatin1String(NM_SETTING_TUN_SETTING_NAME);
467 break;
468 case IpTunnel:
469 typeString = QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME);
470 break;
471 case WireGuard:
472 typeString = QLatin1String(NM_SETTING_WIREGUARD_SETTING_NAME);
473 break;
474 case Loopback:
475 typeString = QLatin1String(NM_SETTING_LOOPBACK_SETTING_NAME);
476 break;
477 default:
478 break;
479 };
480
481 return typeString;
482}
483
484QString NetworkManager::ConnectionSettings::createNewUuid()
485{
486 return QUuid::createUuid().toString().mid(position: 1, n: QUuid::createUuid().toString().length() - 2);
487}
488
489NetworkManager::ConnectionSettings::ConnectionSettings()
490 : d_ptr(new ConnectionSettingsPrivate(this))
491{
492}
493
494NetworkManager::ConnectionSettings::ConnectionSettings(NetworkManager::ConnectionSettings::ConnectionType type, NMBluetoothCapabilities bt_cap)
495 : d_ptr(new ConnectionSettingsPrivate(this))
496{
497 setConnectionType(type, bt_cap);
498}
499
500NetworkManager::ConnectionSettings::ConnectionSettings(const NetworkManager::ConnectionSettings::Ptr &other)
501 : d_ptr(new ConnectionSettingsPrivate(this))
502{
503 Q_D(ConnectionSettings);
504
505 setId(other->id());
506 setUuid(other->uuid());
507 setInterfaceName(other->interfaceName());
508 setConnectionType(type: other->connectionType());
509 setPermissions(other->permissions());
510 setAutoconnect(other->autoconnect());
511 setAutoconnectPriority(other->autoconnectPriority());
512 setTimestamp(other->timestamp());
513 setReadOnly(other->readOnly());
514 setZone(other->zone());
515 setMaster(other->master());
516 setSlaveType(other->slaveType());
517 setGatewayPingTimeout(other->gatewayPingTimeout());
518 setAutoconnectRetries(other->autoconnectRetries());
519 setAutoconnectSlaves(other->autoconnectSlaves());
520 setLldp(other->lldp());
521 setMetered(other->metered());
522 setMdns(other->mdns());
523 setStableId(other->stableId());
524
525 d->initSettings(connectionSettings: other);
526}
527
528NetworkManager::ConnectionSettings::ConnectionSettings(const NMVariantMapMap &map)
529 : d_ptr(new ConnectionSettingsPrivate(this))
530{
531 fromMap(map);
532}
533
534NetworkManager::ConnectionSettings::~ConnectionSettings()
535{
536 d_ptr->clearSettings();
537
538 delete d_ptr;
539}
540
541void NetworkManager::ConnectionSettings::fromMap(const NMVariantMapMap &map)
542{
543 QVariantMap connectionSettings = map.value(key: QLatin1String(NM_SETTING_CONNECTION_SETTING_NAME));
544
545 setId(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_ID)).toString());
546 setUuid(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_UUID)).toString());
547 setConnectionType(type: typeFromString(typeString: connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_TYPE)).toString()));
548
549 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_INTERFACE_NAME))) {
550 setInterfaceName(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_INTERFACE_NAME)).toString());
551 }
552 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_PERMISSIONS))) {
553 const QStringList permissions = connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_PERMISSIONS)).toStringList();
554 for (const QString &permission : permissions) {
555 const QStringList split = permission.split(sep: QLatin1Char(':'), behavior: Qt::KeepEmptyParts);
556 addToPermissions(user: split.at(i: 1), type: split.at(i: 2));
557 }
558 }
559
560 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT))) {
561 setAutoconnect(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT)).toBool());
562 }
563
564 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY))) {
565 setAutoconnectPriority(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY)).toInt());
566 }
567
568 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_TIMESTAMP))) {
569 const int timestamp = connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_TIMESTAMP)).toInt();
570 setTimestamp(QDateTime::fromSecsSinceEpoch(secs: timestamp));
571 }
572
573 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_READ_ONLY))) {
574 setReadOnly(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_READ_ONLY)).toBool());
575 }
576
577 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_ZONE))) {
578 setZone(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_ZONE)).toString());
579 }
580
581 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_MASTER))) {
582 setMaster(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_MASTER)).toString());
583 }
584
585 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_SLAVE_TYPE))) {
586 setSlaveType(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_SLAVE_TYPE)).toString());
587 }
588
589 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_SECONDARIES))) {
590 setSecondaries(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_SECONDARIES)).toStringList());
591 }
592
593 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT))) {
594 setGatewayPingTimeout(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT)).toUInt());
595 }
596
597 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES))) {
598 setAutoconnectRetries(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES)).toInt());
599 }
600
601 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES))) {
602 setAutoconnectSlaves(
603 (NetworkManager::ConnectionSettings::AutoconnectSlaves)connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES)).toInt());
604 }
605
606 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_LLDP))) {
607 setLldp((NetworkManager::ConnectionSettings::Lldp)connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_LLDP)).toInt());
608 }
609
610 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_METERED))) {
611 setMetered((NetworkManager::ConnectionSettings::Metered)connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_METERED)).toInt());
612 }
613
614 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_MDNS))) {
615 setMdns((NetworkManager::ConnectionSettings::Mdns)connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_MDNS)).toInt());
616 }
617
618 if (connectionSettings.contains(key: QLatin1String(NM_SETTING_CONNECTION_STABLE_ID))) {
619 setStableId(connectionSettings.value(key: QLatin1String(NM_SETTING_CONNECTION_STABLE_ID)).toString());
620 }
621
622 const auto settingsList = settings();
623 for (const Setting::Ptr &setting : settingsList) {
624 if (map.contains(key: setting->name())) {
625 setting->fromMap(map: map.value(key: setting->name()));
626 setting->setInitialized(true);
627 } else {
628 setting->setInitialized(false);
629 }
630 }
631}
632
633static struct {
634 const char *name;
635 NetworkManager::Security8021xSetting::EapMethod method;
636} constexpr const eap_methods[] = {
637 {.name: "PEAP", .method: NetworkManager::Security8021xSetting::EapMethodPeap},
638 {.name: "PWD", .method: NetworkManager::Security8021xSetting::EapMethodPwd},
639 {.name: "TLS", .method: NetworkManager::Security8021xSetting::EapMethodTls},
640 {.name: "TTLS", .method: NetworkManager::Security8021xSetting::EapMethodTtls},
641};
642
643static struct {
644 const char *name;
645 NetworkManager::Security8021xSetting::AuthMethod method;
646} constexpr const auth_methods[] = {
647 {.name: "GTC", .method: NetworkManager::Security8021xSetting::AuthMethodGtc},
648 {.name: "MSCHAP", .method: NetworkManager::Security8021xSetting::AuthMethodMschap},
649 {.name: "MSCHAPV2", .method: NetworkManager::Security8021xSetting::AuthMethodMschapv2},
650 {.name: "PAP", .method: NetworkManager::Security8021xSetting::AuthMethodPap},
651};
652
653void NetworkManager::ConnectionSettings::fromMeCard(const QVariantMap &map)
654{
655 const auto ssid = map.value(key: QLatin1String("S")).toString();
656 setId(ssid);
657
658 auto wifiSetting = setting(Setting::Wireless).dynamicCast<WirelessSetting>();
659 wifiSetting->setInitialized(true);
660 wifiSetting->setSsid(ssid.toUtf8());
661
662 auto wifiSecurity = setting(Setting::WirelessSecurity).dynamicCast<WirelessSecuritySetting>();
663 const auto securityType = map.value(key: QLatin1String("T")).toString();
664
665 if (!securityType.isEmpty() && securityType != QLatin1String("nopass")) {
666 wifiSecurity->setInitialized(true);
667 }
668
669 if (securityType == QLatin1String("WPA") || securityType == QLatin1String("WEP")) {
670 wifiSecurity->setKeyMgmt(NetworkManager::WirelessSecuritySetting::WpaPsk);
671 wifiSecurity->setPsk(map.value(key: QLatin1String("P")).toString());
672 wifiSecurity->setPskFlags(NetworkManager::Setting::AgentOwned);
673 } else if (securityType == QLatin1String("SAE")) {
674 wifiSecurity->setKeyMgmt(NetworkManager::WirelessSecuritySetting::SAE);
675 wifiSecurity->setPsk(map.value(key: QLatin1String("P")).toString());
676 wifiSecurity->setPskFlags(NetworkManager::Setting::AgentOwned);
677 } else if (securityType == QLatin1String("WPA2-EAP")) {
678 wifiSecurity->setKeyMgmt(NetworkManager::WirelessSecuritySetting::WpaEap);
679 auto sec8021x = setting(Setting::Security8021x).dynamicCast<Security8021xSetting>();
680 sec8021x->setAnonymousIdentity(map.value(key: QLatin1String("A")).toString());
681 sec8021x->setIdentity(map.value(key: QLatin1String("I")).toString());
682 sec8021x->setPassword(map.value(key: QLatin1String("P")).toString());
683
684 const auto eapMethod = map.value(key: QLatin1String("E")).toString();
685 for (const auto &method : eap_methods) {
686 if (eapMethod == QLatin1String(method.name)) {
687 sec8021x->setEapMethods({method.method});
688 break;
689 }
690 }
691 const auto phase2AuthMethod = map.value(key: QLatin1String("PH2")).toString();
692 for (const auto &method : auth_methods) {
693 if (phase2AuthMethod == QLatin1String(method.name)) {
694 sec8021x->setPhase2AuthMethod(method.method);
695 break;
696 }
697 }
698 }
699}
700
701NMVariantMapMap NetworkManager::ConnectionSettings::toMap() const
702{
703 NMVariantMapMap result;
704 QVariantMap connectionSetting;
705
706 if (!id().isEmpty()) {
707 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_ID), value: id());
708 }
709
710 if (!uuid().isEmpty()) {
711 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_UUID), value: uuid());
712 }
713
714 if (connectionType()) {
715 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_TYPE), value: typeAsString(type: connectionType()));
716 }
717
718 if (!interfaceName().isEmpty()) {
719 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_INTERFACE_NAME), value: interfaceName());
720 }
721
722 if (!permissions().isEmpty()) {
723 QStringList perm;
724 QHash<QString, QString> perms = permissions();
725 QHash<QString, QString>::const_iterator it = perms.constBegin();
726 while (it != perms.constEnd()) {
727 const QString tmp = "user:" + it.key() + ':' + it.value();
728 perm << tmp;
729 ++it;
730 }
731
732 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_PERMISSIONS), value: perm);
733 }
734
735 if (!autoconnect()) {
736 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT), value: autoconnect());
737 }
738
739 if (autoconnectPriority()) {
740 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY), value: autoconnectPriority());
741 }
742
743 if (timestamp().isValid()) {
744 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_TIMESTAMP), value: timestamp().toSecsSinceEpoch());
745 }
746
747 if (readOnly()) {
748 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_READ_ONLY), value: readOnly());
749 }
750
751 if (!zone().isEmpty()) {
752 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_ZONE), value: zone());
753 }
754
755 if (!master().isEmpty()) {
756 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_MASTER), value: master());
757 }
758
759 if (!slaveType().isEmpty()) {
760 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_SLAVE_TYPE), value: slaveType());
761 }
762
763 if (!secondaries().isEmpty()) {
764 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_SECONDARIES), value: secondaries());
765 }
766
767 if (gatewayPingTimeout()) {
768 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT), value: gatewayPingTimeout());
769 }
770
771 if (autoconnectRetries() >= 0) {
772 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES), value: autoconnectRetries());
773 }
774
775 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES), value: autoconnectSlaves());
776 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_LLDP), value: lldp());
777 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_METERED), value: metered());
778
779 if (mdns() != MdnsDefault) {
780 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_MDNS), value: mdns());
781 }
782
783 if (!stableId().isEmpty()) {
784 connectionSetting.insert(key: QLatin1String(NM_SETTING_CONNECTION_STABLE_ID), value: stableId());
785 }
786
787 result.insert(key: QLatin1String(NM_SETTING_CONNECTION_SETTING_NAME), value: connectionSetting);
788
789 const auto settingsList = settings();
790 for (const Setting::Ptr &setting : settingsList) {
791 QVariantMap map = setting->toMap();
792 if (!setting->isNull()) {
793 result.insert(key: setting->name(), value: map);
794 }
795 }
796 return result;
797}
798
799QString NetworkManager::ConnectionSettings::name() const
800{
801 Q_D(const ConnectionSettings);
802
803 return d->name;
804}
805
806void NetworkManager::ConnectionSettings::setId(const QString &id)
807{
808 Q_D(ConnectionSettings);
809
810 d->id = id;
811}
812
813QString NetworkManager::ConnectionSettings::id() const
814{
815 Q_D(const ConnectionSettings);
816
817 return d->id;
818}
819
820void NetworkManager::ConnectionSettings::setUuid(const QString &uuid)
821{
822 Q_D(ConnectionSettings);
823
824 d->uuid = uuid;
825}
826
827QString NetworkManager::ConnectionSettings::uuid() const
828{
829 Q_D(const ConnectionSettings);
830
831 return d->uuid;
832}
833
834void NetworkManager::ConnectionSettings::setInterfaceName(const QString &interfaceName)
835{
836 Q_D(ConnectionSettings);
837
838 d->interfaceName = interfaceName;
839}
840
841QString NetworkManager::ConnectionSettings::interfaceName() const
842{
843 Q_D(const ConnectionSettings);
844
845 return d->interfaceName;
846}
847
848void NetworkManager::ConnectionSettings::setConnectionType(NetworkManager::ConnectionSettings::ConnectionType type, NMBluetoothCapabilities bt_cap)
849{
850 Q_D(ConnectionSettings);
851
852 d->type = type;
853 d->initSettings(bt_cap);
854}
855
856NetworkManager::ConnectionSettings::ConnectionType NetworkManager::ConnectionSettings::connectionType() const
857{
858 Q_D(const ConnectionSettings);
859
860 return d->type;
861}
862
863void NetworkManager::ConnectionSettings::addToPermissions(const QString &user, const QString &type)
864{
865 Q_D(ConnectionSettings);
866
867 d->permissions.insert(key: user, value: type);
868}
869
870void NetworkManager::ConnectionSettings::setPermissions(const QHash<QString, QString> &perm)
871{
872 Q_D(ConnectionSettings);
873
874 d->permissions = perm;
875}
876
877QHash<QString, QString> NetworkManager::ConnectionSettings::permissions() const
878{
879 Q_D(const ConnectionSettings);
880
881 return d->permissions;
882}
883
884void NetworkManager::ConnectionSettings::setAutoconnect(bool autoconnect)
885{
886 Q_D(ConnectionSettings);
887
888 d->autoconnect = autoconnect;
889}
890
891bool NetworkManager::ConnectionSettings::autoconnect() const
892{
893 Q_D(const ConnectionSettings);
894
895 return d->autoconnect;
896}
897
898void NetworkManager::ConnectionSettings::setAutoconnectPriority(int priority)
899{
900 Q_D(ConnectionSettings);
901
902 d->autoconnectPriority = priority;
903}
904
905int NetworkManager::ConnectionSettings::autoconnectPriority() const
906{
907 Q_D(const ConnectionSettings);
908
909 return d->autoconnectPriority;
910}
911
912void NetworkManager::ConnectionSettings::setTimestamp(const QDateTime &timestamp)
913{
914 Q_D(ConnectionSettings);
915
916 d->timestamp = timestamp;
917}
918
919QDateTime NetworkManager::ConnectionSettings::timestamp() const
920{
921 Q_D(const ConnectionSettings);
922
923 return d->timestamp;
924}
925
926void NetworkManager::ConnectionSettings::setReadOnly(bool readonly)
927{
928 Q_D(ConnectionSettings);
929
930 d->readOnly = readonly;
931}
932
933bool NetworkManager::ConnectionSettings::readOnly() const
934{
935 Q_D(const ConnectionSettings);
936
937 return d->readOnly;
938}
939
940void NetworkManager::ConnectionSettings::setZone(const QString &zone)
941{
942 Q_D(ConnectionSettings);
943
944 d->zone = zone;
945}
946
947QString NetworkManager::ConnectionSettings::zone() const
948{
949 Q_D(const ConnectionSettings);
950
951 return d->zone;
952}
953
954bool NetworkManager::ConnectionSettings::isSlave() const
955{
956 Q_D(const ConnectionSettings);
957
958 return !d->master.isEmpty() && !d->slaveType.isEmpty();
959}
960
961void NetworkManager::ConnectionSettings::setMaster(const QString &master)
962{
963 Q_D(ConnectionSettings);
964
965 d->master = master;
966}
967
968QString NetworkManager::ConnectionSettings::master() const
969{
970 Q_D(const ConnectionSettings);
971
972 return d->master;
973}
974
975void NetworkManager::ConnectionSettings::setSlaveType(const QString &type)
976{
977 Q_D(ConnectionSettings);
978
979 d->slaveType = type;
980}
981
982QString NetworkManager::ConnectionSettings::slaveType() const
983{
984 Q_D(const ConnectionSettings);
985
986 return d->slaveType;
987}
988
989void NetworkManager::ConnectionSettings::setSecondaries(const QStringList &secondaries)
990{
991 Q_D(ConnectionSettings);
992
993 d->secondaries = secondaries;
994}
995
996QStringList NetworkManager::ConnectionSettings::secondaries() const
997{
998 Q_D(const ConnectionSettings);
999
1000 return d->secondaries;
1001}
1002
1003void NetworkManager::ConnectionSettings::setGatewayPingTimeout(quint32 timeout)
1004{
1005 Q_D(ConnectionSettings);
1006
1007 d->gatewayPingTimeout = timeout;
1008}
1009
1010quint32 NetworkManager::ConnectionSettings::gatewayPingTimeout() const
1011{
1012 Q_D(const ConnectionSettings);
1013
1014 return d->gatewayPingTimeout;
1015}
1016
1017int NetworkManager::ConnectionSettings::autoconnectRetries() const
1018{
1019 Q_D(const ConnectionSettings);
1020
1021 return d->autoconnectRetries;
1022}
1023
1024void NetworkManager::ConnectionSettings::setAutoconnectRetries(int retries)
1025{
1026 Q_D(ConnectionSettings);
1027
1028 d->autoconnectRetries = retries;
1029}
1030
1031NetworkManager::ConnectionSettings::AutoconnectSlaves NetworkManager::ConnectionSettings::autoconnectSlaves() const
1032{
1033 Q_D(const ConnectionSettings);
1034
1035 return d->autoconnectSlaves;
1036}
1037
1038void NetworkManager::ConnectionSettings::setAutoconnectSlaves(NetworkManager::ConnectionSettings::AutoconnectSlaves autoconnectSlaves)
1039{
1040 Q_D(ConnectionSettings);
1041
1042 d->autoconnectSlaves = autoconnectSlaves;
1043}
1044
1045NetworkManager::ConnectionSettings::Lldp NetworkManager::ConnectionSettings::lldp() const
1046{
1047 Q_D(const ConnectionSettings);
1048
1049 return d->lldp;
1050}
1051
1052void NetworkManager::ConnectionSettings::setLldp(NetworkManager::ConnectionSettings::Lldp lldp)
1053{
1054 Q_D(ConnectionSettings);
1055
1056 d->lldp = lldp;
1057}
1058
1059NetworkManager::ConnectionSettings::Metered NetworkManager::ConnectionSettings::metered() const
1060{
1061 Q_D(const ConnectionSettings);
1062
1063 return d->metered;
1064}
1065
1066void NetworkManager::ConnectionSettings::setMetered(NetworkManager::ConnectionSettings::Metered metered)
1067{
1068 Q_D(ConnectionSettings);
1069
1070 d->metered = metered;
1071}
1072
1073NetworkManager::ConnectionSettings::Mdns NetworkManager::ConnectionSettings::mdns() const
1074{
1075 Q_D(const ConnectionSettings);
1076
1077 return d->mdns;
1078}
1079
1080void NetworkManager::ConnectionSettings::setMdns(NetworkManager::ConnectionSettings::Mdns mdns)
1081{
1082 Q_D(ConnectionSettings);
1083
1084 d->mdns = mdns;
1085}
1086
1087QString NetworkManager::ConnectionSettings::stableId() const
1088{
1089 Q_D(const ConnectionSettings);
1090
1091 return d->stableId;
1092}
1093
1094void NetworkManager::ConnectionSettings::setStableId(const QString &stableId)
1095{
1096 Q_D(ConnectionSettings);
1097
1098 d->stableId = stableId;
1099}
1100
1101NetworkManager::Setting::Ptr NetworkManager::ConnectionSettings::setting(Setting::SettingType type) const
1102{
1103 const auto settingsList = settings();
1104 for (const Setting::Ptr &setting : settingsList) {
1105 if (setting->type() == type) {
1106 return setting;
1107 }
1108 }
1109
1110 return Setting::Ptr();
1111}
1112
1113NetworkManager::Setting::Ptr NetworkManager::ConnectionSettings::setting(const QString &type) const
1114{
1115 return setting(Setting::typeFromString(type));
1116}
1117
1118NetworkManager::Setting::List NetworkManager::ConnectionSettings::settings() const
1119{
1120 Q_D(const ConnectionSettings);
1121
1122 return d->settings;
1123}
1124
1125QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::ConnectionSettings &setting)
1126{
1127 dbg.nospace() << "CONNECTION SETTINGS\n";
1128 dbg.nospace() << "===================\n";
1129
1130 dbg.nospace() << NM_SETTING_CONNECTION_ID << ": " << setting.id() << '\n';
1131 dbg.nospace() << NM_SETTING_CONNECTION_UUID << ": " << setting.uuid() << '\n';
1132 dbg.nospace() << NM_SETTING_CONNECTION_INTERFACE_NAME << ": " << setting.interfaceName() << '\n';
1133 dbg.nospace() << NM_SETTING_CONNECTION_TYPE << ": " << setting.typeAsString(type: setting.connectionType()) << '\n';
1134 dbg.nospace() << NM_SETTING_CONNECTION_PERMISSIONS << ": " << setting.permissions() << '\n';
1135 dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT << ": " << setting.autoconnect() << '\n';
1136 dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY << ": " << setting.autoconnectPriority() << '\n';
1137 dbg.nospace() << NM_SETTING_CONNECTION_TIMESTAMP << ": " << setting.timestamp().toSecsSinceEpoch() << '\n';
1138 dbg.nospace() << NM_SETTING_CONNECTION_READ_ONLY << ": " << setting.readOnly() << '\n';
1139 dbg.nospace() << NM_SETTING_CONNECTION_ZONE << ": " << setting.zone() << '\n';
1140 dbg.nospace() << NM_SETTING_CONNECTION_MASTER << ": " << setting.master() << '\n';
1141 dbg.nospace() << NM_SETTING_CONNECTION_SLAVE_TYPE << ": " << setting.slaveType() << '\n';
1142 dbg.nospace() << NM_SETTING_CONNECTION_SECONDARIES << ": " << setting.secondaries() << '\n';
1143 dbg.nospace() << NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT << ": " << setting.gatewayPingTimeout() << '\n';
1144 dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES << ": " << setting.autoconnectRetries() << '\n';
1145 dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES << ": " << setting.autoconnectSlaves() << '\n';
1146 dbg.nospace() << NM_SETTING_CONNECTION_LLDP << ": " << setting.lldp() << '\n';
1147 dbg.nospace() << NM_SETTING_CONNECTION_METERED << ": " << setting.metered() << '\n';
1148 dbg.nospace() << NM_SETTING_CONNECTION_MDNS << ": " << setting.mdns() << '\n';
1149 dbg.nospace() << NM_SETTING_CONNECTION_STABLE_ID << ": " << setting.stableId() << '\n';
1150 dbg.nospace() << "===================\n";
1151 const auto settingsList = setting.settings();
1152 for (const Setting::Ptr &settingPtr : settingsList) {
1153 dbg.nospace() << settingPtr->typeAsString(type: settingPtr->type()).toUpper() << " SETTINGS\n";
1154 dbg.nospace() << "---------------------------\n";
1155 switch (settingPtr->type()) {
1156 case Setting::Adsl:
1157 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::AdslSetting>().data());
1158 break;
1159 case Setting::Bond:
1160 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::BondSetting>().data());
1161 break;
1162 case Setting::Bluetooth:
1163 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::BluetoothSetting>().data());
1164 break;
1165 case Setting::Bridge:
1166 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::BridgeSetting>().data());
1167 break;
1168 case Setting::BridgePort:
1169 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::BridgePortSetting>().data());
1170 break;
1171 case Setting::Cdma:
1172 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::CdmaSetting>().data());
1173 break;
1174 case Setting::Gsm:
1175 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::GsmSetting>().data());
1176 break;
1177 case Setting::Infiniband:
1178 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::InfinibandSetting>().data());
1179 break;
1180 case Setting::Ipv4:
1181 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::Ipv4Setting>().data());
1182 break;
1183 case Setting::Ipv6:
1184 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::Ipv6Setting>().data());
1185 break;
1186 case Setting::OlpcMesh:
1187 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::OlpcMeshSetting>().data());
1188 break;
1189 case Setting::Ppp:
1190 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::PppSetting>().data());
1191 break;
1192 case Setting::Pppoe:
1193 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::PppoeSetting>().data());
1194 break;
1195 case Setting::Security8021x:
1196 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::Security8021xSetting>().data());
1197 break;
1198 case Setting::Serial:
1199 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::SerialSetting>().data());
1200 break;
1201 case Setting::Vlan:
1202 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::VlanSetting>().data());
1203 break;
1204 case Setting::Vpn:
1205 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::VpnSetting>().data());
1206 break;
1207 case Setting::WifiP2P:
1208 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WifiP2PSetting>().data());
1209 break;
1210 case Setting::Wimax:
1211 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WimaxSetting>().data());
1212 break;
1213 case Setting::Wired:
1214 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WiredSetting>().data());
1215 break;
1216 case Setting::Wireless:
1217 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WirelessSetting>().data());
1218 break;
1219 case Setting::WirelessSecurity:
1220 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WirelessSecuritySetting>().data());
1221 break;
1222 case Setting::Team:
1223 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::TeamSetting>().data());
1224 break;
1225 case Setting::Tun:
1226 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::TunSetting>().data());
1227 break;
1228 case Setting::IpTunnel:
1229 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::IpTunnelSetting>().data());
1230 break;
1231 case Setting::WireGuard:
1232 dbg.nospace() << *(settingPtr.staticCast<NetworkManager::WireGuardSetting>().data());
1233 break;
1234 default:
1235 dbg.nospace() << *settingPtr.data();
1236 }
1237
1238 dbg.nospace() << '\n';
1239 }
1240 return dbg.maybeSpace();
1241}
1242

source code of networkmanager-qt/src/settings/connectionsettings.cpp