Add wireless network device capabilities

This commit is contained in:
Simon Stürz 2024-10-18 14:03:50 +02:00
parent 7940fa5091
commit 84f717a38c
4 changed files with 38 additions and 0 deletions

View File

@ -260,6 +260,10 @@ NetworkManager::NetworkManagerError NetworkManager::startAccessPoint(const QStri
if (!wirelessNetworkDevice) if (!wirelessNetworkDevice)
return NetworkManagerErrorInvalidNetworkDeviceType; return NetworkManagerErrorInvalidNetworkDeviceType;
if (!wirelessNetworkDevice->wirelessCapabilities().testFlag(WirelessNetworkDevice::WirelessCapabilityAP))
return NetworkManagerErrorUnsupportedFeature;
// Note: https://developer.gnome.org/NetworkManager/stable/ref-settings.html // Note: https://developer.gnome.org/NetworkManager/stable/ref-settings.html
// Create network settings for access point // Create network settings for access point

View File

@ -88,6 +88,7 @@ public:
NetworkManagerErrorNetworkingDisabled, NetworkManagerErrorNetworkingDisabled,
NetworkManagerErrorNetworkManagerNotAvailable, NetworkManagerErrorNetworkManagerNotAvailable,
NetworkManagerErrorInvalidConfiguration, NetworkManagerErrorInvalidConfiguration,
NetworkManagerErrorUnsupportedFeature
}; };
Q_ENUM(NetworkManagerError) Q_ENUM(NetworkManagerError)

View File

@ -90,6 +90,7 @@ WirelessNetworkDevice::WirelessNetworkDevice(const QDBusObjectPath &objectPath,
readAccessPoints(); readAccessPoints();
m_macAddress = m_wirelessInterface->property("HwAddress").toString(); m_macAddress = m_wirelessInterface->property("HwAddress").toString();
m_wirelessCapabilities = static_cast<WirelessCapabilities>(m_wirelessInterface->property("WirelessCapabilities").toUInt());
m_wirelessMode = static_cast<WirelessMode>(m_wirelessInterface->property("Mode").toUInt()); m_wirelessMode = static_cast<WirelessMode>(m_wirelessInterface->property("Mode").toUInt());
m_bitRate = m_wirelessInterface->property("Bitrate").toInt() / 1000; m_bitRate = m_wirelessInterface->property("Bitrate").toInt() / 1000;
setActiveAccessPoint(qdbus_cast<QDBusObjectPath>(m_wirelessInterface->property("ActiveAccessPoint"))); setActiveAccessPoint(qdbus_cast<QDBusObjectPath>(m_wirelessInterface->property("ActiveAccessPoint")));
@ -107,6 +108,11 @@ int WirelessNetworkDevice::bitRate() const
return m_bitRate; return m_bitRate;
} }
WirelessNetworkDevice::WirelessCapabilities WirelessNetworkDevice::wirelessCapabilities() const
{
return m_wirelessCapabilities;
}
WirelessNetworkDevice::WirelessMode WirelessNetworkDevice::wirelessMode() const WirelessNetworkDevice::WirelessMode WirelessNetworkDevice::wirelessMode() const
{ {
return m_wirelessMode; return m_wirelessMode;
@ -236,6 +242,11 @@ void WirelessNetworkDevice::processProperties(const QVariantMap &properties)
emit wirelessModeChanged(m_wirelessMode); emit wirelessModeChanged(m_wirelessMode);
} }
if (properties.contains("WirelessCapabilities")) {
m_wirelessCapabilities = static_cast<WirelessCapabilities>(m_wirelessInterface->property("WirelessCapabilities").toUInt());
emit wirelessCapabilitiesChanged(m_wirelessCapabilities);
}
// Note: available since 1.12 (-1 means never scanned) // Note: available since 1.12 (-1 means never scanned)
if (properties.contains("LastScan")) { if (properties.contains("LastScan")) {
m_lastScan = m_wirelessInterface->property("LastScan").toInt(); m_lastScan = m_wirelessInterface->property("LastScan").toInt();
@ -262,6 +273,7 @@ QDebug operator<<(QDebug debug, WirelessNetworkDevice *device)
{ {
debug.nospace() << "WirelessNetworkDevice(" << device->interface() << ", "; debug.nospace() << "WirelessNetworkDevice(" << device->interface() << ", ";
debug.nospace() << device->macAddress() << ", "; debug.nospace() << device->macAddress() << ", ";
debug.nospace() << device->wirelessCapabilities() << ", ";
debug.nospace() << device->wirelessMode() << ", "; debug.nospace() << device->wirelessMode() << ", ";
debug.nospace() << device->bitRate() << " [Mb/s], "; debug.nospace() << device->bitRate() << " [Mb/s], ";
debug.nospace() << device->deviceStateString() << ") "; debug.nospace() << device->deviceStateString() << ") ";

View File

@ -54,11 +54,30 @@ public:
}; };
Q_ENUM(WirelessMode) Q_ENUM(WirelessMode)
enum WirelessCapability {
WirelessCapabilityNone = 0x0000,
WirelessCapabilityCipherWEP40 = 0x0001,
WirelessCapabilityCipherWEP104 = 0x0002,
WirelessCapabilityCipherTKIP = 0x0004,
WirelessCapabilityCipherCCMP = 0x0008,
WirelessCapabilityWPA = 0x0010,
WirelessCapabilityRSN = 0x0020,
WirelessCapabilityAP = 0x0040,
WirelessCapabilityAdHoc = 0x0080,
WirelessCapabilityFreqValid = 0x0100,
WirelessCapability2Ghz = 0x0200,
WirelessCapability5Ghz = 0x0400,
};
Q_ENUM(WirelessCapability)
Q_DECLARE_FLAGS(WirelessCapabilities, WirelessCapability)
Q_FLAG(WirelessCapabilities)
explicit WirelessNetworkDevice(const QDBusObjectPath &objectPath, QObject *parent = nullptr); explicit WirelessNetworkDevice(const QDBusObjectPath &objectPath, QObject *parent = nullptr);
// Properties // Properties
QString macAddress() const; QString macAddress() const;
int bitRate() const; int bitRate() const;
WirelessCapabilities wirelessCapabilities() const;
WirelessMode wirelessMode() const; WirelessMode wirelessMode() const;
WirelessAccessPoint *activeAccessPoint(); WirelessAccessPoint *activeAccessPoint();
@ -72,6 +91,7 @@ public:
signals: signals:
void bitRateChanged(int bitRate); void bitRateChanged(int bitRate);
void wirelessCapabilitiesChanged(WirelessCapabilities wirelessCapabilities);
void wirelessModeChanged(WirelessMode mode); void wirelessModeChanged(WirelessMode mode);
void lastScanChanged(int lastScan); void lastScanChanged(int lastScan);
@ -87,6 +107,7 @@ private:
int m_bitRate; int m_bitRate;
QString m_macAddress; QString m_macAddress;
WirelessCapabilities m_wirelessCapabilities = WirelessCapabilityNone;
WirelessMode m_wirelessMode = WirelessModeUnknown; WirelessMode m_wirelessMode = WirelessModeUnknown;
int m_lastScan = -1; int m_lastScan = -1;
QDBusObjectPath m_activeAccessPointObjectPath; QDBusObjectPath m_activeAccessPointObjectPath;