File indexing completed on 2024-04-21 04:00:13

0001 /*
0002     SPDX-FileCopyrightText: 2008, 2010 Will Stephenson <wstephenson@kde.org>
0003     SPDX-FileCopyrightText: 2011-2013 Lamarque Souza <lamarque@kde.org>
0004     SPDX-FileCopyrightText: 2013 Daniel Nicoletti <dantti12@gmail.com>
0005     SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com>
0006 
0007     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0008 */
0009 
0010 #include "manager.h"
0011 #include "manager_p.h"
0012 
0013 #include "macros.h"
0014 
0015 #undef signals
0016 #include <libnm/NetworkManager.h>
0017 #define signals Q_SIGNALS
0018 
0019 #include "adsldevice.h"
0020 #include "bluetoothdevice.h"
0021 #include "bonddevice.h"
0022 #include "bridgedevice.h"
0023 #include "dbus/deviceinterface.h"
0024 #include "device_p.h"
0025 #include "genericdevice.h"
0026 #include "gredevice.h"
0027 #include "infinibanddevice.h"
0028 #include "iptunneldevice.h"
0029 #include "macvlandevice.h"
0030 #include "modemdevice.h"
0031 #include "olpcmeshdevice.h"
0032 #include "settings.h"
0033 #include "settings_p.h"
0034 #include "tundevice.h"
0035 #include "vethdevice.h"
0036 #include "vlandevice.h"
0037 #include "vpnconnection.h"
0038 #include "wimaxdevice.h"
0039 #include "wireddevice.h"
0040 #include "wireguarddevice.h"
0041 #include "wirelessdevice.h"
0042 
0043 #include "nmdebug.h"
0044 
0045 #include <QDBusMetaType>
0046 #include <QDBusReply>
0047 #include <QTimer>
0048 
0049 #define DBUS_OBJECT_MANAGER "org.freedesktop.DBus.ObjectManager"
0050 #define DBUS_PROPERTIES "org.freedesktop.DBus.Properties"
0051 
0052 #ifdef NMQT_STATIC
0053 const QString NetworkManager::NetworkManagerPrivate::DBUS_SERVICE(QString::fromLatin1("org.kde.fakenetwork"));
0054 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH(QString::fromLatin1("/org/kde/fakenetwork"));
0055 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_INTERFACE(QString::fromLatin1("org.kde.fakenetwork"));
0056 const QString NetworkManager::NetworkManagerPrivate::DBUS_SETTINGS_PATH(QString::fromLatin1("/org/kde/fakenetwork/Settings"));
0057 #else
0058 const QString NetworkManager::NetworkManagerPrivate::DBUS_SERVICE(QString::fromLatin1(NM_DBUS_SERVICE));
0059 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH(QString::fromLatin1(NM_DBUS_PATH));
0060 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_INTERFACE(QString::fromLatin1(NM_DBUS_INTERFACE));
0061 const QString NetworkManager::NetworkManagerPrivate::DBUS_SETTINGS_PATH(QString::fromLatin1(NM_DBUS_PATH_SETTINGS));
0062 #endif
0063 const QString NetworkManager::NetworkManagerPrivate::FDO_DBUS_PROPERTIES(QString::fromLatin1(DBUS_PROPERTIES));
0064 const QString NetworkManager::NetworkManagerPrivate::FDO_DBUS_OBJECT_MANAGER(QString::fromLatin1(DBUS_OBJECT_MANAGER));
0065 
0066 Q_GLOBAL_STATIC(NetworkManager::NetworkManagerPrivate, globalNetworkManager)
0067 
0068 NetworkManager::NetworkManagerPrivate::NetworkManagerPrivate()
0069 #ifdef NMQT_STATIC
0070     : watcher(DBUS_SERVICE, QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange, this)
0071     , iface(NetworkManager::NetworkManagerPrivate::DBUS_SERVICE, NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH, QDBusConnection::sessionBus())
0072 #else
0073     : watcher(DBUS_SERVICE, QDBusConnection::systemBus(), QDBusServiceWatcher::WatchForOwnerChange, this)
0074     , iface(NetworkManager::NetworkManagerPrivate::DBUS_SERVICE, NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH, QDBusConnection::systemBus())
0075 #endif
0076     , nmState(NetworkManager::Unknown)
0077     , m_connectivity(NetworkManager::UnknownConnectivity)
0078     , m_isNetworkingEnabled(false)
0079     , m_isWimaxEnabled(false)
0080     , m_isWimaxHardwareEnabled(false)
0081     , m_isWirelessEnabled(false)
0082     , m_isWirelessHardwareEnabled(false)
0083     , m_isWwanEnabled(false)
0084     , m_isWwanHardwareEnabled(false)
0085     , m_globalDnsConfiguration(NetworkManager::DnsConfiguration())
0086     , m_supportedInterfaceTypes(NetworkManager::Device::UnknownType)
0087 {
0088     connect(&iface, &OrgFreedesktopNetworkManagerInterface::DeviceAdded, this, &NetworkManagerPrivate::onDeviceAdded);
0089     connect(&iface, &OrgFreedesktopNetworkManagerInterface::DeviceRemoved, this, &NetworkManagerPrivate::onDeviceRemoved);
0090 
0091 #ifndef NMQT_STATIC
0092     QDBusConnection::systemBus().connect(NetworkManagerPrivate::DBUS_SERVICE,
0093                                          NetworkManagerPrivate::DBUS_DAEMON_PATH,
0094                                          NetworkManagerPrivate::FDO_DBUS_PROPERTIES,
0095                                          QLatin1String("PropertiesChanged"),
0096                                          this,
0097                                          SLOT(dbusPropertiesChanged(QString, QVariantMap, QStringList)));
0098 #else
0099     connect(&iface, &OrgFreedesktopNetworkManagerInterface::PropertiesChanged, this, &NetworkManagerPrivate::propertiesChanged);
0100 #endif
0101 
0102     // We register two listeners here:
0103     // - a ServiceRegistered listener for newer NM versions that connect to the bus when the interfaces
0104     //   we care about are already initialized
0105     // - and an InterfaceAdded listener for older NM versions that connect to the bus early,
0106     //   and then add interfaces dynamically
0107     iface.connection().connect(NetworkManagerPrivate::DBUS_SERVICE,
0108                                "/org/freedesktop",
0109                                NetworkManagerPrivate::FDO_DBUS_OBJECT_MANAGER,
0110                                QLatin1String("InterfacesAdded"),
0111                                this,
0112                                SLOT(dbusInterfacesAdded(QDBusObjectPath, QVariantMap)));
0113 
0114     connect(&watcher, &QDBusServiceWatcher::serviceRegistered, this, &NetworkManagerPrivate::daemonRegistered);
0115     connect(&watcher, &QDBusServiceWatcher::serviceUnregistered, this, &NetworkManagerPrivate::daemonUnregistered);
0116 
0117     init();
0118 }
0119 
0120 void NetworkManager::NetworkManagerPrivate::parseVersion(const QString &version)
0121 {
0122     const QStringList sl = version.split('.');
0123 
0124     if (sl.size() > 2) {
0125         m_x = sl[0].toInt();
0126         m_y = sl[1].toInt();
0127         m_z = sl[2].toInt();
0128     } else {
0129         m_x = -1;
0130         m_y = -1;
0131         m_z = -1;
0132     }
0133 }
0134 
0135 void NetworkManager::NetworkManagerPrivate::init()
0136 {
0137     qDBusRegisterMetaType<UIntList>();
0138     qDBusRegisterMetaType<UIntListList>();
0139     //     qDBusRegisterMetaType<IpV6DBusAddress>();
0140     //     qDBusRegisterMetaType<IpV6DBusAddressList>();
0141     //     qDBusRegisterMetaType<IpV6DBusNameservers>();
0142     //     qDBusRegisterMetaType<IpV6DBusRoute>();
0143     //     qDBusRegisterMetaType<IpV6DBusRouteList>();
0144     qDBusRegisterMetaType<QList<QDBusObjectPath>>();
0145     qDBusRegisterMetaType<DeviceDBusStateReason>();
0146     qDBusRegisterMetaType<NMVariantMapMap>();
0147     qDBusRegisterMetaType<NMVariantMapList>();
0148     qDBusRegisterMetaType<NMStringMap>();
0149 
0150     m_version = iface.version();
0151     parseVersion(m_version);
0152     /* clang-format off */
0153     m_supportedInterfaceTypes = static_cast<NetworkManager::Device::Types>(
0154         NetworkManager::Device::Ethernet
0155         | NetworkManager::Device::Wifi
0156         | NetworkManager::Device::Modem
0157         | (checkVersion(1, 2, 0) ? 0 : NetworkManager::Device::Wimax)
0158         | NetworkManager::Device::Bluetooth
0159         | NetworkManager::Device::OlpcMesh
0160         | NetworkManager::Device::InfiniBand
0161         | NetworkManager::Device::Bond
0162         | NetworkManager::Device::Vlan
0163         | NetworkManager::Device::Adsl
0164         | NetworkManager::Device::Bridge
0165         | NetworkManager::Device::Generic
0166         | NetworkManager::Device::Team
0167         | NetworkManager::Device::MacVlan
0168         | NetworkManager::Device::Tun
0169         | NetworkManager::Device::Veth
0170         | NetworkManager::Device::IpTunnel
0171         | NetworkManager::Device::WireGuard);
0172     /* clang-format on */
0173 
0174     // Get all Manager's properties async
0175     QVariantMap initialProperties = retrieveInitialProperties(iface.staticInterfaceName(), DBUS_DAEMON_PATH);
0176     if (!initialProperties.isEmpty()) {
0177         propertiesChanged(initialProperties);
0178     }
0179 
0180     QTimer::singleShot(0, [] {
0181         qobject_cast<SettingsPrivate *>(settingsNotifier())->init();
0182     });
0183 
0184     const QList<QDBusObjectPath> devices = iface.devices();
0185     qCDebug(NMQT) << "Device list";
0186     for (const QDBusObjectPath &op : devices) {
0187         networkInterfaceMap.insert(op.path(), Device::Ptr());
0188         Q_EMIT deviceAdded(op.path());
0189         qCDebug(NMQT) << "  " << op.path();
0190     }
0191 }
0192 
0193 NetworkManager::NetworkManagerPrivate::~NetworkManagerPrivate()
0194 {
0195 }
0196 
0197 QString NetworkManager::NetworkManagerPrivate::version() const
0198 {
0199     return m_version;
0200 }
0201 
0202 int NetworkManager::NetworkManagerPrivate::compareVersion(const QString &version)
0203 {
0204     int x;
0205     int y;
0206     int z;
0207     const auto sl = QStringView(version).split('.');
0208     if (sl.size() > 2) {
0209         x = sl[0].toInt();
0210         y = sl[1].toInt();
0211         z = sl[2].toInt();
0212     } else {
0213         x = -1;
0214         y = -1;
0215         z = -1;
0216     }
0217 
0218     return compareVersion(x, y, z);
0219 }
0220 
0221 int NetworkManager::NetworkManagerPrivate::compareVersion(const int x, const int y, const int z) const
0222 {
0223     if (m_x > x) {
0224         return 1;
0225     } else if (m_x < x) {
0226         return -1;
0227     } else if (m_y > y) {
0228         return 1;
0229     } else if (m_y < y) {
0230         return -1;
0231     } else if (m_z > z) {
0232         return 1;
0233     } else if (m_z < z) {
0234         return -1;
0235     }
0236     return 0;
0237 }
0238 
0239 bool NetworkManager::NetworkManagerPrivate::checkVersion(const int x, const int y, const int z) const
0240 {
0241     return 0 <= compareVersion(x, y, z);
0242 }
0243 
0244 NetworkManager::Device::Types NetworkManager::NetworkManagerPrivate::supportedInterfaceTypes() const
0245 {
0246     return m_supportedInterfaceTypes;
0247 }
0248 
0249 QVariantMap NetworkManager::NetworkManagerPrivate::retrieveInitialProperties(const QString &interfaceName, const QString &path)
0250 {
0251     QDBusMessage message = QDBusMessage::createMethodCall(DBUS_SERVICE, path, FDO_DBUS_PROPERTIES, QLatin1String("GetAll"));
0252     message << interfaceName;
0253 #ifdef NMQT_STATIC
0254     QDBusMessage resultMessage = QDBusConnection::sessionBus().call(message);
0255 #else
0256     QDBusMessage resultMessage = QDBusConnection::systemBus().call(message);
0257 #endif
0258     if (resultMessage.type() == QDBusMessage::ReplyMessage) {
0259         QVariantMap result;
0260         QDBusArgument dbusArgument = resultMessage.arguments().at(0).value<QDBusArgument>();
0261         while (!dbusArgument.atEnd()) {
0262             dbusArgument >> result;
0263         }
0264         return result;
0265     }
0266 
0267     return QVariantMap();
0268 }
0269 
0270 NetworkManager::Device::Ptr NetworkManager::NetworkManagerPrivate::findRegisteredNetworkInterface(const QString &uni)
0271 {
0272     NetworkManager::Device::Ptr networkInterface;
0273     auto it = networkInterfaceMap.constFind(uni);
0274     if (it != networkInterfaceMap.constEnd()) {
0275         if (*it) {
0276             networkInterface = *it;
0277         } else {
0278             networkInterface = createNetworkInterface(uni);
0279             networkInterfaceMap[uni] = networkInterface;
0280         }
0281     }
0282     return networkInterface;
0283 }
0284 
0285 NetworkManager::ActiveConnection::Ptr NetworkManager::NetworkManagerPrivate::findRegisteredActiveConnection(const QString &uni)
0286 {
0287     NetworkManager::ActiveConnection::Ptr activeConnection;
0288     if (!uni.isEmpty() && uni != QLatin1String("/")) {
0289         const auto it = m_activeConnections.constFind(uni);
0290         const bool contains = it != m_activeConnections.constEnd();
0291         if (contains && *it) {
0292             activeConnection = *it;
0293         } else {
0294             activeConnection = NetworkManager::ActiveConnection::Ptr(new NetworkManager::VpnConnection(uni), &QObject::deleteLater);
0295             if (activeConnection->connection()) {
0296                 m_activeConnections[uni] = activeConnection;
0297                 if (!contains) {
0298                     Q_EMIT activeConnectionAdded(uni);
0299                 }
0300             } else {
0301                 activeConnection.clear();
0302             }
0303         }
0304     }
0305     return activeConnection;
0306 }
0307 
0308 NetworkManager::Device::Ptr NetworkManager::NetworkManagerPrivate::createNetworkInterface(const QString &uni)
0309 {
0310     // qCDebug(NMQT);
0311     auto message = QDBusMessage::createMethodCall(DBUS_SERVICE, uni, FDO_DBUS_PROPERTIES, QStringLiteral("Get"));
0312     message.setArguments({QLatin1String(OrgFreedesktopNetworkManagerDeviceInterface::staticInterfaceName()), QStringLiteral("DeviceType")});
0313 #ifdef NMQT_STATIC
0314     auto bus = QDBusConnection::sessionBus();
0315 #else
0316     auto bus = QDBusConnection::systemBus();
0317 #endif
0318     QDBusReply<QVariant> reply = bus.call(message);
0319     Device::Type type = reply.isValid() ? NetworkManager::DevicePrivate::convertType(reply.value().toInt()) : Device::UnknownType;
0320     switch (type) {
0321     case Device::Ethernet:
0322         return Device::Ptr(new NetworkManager::WiredDevice(uni), &QObject::deleteLater);
0323     case Device::Wifi:
0324         return Device::Ptr(new NetworkManager::WirelessDevice(uni), &QObject::deleteLater);
0325     case Device::Modem:
0326         return Device::Ptr(new NetworkManager::ModemDevice(uni), &QObject::deleteLater);
0327     case Device::Bluetooth:
0328         return Device::Ptr(new NetworkManager::BluetoothDevice(uni), &QObject::deleteLater);
0329     case Device::Wimax:
0330         return Device::Ptr(new NetworkManager::WimaxDevice(uni), &QObject::deleteLater);
0331     case Device::OlpcMesh:
0332         return Device::Ptr(new NetworkManager::OlpcMeshDevice(uni), &QObject::deleteLater);
0333     case Device::InfiniBand:
0334         return Device::Ptr(new NetworkManager::InfinibandDevice(uni), &QObject::deleteLater);
0335     case Device::Bond:
0336         return Device::Ptr(new NetworkManager::BondDevice(uni), &QObject::deleteLater);
0337     case Device::Vlan:
0338         return Device::Ptr(new NetworkManager::VlanDevice(uni), &QObject::deleteLater);
0339     case Device::Adsl:
0340         return Device::Ptr(new NetworkManager::AdslDevice(uni), &QObject::deleteLater);
0341     case Device::Bridge:
0342         return Device::Ptr(new NetworkManager::BridgeDevice(uni), &QObject::deleteLater);
0343     // No need to check checkVersion, because we can't get Generic, Gre, MacVlan, Tun & Veth values in incompatible runtime
0344     case Device::Generic:
0345         return Device::Ptr(new NetworkManager::GenericDevice(uni), &QObject::deleteLater);
0346     case Device::Gre:
0347         return Device::Ptr(new NetworkManager::GreDevice(uni), &QObject::deleteLater);
0348     case Device::MacVlan:
0349         return Device::Ptr(new NetworkManager::MacVlanDevice(uni), &QObject::deleteLater);
0350     case Device::Tun:
0351         return Device::Ptr(new NetworkManager::TunDevice(uni), &QObject::deleteLater);
0352     case Device::Veth:
0353         return Device::Ptr(new NetworkManager::VethDevice(uni), &QObject::deleteLater);
0354     case Device::IpTunnel:
0355         return Device::Ptr(new NetworkManager::IpTunnelDevice(uni), &QObject::deleteLater);
0356     case Device::WireGuard:
0357         return Device::Ptr(new NetworkManager::WireGuardDevice(uni), &QObject::deleteLater);
0358     default:
0359         if (uni != QLatin1String("any")) { // VPN connections use "any" as uni for the network interface.
0360             qCDebug(NMQT) << "Can't create device of type" << type << "for" << uni;
0361         }
0362     }
0363 
0364     return Device::Ptr(new Device(uni), &QObject::deleteLater);
0365 }
0366 
0367 NetworkManager::Status NetworkManager::NetworkManagerPrivate::status() const
0368 {
0369     return nmState;
0370 }
0371 
0372 NetworkManager::Device::List NetworkManager::NetworkManagerPrivate::networkInterfaces()
0373 {
0374     Device::List list;
0375 
0376     QMap<QString, Device::Ptr>::const_iterator i;
0377     for (i = networkInterfaceMap.constBegin(); i != networkInterfaceMap.constEnd(); ++i) {
0378         Device::Ptr networkInterface = findRegisteredNetworkInterface(i.key());
0379         if (!networkInterface.isNull()) {
0380             list.append(networkInterface);
0381         } else {
0382             qCWarning(NMQT) << "warning: null network Interface for" << i.key();
0383         }
0384     }
0385 
0386     return list;
0387 }
0388 
0389 NetworkManager::Device::Ptr NetworkManager::NetworkManagerPrivate::findDeviceByIpIface(const QString &iface)
0390 {
0391     QMap<QString, Device::Ptr>::const_iterator i;
0392     for (i = networkInterfaceMap.constBegin(); i != networkInterfaceMap.constEnd(); ++i) {
0393         Device::Ptr networkInterface = findRegisteredNetworkInterface(i.key());
0394         if (networkInterface && networkInterface->udi() == iface) {
0395             return networkInterface;
0396         }
0397     }
0398 
0399     return Device::Ptr();
0400 }
0401 
0402 bool NetworkManager::NetworkManagerPrivate::isNetworkingEnabled() const
0403 {
0404     return m_isNetworkingEnabled;
0405 }
0406 
0407 bool NetworkManager::NetworkManagerPrivate::isWirelessEnabled() const
0408 {
0409     return m_isWirelessEnabled;
0410 }
0411 
0412 bool NetworkManager::NetworkManagerPrivate::isWirelessHardwareEnabled() const
0413 {
0414     return m_isWirelessHardwareEnabled;
0415 }
0416 
0417 bool NetworkManager::NetworkManagerPrivate::isWwanEnabled() const
0418 {
0419     return m_isWwanEnabled;
0420 }
0421 
0422 bool NetworkManager::NetworkManagerPrivate::isWwanHardwareEnabled() const
0423 {
0424     return m_isWwanHardwareEnabled;
0425 }
0426 
0427 bool NetworkManager::NetworkManagerPrivate::isWimaxEnabled() const
0428 {
0429     return checkVersion(1, 2, 0) ? false : m_isWimaxEnabled;
0430 }
0431 
0432 bool NetworkManager::NetworkManagerPrivate::isWimaxHardwareEnabled() const
0433 {
0434     return checkVersion(1, 2, 0) ? false : m_isWimaxHardwareEnabled;
0435 }
0436 
0437 QDBusPendingReply<QDBusObjectPath>
0438 NetworkManager::NetworkManagerPrivate::activateConnection(const QString &connectionUni, const QString &interfaceUni, const QString &connectionParameter)
0439 {
0440     QString extra_connection_parameter = connectionParameter;
0441     QString extra_interface_parameter = interfaceUni;
0442     if (extra_connection_parameter.isEmpty()) {
0443         extra_connection_parameter = QLatin1String("/");
0444     }
0445     if (extra_interface_parameter.isEmpty()) {
0446         extra_interface_parameter = QLatin1String("/");
0447     }
0448     // TODO store error code
0449     QDBusObjectPath connPath(connectionUni);
0450     QDBusObjectPath interfacePath(interfaceUni);
0451     // qCDebug(NMQT) << "Activating connection" << connPath.path() << "on interface" << interfacePath.path() << "with extra" << extra_connection_parameter;
0452     return iface.ActivateConnection(connPath, QDBusObjectPath(extra_interface_parameter), QDBusObjectPath(extra_connection_parameter));
0453 }
0454 
0455 QDBusPendingReply<QDBusObjectPath, QDBusObjectPath> NetworkManager::NetworkManagerPrivate::addAndActivateConnection(const NMVariantMapMap &connection,
0456                                                                                                                     const QString &interfaceUni,
0457                                                                                                                     const QString &connectionParameter)
0458 {
0459     QString extra_connection_parameter = connectionParameter;
0460     if (extra_connection_parameter.isEmpty()) {
0461         extra_connection_parameter = QLatin1String("/");
0462     }
0463     // TODO store error code
0464     QDBusObjectPath interfacePath(interfaceUni);
0465     return iface.AddAndActivateConnection(connection, interfacePath, QDBusObjectPath(extra_connection_parameter));
0466 }
0467 
0468 QDBusPendingReply<QDBusObjectPath, QDBusObjectPath, QVariantMap>
0469 NetworkManager::NetworkManagerPrivate::addAndActivateConnection2(const NMVariantMapMap &connection,
0470                                                                  const QString &interfaceUni,
0471                                                                  const QString &connectionParameter,
0472                                                                  const QVariantMap &options)
0473 {
0474     QString extra_connection_parameter = connectionParameter;
0475     if (extra_connection_parameter.isEmpty()) {
0476         extra_connection_parameter = QLatin1String("/");
0477     }
0478     // TODO store error code
0479     QDBusObjectPath interfacePath(interfaceUni);
0480     return iface.AddAndActivateConnection2(connection, interfacePath, QDBusObjectPath(extra_connection_parameter), options);
0481 }
0482 
0483 QDBusPendingReply<> NetworkManager::NetworkManagerPrivate::deactivateConnection(const QString &activeConnectionPath)
0484 {
0485     return iface.DeactivateConnection(QDBusObjectPath(activeConnectionPath));
0486 }
0487 
0488 void NetworkManager::NetworkManagerPrivate::setNetworkingEnabled(bool enabled)
0489 {
0490     iface.Enable(enabled);
0491 }
0492 
0493 void NetworkManager::NetworkManagerPrivate::setWirelessEnabled(bool enabled)
0494 {
0495     iface.setWirelessEnabled(enabled);
0496 }
0497 
0498 void NetworkManager::NetworkManagerPrivate::setWwanEnabled(bool enabled)
0499 {
0500     iface.setWwanEnabled(enabled);
0501 }
0502 
0503 void NetworkManager::NetworkManagerPrivate::setWimaxEnabled(bool enabled)
0504 {
0505     if (!checkVersion(1, 2, 0)) {
0506         iface.setWimaxEnabled(enabled);
0507     }
0508 }
0509 
0510 void NetworkManager::NetworkManagerPrivate::sleep(bool sleep)
0511 {
0512     iface.Sleep(sleep);
0513 }
0514 
0515 void NetworkManager::NetworkManagerPrivate::setLogging(NetworkManager::LogLevel level, NetworkManager::LogDomains domains)
0516 {
0517     QString logLevel;
0518     QStringList logDomains;
0519     switch (level) {
0520     case NetworkManager::Error:
0521         logLevel = QLatin1String("ERR");
0522         break;
0523     case NetworkManager::Warning:
0524         logLevel = QLatin1String("WARN");
0525         break;
0526     case NetworkManager::Info:
0527         logLevel = QLatin1String("INFO");
0528         break;
0529     case NetworkManager::Debug:
0530         logLevel = QLatin1String("DEBUG");
0531         break;
0532     case NetworkManager::Trace:
0533         logLevel = QLatin1String("TRACE");
0534         break;
0535     }
0536     if (!domains.testFlag(NoChange)) {
0537         if (domains.testFlag(NetworkManager::None)) {
0538             logDomains << QLatin1String("NONE");
0539         }
0540         if (domains.testFlag(NetworkManager::Hardware)) {
0541             logDomains << QLatin1String("PLATFORM");
0542         }
0543         if (domains.testFlag(NetworkManager::RFKill)) {
0544             logDomains << QLatin1String("RFKILL");
0545         }
0546         if (domains.testFlag(NetworkManager::Ethernet)) {
0547             logDomains << QLatin1String("ETHER");
0548         }
0549         if (domains.testFlag(NetworkManager::WiFi)) {
0550             logDomains << QLatin1String("WIFI");
0551         }
0552         if (domains.testFlag(NetworkManager::Bluetooth)) {
0553             logDomains << QLatin1String("BT");
0554         }
0555         if (domains.testFlag(NetworkManager::MobileBroadBand)) {
0556             logDomains << QLatin1String("MB");
0557         }
0558         if (domains.testFlag(NetworkManager::DHCP4)) {
0559             logDomains << QLatin1String("DHCP4");
0560         }
0561         if (domains.testFlag(NetworkManager::DHCP6)) {
0562             logDomains << QLatin1String("DHCP6");
0563         }
0564         if (domains.testFlag(NetworkManager::PPP)) {
0565             logDomains << QLatin1String("PPP");
0566         }
0567         if (domains.testFlag(NetworkManager::WiFiScan)) {
0568             logDomains << QLatin1String("WIFI_SCAN");
0569         }
0570         if (domains.testFlag(NetworkManager::IPv4)) {
0571             logDomains << QLatin1String("IP4");
0572         }
0573         if (domains.testFlag(NetworkManager::IPv6)) {
0574             logDomains << QLatin1String("IP6");
0575         }
0576         if (domains.testFlag(NetworkManager::AutoIPv4)) {
0577             logDomains << QLatin1String("AUTOIP4");
0578         }
0579         if (domains.testFlag(NetworkManager::DNS)) {
0580             logDomains << QLatin1String("DNS");
0581         }
0582         if (domains.testFlag(NetworkManager::VPN)) {
0583             logDomains << QLatin1String("VPN");
0584         }
0585         if (domains.testFlag(NetworkManager::Sharing)) {
0586             logDomains << QLatin1String("SHARING");
0587         }
0588         if (domains.testFlag(NetworkManager::Supplicant)) {
0589             logDomains << QLatin1String("SUPPLICANT");
0590         }
0591         if (domains.testFlag(NetworkManager::UserSet)) {
0592             logDomains << QLatin1String("USER_SET");
0593         }
0594         if (domains.testFlag(NetworkManager::SysSet)) {
0595             logDomains << QLatin1String("SYS_SET");
0596         }
0597         if (domains.testFlag(NetworkManager::Suspend)) {
0598             logDomains << QLatin1String("SUSPEND");
0599         }
0600         if (domains.testFlag(NetworkManager::Core)) {
0601             logDomains << QLatin1String("CORE");
0602         }
0603         if (domains.testFlag(NetworkManager::Devices)) {
0604             logDomains << QLatin1String("DEVICE");
0605         }
0606         if (domains.testFlag(NetworkManager::OLPC)) {
0607             logDomains << QLatin1String("OLPC");
0608         }
0609         if (domains.testFlag(NetworkManager::Wimax)) {
0610             logDomains << QLatin1String("WIMAX");
0611         }
0612         if (domains.testFlag(NetworkManager::Infiniband)) {
0613             logDomains << QLatin1String("INFINIBAND");
0614         }
0615         if (domains.testFlag(NetworkManager::Firewall)) {
0616             logDomains << QLatin1String("FIREWALL");
0617         }
0618         if (domains.testFlag(NetworkManager::Adsl)) {
0619             logDomains << QLatin1String("ADSL");
0620         }
0621         if (domains.testFlag(NetworkManager::Bond)) {
0622             logDomains << QLatin1String("BOND");
0623         }
0624         if (domains.testFlag(NetworkManager::Vlan)) {
0625             logDomains << QLatin1String("VLAN");
0626         }
0627         if (domains.testFlag(NetworkManager::Agents)) {
0628             logDomains << QLatin1String("AGENTS");
0629         }
0630         if (domains.testFlag(NetworkManager::Settings)) {
0631             logDomains << QLatin1String("SETTINGS");
0632         }
0633         if (domains.testFlag(NetworkManager::DbusProps)) {
0634             logDomains << QLatin1String("DBUS_PROPS");
0635         }
0636         if (domains.testFlag(NetworkManager::Team)) {
0637             logDomains << QLatin1String("TEAM");
0638         }
0639         if (domains.testFlag(NetworkManager::ConCheck)) {
0640             logDomains << QLatin1String("CONCHECK");
0641         }
0642         if (domains.testFlag(NetworkManager::Dcb)) {
0643             logDomains << QLatin1String("DCB");
0644         }
0645         if (domains.testFlag(NetworkManager::Dispatch)) {
0646             logDomains << QLatin1String("DISPATCH");
0647         }
0648     }
0649     iface.SetLogging(logLevel, logDomains.join(QLatin1Char(',')));
0650 }
0651 
0652 NMStringMap NetworkManager::NetworkManagerPrivate::permissions()
0653 {
0654     return iface.GetPermissions();
0655 }
0656 
0657 NetworkManager::Connectivity NetworkManager::NetworkManagerPrivate::connectivity() const
0658 {
0659     return m_connectivity;
0660 }
0661 
0662 QDBusPendingReply<uint> NetworkManager::NetworkManagerPrivate::checkConnectivity()
0663 {
0664     return iface.CheckConnectivity();
0665 }
0666 
0667 NetworkManager::ActiveConnection::Ptr NetworkManager::NetworkManagerPrivate::primaryConnection()
0668 {
0669     return findRegisteredActiveConnection(m_primaryConnection);
0670 }
0671 
0672 NetworkManager::ActiveConnection::Ptr NetworkManager::NetworkManagerPrivate::activatingConnection()
0673 {
0674     return findRegisteredActiveConnection(m_activatingConnection);
0675 }
0676 
0677 NetworkManager::ConnectionSettings::ConnectionType NetworkManager::NetworkManagerPrivate::primaryConnectionType()
0678 {
0679     return checkVersion(1, 0, 0) ? m_primaryConnectionType : NetworkManager::ConnectionSettings::Unknown;
0680 }
0681 
0682 bool NetworkManager::NetworkManagerPrivate::isStartingUp() const
0683 {
0684     return iface.startup();
0685 }
0686 
0687 NetworkManager::Device::MeteredStatus NetworkManager::NetworkManagerPrivate::metered() const
0688 {
0689     return checkVersion(1, 0, 6) ? m_metered : NetworkManager::Device::UnknownStatus;
0690 }
0691 
0692 NetworkManager::DnsConfiguration NetworkManager::NetworkManagerPrivate::globalDnsConfiguration() const
0693 {
0694     return m_globalDnsConfiguration;
0695 }
0696 
0697 void NetworkManager::NetworkManagerPrivate::setGlobalDnsConfiguration(const NetworkManager::DnsConfiguration &configuration)
0698 {
0699     m_globalDnsConfiguration = configuration;
0700     iface.setGlobalDnsConfiguration(m_globalDnsConfiguration.toMap());
0701 }
0702 
0703 void NetworkManager::NetworkManagerPrivate::onDeviceAdded(const QDBusObjectPath &objpath)
0704 {
0705     // qCDebug(NMQT);
0706     if (!networkInterfaceMap.contains(objpath.path())) {
0707         networkInterfaceMap.insert(objpath.path(), Device::Ptr());
0708         Q_EMIT deviceAdded(objpath.path());
0709     }
0710 }
0711 
0712 void NetworkManager::NetworkManagerPrivate::onDeviceRemoved(const QDBusObjectPath &objpath)
0713 {
0714     // qCDebug(NMQT);
0715     networkInterfaceMap.remove(objpath.path());
0716     Q_EMIT deviceRemoved(objpath.path());
0717 }
0718 
0719 void NetworkManager::NetworkManagerPrivate::connectivityChanged(uint connectivity)
0720 {
0721     NetworkManager::Connectivity newConnectivity = convertConnectivity(connectivity);
0722     if (m_connectivity != newConnectivity) {
0723         m_connectivity = newConnectivity;
0724         Q_EMIT Notifier::connectivityChanged(newConnectivity);
0725     }
0726 }
0727 
0728 void NetworkManager::NetworkManagerPrivate::stateChanged(uint state)
0729 {
0730     NetworkManager::Status newStatus = convertNMState(state);
0731     if (nmState != newStatus) {
0732         nmState = newStatus;
0733         Q_EMIT Notifier::statusChanged(newStatus);
0734     }
0735 }
0736 
0737 void NetworkManager::NetworkManagerPrivate::dbusPropertiesChanged(const QString &interfaceName,
0738                                                                   const QVariantMap &properties,
0739                                                                   const QStringList &invalidatedProperties)
0740 {
0741     Q_UNUSED(invalidatedProperties);
0742     if (interfaceName == QLatin1String("org.freedesktop.NetworkManager")) {
0743         propertiesChanged(properties);
0744     }
0745 }
0746 
0747 void NetworkManager::NetworkManagerPrivate::propertiesChanged(const QVariantMap &changedProperties)
0748 {
0749     // qCDebug(NMQT) << Q_FUNC_INFO << changedProperties;
0750 
0751     QVariantMap::const_iterator it = changedProperties.constBegin();
0752     while (it != changedProperties.constEnd()) {
0753         const QString property = it.key();
0754         if (property == QLatin1String("ActiveConnections")) {
0755             const QList<QDBusObjectPath> activePaths = qdbus_cast<QList<QDBusObjectPath>>(*it);
0756             if (activePaths.isEmpty()) {
0757                 QMap<QString, ActiveConnection::Ptr>::const_iterator it = m_activeConnections.constBegin();
0758                 while (it != m_activeConnections.constEnd()) {
0759                     Q_EMIT activeConnectionRemoved(it.key());
0760                     ++it;
0761                 }
0762                 m_activeConnections.clear();
0763             } else {
0764                 QStringList knownConnections = m_activeConnections.keys();
0765                 for (const QDBusObjectPath &ac : activePaths) {
0766                     if (!m_activeConnections.contains(ac.path())) {
0767                         m_activeConnections.insert(ac.path(), NetworkManager::ActiveConnection::Ptr());
0768                         Q_EMIT activeConnectionAdded(ac.path());
0769                     } else {
0770                         knownConnections.removeOne(ac.path());
0771                     }
0772                     // qCDebug(NMQT) << "  " << ac.path();
0773                 }
0774                 for (const QString &path : std::as_const(knownConnections)) {
0775                     m_activeConnections.remove(path);
0776                     Q_EMIT activeConnectionRemoved(path);
0777                 }
0778             }
0779             Q_EMIT activeConnectionsChanged();
0780         } else if (property == QLatin1String("NetworkingEnabled")) {
0781             m_isNetworkingEnabled = it->toBool();
0782             qCDebug(NMQT) << property << m_isNetworkingEnabled;
0783             Q_EMIT networkingEnabledChanged(m_isNetworkingEnabled);
0784         } else if (property == QLatin1String("WirelessHardwareEnabled")) {
0785             m_isWirelessHardwareEnabled = it->toBool();
0786             qCDebug(NMQT) << property << m_isWirelessHardwareEnabled;
0787             Q_EMIT wirelessHardwareEnabledChanged(m_isWirelessHardwareEnabled);
0788         } else if (property == QLatin1String("WirelessEnabled")) {
0789             m_isWirelessEnabled = it->toBool();
0790             qCDebug(NMQT) << property << m_isWirelessEnabled;
0791             Q_EMIT wirelessEnabledChanged(m_isWirelessEnabled);
0792         } else if (property == QLatin1String("WwanHardwareEnabled")) {
0793             m_isWwanHardwareEnabled = it->toBool();
0794             qCDebug(NMQT) << property << m_isWwanHardwareEnabled;
0795             Q_EMIT wwanHardwareEnabledChanged(m_isWwanHardwareEnabled);
0796         } else if (property == QLatin1String("WwanEnabled")) {
0797             m_isWwanEnabled = it->toBool();
0798             qCDebug(NMQT) << property << m_isWwanEnabled;
0799             Q_EMIT wwanEnabledChanged(m_isWwanEnabled);
0800         } else if (property == QLatin1String("WimaxHardwareEnabled")) {
0801             m_isWimaxHardwareEnabled = it->toBool();
0802             qCDebug(NMQT) << property << m_isWimaxHardwareEnabled;
0803             Q_EMIT wimaxHardwareEnabledChanged(m_isWimaxHardwareEnabled);
0804         } else if (property == QLatin1String("WimaxEnabled")) {
0805             m_isWimaxEnabled = it->toBool();
0806             qCDebug(NMQT) << property << m_isWimaxEnabled;
0807             Q_EMIT wimaxEnabledChanged(m_isWimaxEnabled);
0808         } else if (property == QLatin1String("Version")) {
0809             m_version = it->toString();
0810             parseVersion(m_version);
0811         } else if (property == QLatin1String("State")) {
0812             stateChanged(it->toUInt());
0813         } else if (property == QLatin1String("Connectivity")) {
0814             connectivityChanged(it->toUInt());
0815         } else if (property == QLatin1String("PrimaryConnection")) {
0816             m_primaryConnection = it->value<QDBusObjectPath>().path();
0817             Q_EMIT primaryConnectionChanged(m_primaryConnection);
0818         } else if (property == QLatin1String("ActivatingConnection")) {
0819             m_activatingConnection = it->value<QDBusObjectPath>().path();
0820             Q_EMIT activatingConnectionChanged(m_activatingConnection);
0821         } else if (property == QLatin1String("PrimaryConnectionType")) {
0822             m_primaryConnectionType = NetworkManager::ConnectionSettings::typeFromString(it->toString());
0823             Q_EMIT primaryConnectionTypeChanged(m_primaryConnectionType);
0824         } else if (property == QLatin1String("Startup")) {
0825             Q_EMIT isStartingUpChanged();
0826         } else if (property == QLatin1String("Metered")) {
0827             m_metered = (NetworkManager::Device::MeteredStatus)it->toUInt();
0828             Q_EMIT meteredChanged(m_metered);
0829         } else if (property == QLatin1String("GlobalDnsConfiguration")) {
0830             m_globalDnsConfiguration.fromMap(qdbus_cast<QVariantMap>(*it));
0831             Q_EMIT globalDnsConfigurationChanged(m_globalDnsConfiguration);
0832         } else {
0833             qCDebug(NMQT) << Q_FUNC_INFO << "Unhandled property" << property;
0834         }
0835         ++it;
0836     }
0837 }
0838 
0839 NetworkManager::Connectivity NetworkManager::NetworkManagerPrivate::convertConnectivity(uint connectivity)
0840 {
0841     NetworkManager::Connectivity convertedConnectivity = NetworkManager::UnknownConnectivity;
0842     switch (connectivity) {
0843     case NM_CONNECTIVITY_UNKNOWN:
0844         convertedConnectivity = NetworkManager::UnknownConnectivity;
0845         break;
0846     case NM_CONNECTIVITY_NONE:
0847         convertedConnectivity = NetworkManager::NoConnectivity;
0848         break;
0849     case NM_CONNECTIVITY_PORTAL:
0850         convertedConnectivity = NetworkManager::Portal;
0851         break;
0852     case NM_CONNECTIVITY_LIMITED:
0853         convertedConnectivity = NetworkManager::Limited;
0854         break;
0855     case NM_CONNECTIVITY_FULL:
0856         convertedConnectivity = NetworkManager::Full;
0857         break;
0858     }
0859     return convertedConnectivity;
0860 }
0861 
0862 NetworkManager::Status NetworkManager::NetworkManagerPrivate::convertNMState(uint state)
0863 {
0864     NetworkManager::Status status = NetworkManager::Unknown;
0865     switch (state) {
0866     case NM_STATE_UNKNOWN:
0867         status = NetworkManager::Unknown;
0868         break;
0869     case NM_STATE_ASLEEP:
0870         status = NetworkManager::Asleep;
0871         break;
0872     case NM_STATE_DISCONNECTED:
0873         status = NetworkManager::Disconnected;
0874         break;
0875     case NM_STATE_DISCONNECTING:
0876         status = NetworkManager::Disconnecting;
0877         break;
0878     case NM_STATE_CONNECTING:
0879         status = NetworkManager::Connecting;
0880         break;
0881     case NM_STATE_CONNECTED_LOCAL:
0882         status = NetworkManager::ConnectedLinkLocal;
0883         break;
0884     case NM_STATE_CONNECTED_SITE:
0885         status = NetworkManager::ConnectedSiteOnly;
0886         break;
0887     case NM_STATE_CONNECTED_GLOBAL:
0888         status = NetworkManager::Connected;
0889         break;
0890     }
0891     return status;
0892 }
0893 
0894 void NetworkManager::NetworkManagerPrivate::dbusInterfacesAdded(const QDBusObjectPath &path, const QVariantMap &addedInterfaces)
0895 {
0896     Q_UNUSED(path);
0897 
0898     if (!addedInterfaces.contains(NetworkManagerPrivate::DBUS_DAEMON_INTERFACE)) {
0899         return;
0900     }
0901 
0902     daemonRegistered();
0903 }
0904 
0905 void NetworkManager::NetworkManagerPrivate::daemonRegistered()
0906 {
0907     if (iface.version().isEmpty()) {
0908         // If this call fails, we've probably been called from ServiceRegistered on an old NM,
0909         // and the interface isn't ready yet. Just exit and hope we get called again on InterfacesAdded.
0910         return;
0911     }
0912 
0913     init();
0914     Q_EMIT serviceAppeared();
0915 }
0916 
0917 void NetworkManager::NetworkManagerPrivate::daemonUnregistered()
0918 {
0919     stateChanged(NM_STATE_UNKNOWN);
0920     QMap<QString, Device::Ptr>::const_iterator i = networkInterfaceMap.constBegin();
0921     while (i != networkInterfaceMap.constEnd()) {
0922         Q_EMIT deviceRemoved(i.key());
0923         ++i;
0924     }
0925     networkInterfaceMap.clear();
0926 
0927     QMap<QString, ActiveConnection::Ptr>::const_iterator it = m_activeConnections.constBegin();
0928     while (it != m_activeConnections.constEnd()) {
0929         Q_EMIT activeConnectionRemoved(it.key());
0930         ++it;
0931     }
0932     m_activeConnections.clear();
0933 
0934     qobject_cast<SettingsPrivate *>(settingsNotifier())->daemonUnregistered();
0935 
0936     Q_EMIT activeConnectionsChanged();
0937     Q_EMIT serviceDisappeared();
0938 }
0939 
0940 NetworkManager::ActiveConnection::List NetworkManager::NetworkManagerPrivate::activeConnections()
0941 {
0942     NetworkManager::ActiveConnection::List list;
0943 
0944     // Take a copy because findRegisteredActiveConnection() may change m_activeConnections.
0945     const QStringList keyList = m_activeConnections.keys();
0946     for (const QString &key : keyList) {
0947         NetworkManager::ActiveConnection::Ptr activeConnection = findRegisteredActiveConnection(key);
0948 
0949         if (activeConnection) {
0950             list << activeConnection;
0951         }
0952     }
0953     return list;
0954 }
0955 
0956 QStringList NetworkManager::NetworkManagerPrivate::activeConnectionsPaths() const
0957 {
0958     return m_activeConnections.keys();
0959 }
0960 
0961 QDBusPendingReply<QString, QString> NetworkManager::NetworkManagerPrivate::getLogging()
0962 {
0963     return iface.GetLogging();
0964 }
0965 
0966 QString NetworkManager::version()
0967 {
0968     return globalNetworkManager->version();
0969 }
0970 
0971 int NetworkManager::compareVersion(const QString &version)
0972 {
0973     return globalNetworkManager->compareVersion(version);
0974 }
0975 
0976 int NetworkManager::compareVersion(const int x, const int y, const int z)
0977 {
0978     return globalNetworkManager->compareVersion(x, y, z);
0979 }
0980 
0981 bool NetworkManager::checkVersion(const int x, const int y, const int z)
0982 {
0983     return globalNetworkManager->checkVersion(x, y, z);
0984 }
0985 
0986 NetworkManager::Status NetworkManager::status()
0987 {
0988     return globalNetworkManager->status();
0989 }
0990 
0991 NetworkManager::ActiveConnection::List NetworkManager::activeConnections()
0992 {
0993     return globalNetworkManager->activeConnections();
0994 }
0995 
0996 QStringList NetworkManager::activeConnectionsPaths()
0997 {
0998     return globalNetworkManager->activeConnectionsPaths();
0999 }
1000 
1001 NetworkManager::ActiveConnection::Ptr NetworkManager::findActiveConnection(const QString &uni)
1002 {
1003     return globalNetworkManager->findRegisteredActiveConnection(uni);
1004 }
1005 
1006 NetworkManager::Device::List NetworkManager::networkInterfaces()
1007 {
1008     return globalNetworkManager->networkInterfaces();
1009 }
1010 
1011 bool NetworkManager::isNetworkingEnabled()
1012 {
1013     return globalNetworkManager->isNetworkingEnabled();
1014 }
1015 
1016 bool NetworkManager::isWirelessEnabled()
1017 {
1018     return globalNetworkManager->isWirelessEnabled();
1019 }
1020 
1021 bool NetworkManager::isWirelessHardwareEnabled()
1022 {
1023     return globalNetworkManager->isWirelessHardwareEnabled();
1024 }
1025 
1026 NetworkManager::Device::Ptr NetworkManager::findNetworkInterface(const QString &uni)
1027 {
1028     return globalNetworkManager->findRegisteredNetworkInterface(uni);
1029 }
1030 
1031 NetworkManager::Device::Ptr NetworkManager::findDeviceByIpFace(const QString &iface)
1032 {
1033     return globalNetworkManager->findDeviceByIpIface(iface);
1034 }
1035 
1036 QDBusPendingReply<QDBusObjectPath, QDBusObjectPath>
1037 NetworkManager::addAndActivateConnection(const NMVariantMapMap &connection, const QString &interfaceUni, const QString &connectionParameter)
1038 {
1039     return globalNetworkManager->addAndActivateConnection(connection, interfaceUni, connectionParameter);
1040 }
1041 
1042 QDBusPendingReply<QDBusObjectPath, QDBusObjectPath, QVariantMap> NetworkManager::addAndActivateConnection2(const NMVariantMapMap &connection,
1043                                                                                                            const QString &interfaceUni,
1044                                                                                                            const QString &connectionParameter,
1045                                                                                                            const QVariantMap &options)
1046 {
1047     if (checkVersion(1, 16, 0)) {
1048         return globalNetworkManager->addAndActivateConnection2(connection, interfaceUni, connectionParameter, options);
1049     } else {
1050         return globalNetworkManager->addAndActivateConnection(connection, interfaceUni, connectionParameter);
1051     }
1052 }
1053 
1054 QDBusPendingReply<QDBusObjectPath>
1055 NetworkManager::activateConnection(const QString &connectionUni, const QString &interfaceUni, const QString &connectionParameter)
1056 {
1057     return globalNetworkManager->activateConnection(connectionUni, interfaceUni, connectionParameter);
1058 }
1059 
1060 QDBusPendingReply<> NetworkManager::deactivateConnection(const QString &activeConnectionPath)
1061 {
1062     return globalNetworkManager->deactivateConnection(activeConnectionPath);
1063 }
1064 
1065 QDBusPendingReply<QString, QString> NetworkManager::getLogging()
1066 {
1067     return globalNetworkManager->getLogging();
1068 }
1069 
1070 void NetworkManager::setNetworkingEnabled(bool enabled)
1071 {
1072     globalNetworkManager->setNetworkingEnabled(enabled);
1073 }
1074 
1075 void NetworkManager::setWirelessEnabled(bool enabled)
1076 {
1077     globalNetworkManager->setWirelessEnabled(enabled);
1078 }
1079 
1080 bool NetworkManager::isWwanEnabled()
1081 {
1082     return globalNetworkManager->isWwanEnabled();
1083 }
1084 
1085 bool NetworkManager::isWwanHardwareEnabled()
1086 {
1087     return globalNetworkManager->isWwanHardwareEnabled();
1088 }
1089 
1090 void NetworkManager::setWwanEnabled(bool enabled)
1091 {
1092     globalNetworkManager->setWwanEnabled(enabled);
1093 }
1094 
1095 bool NetworkManager::isWimaxEnabled()
1096 {
1097     return globalNetworkManager->isWimaxEnabled();
1098 }
1099 
1100 bool NetworkManager::isWimaxHardwareEnabled()
1101 {
1102     return globalNetworkManager->isWimaxHardwareEnabled();
1103 }
1104 
1105 void NetworkManager::setWimaxEnabled(bool enabled)
1106 {
1107     globalNetworkManager->setWimaxEnabled(enabled);
1108 }
1109 
1110 void NetworkManager::sleep(bool sleep)
1111 {
1112     globalNetworkManager->sleep(sleep);
1113 }
1114 
1115 void NetworkManager::setLogging(NetworkManager::LogLevel level, NetworkManager::LogDomains domains)
1116 {
1117     globalNetworkManager->setLogging(level, domains);
1118 }
1119 
1120 NMStringMap NetworkManager::permissions()
1121 {
1122     return globalNetworkManager->permissions();
1123 }
1124 
1125 NetworkManager::Device::Types NetworkManager::supportedInterfaceTypes()
1126 {
1127     return globalNetworkManager->supportedInterfaceTypes();
1128 }
1129 
1130 NetworkManager::Connectivity NetworkManager::connectivity()
1131 {
1132     return globalNetworkManager->connectivity();
1133 }
1134 
1135 QDBusPendingReply<uint> NetworkManager::checkConnectivity()
1136 {
1137     return globalNetworkManager->checkConnectivity();
1138 }
1139 
1140 NetworkManager::ActiveConnection::Ptr NetworkManager::primaryConnection()
1141 {
1142     return globalNetworkManager->primaryConnection();
1143 }
1144 
1145 NetworkManager::ActiveConnection::Ptr NetworkManager::activatingConnection()
1146 {
1147     return globalNetworkManager->activatingConnection();
1148 }
1149 
1150 NetworkManager::ConnectionSettings::ConnectionType NetworkManager::primaryConnectionType()
1151 {
1152     return globalNetworkManager->primaryConnectionType();
1153 }
1154 
1155 bool NetworkManager::isStartingUp()
1156 {
1157     return globalNetworkManager->isStartingUp();
1158 }
1159 
1160 NetworkManager::Device::MeteredStatus NetworkManager::metered()
1161 {
1162     return globalNetworkManager->metered();
1163 }
1164 
1165 NetworkManager::DnsConfiguration NetworkManager::globalDnsConfiguration()
1166 {
1167     return globalNetworkManager->globalDnsConfiguration();
1168 }
1169 
1170 void NetworkManager::setGlobalDnsConfiguration(const NetworkManager::DnsConfiguration &configuration)
1171 {
1172     globalNetworkManager->setGlobalDnsConfiguration(configuration);
1173 }
1174 
1175 NetworkManager::Notifier *NetworkManager::notifier()
1176 {
1177     return globalNetworkManager;
1178 }
1179 
1180 #include "moc_manager.cpp"
1181 #include "moc_manager_p.cpp"