[kde-plasma-networkmanagement] - knetworkmanager doesn´t recognize BSSID (kde#238046)

Rex Dieter rdieter at fedoraproject.org
Tue Sep 14 17:28:00 UTC 2010


commit 73d75a17e66c35e1a21f9b147853efe4b98e8dda
Author: Rex Dieter <rdieter at fedoraproject.org>
Date:   Tue Sep 14 12:33:16 2010 -0500

    - knetworkmanager doesn´t recognize BSSID (kde#238046)

 kde-plasma-networkmanagement.spec |   15 +++-
 networkmanagement-bssid.patch     |  160 +++++++++++++++++++++++++++++++++++++
 2 files changed, 172 insertions(+), 3 deletions(-)
---
diff --git a/kde-plasma-networkmanagement.spec b/kde-plasma-networkmanagement.spec
index e6a9101..07d495b 100644
--- a/kde-plasma-networkmanagement.spec
+++ b/kde-plasma-networkmanagement.spec
@@ -8,7 +8,7 @@
 Name:           kde-plasma-networkmanagement
 Epoch:          1
 Version:        0.9
-Release:        0.22.%{snap}%{?dist}
+Release:        0.23.%{snap}%{?dist}
 Summary:        NetworkManager KDE 4 integration
 
 Group:          Applications/Internet
@@ -32,8 +32,13 @@ Patch2: networkmanagement-0.9-disable_kded.patch
 # Adding "Enable networking" button to knetworkmanager
 # https://bugs.kde.org/238325
 Patch50: networkmanagement-kdebug238325.patch
+# knetworkmanager doesn´t  recognize BSSID
+# https://bugs.kde.org/238046
+Patch51: networkmanagement-bssid.patch
+
+## upstream patches
 # fix build for kde-4.4.x
-Patch51: networkmanagement-0.9-kutils_libs.patch
+Patch100: networkmanagement-0.9-kutils_libs.patch
 
 BuildRequires:  kdelibs4-devel
 BuildRequires:  kdebase-workspace-devel
@@ -155,7 +160,8 @@ Obsoletes:      knetworkmanager4-vpnc < %{?epoch:%{epoch}:}%{version}-%{release}
 %patch2 -p1 -b .disable_kded
 %endif
 %patch50 -p0 -b .kdebug238325
-%patch51 -p1 -b .kutils_libs
+%patch51 -p0 -b .bssid
+%patch100 -p1 -b .kutils_libs
 
 
 %build
@@ -286,6 +292,9 @@ gtk-update-icon-cache %{_kde4_iconsdir}/oxygen &> /dev/null || :
 
 
 %changelog
+* Tue Sep 14 2010 Rex Dieter <rdieter at fedoraproject.org> 1:0.9-0.23.20100830
+- knetworkmanager doesn´t recognize BSSID (kde#238046)
+
 * Mon Aug 30 2010 Rex Dieter <rdieter at fedoraproject.org> 1:0.9-0.22.20100830
 - 20100830 snapshot
 - Requires: kdebase-runtime
diff --git a/networkmanagement-bssid.patch b/networkmanagement-bssid.patch
new file mode 100644
index 0000000..65db532
--- /dev/null
+++ b/networkmanagement-bssid.patch
@@ -0,0 +1,160 @@
+Index: libs/ui/802_11_wirelesswidget.cpp
+===================================================================
+--- libs/ui/802_11_wirelesswidget.cpp	(revision 1175103)
++++ libs/ui/802_11_wirelesswidget.cpp	(working copy)
+@@ -128,6 +128,8 @@ void Wireless80211Widget::writeConfig()
+ 
+     if (d->ui.bssid->text() != QString::fromLatin1(":::::")) {
+         d->setting->setBssid(d->ui.bssid->text().toAscii());
++    } else {
++        d->setting->setBssid(QByteArray());
+     }
+     d->setting->setMtu(d->ui.mtu->value());
+ }
+Index: backends/NetworkManager/settingdbus.h
+===================================================================
+--- backends/NetworkManager/settingdbus.h	(revision 1175103)
++++ backends/NetworkManager/settingdbus.h	(working copy)
+@@ -39,6 +39,10 @@ class SettingDbus
+     virtual void fromMap(const QVariantMap &) = 0;
+     virtual QVariantMap toMap() = 0;
+     virtual QVariantMap toSecretsMap() = 0;
++
++    // static methods to convert between binary and hex string MAC representation
++    static QByteArray macHex2Bin(const QByteArray & hexMac);
++    static QByteArray macBin2Hex(const QByteArray & binMac);
+ protected:
+     static void insertIfTrue(QVariantMap& map, const char * key, bool value);
+     static void insertIfNonZero(QVariantMap& map, const char * key, uint value);
+Index: backends/NetworkManager/settings/802-11-wirelessdbus.cpp
+===================================================================
+--- backends/NetworkManager/settings/802-11-wirelessdbus.cpp	(revision 1175103)
++++ backends/NetworkManager/settings/802-11-wirelessdbus.cpp	(working copy)
+@@ -29,7 +29,7 @@ void WirelessDbus::fromMap(const QVariantMap & map
+     setting->setChannel(map.value("channel").value<uint>());
+   }
+   if (map.contains("bssid")) {
+-    setting->setBssid(map.value("bssid").value<QByteArray>());
++    setting->setBssid(SettingDbus::macBin2Hex(map.value("bssid").value<QByteArray>()));
+   }
+   if (map.contains("rate")) {
+     setting->setRate(map.value("rate").value<uint>());
+@@ -38,7 +38,7 @@ void WirelessDbus::fromMap(const QVariantMap & map
+     setting->setTxpower(map.value(QLatin1String(NM_SETTING_WIRELESS_TX_POWER)).value<uint>());
+   }
+   if (map.contains(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS))) {
+-    setting->setMacaddress(map.value(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS)).value<QByteArray>());
++    setting->setMacaddress(SettingDbus::macBin2Hex(map.value(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS)).value<QByteArray>()));
+   }
+   if (map.contains("mtu")) {
+     setting->setMtu(map.value("mtu").value<uint>());
+@@ -77,12 +77,12 @@ QVariantMap WirelessDbus::toMap()
+ #endif
+   //map.insert("channel", setting->channel());
+   if (!setting->bssid().isEmpty()) {
+-      map.insert("bssid", setting->bssid());
++      map.insert("bssid", SettingDbus::macHex2Bin(setting->bssid()));
+   }
+   //map.insert("rate", setting->rate());
+   //map.insert(QLatin1String(NM_SETTING_WIRELESS_TX_POWER), setting->txpower());
+   if (!setting->macaddress().isEmpty()) {
+-      map.insert(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS), setting->macaddress());
++      map.insert(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS), SettingDbus::macHex2Bin(setting->macaddress()));
+   }
+   if (setting->mtu() > 0 )
+        map.insert("mtu", setting->mtu());
+Index: backends/NetworkManager/settings/802-3-ethernetdbus.cpp
+===================================================================
+--- backends/NetworkManager/settings/802-3-ethernetdbus.cpp	(revision 1175103)
++++ backends/NetworkManager/settings/802-3-ethernetdbus.cpp	(working copy)
+@@ -29,7 +29,7 @@ void WiredDbus::fromMap(const QVariantMap & map)
+     setting->setAutonegotiate(map.value(QLatin1String(NM_SETTING_WIRED_AUTO_NEGOTIATE)).value<bool>());
+   }
+   if (map.contains(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS))) {
+-    setting->setMacaddress(map.value(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS)).value<QByteArray>());
++    setting->setMacaddress(SettingDbus::macBin2Hex(map.value(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS)).value<QByteArray>()));
+   }
+   if (map.contains("mtu")) {
+     setting->setMtu(map.value("mtu").value<uint>());
+@@ -67,10 +67,10 @@ QVariantMap WiredDbus::toMap()
+   }
+   map.insert(QLatin1String(NM_SETTING_WIRED_AUTO_NEGOTIATE), setting->autonegotiate());
+ #endif
+-  // broken
+-  //QString mac = setting->macaddress();
+-  //map.insert(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS), mac.remove(':').toAscii());
+-  if (setting->mtu() > 0 ) {
++  if (!setting->macaddress().isEmpty()) {
++    map.insert(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS), SettingDbus::macHex2Bin(setting->macaddress()));
++  }
++  if (setting->mtu() > 0) {
+     map.insert("mtu", setting->mtu());
+   }
+   return map;
+Index: backends/NetworkManager/settingdbus.cpp
+===================================================================
+--- backends/NetworkManager/settingdbus.cpp	(revision 1175103)
++++ backends/NetworkManager/settingdbus.cpp	(working copy)
+@@ -18,6 +18,8 @@ You should have received a copy of the GNU Lesser
+ License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ */
+ 
++#include "ctype.h"
++
+ #include "settingdbus.h"
+ 
+ using namespace Knm;
+@@ -33,6 +35,53 @@ SettingDbus::~SettingDbus()
+ 
+ }
+ 
++// convert MAC from hex string to binary
++// e.g. 00:11:22:dd:ee:ff -> 6-byte array
++QByteArray SettingDbus::macHex2Bin(const QByteArray & hexMac)
++{
++    const int MAC_STR_LEN = 17;
++    QByteArray ba = hexMac;
++
++    if (ba.isEmpty()) return ba;
++
++    // Check the MAC first and correct it.
++    // Although fromHex() ignores invalid characters, it scans the array from
++    // the end; so add missing zeroes to have even number of characters.
++    for (int i = 0; i < MAC_STR_LEN; i++) {
++        char ch = i < ba.size() ? ba.at(i) : ':';
++        int mod = i%3;
++        if (mod != 2) {
++            if (ch == ':') ba.insert(i-mod, "0");
++            else if (!isxdigit(ch)) ba[i] = '0';
++        } else {
++            if (ch != ':') ba.insert(i, ":");
++        }
++    }
++    ba.resize(MAC_STR_LEN);
++
++    return QByteArray::fromHex(ba);
++}
++
++// convert binary MAC to hex string (human readable)
++// e.g. 6-byte array -> 00:11:22:dd:ee:ff
++QByteArray SettingDbus::macBin2Hex(const QByteArray & binMac)
++{
++    const int MAC_STR_LEN = 17;
++    QByteArray ba = binMac;
++
++    if (ba.isEmpty()) return ba;
++
++    ba = ba.toHex().toUpper();
++    ba.insert(2, ':');
++    ba.insert(5, ':');
++    ba.insert(8, ':');
++    ba.insert(11, ':');
++    ba.insert(14, ':');
++    ba.resize(MAC_STR_LEN);
++
++    return ba;
++}
++
+ void SettingDbus::insertIfTrue(QVariantMap& map, const char * key, bool setting)
+ {
+     if (setting) {


More information about the scm-commits mailing list