NetworkManagerQt

manager.cpp
1 /*
2  SPDX-FileCopyrightText: 2008, 2010 Will Stephenson <[email protected]>
3  SPDX-FileCopyrightText: 2011-2013 Lamarque Souza <[email protected]>
4  SPDX-FileCopyrightText: 2013 Daniel Nicoletti <[email protected]>
5  SPDX-FileCopyrightText: 2013 Jan Grulich <[email protected]>
6 
7  SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
8 */
9 
10 #include "manager.h"
11 #include "manager_p.h"
12 
13 #include "macros.h"
14 
15 #undef signals
16 #include <libnm/NetworkManager.h>
17 #define signals Q_SIGNALS
18 
19 #include "adsldevice.h"
20 #include "bluetoothdevice.h"
21 #include "bonddevice.h"
22 #include "bridgedevice.h"
23 #include "dbus/deviceinterface.h"
24 #include "device_p.h"
25 #include "genericdevice.h"
26 #include "gredevice.h"
27 #include "infinibanddevice.h"
28 #include "iptunneldevice.h"
29 #include "macvlandevice.h"
30 #include "modemdevice.h"
31 #include "olpcmeshdevice.h"
32 #include "settings.h"
33 #include "settings_p.h"
34 #include "tundevice.h"
35 #include "vethdevice.h"
36 #include "vlandevice.h"
37 #include "vpnconnection.h"
38 #include "wimaxdevice.h"
39 #include "wireddevice.h"
40 #include "wireguarddevice.h"
41 #include "wirelessdevice.h"
42 
43 #include "nmdebug.h"
44 
45 #define DBUS_OBJECT_MANAGER "org.freedesktop.DBus.ObjectManager"
46 #define DBUS_PROPERTIES "org.freedesktop.DBus.Properties"
47 
48 #ifdef NMQT_STATIC
49 const QString NetworkManager::NetworkManagerPrivate::DBUS_SERVICE(QString::fromLatin1("org.kde.fakenetwork"));
50 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH(QString::fromLatin1("/org/kde/fakenetwork"));
51 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_INTERFACE(QString::fromLatin1("org.kde.fakenetwork"));
52 const QString NetworkManager::NetworkManagerPrivate::DBUS_SETTINGS_PATH(QString::fromLatin1("/org/kde/fakenetwork/Settings"));
53 #else
54 const QString NetworkManager::NetworkManagerPrivate::DBUS_SERVICE(QString::fromLatin1(NM_DBUS_SERVICE));
55 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH(QString::fromLatin1(NM_DBUS_PATH));
56 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_INTERFACE(QString::fromLatin1(NM_DBUS_INTERFACE));
57 const QString NetworkManager::NetworkManagerPrivate::DBUS_SETTINGS_PATH(QString::fromLatin1(NM_DBUS_PATH_SETTINGS));
58 #endif
59 const QString NetworkManager::NetworkManagerPrivate::FDO_DBUS_PROPERTIES(QString::fromLatin1(DBUS_PROPERTIES));
60 const QString NetworkManager::NetworkManagerPrivate::FDO_DBUS_OBJECT_MANAGER(QString::fromLatin1(DBUS_OBJECT_MANAGER));
61 
62 Q_GLOBAL_STATIC(NetworkManager::NetworkManagerPrivate, globalNetworkManager)
63 
64 NetworkManager::NetworkManagerPrivate::NetworkManagerPrivate()
65 #ifdef NMQT_STATIC
67  , iface(NetworkManager::NetworkManagerPrivate::DBUS_SERVICE, NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH, QDBusConnection::sessionBus())
68 #else
70  , iface(NetworkManager::NetworkManagerPrivate::DBUS_SERVICE, NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH, QDBusConnection::systemBus())
71 #endif
72  , nmState(NetworkManager::Unknown)
73  , m_connectivity(NetworkManager::UnknownConnectivity)
74  , m_isNetworkingEnabled(false)
75  , m_isWimaxEnabled(false)
76  , m_isWimaxHardwareEnabled(false)
77  , m_isWirelessEnabled(false)
78  , m_isWirelessHardwareEnabled(false)
79  , m_isWwanEnabled(false)
80  , m_isWwanHardwareEnabled(false)
81  , m_globalDnsConfiguration(NetworkManager::DnsConfiguration())
82  , m_supportedInterfaceTypes(NetworkManager::Device::UnknownType)
83 {
84  connect(&iface, &OrgFreedesktopNetworkManagerInterface::DeviceAdded, this, &NetworkManagerPrivate::onDeviceAdded);
85  connect(&iface, &OrgFreedesktopNetworkManagerInterface::DeviceRemoved, this, &NetworkManagerPrivate::onDeviceRemoved);
86 
87 #ifndef NMQT_STATIC
88  QDBusConnection::systemBus().connect(NetworkManagerPrivate::DBUS_SERVICE,
89  NetworkManagerPrivate::DBUS_DAEMON_PATH,
90  NetworkManagerPrivate::FDO_DBUS_PROPERTIES,
91  QLatin1String("PropertiesChanged"),
92  this,
93  SLOT(dbusPropertiesChanged(QString, QVariantMap, QStringList)));
94 #else
95  connect(&iface, &OrgFreedesktopNetworkManagerInterface::PropertiesChanged, this, &NetworkManagerPrivate::propertiesChanged);
96 #endif
97 
98  iface.connection().connect(NetworkManagerPrivate::DBUS_SERVICE,
99  "/org/freedesktop",
100  NetworkManagerPrivate::FDO_DBUS_OBJECT_MANAGER,
101  QLatin1String("InterfacesAdded"),
102  this,
103  SLOT(dbusInterfacesAdded(QDBusObjectPath, QVariantMap)));
104 
105  connect(&watcher, &QDBusServiceWatcher::serviceUnregistered, this, &NetworkManagerPrivate::daemonUnregistered);
106 
107  init();
108 }
109 
110 void NetworkManager::NetworkManagerPrivate::parseVersion(const QString &version)
111 {
112  const QStringList sl = version.split('.');
113 
114  if (sl.size() > 2) {
115  m_x = sl[0].toInt();
116  m_y = sl[1].toInt();
117  m_z = sl[2].toInt();
118  } else {
119  m_x = -1;
120  m_y = -1;
121  m_z = -1;
122  }
123 }
124 
125 void NetworkManager::NetworkManagerPrivate::init()
126 {
127  qDBusRegisterMetaType<UIntList>();
128  qDBusRegisterMetaType<UIntListList>();
129  // qDBusRegisterMetaType<IpV6DBusAddress>();
130  // qDBusRegisterMetaType<IpV6DBusAddressList>();
131  // qDBusRegisterMetaType<IpV6DBusNameservers>();
132  // qDBusRegisterMetaType<IpV6DBusRoute>();
133  // qDBusRegisterMetaType<IpV6DBusRouteList>();
134  qDBusRegisterMetaType<QList<QDBusObjectPath>>();
135  qDBusRegisterMetaType<DeviceDBusStateReason>();
136  qDBusRegisterMetaType<NMVariantMapMap>();
137  qDBusRegisterMetaType<NMVariantMapList>();
138  qDBusRegisterMetaType<NMStringMap>();
139 
140  m_version = iface.version();
141  parseVersion(m_version);
142  /* clang-format off */
143  m_supportedInterfaceTypes = static_cast<NetworkManager::Device::Types>(
162  /* clang-format on */
163 
164  // Get all Manager's properties async
165  QVariantMap initialProperties = retrieveInitialProperties(iface.staticInterfaceName(), DBUS_DAEMON_PATH);
166  if (!initialProperties.isEmpty()) {
167  propertiesChanged(initialProperties);
168  }
169 
170  QTimer::singleShot(0, [] {
171  qobject_cast<SettingsPrivate *>(settingsNotifier())->init();
172  });
173 
174  if (iface.isValid()) {
175  const QList<QDBusObjectPath> devices = iface.devices();
176  qCDebug(NMQT) << "Device list";
177  for (const QDBusObjectPath &op : devices) {
178  networkInterfaceMap.insert(op.path(), Device::Ptr());
179  Q_EMIT deviceAdded(op.path());
180  qCDebug(NMQT) << " " << op.path();
181  }
182  }
183 }
184 
185 NetworkManager::NetworkManagerPrivate::~NetworkManagerPrivate()
186 {
187 }
188 
189 QString NetworkManager::NetworkManagerPrivate::version() const
190 {
191  return m_version;
192 }
193 
194 int NetworkManager::NetworkManagerPrivate::compareVersion(const QString &version)
195 {
196  int x;
197  int y;
198  int z;
199 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
200  const auto sl = QStringView(version).split('.');
201 #else
202  const auto sl = version.splitRef('.');
203 #endif
204  if (sl.size() > 2) {
205  x = sl[0].toInt();
206  y = sl[1].toInt();
207  z = sl[2].toInt();
208  } else {
209  x = -1;
210  y = -1;
211  z = -1;
212  }
213 
214  return compareVersion(x, y, z);
215 }
216 
217 int NetworkManager::NetworkManagerPrivate::compareVersion(const int x, const int y, const int z) const
218 {
219  if (m_x > x) {
220  return 1;
221  } else if (m_x < x) {
222  return -1;
223  } else if (m_y > y) {
224  return 1;
225  } else if (m_y < y) {
226  return -1;
227  } else if (m_z > z) {
228  return 1;
229  } else if (m_z < z) {
230  return -1;
231  }
232  return 0;
233 }
234 
235 bool NetworkManager::NetworkManagerPrivate::checkVersion(const int x, const int y, const int z) const
236 {
237  return 0 <= compareVersion(x, y, z);
238 }
239 
240 NetworkManager::Device::Types NetworkManager::NetworkManagerPrivate::supportedInterfaceTypes() const
241 {
242  return m_supportedInterfaceTypes;
243 }
244 
245 QVariantMap NetworkManager::NetworkManagerPrivate::retrieveInitialProperties(const QString &interfaceName, const QString &path)
246 {
247  QDBusMessage message = QDBusMessage::createMethodCall(DBUS_SERVICE, path, FDO_DBUS_PROPERTIES, QLatin1String("GetAll"));
248  message << interfaceName;
249 #ifdef NMQT_STATIC
251 #else
253 #endif
254  if (resultMessage.type() == QDBusMessage::ReplyMessage) {
255  QVariantMap result;
256  QDBusArgument dbusArgument = resultMessage.arguments().at(0).value<QDBusArgument>();
257  while (!dbusArgument.atEnd()) {
258  dbusArgument >> result;
259  }
260  return result;
261  }
262 
263  return QVariantMap();
264 }
265 
266 NetworkManager::Device::Ptr NetworkManager::NetworkManagerPrivate::findRegisteredNetworkInterface(const QString &uni)
267 {
268  NetworkManager::Device::Ptr networkInterface;
269  auto it = networkInterfaceMap.constFind(uni);
270  if (it != networkInterfaceMap.constEnd()) {
271  if (*it) {
272  networkInterface = *it;
273  } else {
274  networkInterface = createNetworkInterface(uni);
275  networkInterfaceMap[uni] = networkInterface;
276  }
277  }
278  return networkInterface;
279 }
280 
281 NetworkManager::ActiveConnection::Ptr NetworkManager::NetworkManagerPrivate::findRegisteredActiveConnection(const QString &uni)
282 {
283  NetworkManager::ActiveConnection::Ptr activeConnection;
284  if (!uni.isEmpty() && uni != QLatin1String("/")) {
285  const auto it = m_activeConnections.constFind(uni);
286  const bool contains = it != m_activeConnections.constEnd();
287  if (contains && *it) {
288  activeConnection = *it;
289  } else {
291  if (activeConnection->connection()) {
292  m_activeConnections[uni] = activeConnection;
293  if (!contains) {
294  Q_EMIT activeConnectionAdded(uni);
295  }
296  } else {
297  activeConnection.clear();
298  }
299  }
300  }
301  return activeConnection;
302 }
303 
304 NetworkManager::Device::Ptr NetworkManager::NetworkManagerPrivate::createNetworkInterface(const QString &uni)
305 {
306  // qCDebug(NMQT);
307  auto message = QDBusMessage::createMethodCall(DBUS_SERVICE, uni, FDO_DBUS_PROPERTIES, QStringLiteral("Get"));
308  message.setArguments({QLatin1String(OrgFreedesktopNetworkManagerDeviceInterface::staticInterfaceName()), QStringLiteral("DeviceType")});
309 #ifdef NMQT_STATIC
310  auto bus = QDBusConnection::sessionBus();
311 #else
312  auto bus = QDBusConnection::systemBus();
313 #endif
314  QDBusReply<QVariant> reply = bus.call(message);
315  Device::Type type = reply.isValid() ? NetworkManager::DevicePrivate::convertType(reply.value().toInt()) : Device::UnknownType;
316  switch (type) {
317  case Device::Ethernet:
318  return Device::Ptr(new NetworkManager::WiredDevice(uni), &QObject::deleteLater);
319  case Device::Wifi:
320  return Device::Ptr(new NetworkManager::WirelessDevice(uni), &QObject::deleteLater);
321  case Device::Modem:
322  return Device::Ptr(new NetworkManager::ModemDevice(uni), &QObject::deleteLater);
323  case Device::Bluetooth:
324  return Device::Ptr(new NetworkManager::BluetoothDevice(uni), &QObject::deleteLater);
325  case Device::Wimax:
326  return Device::Ptr(new NetworkManager::WimaxDevice(uni), &QObject::deleteLater);
327  case Device::OlpcMesh:
328  return Device::Ptr(new NetworkManager::OlpcMeshDevice(uni), &QObject::deleteLater);
329  case Device::InfiniBand:
330  return Device::Ptr(new NetworkManager::InfinibandDevice(uni), &QObject::deleteLater);
331  case Device::Bond:
332  return Device::Ptr(new NetworkManager::BondDevice(uni), &QObject::deleteLater);
333  case Device::Vlan:
334  return Device::Ptr(new NetworkManager::VlanDevice(uni), &QObject::deleteLater);
335  case Device::Adsl:
336  return Device::Ptr(new NetworkManager::AdslDevice(uni), &QObject::deleteLater);
337  case Device::Bridge:
338  return Device::Ptr(new NetworkManager::BridgeDevice(uni), &QObject::deleteLater);
339  // No need to check checkVersion, because we can't get Generic, Gre, MacVlan, Tun & Veth values in incompatible runtime
340  case Device::Generic:
341  return Device::Ptr(new NetworkManager::GenericDevice(uni), &QObject::deleteLater);
342  case Device::Gre:
343  return Device::Ptr(new NetworkManager::GreDevice(uni), &QObject::deleteLater);
344  case Device::MacVlan:
345  return Device::Ptr(new NetworkManager::MacVlanDevice(uni), &QObject::deleteLater);
346  case Device::Tun:
347  return Device::Ptr(new NetworkManager::TunDevice(uni), &QObject::deleteLater);
348  case Device::Veth:
349  return Device::Ptr(new NetworkManager::VethDevice(uni), &QObject::deleteLater);
350  case Device::IpTunnel:
351  return Device::Ptr(new NetworkManager::IpTunnelDevice(uni), &QObject::deleteLater);
352  case Device::WireGuard:
353  return Device::Ptr(new NetworkManager::WireGuardDevice(uni), &QObject::deleteLater);
354  default:
355  if (uni != QLatin1String("any")) { // VPN connections use "any" as uni for the network interface.
356  qCDebug(NMQT) << "Can't create device of type" << type << "for" << uni;
357  }
358  }
359 
360  return Device::Ptr(new Device(uni), &QObject::deleteLater);
361 }
362 
364 {
365  return nmState;
366 }
367 
368 NetworkManager::Device::List NetworkManager::NetworkManagerPrivate::networkInterfaces()
369 {
370  Device::List list;
371 
373  for (i = networkInterfaceMap.constBegin(); i != networkInterfaceMap.constEnd(); ++i) {
374  Device::Ptr networkInterface = findRegisteredNetworkInterface(i.key());
375  if (!networkInterface.isNull()) {
376  list.append(networkInterface);
377  } else {
378  qCWarning(NMQT) << "warning: null network Interface for" << i.key();
379  }
380  }
381 
382  return list;
383 }
384 
385 NetworkManager::Device::Ptr NetworkManager::NetworkManagerPrivate::findDeviceByIpIface(const QString &iface)
386 {
388  for (i = networkInterfaceMap.constBegin(); i != networkInterfaceMap.constEnd(); ++i) {
389  Device::Ptr networkInterface = findRegisteredNetworkInterface(i.key());
390  if (networkInterface && networkInterface->udi() == iface) {
391  return networkInterface;
392  }
393  }
394 
395  return Device::Ptr();
396 }
397 
398 bool NetworkManager::NetworkManagerPrivate::isNetworkingEnabled() const
399 {
400  return m_isNetworkingEnabled;
401 }
402 
403 bool NetworkManager::NetworkManagerPrivate::isWirelessEnabled() const
404 {
405  return m_isWirelessEnabled;
406 }
407 
408 bool NetworkManager::NetworkManagerPrivate::isWirelessHardwareEnabled() const
409 {
410  return m_isWirelessHardwareEnabled;
411 }
412 
413 bool NetworkManager::NetworkManagerPrivate::isWwanEnabled() const
414 {
415  return m_isWwanEnabled;
416 }
417 
418 bool NetworkManager::NetworkManagerPrivate::isWwanHardwareEnabled() const
419 {
420  return m_isWwanHardwareEnabled;
421 }
422 
423 bool NetworkManager::NetworkManagerPrivate::isWimaxEnabled() const
424 {
425  return checkVersion(1, 2, 0) ? false : m_isWimaxEnabled;
426 }
427 
428 bool NetworkManager::NetworkManagerPrivate::isWimaxHardwareEnabled() const
429 {
430  return checkVersion(1, 2, 0) ? false : m_isWimaxHardwareEnabled;
431 }
432 
434 NetworkManager::NetworkManagerPrivate::activateConnection(const QString &connectionUni, const QString &interfaceUni, const QString &connectionParameter)
435 {
436  QString extra_connection_parameter = connectionParameter;
437  QString extra_interface_parameter = interfaceUni;
438  if (extra_connection_parameter.isEmpty()) {
439  extra_connection_parameter = QLatin1String("/");
440  }
441  if (extra_interface_parameter.isEmpty()) {
442  extra_interface_parameter = QLatin1String("/");
443  }
444  // TODO store error code
445  QDBusObjectPath connPath(connectionUni);
446  QDBusObjectPath interfacePath(interfaceUni);
447  // qCDebug(NMQT) << "Activating connection" << connPath.path() << "on interface" << interfacePath.path() << "with extra" << extra_connection_parameter;
448  return iface.ActivateConnection(connPath, QDBusObjectPath(extra_interface_parameter), QDBusObjectPath(extra_connection_parameter));
449 }
450 
451 QDBusPendingReply<QDBusObjectPath, QDBusObjectPath> NetworkManager::NetworkManagerPrivate::addAndActivateConnection(const NMVariantMapMap &connection,
452  const QString &interfaceUni,
453  const QString &connectionParameter)
454 {
455  QString extra_connection_parameter = connectionParameter;
456  if (extra_connection_parameter.isEmpty()) {
457  extra_connection_parameter = QLatin1String("/");
458  }
459  // TODO store error code
460  QDBusObjectPath interfacePath(interfaceUni);
461  return iface.AddAndActivateConnection(connection, interfacePath, QDBusObjectPath(extra_connection_parameter));
462 }
463 
465 NetworkManager::NetworkManagerPrivate::addAndActivateConnection2(const NMVariantMapMap &connection,
466  const QString &interfaceUni,
467  const QString &connectionParameter,
468  const QVariantMap &options)
469 {
470  QString extra_connection_parameter = connectionParameter;
471  if (extra_connection_parameter.isEmpty()) {
472  extra_connection_parameter = QLatin1String("/");
473  }
474  // TODO store error code
475  QDBusObjectPath interfacePath(interfaceUni);
476  return iface.AddAndActivateConnection2(connection, interfacePath, QDBusObjectPath(extra_connection_parameter), options);
477 }
478 
479 QDBusPendingReply<> NetworkManager::NetworkManagerPrivate::deactivateConnection(const QString &activeConnectionPath)
480 {
481  return iface.DeactivateConnection(QDBusObjectPath(activeConnectionPath));
482 }
483 
484 void NetworkManager::NetworkManagerPrivate::setNetworkingEnabled(bool enabled)
485 {
486  iface.Enable(enabled);
487 }
488 
489 void NetworkManager::NetworkManagerPrivate::setWirelessEnabled(bool enabled)
490 {
491  iface.setWirelessEnabled(enabled);
492 }
493 
494 void NetworkManager::NetworkManagerPrivate::setWwanEnabled(bool enabled)
495 {
496  iface.setWwanEnabled(enabled);
497 }
498 
499 void NetworkManager::NetworkManagerPrivate::setWimaxEnabled(bool enabled)
500 {
501  if (!checkVersion(1, 2, 0)) {
502  iface.setWimaxEnabled(enabled);
503  }
504 }
505 
506 void NetworkManager::NetworkManagerPrivate::sleep(bool sleep)
507 {
508  iface.Sleep(sleep);
509 }
510 
511 void NetworkManager::NetworkManagerPrivate::setLogging(NetworkManager::LogLevel level, NetworkManager::LogDomains domains)
512 {
513  QString logLevel;
514  QStringList logDomains;
515  switch (level) {
516  case NetworkManager::Error:
517  logLevel = QLatin1String("ERR");
518  break;
519  case NetworkManager::Warning:
520  logLevel = QLatin1String("WARN");
521  break;
522  case NetworkManager::Info:
523  logLevel = QLatin1String("INFO");
524  break;
525  case NetworkManager::Debug:
526  logLevel = QLatin1String("DEBUG");
527  break;
529  logLevel = QLatin1String("TRACE");
530  break;
531  }
532  if (!domains.testFlag(NoChange)) {
533  if (domains.testFlag(NetworkManager::None)) {
534  logDomains << QLatin1String("NONE");
535  }
536  if (domains.testFlag(NetworkManager::Hardware)) {
537  logDomains << QLatin1String("PLATFORM");
538  }
539  if (domains.testFlag(NetworkManager::RFKill)) {
540  logDomains << QLatin1String("RFKILL");
541  }
542  if (domains.testFlag(NetworkManager::Ethernet)) {
543  logDomains << QLatin1String("ETHER");
544  }
545  if (domains.testFlag(NetworkManager::WiFi)) {
546  logDomains << QLatin1String("WIFI");
547  }
548  if (domains.testFlag(NetworkManager::Bluetooth)) {
549  logDomains << QLatin1String("BT");
550  }
551  if (domains.testFlag(NetworkManager::MobileBroadBand)) {
552  logDomains << QLatin1String("MB");
553  }
554  if (domains.testFlag(NetworkManager::DHCP4)) {
555  logDomains << QLatin1String("DHCP4");
556  }
557  if (domains.testFlag(NetworkManager::DHCP6)) {
558  logDomains << QLatin1String("DHCP6");
559  }
560  if (domains.testFlag(NetworkManager::PPP)) {
561  logDomains << QLatin1String("PPP");
562  }
563  if (domains.testFlag(NetworkManager::WiFiScan)) {
564  logDomains << QLatin1String("WIFI_SCAN");
565  }
566  if (domains.testFlag(NetworkManager::IPv4)) {
567  logDomains << QLatin1String("IP4");
568  }
569  if (domains.testFlag(NetworkManager::IPv6)) {
570  logDomains << QLatin1String("IP6");
571  }
572  if (domains.testFlag(NetworkManager::AutoIPv4)) {
573  logDomains << QLatin1String("AUTOIP4");
574  }
575  if (domains.testFlag(NetworkManager::DNS)) {
576  logDomains << QLatin1String("DNS");
577  }
578  if (domains.testFlag(NetworkManager::VPN)) {
579  logDomains << QLatin1String("VPN");
580  }
581  if (domains.testFlag(NetworkManager::Sharing)) {
582  logDomains << QLatin1String("SHARING");
583  }
584  if (domains.testFlag(NetworkManager::Supplicant)) {
585  logDomains << QLatin1String("SUPPLICANT");
586  }
587  if (domains.testFlag(NetworkManager::UserSet)) {
588  logDomains << QLatin1String("USER_SET");
589  }
590  if (domains.testFlag(NetworkManager::SysSet)) {
591  logDomains << QLatin1String("SYS_SET");
592  }
593  if (domains.testFlag(NetworkManager::Suspend)) {
594  logDomains << QLatin1String("SUSPEND");
595  }
596  if (domains.testFlag(NetworkManager::Core)) {
597  logDomains << QLatin1String("CORE");
598  }
599  if (domains.testFlag(NetworkManager::Devices)) {
600  logDomains << QLatin1String("DEVICE");
601  }
602  if (domains.testFlag(NetworkManager::OLPC)) {
603  logDomains << QLatin1String("OLPC");
604  }
605  if (domains.testFlag(NetworkManager::Wimax)) {
606  logDomains << QLatin1String("WIMAX");
607  }
608  if (domains.testFlag(NetworkManager::Infiniband)) {
609  logDomains << QLatin1String("INFINIBAND");
610  }
611  if (domains.testFlag(NetworkManager::Firewall)) {
612  logDomains << QLatin1String("FIREWALL");
613  }
614  if (domains.testFlag(NetworkManager::Adsl)) {
615  logDomains << QLatin1String("ADSL");
616  }
617  if (domains.testFlag(NetworkManager::Bond)) {
618  logDomains << QLatin1String("BOND");
619  }
620  if (domains.testFlag(NetworkManager::Vlan)) {
621  logDomains << QLatin1String("VLAN");
622  }
623  if (domains.testFlag(NetworkManager::Agents)) {
624  logDomains << QLatin1String("AGENTS");
625  }
626  if (domains.testFlag(NetworkManager::Settings)) {
627  logDomains << QLatin1String("SETTINGS");
628  }
629  if (domains.testFlag(NetworkManager::DbusProps)) {
630  logDomains << QLatin1String("DBUS_PROPS");
631  }
632  if (domains.testFlag(NetworkManager::Team)) {
633  logDomains << QLatin1String("TEAM");
634  }
635  if (domains.testFlag(NetworkManager::ConCheck)) {
636  logDomains << QLatin1String("CONCHECK");
637  }
638  if (domains.testFlag(NetworkManager::Dcb)) {
639  logDomains << QLatin1String("DCB");
640  }
641  if (domains.testFlag(NetworkManager::Dispatch)) {
642  logDomains << QLatin1String("DISPATCH");
643  }
644  }
645  iface.SetLogging(logLevel, logDomains.join(QLatin1Char(',')));
646 }
647 
648 NMStringMap NetworkManager::NetworkManagerPrivate::permissions()
649 {
650  return iface.GetPermissions();
651 }
652 
653 NetworkManager::Connectivity NetworkManager::NetworkManagerPrivate::connectivity() const
654 {
655  return m_connectivity;
656 }
657 
658 QDBusPendingReply<uint> NetworkManager::NetworkManagerPrivate::checkConnectivity()
659 {
660  return iface.CheckConnectivity();
661 }
662 
663 NetworkManager::ActiveConnection::Ptr NetworkManager::NetworkManagerPrivate::primaryConnection()
664 {
665  return findRegisteredActiveConnection(m_primaryConnection);
666 }
667 
668 NetworkManager::ActiveConnection::Ptr NetworkManager::NetworkManagerPrivate::activatingConnection()
669 {
670  return findRegisteredActiveConnection(m_activatingConnection);
671 }
672 
673 NetworkManager::ConnectionSettings::ConnectionType NetworkManager::NetworkManagerPrivate::primaryConnectionType()
674 {
675  return checkVersion(1, 0, 0) ? m_primaryConnectionType : NetworkManager::ConnectionSettings::Unknown;
676 }
677 
678 bool NetworkManager::NetworkManagerPrivate::isStartingUp() const
679 {
680  return iface.startup();
681 }
682 
683 NetworkManager::Device::MeteredStatus NetworkManager::NetworkManagerPrivate::metered() const
684 {
685  return checkVersion(1, 0, 6) ? m_metered : NetworkManager::Device::UnknownStatus;
686 }
687 
688 NetworkManager::DnsConfiguration NetworkManager::NetworkManagerPrivate::globalDnsConfiguration() const
689 {
690  return m_globalDnsConfiguration;
691 }
692 
693 void NetworkManager::NetworkManagerPrivate::setGlobalDnsConfiguration(const NetworkManager::DnsConfiguration &configuration)
694 {
695  m_globalDnsConfiguration = configuration;
696  iface.setGlobalDnsConfiguration(m_globalDnsConfiguration.toMap());
697 }
698 
699 void NetworkManager::NetworkManagerPrivate::onDeviceAdded(const QDBusObjectPath &objpath)
700 {
701  // qCDebug(NMQT);
702  if (!networkInterfaceMap.contains(objpath.path())) {
703  networkInterfaceMap.insert(objpath.path(), Device::Ptr());
704  Q_EMIT deviceAdded(objpath.path());
705  }
706 }
707 
708 void NetworkManager::NetworkManagerPrivate::onDeviceRemoved(const QDBusObjectPath &objpath)
709 {
710  // qCDebug(NMQT);
711  networkInterfaceMap.remove(objpath.path());
712  Q_EMIT deviceRemoved(objpath.path());
713 }
714 
715 void NetworkManager::NetworkManagerPrivate::connectivityChanged(uint connectivity)
716 {
717  NetworkManager::Connectivity newConnectivity = convertConnectivity(connectivity);
718  if (m_connectivity != newConnectivity) {
719  m_connectivity = newConnectivity;
720  Q_EMIT Notifier::connectivityChanged(newConnectivity);
721  }
722 }
723 
724 void NetworkManager::NetworkManagerPrivate::stateChanged(uint state)
725 {
726  NetworkManager::Status newStatus = convertNMState(state);
727  if (nmState != newStatus) {
728  nmState = newStatus;
729  Q_EMIT Notifier::statusChanged(newStatus);
730  }
731 }
732 
733 void NetworkManager::NetworkManagerPrivate::dbusPropertiesChanged(const QString &interfaceName,
734  const QVariantMap &properties,
735  const QStringList &invalidatedProperties)
736 {
737  Q_UNUSED(invalidatedProperties);
738  if (interfaceName == QLatin1String("org.freedesktop.NetworkManager")) {
739  propertiesChanged(properties);
740  }
741 }
742 
743 void NetworkManager::NetworkManagerPrivate::propertiesChanged(const QVariantMap &changedProperties)
744 {
745  // qCDebug(NMQT) << Q_FUNC_INFO << changedProperties;
746 
747  QVariantMap::const_iterator it = changedProperties.constBegin();
748  while (it != changedProperties.constEnd()) {
749  const QString property = it.key();
750  if (property == QLatin1String("ActiveConnections")) {
751  const QList<QDBusObjectPath> activePaths = qdbus_cast<QList<QDBusObjectPath>>(*it);
752  if (activePaths.isEmpty()) {
753  QMap<QString, ActiveConnection::Ptr>::const_iterator it = m_activeConnections.constBegin();
754  while (it != m_activeConnections.constEnd()) {
755  Q_EMIT activeConnectionRemoved(it.key());
756  ++it;
757  }
758  m_activeConnections.clear();
759  } else {
760  QStringList knownConnections = m_activeConnections.keys();
761  for (const QDBusObjectPath &ac : activePaths) {
762  if (!m_activeConnections.contains(ac.path())) {
763  m_activeConnections.insert(ac.path(), NetworkManager::ActiveConnection::Ptr());
764  Q_EMIT activeConnectionAdded(ac.path());
765  } else {
766  knownConnections.removeOne(ac.path());
767  }
768  // qCDebug(NMQT) << " " << ac.path();
769  }
770  for (const QString &path : std::as_const(knownConnections)) {
771  m_activeConnections.remove(path);
772  Q_EMIT activeConnectionRemoved(path);
773  }
774  }
775  Q_EMIT activeConnectionsChanged();
776  } else if (property == QLatin1String("NetworkingEnabled")) {
777  m_isNetworkingEnabled = it->toBool();
778  qCDebug(NMQT) << property << m_isNetworkingEnabled;
779  Q_EMIT networkingEnabledChanged(m_isNetworkingEnabled);
780  } else if (property == QLatin1String("WirelessHardwareEnabled")) {
781  m_isWirelessHardwareEnabled = it->toBool();
782  qCDebug(NMQT) << property << m_isWirelessHardwareEnabled;
783  Q_EMIT wirelessHardwareEnabledChanged(m_isWirelessHardwareEnabled);
784  } else if (property == QLatin1String("WirelessEnabled")) {
785  m_isWirelessEnabled = it->toBool();
786  qCDebug(NMQT) << property << m_isWirelessEnabled;
787  Q_EMIT wirelessEnabledChanged(m_isWirelessEnabled);
788  } else if (property == QLatin1String("WwanHardwareEnabled")) {
789  m_isWwanHardwareEnabled = it->toBool();
790  qCDebug(NMQT) << property << m_isWwanHardwareEnabled;
791  Q_EMIT wwanHardwareEnabledChanged(m_isWwanHardwareEnabled);
792  } else if (property == QLatin1String("WwanEnabled")) {
793  m_isWwanEnabled = it->toBool();
794  qCDebug(NMQT) << property << m_isWwanEnabled;
795  Q_EMIT wwanEnabledChanged(m_isWwanEnabled);
796  } else if (property == QLatin1String("WimaxHardwareEnabled")) {
797  m_isWimaxHardwareEnabled = it->toBool();
798  qCDebug(NMQT) << property << m_isWimaxHardwareEnabled;
799  Q_EMIT wimaxHardwareEnabledChanged(m_isWimaxHardwareEnabled);
800  } else if (property == QLatin1String("WimaxEnabled")) {
801  m_isWimaxEnabled = it->toBool();
802  qCDebug(NMQT) << property << m_isWimaxEnabled;
803  Q_EMIT wimaxEnabledChanged(m_isWimaxEnabled);
804  } else if (property == QLatin1String("Version")) {
805  m_version = it->toString();
806  parseVersion(m_version);
807  } else if (property == QLatin1String("State")) {
808  stateChanged(it->toUInt());
809  } else if (property == QLatin1String("Connectivity")) {
810  connectivityChanged(it->toUInt());
811  } else if (property == QLatin1String("PrimaryConnection")) {
812  m_primaryConnection = it->value<QDBusObjectPath>().path();
813  Q_EMIT primaryConnectionChanged(m_primaryConnection);
814  } else if (property == QLatin1String("ActivatingConnection")) {
815  m_activatingConnection = it->value<QDBusObjectPath>().path();
816  Q_EMIT activatingConnectionChanged(m_activatingConnection);
817  } else if (property == QLatin1String("PrimaryConnectionType")) {
818  m_primaryConnectionType = NetworkManager::ConnectionSettings::typeFromString(it->toString());
819  Q_EMIT primaryConnectionTypeChanged(m_primaryConnectionType);
820  } else if (property == QLatin1String("Startup")) {
821  Q_EMIT isStartingUpChanged();
822  } else if (property == QLatin1String("Metered")) {
823  m_metered = (NetworkManager::Device::MeteredStatus)it->toUInt();
824  Q_EMIT meteredChanged(m_metered);
825  } else if (property == QLatin1String("GlobalDnsConfiguration")) {
826  m_globalDnsConfiguration.fromMap(qdbus_cast<QVariantMap>(*it));
827  Q_EMIT globalDnsConfigurationChanged(m_globalDnsConfiguration);
828  } else {
829  qCDebug(NMQT) << Q_FUNC_INFO << "Unhandled property" << property;
830  }
831  ++it;
832  }
833 }
834 
835 NetworkManager::Connectivity NetworkManager::NetworkManagerPrivate::convertConnectivity(uint connectivity)
836 {
838  switch (connectivity) {
839  case NM_CONNECTIVITY_UNKNOWN:
840  convertedConnectivity = NetworkManager::UnknownConnectivity;
841  break;
842  case NM_CONNECTIVITY_NONE:
843  convertedConnectivity = NetworkManager::NoConnectivity;
844  break;
845  case NM_CONNECTIVITY_PORTAL:
846  convertedConnectivity = NetworkManager::Portal;
847  break;
848  case NM_CONNECTIVITY_LIMITED:
849  convertedConnectivity = NetworkManager::Limited;
850  break;
851  case NM_CONNECTIVITY_FULL:
852  convertedConnectivity = NetworkManager::Full;
853  break;
854  }
855  return convertedConnectivity;
856 }
857 
858 NetworkManager::Status NetworkManager::NetworkManagerPrivate::convertNMState(uint state)
859 {
861  switch (state) {
862  case NM_STATE_UNKNOWN:
864  break;
865  case NM_STATE_ASLEEP:
867  break;
868  case NM_STATE_DISCONNECTED:
870  break;
871  case NM_STATE_DISCONNECTING:
873  break;
874  case NM_STATE_CONNECTING:
876  break;
877  case NM_STATE_CONNECTED_LOCAL:
879  break;
880  case NM_STATE_CONNECTED_SITE:
882  break;
883  case NM_STATE_CONNECTED_GLOBAL:
885  break;
886  }
887  return status;
888 }
889 
890 void NetworkManager::NetworkManagerPrivate::dbusInterfacesAdded(const QDBusObjectPath &path, const QVariantMap &addedInterfaces)
891 {
892  Q_UNUSED(path);
893 
894  if (!addedInterfaces.contains(NetworkManagerPrivate::DBUS_DAEMON_INTERFACE)) {
895  return;
896  }
897 
898  init();
899  Q_EMIT serviceAppeared();
900 }
901 
902 void NetworkManager::NetworkManagerPrivate::daemonUnregistered()
903 {
904  stateChanged(NM_STATE_UNKNOWN);
905  QMap<QString, Device::Ptr>::const_iterator i = networkInterfaceMap.constBegin();
906  while (i != networkInterfaceMap.constEnd()) {
907  Q_EMIT deviceRemoved(i.key());
908  ++i;
909  }
910  networkInterfaceMap.clear();
911 
912  QMap<QString, ActiveConnection::Ptr>::const_iterator it = m_activeConnections.constBegin();
913  while (it != m_activeConnections.constEnd()) {
914  Q_EMIT activeConnectionRemoved(it.key());
915  ++it;
916  }
917  m_activeConnections.clear();
918 
919  qobject_cast<SettingsPrivate *>(settingsNotifier())->daemonUnregistered();
920 
921  Q_EMIT activeConnectionsChanged();
922  Q_EMIT serviceDisappeared();
923 }
924 
925 NetworkManager::ActiveConnection::List NetworkManager::NetworkManagerPrivate::activeConnections()
926 {
928 
929  // Take a copy because findRegisteredActiveConnection() may change m_activeConnections.
930  const QStringList keyList = m_activeConnections.keys();
931  for (const QString &key : keyList) {
932  NetworkManager::ActiveConnection::Ptr activeConnection = findRegisteredActiveConnection(key);
933 
934  if (activeConnection) {
935  list << activeConnection;
936  }
937  }
938  return list;
939 }
940 
941 QStringList NetworkManager::NetworkManagerPrivate::activeConnectionsPaths() const
942 {
943  return m_activeConnections.keys();
944 }
945 
946 QDBusPendingReply<QString, QString> NetworkManager::NetworkManagerPrivate::getLogging()
947 {
948  return iface.GetLogging();
949 }
950 
952 {
953  return globalNetworkManager->version();
954 }
955 
956 int NetworkManager::compareVersion(const QString &version)
957 {
958  return globalNetworkManager->compareVersion(version);
959 }
960 
961 int NetworkManager::compareVersion(const int x, const int y, const int z)
962 {
963  return globalNetworkManager->compareVersion(x, y, z);
964 }
965 
966 bool NetworkManager::checkVersion(const int x, const int y, const int z)
967 {
968  return globalNetworkManager->checkVersion(x, y, z);
969 }
970 
971 NetworkManager::Status NetworkManager::status()
972 {
973  return globalNetworkManager->status();
974 }
975 
977 {
978  return globalNetworkManager->activeConnections();
979 }
980 
982 {
983  return globalNetworkManager->activeConnectionsPaths();
984 }
985 
987 {
988  return globalNetworkManager->findRegisteredActiveConnection(uni);
989 }
990 
992 {
993  return globalNetworkManager->networkInterfaces();
994 }
995 
997 {
998  return globalNetworkManager->isNetworkingEnabled();
999 }
1000 
1002 {
1003  return globalNetworkManager->isWirelessEnabled();
1004 }
1005 
1007 {
1008  return globalNetworkManager->isWirelessHardwareEnabled();
1009 }
1010 
1012 {
1013  return globalNetworkManager->findRegisteredNetworkInterface(uni);
1014 }
1015 
1017 {
1018  return globalNetworkManager->findDeviceByIpIface(iface);
1019 }
1020 
1022 NetworkManager::addAndActivateConnection(const NMVariantMapMap &connection, const QString &interfaceUni, const QString &connectionParameter)
1023 {
1024  return globalNetworkManager->addAndActivateConnection(connection, interfaceUni, connectionParameter);
1025 }
1026 
1028  const QString &interfaceUni,
1029  const QString &connectionParameter,
1030  const QVariantMap &options)
1031 {
1032  if (checkVersion(1, 16, 0)) {
1033  return globalNetworkManager->addAndActivateConnection2(connection, interfaceUni, connectionParameter, options);
1034  } else {
1035  return globalNetworkManager->addAndActivateConnection(connection, interfaceUni, connectionParameter);
1036  }
1037 }
1038 
1040 NetworkManager::activateConnection(const QString &connectionUni, const QString &interfaceUni, const QString &connectionParameter)
1041 {
1042  return globalNetworkManager->activateConnection(connectionUni, interfaceUni, connectionParameter);
1043 }
1044 
1046 {
1047  return globalNetworkManager->deactivateConnection(activeConnectionPath);
1048 }
1049 
1051 {
1052  return globalNetworkManager->getLogging();
1053 }
1054 
1055 void NetworkManager::setNetworkingEnabled(bool enabled)
1056 {
1057  globalNetworkManager->setNetworkingEnabled(enabled);
1058 }
1059 
1060 void NetworkManager::setWirelessEnabled(bool enabled)
1061 {
1062  globalNetworkManager->setWirelessEnabled(enabled);
1063 }
1064 
1066 {
1067  return globalNetworkManager->isWwanEnabled();
1068 }
1069 
1071 {
1072  return globalNetworkManager->isWwanHardwareEnabled();
1073 }
1074 
1075 void NetworkManager::setWwanEnabled(bool enabled)
1076 {
1077  globalNetworkManager->setWwanEnabled(enabled);
1078 }
1079 
1081 {
1082  return globalNetworkManager->isWimaxEnabled();
1083 }
1084 
1086 {
1087  return globalNetworkManager->isWimaxHardwareEnabled();
1088 }
1089 
1091 {
1092  globalNetworkManager->setWimaxEnabled(enabled);
1093 }
1094 
1095 void NetworkManager::sleep(bool sleep)
1096 {
1097  globalNetworkManager->sleep(sleep);
1098 }
1099 
1100 void NetworkManager::setLogging(NetworkManager::LogLevel level, NetworkManager::LogDomains domains)
1101 {
1102  globalNetworkManager->setLogging(level, domains);
1103 }
1104 
1105 NMStringMap NetworkManager::permissions()
1106 {
1107  return globalNetworkManager->permissions();
1108 }
1109 
1111 {
1112  return globalNetworkManager->supportedInterfaceTypes();
1113 }
1114 
1116 {
1117  return globalNetworkManager->connectivity();
1118 }
1119 
1121 {
1122  return globalNetworkManager->checkConnectivity();
1123 }
1124 
1126 {
1127  return globalNetworkManager->primaryConnection();
1128 }
1129 
1131 {
1132  return globalNetworkManager->activatingConnection();
1133 }
1134 
1135 NetworkManager::ConnectionSettings::ConnectionType NetworkManager::primaryConnectionType()
1136 {
1137  return globalNetworkManager->primaryConnectionType();
1138 }
1139 
1141 {
1142  return globalNetworkManager->isStartingUp();
1143 }
1144 
1146 {
1147  return globalNetworkManager->metered();
1148 }
1149 
1151 {
1152  return globalNetworkManager->globalDnsConfiguration();
1153 }
1154 
1156 {
1157  globalNetworkManager->setGlobalDnsConfiguration(configuration);
1158 }
1159 
1160 NetworkManager::Notifier *NetworkManager::notifier()
1161 {
1162  return globalNetworkManager;
1163 }
A WireGuard device interface.
void append(const T &value)
@ Veth
Veth virtual device.
Definition: device.h:197
bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot)
NETWORKMANAGERQT_EXPORT QDBusPendingReply< uint > checkConnectivity()
Re-check the network connectivity state.
Definition: manager.cpp:658
NETWORKMANAGERQT_EXPORT bool isWwanEnabled()
Retrieves the status of wireless broadband (Wireless WAN) in the system.
Definition: manager.cpp:413
A macvlan device interface.
Definition: macvlandevice.h:20
@ ConnectedLinkLocal
a network device is connected, but there is only link-local connectivity
Definition: manager.h:38
NETWORKMANAGERQT_EXPORT bool isStartingUp()
Indicates whether NM is still starting up; this becomes false when NM has finished attempting to acti...
Definition: manager.cpp:678
@ Asleep
networking is inactive and all devices are disabled
Definition: manager.h:34
NETWORKMANAGERQT_EXPORT ActiveConnection::Ptr activatingConnection()
Definition: manager.cpp:1130
bool isNull() const const
NETWORKMANAGERQT_EXPORT bool isWwanHardwareEnabled()
Retrieves the status of wireless broadband (Wireless WAN) hardware in the system.
Definition: manager.cpp:418
Type type(const QSqlDatabase &db)
NETWORKMANAGERQT_EXPORT bool isWimaxHardwareEnabled()
Retrieves the status of wimax hardware in the system.
Definition: manager.cpp:428
QCA_EXPORT void init()
@ Ethernet
Ieee8023 wired ethernet.
Definition: device.h:179
NETWORKMANAGERQT_EXPORT bool isWimaxEnabled()
Retrieves the activation status of wimax networking in the system.
Definition: manager.cpp:423
bool isValid() const const
@ Trace
= Debug in runtime NM < 0.9.10
Definition: manager.h:49
bool testFlag(Enum flag) const const
NETWORKMANAGERQT_EXPORT Device::Ptr findNetworkInterface(const QString &uni)
Find a new NetworkInterface object given its UNI.
Definition: manager.cpp:1011
A wireless network interface.
@ Modem
POTS, GSM, CDMA or LTE modems.
Definition: device.h:186
QDBusMessage call(const QDBusMessage &message, QDBus::CallMode mode, int timeout) const const
NETWORKMANAGERQT_EXPORT Device::List networkInterfaces()
Retrieves the list of all the network interfaces in the system.
Definition: manager.cpp:368
@ ConnectedSiteOnly
a network device is connected, but there is only site-local connectivity
Definition: manager.h:39
NETWORKMANAGERQT_EXPORT bool isWirelessHardwareEnabled()
Retrieves the status of wireless hardware in the system.
Definition: manager.cpp:408
A veth device interface.
Definition: vethdevice.h:21
NETWORKMANAGERQT_EXPORT QStringList activeConnectionsPaths()
Access the list of any active connections paths.
Definition: manager.cpp:941
NETWORKMANAGERQT_EXPORT bool checkVersion(const int x, const int y, const int z)
Checks if NetworkManager version is at least x.y.z.
Definition: manager.cpp:235
bool atEnd() const const
@ NoConnectivity
The host is not connected to any network.
Definition: manager.h:102
@ Limited
The host is connected to a network, but does not appear to be able to reach the full Internet.
Definition: manager.h:104
Represents a generic modem device, generally defined by the modemCapabilities() it exposes and at the...
Definition: modemdevice.h:23
KIOFILEWIDGETS_EXPORT QStringList list(const QString &fileClass)
@ InfiniBand
Infiniband network device.
Definition: device.h:187
void serviceUnregistered(const QString &serviceName)
NETWORKMANAGERQT_EXPORT Device::Ptr findDeviceByIpFace(const QString &iface)
Return the network device referenced by its IP interface name.
Definition: manager.cpp:1016
An infiniband device interface.
@ Vlan
Vlan virtual device.
Definition: device.h:189
A bond device interface.
Definition: bonddevice.h:20
@ Bridge
Bridge virtual device.
Definition: device.h:191
@ UnknownStatus
The device metered status is unknown.
Definition: device.h:155
Q_GLOBAL_STATIC(Internal::StaticControl, s_instance) class ControlPrivate
@ UnknownType
Unknown device type.
Definition: device.h:178
int size() const const
void deleteLater()
@ Wimax
WiMax WWAN technology.
Definition: device.h:185
@ IpTunnel
IP Tunneling Device.
Definition: device.h:198
A Ip Tunnel device interface.
@ OlpcMesh
OLPC Mesh networking device.
Definition: device.h:184
QList< QVariant > arguments() const const
QDBusConnection sessionBus()
A vlan device interface.
Definition: vlandevice.h:20
An active VPN connection.
Definition: vpnconnection.h:27
NETWORKMANAGERQT_EXPORT Device::Types supportedInterfaceTypes()
Retrieves the interface types supported by this network manager.
Definition: manager.cpp:240
NETWORKMANAGERQT_EXPORT QDBusPendingReply< QDBusObjectPath, QDBusObjectPath > addAndActivateConnection(const NMVariantMapMap &connection, const QString &interfaceUni, const QString &connectionParameter)
Adds a new connection using the given details (if any) as a template (automatically filling in missin...
Definition: manager.cpp:451
@ Connected
the system is currently connected to a network
Definition: manager.h:40
bool removeOne(const T &value)
@ UnknownConnectivity
Network connectivity is unknown.
Definition: manager.h:101
NETWORKMANAGERQT_EXPORT QString version()
Get the NetworkManager version.
Definition: manager.cpp:951
bool isEmpty() const const
NETWORKMANAGERQT_EXPORT Connectivity connectivity()
Definition: manager.cpp:1115
A tun device interface.
Definition: tundevice.h:21
NETWORKMANAGERQT_EXPORT QDBusPendingReply deactivateConnection(const QString &activeConnection)
Deactivate this network interface, if active.
Definition: manager.cpp:479
Q_SCRIPTABLE CaptureState status()
Get the manager connection state.
Definition: manager.cpp:971
NETWORKMANAGERQT_EXPORT SettingsNotifier * settingsNotifier()
Notifier object for connecting signals.
Definition: settings.cpp:264
NETWORKMANAGERQT_EXPORT ActiveConnection::List activeConnections()
Access the list of any active connections.
Definition: manager.cpp:976
bool isEmpty() const const
NETWORKMANAGERQT_EXPORT NetworkManager::Device::MeteredStatus metered()
Definition: manager.cpp:1145
A gre device interface.
Definition: gredevice.h:22
A generic device interface.
Definition: genericdevice.h:21
QString join(const QString &separator) const const
@ Wifi
the Ieee80211 family of wireless networks
Definition: device.h:180
QDBusMessage createMethodCall(const QString &service, const QString &path, const QString &interface, const QString &method)
@ Disconnecting
the system is breaking the connection
Definition: manager.h:36
QString path() const const
@ Bond
Bond virtual device.
Definition: device.h:188
void insert(int i, const T &value)
NETWORKMANAGERQT_EXPORT NetworkManager::ConnectionSettings::ConnectionType primaryConnectionType()
Definition: manager.cpp:1135
NETWORKMANAGERQT_EXPORT QDBusPendingReply< QString, QString > getLogging()
Get current logging verbosity level and operations domains.
Definition: manager.cpp:946
NETWORKMANAGERQT_EXPORT void setGlobalDnsConfiguration(const NetworkManager::DnsConfiguration &configuration)
Definition: manager.cpp:1155
@ Portal
The host is behind a captive portal and cannot reach the full Internet.
Definition: manager.h:103
NETWORKMANAGERQT_EXPORT void setWimaxEnabled(bool enabled)
Definition: manager.cpp:1090
@ Generic
Generic device.
Definition: device.h:192
@ Disconnected
the system is not connected to any network
Definition: manager.h:35
QDBusConnection systemBus()
@ Bluetooth
network bluetooth device (usually a cell phone)
Definition: device.h:183
NETWORKMANAGERQT_EXPORT bool isWirelessEnabled()
Retrieves the activation status of wireless networking in the system.
Definition: manager.cpp:403
NETWORKMANAGERQT_EXPORT ActiveConnection::Ptr findActiveConnection(const QString &uni)
Find an ActiveConnection object for an active connection id.
Definition: manager.cpp:986
unsigned int version()
Get the NetworkManager version.
Definition: manager.cpp:951
QString path(const QString &relativePath)
QString & insert(int position, QChar ch)
QDBusMessage::MessageType type() const const
@ Tun
Tun virtual device.
Definition: device.h:196
QString fromLatin1(const char *str, int size)
@ Adsl
ADSL modem device.
Definition: device.h:190
@ WireGuard
WireGuard Device.
Definition: device.h:208
NETWORKMANAGERQT_EXPORT int compareVersion(const QString &version)
Compares NetworkManager's version to the parameter version.
Definition: manager.cpp:194
A OLPC mesh interface.
@ Connecting
the system is not connected to any network
Definition: manager.h:37
NETWORKMANAGERQT_EXPORT QDBusPendingReply< QDBusObjectPath > activateConnection(const QString &connectionUni, const QString &interfaceUni, const QString &connectionParameter)
Activate a connection using the supplied device.
Definition: manager.cpp:434
@ Unknown
the networking system is not active or unable to report its status - proceed with caution
Definition: manager.h:33
Connectivity
Describes the network connectivity state.
Definition: manager.h:100
NETWORKMANAGERQT_EXPORT QDBusPendingReply< QDBusObjectPath, QDBusObjectPath, QVariantMap > addAndActivateConnection2(const NMVariantMapMap &connection, const QString &interfaceUni, const QString &connectionParameter, const QVariantMap &options)
Adds a new connection using the given details (if any) as a template (automatically filling in missin...
Definition: manager.cpp:465
NETWORKMANAGERQT_EXPORT bool isNetworkingEnabled()
Retrieves the status of networking (as a whole) in the system.
Definition: manager.cpp:398
NETWORKMANAGERQT_EXPORT NetworkManager::DnsConfiguration globalDnsConfiguration()
Definition: manager.cpp:1150
@ Full
The host is connected to a network, and appears to be able to reach the full Internet.
Definition: manager.h:105
A wired device interface.
Definition: wireddevice.h:23
NETWORKMANAGERQT_EXPORT ActiveConnection::Ptr primaryConnection()
Definition: manager.cpp:1125
@ MacVlan
MacVlan virtual device.
Definition: device.h:195
An adsl device interface.
Definition: adsldevice.h:20
Wimax network interface.
Definition: wimaxdevice.h:26
This class represents IP configuration.
@ Team
Team master device.
Definition: device.h:193
QString message
A bridge device interface.
Definition: bridgedevice.h:20
QDBusReply::Type value() const const
A bluetooth device interface.
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon May 8 2023 04:05:36 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.