7#include <QtCore/qglobal.h>
8#include <QtCore/private/qobject_p.h>
10#include <QtDBus/qdbusmessage.h>
13Q_DECLARE_LOGGING_CATEGORY(lcNetInfoNLM)
14Q_LOGGING_CATEGORY(lcNetInfoNM,
"qt.network.info.networkmanager");
17QNetworkInformation::Reachability reachabilityFromNMState(QNetworkManagerInterface::NMState state)
20 case QNetworkManagerInterface::NM_STATE_UNKNOWN:
21 case QNetworkManagerInterface::NM_STATE_ASLEEP:
22 case QNetworkManagerInterface::NM_STATE_CONNECTING:
23 return QNetworkInformation::Reachability::Unknown;
24 case QNetworkManagerInterface::NM_STATE_DISCONNECTING:
25 case QNetworkManagerInterface::NM_STATE_DISCONNECTED:
26 return QNetworkInformation::Reachability::Disconnected;
27 case QNetworkManagerInterface::NM_STATE_CONNECTED_LOCAL:
28 return QNetworkInformation::Reachability::Local;
29 case QNetworkManagerInterface::NM_STATE_CONNECTED_SITE:
30 return QNetworkInformation::Reachability::Site;
31 case QNetworkManagerInterface::NM_STATE_CONNECTED_GLOBAL:
32 return QNetworkInformation::Reachability::Online;
34 return QNetworkInformation::Reachability::Unknown;
37QNetworkInformation::TransportMedium
38transportMediumFromDeviceType(QNetworkManagerInterface::NMDeviceType type)
41 case QNetworkManagerInterface::NM_DEVICE_TYPE_ETHERNET:
42 return QNetworkInformation::TransportMedium::Ethernet;
43 case QNetworkManagerInterface::NM_DEVICE_TYPE_WIFI:
44 return QNetworkInformation::TransportMedium::WiFi;
45 case QNetworkManagerInterface::NM_DEVICE_TYPE_BT:
46 return QNetworkInformation::TransportMedium::Bluetooth;
47 case QNetworkManagerInterface::NM_DEVICE_TYPE_MODEM:
48 return QNetworkInformation::TransportMedium::Cellular;
50 case QNetworkManagerInterface::NM_DEVICE_TYPE_UNKNOWN:
51 case QNetworkManagerInterface::NM_DEVICE_TYPE_GENERIC:
52 case QNetworkManagerInterface::NM_DEVICE_TYPE_UNUSED1:
53 case QNetworkManagerInterface::NM_DEVICE_TYPE_UNUSED2:
54 case QNetworkManagerInterface::NM_DEVICE_TYPE_OLPC_MESH:
55 case QNetworkManagerInterface::NM_DEVICE_TYPE_WIMAX:
56 case QNetworkManagerInterface::NM_DEVICE_TYPE_INFINIBAND:
57 case QNetworkManagerInterface::NM_DEVICE_TYPE_BOND:
58 case QNetworkManagerInterface::NM_DEVICE_TYPE_VLAN:
59 case QNetworkManagerInterface::NM_DEVICE_TYPE_ADSL:
60 case QNetworkManagerInterface::NM_DEVICE_TYPE_BRIDGE:
61 case QNetworkManagerInterface::NM_DEVICE_TYPE_TEAM:
62 case QNetworkManagerInterface::NM_DEVICE_TYPE_TUN:
63 case QNetworkManagerInterface::NM_DEVICE_TYPE_IP_TUNNEL:
64 case QNetworkManagerInterface::NM_DEVICE_TYPE_MACVLAN:
65 case QNetworkManagerInterface::NM_DEVICE_TYPE_VXLAN:
66 case QNetworkManagerInterface::NM_DEVICE_TYPE_VETH:
67 case QNetworkManagerInterface::NM_DEVICE_TYPE_MACSEC:
68 case QNetworkManagerInterface::NM_DEVICE_TYPE_DUMMY:
69 case QNetworkManagerInterface::NM_DEVICE_TYPE_PPP:
70 case QNetworkManagerInterface::NM_DEVICE_TYPE_OVS_INTERFACE:
71 case QNetworkManagerInterface::NM_DEVICE_TYPE_OVS_PORT:
72 case QNetworkManagerInterface::NM_DEVICE_TYPE_OVS_BRIDGE:
73 case QNetworkManagerInterface::NM_DEVICE_TYPE_WPAN:
74 case QNetworkManagerInterface::NM_DEVICE_TYPE_6LOWPAN:
75 case QNetworkManagerInterface::NM_DEVICE_TYPE_WIREGUARD:
76 case QNetworkManagerInterface::NM_DEVICE_TYPE_WIFI_P2P:
77 case QNetworkManagerInterface::NM_DEVICE_TYPE_VRF:
82 return QNetworkInformation::TransportMedium::Unknown;
96 Q_UNREACHABLE_RETURN(
false);
102 return QStringView(QNetworkInformationBackend::PluginNames
103 [QNetworkInformationBackend::PluginNamesLinuxIndex]).toString();
108 return backendName();
114 Q_PLUGIN_METADATA(IID QNetworkInformationBackendFactory_iid)
124 return QNetworkManagerNetworkInformationBackend::featuresSupportedStatic();
129 if ((requiredFeatures & featuresSupported()) != requiredFeatures)
134 if (!backend->isValid())
135 delete std::exchange(backend,
nullptr);
144 if (!iface.isValid())
146 iface.setBackend(
this);
147 onStateChanged(iface.state());
148 onConnectivityChanged(iface.connectivityState());
149 onDeviceTypeChanged(iface.deviceType());
150 onMeteredChanged(iface.meteredState());
154 QNetworkManagerInterface::NMState newState)
156 setReachability(reachabilityFromNMState(newState));
160 QNetworkManagerInterface::NMConnectivityState connectivityState)
162 const bool behindPortal =
163 (connectivityState == QNetworkManagerInterface::NM_CONNECTIVITY_PORTAL);
164 setBehindCaptivePortal(behindPortal);
168 QNetworkManagerInterface::NMDeviceType newDevice)
170 setTransportMedium(transportMediumFromDeviceType(newDevice));
176 setMetered(isMeteredFromNMMetered(metered));
181#include "qnetworkmanagernetworkinformationbackend.moc"
182#include "moc_qnetworkmanagernetworkinformationbackend.cpp"
static bool networkManagerAvailable()