File fix_static_ip.patch of Package NetworkManager-kde
Index: knetworkmanager/src/knetworkmanager-connection_setting_ipv4.h
===================================================================
--- knetworkmanager/src/knetworkmanager-connection_setting_ipv4.h (Revision 880482)
+++ knetworkmanager/src/knetworkmanager-connection_setting_ipv4.h (Revision 880676)
@@ -95,6 +95,9 @@
bool useSetting();
+ Q_UINT32 toCIDRSuffix(const QHostAddress&) const;
+ QHostAddress fromCIDRSuffix(Q_UINT32 suffix);
+
private:
QValueList<QHostAddress> _dns;
QStringList _dns_search;
Index: knetworkmanager-connection_setting_ipv4.cpp
===================================================================
--- knetworkmanager/src/knetworkmanager-connection_setting_ipv4.cpp (Revision 880482)
+++ knetworkmanager/src/knetworkmanager-connection_setting_ipv4.cpp (Revision 880676)
@@ -217,7 +217,7 @@
{
QValueList<QDBusData> cur_ip;
cur_ip.append(QDBusData::fromUInt32(swap32((*it).address.toIPv4Address())));
- cur_ip.append(QDBusData::fromUInt32(swap32((*it).netmask.toIPv4Address())));
+ cur_ip.append(QDBusData::fromUInt32(toCIDRSuffix((*it).netmask)));
if (!(*it).gateway.isNull())
cur_ip.append(QDBusData::fromUInt32(swap32((*it).gateway.toIPv4Address())));
ips.append(QDBusData::fromQValueList(cur_ip));
@@ -278,7 +277,12 @@
IPv4Address address;
address.address = swap32(cur_ip[0].toUInt32());
- address.netmask = swap32(cur_ip[1].toUInt32());
+
+ if (cur_ip[1].toUInt32() >= 0 && cur_ip[1].toUInt32() <= 32)
+ address.netmask = fromCIDRSuffix(cur_ip[1].toUInt32());
+ else
+ address.netmask = swap32(cur_ip[1].toUInt32());
+
if (cur_ip.size() > 2)
address.gateway = swap32(cur_ip[2].toUInt32());
@@ -292,3 +296,23 @@
if ((it = map.find(NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS)) != map.end())
_ignore_auto_dns = it.data().toBool();
}
+
+Q_UINT32 IPv4::toCIDRSuffix(const QHostAddress& adr) const
+{
+ Q_UINT32 netmask = adr.toIPv4Address();
+ Q_UINT32 suffix = 0;
+ while (netmask > 0)
+ {
+ suffix++;
+ netmask = netmask << 1;
+ }
+ return suffix;
+}
+
+QHostAddress IPv4::fromCIDRSuffix(Q_UINT32 suffix)
+{
+ Q_UINT32 netmask = 0xFFFFFFFF;
+ netmask = netmask << (32 - suffix);
+ return QHostAddress(netmask);
+}
+