From 6f6a90adbb88c135534d5f20cc2a10f167ea43a3 Mon Sep 17 00:00:00 2001 From: Floris Bos Date: Sat, 6 Jan 2024 14:37:55 +0100 Subject: [PATCH] Fix BSD wifi support Closes #773 --- src/linux/networkmanagerapi.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/linux/networkmanagerapi.cpp b/src/linux/networkmanagerapi.cpp index 7409073..5aafebc 100644 --- a/src/linux/networkmanagerapi.cpp +++ b/src/linux/networkmanagerapi.cpp @@ -10,7 +10,14 @@ #include #include #include +#ifdef Q_OS_LINUX #include +#endif +#ifdef Q_OS_BSD4 +#include +#include +#include +#endif #ifndef QT_NO_DBUS #include @@ -46,6 +53,7 @@ QByteArray NetworkManagerApi::getSSID() return ssid; } +#if defined(Q_OS_LINUX) QByteArray NetworkManagerApi::_getSSIDofInterface(const QByteArray &iface) { char ssid[IW_ESSID_MAX_SIZE+1] = {0}; @@ -63,6 +71,30 @@ QByteArray NetworkManagerApi::_getSSIDofInterface(const QByteArray &iface) return QByteArray(ssid); } +#elif defined(SIOCG80211NWID) +QByteArray NetworkManagerApi::_getSSIDofInterface(const QByteArray &iface) +{ + QByteArray ssid; + struct ieee80211_nwid nwid = {0}; + struct ifreq ifr = {0}; + int s = ::socket(AF_INET, SOCK_DGRAM, 0); + + if (s == -1) + return QByteArray(); + + strncpy(ifr.ifr_name, iface.data(), sizeof(ifr.ifr_name)); + ifr.ifr_data = &nwid; + if (::ioctl(s, SIOCG80211NWID, &ifr) == 0) + ssid = QByteArray(nwid.i_nwid, nwid.i_len); + ::close(s); + return ssid; +} +#else +QByteArray NetworkManagerApi::_getSSIDofInterface(const QByteArray &iface) +{ + return QByteArray(); +} +#endif QByteArray NetworkManagerApi::getPSK() {