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

0001 /*
0002     SPDX-FileCopyrightText: 2008, 2010, 2011 Will Stephenson <wstephenson@kde.org>
0003     SPDX-FileCopyrightText: 2011-2013 Lamarque Souza <lamarque@kde.org>
0004     SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #ifndef NETWORKMANAGERQT_NETWORKMANAGER_H
0010 #define NETWORKMANAGERQT_NETWORKMANAGER_H
0011 
0012 #include <networkmanagerqt/networkmanagerqt_export.h>
0013 
0014 #include "activeconnection.h"
0015 #include "device.h"
0016 #include "dnsconfiguration.h"
0017 
0018 /**
0019  * This class allows querying the underlying system to discover the available
0020  * network interfaces and reachable networks. It has also the
0021  * responsibility to notify when a network interface appears or disappears.
0022  *
0023  * It is the unique entry point for network management. Applications should use
0024  * it to find network interfaces, or to be notified about network related changes.
0025  *
0026  * Note that it is implemented as a singleton
0027  */
0028 namespace NetworkManager
0029 {
0030 Q_NAMESPACE_EXPORT(NETWORKMANAGERQT_EXPORT)
0031 
0032 enum Status {
0033     Unknown, /**< the networking system is not active or unable to report its status - proceed with caution */
0034     Asleep, /**< networking is inactive and all devices are disabled */
0035     Disconnected, /**< the system is not connected to any network */
0036     Disconnecting, /**< the system is breaking the connection */
0037     Connecting, /**< the system is not connected to any network */
0038     ConnectedLinkLocal, /**< a network device is connected, but there is only link-local connectivity */
0039     ConnectedSiteOnly, /**< a network device is connected, but there is only site-local connectivity */
0040     Connected, /**< the system is currently connected to a network */
0041 };
0042 Q_ENUM_NS(Status)
0043 
0044 enum LogLevel {
0045     Error,
0046     Warning,
0047     Info,
0048     Debug,
0049     Trace, /**< = Debug in runtime NM < 0.9.10*/
0050 };
0051 
0052 enum LogDomain {
0053     NoChange,
0054     None,
0055     Hardware,
0056     RFKill,
0057     Ethernet,
0058     WiFi,
0059     Bluetooth,
0060     MobileBroadBand,
0061     DHCP4,
0062     DHCP6,
0063     PPP,
0064     WiFiScan,
0065     IPv4,
0066     IPv6,
0067     AutoIPv4,
0068     DNS,
0069     VPN,
0070     Sharing,
0071     Supplicant,
0072     UserSet,
0073     SysSet,
0074     Suspend,
0075     Core,
0076     Devices,
0077     OLPC,
0078     Wimax /*TODO: mark it deprecated somehow?*/,
0079     Infiniband,
0080     Firewall,
0081     Adsl,
0082     Bond,
0083     Vlan,
0084     Agents,
0085     Settings,
0086     Bridge,
0087     DbusProps,
0088     Team,
0089     ConCheck,
0090     Dcb,
0091     Dispatch,
0092 };
0093 Q_DECLARE_FLAGS(LogDomains, LogDomain)
0094 Q_FLAGS(LogDomain)
0095 
0096 /**
0097  * Describes the network connectivity state.
0098  * @since 0.9.9.0
0099  */
0100 enum Connectivity {
0101     UnknownConnectivity = 0, /**< Network connectivity is unknown. */
0102     NoConnectivity = 1, /**< The host is not connected to any network. */
0103     Portal = 2, /**< The host is behind a captive portal and cannot reach the full Internet. */
0104     Limited = 3, /**< The host is connected to a network, but does not appear to be able to reach the full Internet. */
0105     Full = 4, /**< The host is connected to a network, and appears to be able to reach the full Internet. */
0106 };
0107 Q_ENUM_NS(Connectivity)
0108 
0109 class NETWORKMANAGERQT_EXPORT Notifier : public QObject
0110 {
0111     Q_OBJECT
0112 Q_SIGNALS:
0113     /**
0114      * This signal is emitted when the system's connection state changes
0115      */
0116     void statusChanged(NetworkManager::Status status);
0117     /**
0118      * This signal is emitted when a new network interface is available.
0119      *
0120      * @param uni the network interface identifier
0121      */
0122     void deviceAdded(const QString &uni);
0123     /**
0124      * This signal is emitted when a network interface is not available anymore.
0125      *
0126      * @param uni the network interface identifier
0127      */
0128     void deviceRemoved(const QString &uni);
0129     /**
0130      * This signal is emitted when the status of the wireless changed
0131      */
0132     void wirelessEnabledChanged(bool);
0133     /**
0134      * This signal is emitted when the status of the wireless changed
0135      */
0136     void wwanEnabledChanged(bool);
0137     /**
0138      * This signal is emitted when the status of the wimax changed
0139      *
0140      * @deprecated Wimax support was removed from NetworkManager 1.2
0141      * (never emitted in runtime NM >= 1.2.0).
0142      */
0143     void wimaxEnabledChanged(bool);
0144     /**
0145      * This signal is emitted when the status of the wireless changed
0146      */
0147     void wirelessHardwareEnabledChanged(bool);
0148     /**
0149      * This signal is emitted when the status of the wireless changed
0150      */
0151     void wwanHardwareEnabledChanged(bool);
0152     /**
0153      * This signal is emitted when the status of the wimax hardware changed
0154      *
0155      * @deprecated Wimax support was removed from NetworkManager 1.2
0156      * (never emitted in runtime NM >= 1.2.0).
0157      */
0158     void wimaxHardwareEnabledChanged(bool);
0159     /**
0160      * This signal is emitted when the status of overall networking changed
0161      */
0162     void networkingEnabledChanged(bool);
0163     /**
0164      * This signal is emitted when a new connection was made active
0165      *
0166      * @param path the path of the new connection
0167      */
0168     void activeConnectionAdded(const QString &path);
0169     /**
0170      * This signal is emitted when an active connection is no longer active
0171      *
0172      * @param path the path of the removed connection
0173      */
0174     void activeConnectionRemoved(const QString &path);
0175     /**
0176      * This signal is emitted when the set of active connections changes
0177      */
0178     void activeConnectionsChanged();
0179     /**
0180      * This signal is emitted when the NetworkManager DBus service goes away
0181      */
0182     void serviceDisappeared();
0183     /**
0184      * This signal is emitted when the NetworkManager DBus service appears
0185      */
0186     void serviceAppeared();
0187     /**
0188      * Emitted when the global connectivity changes.
0189      * @since 0.9.9.0
0190      */
0191     void connectivityChanged(NetworkManager::Connectivity connectivity);
0192     /**
0193      * Emitted when the primary connection changes.
0194      * @param uni path of the new primary connection
0195      * @since 0.9.9.0
0196      */
0197     void primaryConnectionChanged(const QString &uni);
0198     /**
0199      * Emitted when the activating connection changes.
0200      * @param uni path of the new activating connection
0201      * @since 0.9.9.0
0202      */
0203     void activatingConnectionChanged(const QString &uni);
0204     /**
0205      * Emitted when the primary connection type changes.
0206      * @param connection type of the new primary connection
0207      * @since 5.8.0
0208      */
0209     void primaryConnectionTypeChanged(NetworkManager::ConnectionSettings::ConnectionType type);
0210 
0211     /**
0212      * Emitted when NM has started/finished its startup sequence
0213      * @since 0.9.9.0
0214      */
0215     void isStartingUpChanged();
0216 
0217     /**
0218      * Emitted when metered property has changed
0219      * @since 5.14.0
0220      * @see metered
0221      */
0222     void meteredChanged(NetworkManager::Device::MeteredStatus metered);
0223 
0224     /**
0225      * Emitted when the global DNS configuration has changed
0226      * @since 5.45.0
0227      * @see globalDnsConfiguration
0228      */
0229     void globalDnsConfigurationChanged(const NetworkManager::DnsConfiguration &configuration);
0230 };
0231 
0232 /**
0233  * Get the NetworkManager version
0234  */
0235 NETWORKMANAGERQT_EXPORT QString version();
0236 /**
0237  * Compares NetworkManager's version to the parameter version.
0238  * returns 1, -1 or 0 if NetworkManager's version is greater, less or equal to parameter.
0239  */
0240 NETWORKMANAGERQT_EXPORT int compareVersion(const QString &version);
0241 /**
0242  * Compares NetworkManager version to x.y.z.
0243  * returns 1, -1 or 0 if NetworkManager's version is greater, less or equal to x.y.z.
0244  */
0245 NETWORKMANAGERQT_EXPORT int compareVersion(const int x, const int y, const int z);
0246 /**
0247  * Checks if NetworkManager version is at least x.y.z
0248  * @return true if NetworkManager's version is greater or equal, false otherwise
0249  **/
0250 NETWORKMANAGERQT_EXPORT bool checkVersion(const int x, const int y, const int z);
0251 /**
0252  * Get the manager connection state
0253  */
0254 NETWORKMANAGERQT_EXPORT NetworkManager::Status status();
0255 /**
0256  * Retrieves the list of all the network interfaces in the system.
0257  * It includes both hardware and virtual devices.
0258  *
0259  * @return the list of network interfaces available in this system
0260  */
0261 NETWORKMANAGERQT_EXPORT Device::List networkInterfaces();
0262 /**
0263  * Find a new NetworkInterface object given its UNI.  This pointer is owned by the Solid
0264  * infrastructure.
0265  *
0266  * @param uni the identifier of the network interface to find
0267  * @return a valid NetworkInterface object if there's a device having the given UNI, an invalid one otherwise
0268  */
0269 NETWORKMANAGERQT_EXPORT Device::Ptr findNetworkInterface(const QString &uni);
0270 /**
0271  * Return the network device referenced by its IP interface name.
0272  * This is not system independent so programs that will use this method will not be portable.
0273  */
0274 NETWORKMANAGERQT_EXPORT Device::Ptr findDeviceByIpFace(const QString &iface);
0275 /**
0276  * Retrieves the status of networking (as a whole) in the system.
0277  * This is distinct from whether the system's networking is online or offline.
0278  * To check that, see @ref status().
0279  *
0280  * @return true if this networking is enabled, false otherwise
0281  */
0282 NETWORKMANAGERQT_EXPORT bool isNetworkingEnabled();
0283 /**
0284  * Retrieves the activation status of wireless networking in the system.
0285  *
0286  * @return true if this wireless networking is enabled, false otherwise
0287  */
0288 NETWORKMANAGERQT_EXPORT bool isWirelessEnabled();
0289 /**
0290  * Retrieves the status of wireless hardware in the system. This is typically
0291  * controlled by a physical switch so there is no way to set this in software.
0292  *
0293  * @return true if this wireless networking is enabled, false otherwise
0294  */
0295 NETWORKMANAGERQT_EXPORT bool isWirelessHardwareEnabled();
0296 /**
0297  * Retrieves the status of wireless broadband (Wireless WAN) in the system.
0298  *
0299  * @return true if this type of wireless networking is enabled, false otherwise
0300  */
0301 NETWORKMANAGERQT_EXPORT bool isWwanEnabled();
0302 /**
0303  * Retrieves the status of wireless broadband (Wireless WAN) hardware in the system. This is typically
0304  * controlled by a physical switch so there is no way to set this in software.
0305  *
0306  * @return true if this broddband hardware is enabled, false otherwise
0307  */
0308 NETWORKMANAGERQT_EXPORT bool isWwanHardwareEnabled();
0309 
0310 /**
0311  * Retrieves the activation status of wimax networking in the system.
0312  *
0313  * @return true if this wimax networking is enabled, false otherwise
0314  *
0315  * @deprecated Wimax support was removed from NetworkManager 1.2
0316  * (always returns false in runtime NM >= 1.2.0).
0317  */
0318 NETWORKMANAGERQT_EXPORT bool isWimaxEnabled();
0319 /**
0320  * Retrieves the status of wimax hardware in the system. This is typically
0321  * controlled by a physical switch so there is no way to set this in software.
0322  *
0323  * @return true if wimax HW networking is enabled, false otherwise
0324  *
0325  * @deprecated Wimax support was removed from NetworkManager 1.2
0326  * (always returns false in runtime NM >= 1.2.0).
0327  */
0328 NETWORKMANAGERQT_EXPORT bool isWimaxHardwareEnabled();
0329 
0330 /**
0331  * Activate a connection using the supplied device.
0332  *
0333  * @param connectionUni unique identifier for the connection to be activated
0334  * @param interfaceUni unique identifier of the network interface to be activated
0335  * @param connectionParameter can be used to specify extra parameters not specific to the NetworkInterface or the connection, eg which AP to use when several
0336  * present with same ESSID in range (because ESSID does not guarantee that the AP is part of the network you want to join!)
0337  */
0338 NETWORKMANAGERQT_EXPORT QDBusPendingReply<QDBusObjectPath>
0339 activateConnection(const QString &connectionUni, const QString &interfaceUni, const QString &connectionParameter);
0340 /**
0341  * Adds a new connection using the given details (if any) as a template (automatically filling in missing settings with the capabilities of the given device and
0342  * specific object), then activate the new connection. Cannot be used for VPN connections at this time.
0343  *
0344  * @param connection connection definition to be added and activated
0345  * @param interfaceUni unique identifier of the network interface to be activated
0346  * @param connectionParameter can be used to specify extra parameters not specific to the NetworkInterface or the connection, eg which AP to use when several
0347  * present with same ESSID in range (because ESSID does not guarantee that the AP is part of the network you want to join!)
0348  */
0349 NETWORKMANAGERQT_EXPORT QDBusPendingReply<QDBusObjectPath, QDBusObjectPath>
0350 addAndActivateConnection(const NMVariantMapMap &connection, const QString &interfaceUni, const QString &connectionParameter);
0351 /**
0352  * Adds a new connection using the given details (if any) as a template (automatically filling in missing settings with the capabilities of the given device and
0353  * specific object), then activate the new connection. Cannot be used for VPN connections at this time.
0354  *
0355  * @param connection connection definition to be added and activated
0356  * @param interfaceUni unique identifier of the network interface to be activated
0357  * @param connectionParameter can be used to specify extra parameters not specific to the NetworkInterface or the connection, eg which AP to use when several
0358  * present with same ESSID in range (because ESSID does not guarantee that the AP is part of the network you want to join!)
0359  * @param options further options for the method call.
0360  *
0361  * This method extends AddAndActivateConnection to allow passing further
0362  * parameters. At this time the following options are supported:
0363  *
0364  *        * persist: A string value of either "disk" (default), "memory" or "volatile". If "memory" is passed, the connection will not be saved to disk. If
0365  * "volatile" is passed, the connection will not be saved to disk and will be destroyed when disconnected.
0366  *        * bind-activation: Bind the activation lifetime. Set to "dbus-name" to automatically disconnect when the requesting process disappears from the bus.
0367  * The default of "none" means the connection is kept activated normally.
0368  *
0369  * NOTE: will call AddAndActivateConnection(connection, interfaceUni, connectionParameter) instead when NetworkManager is older than 1.16, which means that the
0370  * options property is ignored
0371  */
0372 NETWORKMANAGERQT_EXPORT QDBusPendingReply<QDBusObjectPath, QDBusObjectPath, QVariantMap>
0373 addAndActivateConnection2(const NMVariantMapMap &connection, const QString &interfaceUni, const QString &connectionParameter, const QVariantMap &options);
0374 /**
0375  * Deactivate this network interface, if active
0376  *
0377  * @param activeConnection identifier of the connection to deactivate
0378  */
0379 NETWORKMANAGERQT_EXPORT QDBusPendingReply<> deactivateConnection(const QString &activeConnection);
0380 /**
0381  * Access the list of any active connections
0382  *
0383  * @return a list of valid ActiveConnection objects
0384  */
0385 NETWORKMANAGERQT_EXPORT ActiveConnection::List activeConnections();
0386 /**
0387  * Access the list of any active connections paths
0388  *
0389  * @return a list of valid ActiveConnection paths
0390  */
0391 NETWORKMANAGERQT_EXPORT QStringList activeConnectionsPaths();
0392 /**
0393  * Get current logging verbosity level and operations domains
0394  */
0395 NETWORKMANAGERQT_EXPORT QDBusPendingReply<QString, QString> getLogging();
0396 
0397 /**
0398  * @return the network connectivity state
0399  * @since 0.9.9.0
0400  */
0401 NETWORKMANAGERQT_EXPORT Connectivity connectivity();
0402 
0403 /**
0404  * Re-check the network connectivity state.
0405  * @see connectivity()
0406  * @since 0.9.9.0
0407  */
0408 NETWORKMANAGERQT_EXPORT QDBusPendingReply<uint> checkConnectivity();
0409 
0410 /**
0411  * @return the "primary" active connection being used
0412  * to access the network. In particular, if there is no VPN
0413  * active, or the VPN does not have the default route, then this
0414  * indicates the connection that has the default route. If there
0415  * is a VPN active with the default route, then this indicates
0416  * the connection that contains the route to the VPN endpoint.
0417  * @since 0.9.9.0
0418  */
0419 NETWORKMANAGERQT_EXPORT ActiveConnection::Ptr primaryConnection();
0420 
0421 /**
0422  * @return an active connection that is currently
0423  * being activated and which is expected to become the new
0424  * primaryConnection() when it finishes activating.
0425  * @since 0.9.9.0
0426  */
0427 NETWORKMANAGERQT_EXPORT ActiveConnection::Ptr activatingConnection();
0428 
0429 /**
0430  * @return The connection type of the "primary" active connection being
0431  * used to access the network. This is the same as the Type
0432  * property on the object indicated by PrimaryConnection.
0433  * @since 5.8.0
0434  */
0435 NETWORKMANAGERQT_EXPORT NetworkManager::ConnectionSettings::ConnectionType primaryConnectionType();
0436 
0437 /**
0438  * Indicates whether NM is still starting up; this becomes @p false
0439  * when NM has finished attempting to activate every connection
0440  * that it might be able to activate at startup.
0441  * @since 0.9.9.0
0442  */
0443 NETWORKMANAGERQT_EXPORT bool isStartingUp();
0444 
0445 /**
0446  * @return Indicates whether the connectivity is metered.
0447  * @since 5.14.0
0448  */
0449 NETWORKMANAGERQT_EXPORT NetworkManager::Device::MeteredStatus metered();
0450 
0451 /**
0452  * @return Gets the global DNS configuration.
0453  * @since 5.45.0
0454  */
0455 NETWORKMANAGERQT_EXPORT NetworkManager::DnsConfiguration globalDnsConfiguration();
0456 
0457 /**
0458  * @return Sets the global DNS configuration.
0459  * @since 5.45.0
0460  */
0461 NETWORKMANAGERQT_EXPORT void setGlobalDnsConfiguration(const NetworkManager::DnsConfiguration &configuration);
0462 
0463 /**
0464  * Find an ActiveConnection object for an active connection id
0465  *
0466  * @param uni the id of the ActiveConnection
0467  * @return a valid ActiveConnection object
0468  */
0469 NETWORKMANAGERQT_EXPORT ActiveConnection::Ptr findActiveConnection(const QString &uni);
0470 /**
0471  * Retrieves the interface types supported by this network manager.
0472  *
0473  * @return the interface types supported by the network manager
0474  */
0475 NETWORKMANAGERQT_EXPORT Device::Types supportedInterfaceTypes();
0476 NETWORKMANAGERQT_EXPORT void setNetworkingEnabled(bool enabled);
0477 // implemented in Notifier
0478 NETWORKMANAGERQT_EXPORT void setWirelessEnabled(bool enabled);
0479 NETWORKMANAGERQT_EXPORT void setWwanEnabled(bool enabled);
0480 /**
0481  * @deprecated Wimax support was removed from NetworkManager 1.2
0482  * (it is a noop in runtime NM >= 1.2.0).
0483  */
0484 NETWORKMANAGERQT_EXPORT void setWimaxEnabled(bool enabled);
0485 NETWORKMANAGERQT_EXPORT void sleep(bool sleep);
0486 NETWORKMANAGERQT_EXPORT void setLogging(LogLevel, LogDomains);
0487 NETWORKMANAGERQT_EXPORT NMStringMap permissions();
0488 NETWORKMANAGERQT_EXPORT Notifier *notifier();
0489 
0490 }
0491 
0492 #endif