diff --git a/TODO b/TODO index bd33bf9..e9b1677 100644 --- a/TODO +++ b/TODO @@ -1,94 +1,92 @@ == NetworkManager 1.0/1.2/1.4/1.6/1.8 == * New interfaces: - org.freedesktop.NetworkManager.DnsManager - org.freedesktop.NetworkManager.Device.Vxlan - org.freedesktop.NetworkManager.Device.MacSec - org.freedesktop.NetworkManager.Device.Dummy * New properties/slots/signals: - org.freedesktop.NetworkManager ------------------------------- - Methods: - GetAllDevices() - Reload() - CheckpointCreate() - CheckpointDestroy() - CheckpointRollback() - Properties: - GlobalDnsConfiguration - org.freedesktop.NetworkManager.Device ------------------------------------- - Methods: - Reapply() - GetAppliedConnection() - Properties: - LldpNeighbors - Real - org.freedesktop.NetworkManager.IP4Config ---------------------------------------- - Properties: - DnsPriority - WinServers - org.freedesktop.NetworkManager.IP6Config ---------------------------------------- - Properties: - DnsPriority * New settings and settings properties: - dcb setting ----------------- - completely - dummy setting ----------------- - completely - ip-tunnel setting ----------------- - completely - macsec setting ----------------- - completely - proxy setting ----------------- - completely - team-port setting ----------------- - completely - user setting ----------------- - completely - vxlan setting ----------------- - completely - ipv4 setting ----------------- - address-data - dad-timeout - dhcp-fqdn - dns-options - dns-priority - route-data - - route-metric - ipv6 setting ----------------- - addr-gen-mode - address-data - dad-timeout - dhcp-timeout - dhcp-fqdn - dns-options - route-data - - route-metrics - token diff --git a/autotests/settings/ipv4settingtest.cpp b/autotests/settings/ipv4settingtest.cpp index bc3c6b3..3e64df6 100644 --- a/autotests/settings/ipv4settingtest.cpp +++ b/autotests/settings/ipv4settingtest.cpp @@ -1,144 +1,148 @@ /* Copyright 2012-2013 Jan Grulich This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #include "ipv4settingtest.h" #include "generictypes.h" #include "settings/ipv4setting.h" #include #include #if NM_CHECK_VERSION(1, 0, 0) #include #else #include #endif #include void IPv4SettingTest::testSetting_data() { QTest::addColumn("method"); QTest::addColumn("dns"); QTest::addColumn("dnsSearch"); QTest::addColumn("addresses"); QTest::addColumn("routes"); + QTest::addColumn("routeMetric"); QTest::addColumn("ignoreAutoRoutes"); QTest::addColumn("ignoreAutoDns"); QTest::addColumn("dhcpClientId"); QTest::addColumn("dhcpSendHostname"); QTest::addColumn("dhcpHostname"); QTest::addColumn("neverDefault"); QTest::addColumn("mayFail"); QList dns; dns << inet_addr("10.0.0.1"); dns << inet_addr("10.0.1.1"); QStringList dnsSearch; dnsSearch << "foo.com"; dnsSearch << "foo.bar"; QList > addresses; QList addr; addr << inet_addr("192.168.1.1"); addr << 25; addr << 0; addresses << addr; QList > routes; QList routeAddr; routeAddr << inet_addr("192.168.1.1"); routeAddr << 25; routeAddr << inet_addr("192.169.1.1"); routeAddr << 25; addresses << routeAddr; QTest::newRow("setting1") << QString("auto") // method << dns // dns << dnsSearch // dnsSearch << addresses // addresses << routes // routes + << 100 // routeMetric << true // ignoreAutoRoutes << true // ignoreAutoDns << QString("home-test") // dhcpClientId << false // dhcpSendHostname << QString("home-test") // dhcpHostname << true // neverDefault << false; // mayFail } void IPv4SettingTest::testSetting() { QFETCH(QString, method); QFETCH(UIntList, dns); QFETCH(QStringList, dnsSearch); QFETCH(UIntListList, addresses); QFETCH(UIntListList, routes); + QFETCH(int, routeMetric); QFETCH(bool, ignoreAutoRoutes); QFETCH(bool, ignoreAutoDns); QFETCH(QString, dhcpClientId); QFETCH(bool, dhcpSendHostname); QFETCH(QString, dhcpHostname); QFETCH(bool, neverDefault); QFETCH(bool, mayFail); QVariantMap map; map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD), method); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS), QVariant::fromValue(dns)); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS_SEARCH), dnsSearch); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_ADDRESSES), QVariant::fromValue(addresses)); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTES), QVariant::fromValue(routes)); + map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTE_METRIC), routeMetric); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES), ignoreAutoRoutes); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS), ignoreAutoDns); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_CLIENT_ID), dhcpClientId); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME), dhcpSendHostname); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_HOSTNAME), dhcpHostname); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_NEVER_DEFAULT), neverDefault); map.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_MAY_FAIL), mayFail); NetworkManager::Ipv4Setting setting; setting.fromMap(map); QVariantMap map1 = setting.toMap(); // Will fail if set some default values, because they are skipped in toMap() method QVariantMap::const_iterator it = map.constBegin(); while (it != map.constEnd()) { if (it.key() != QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS) && it.key() != QLatin1String(NMQT_SETTING_IP4_CONFIG_ADDRESSES) && it.key() != QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTES)) { QCOMPARE(it.value(), map1.value(it.key())); } ++it; } QCOMPARE(map.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS)).value(), map1.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS)).value()); QCOMPARE(map.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ADDRESSES)).value(), map.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ADDRESSES)).value()); QCOMPARE(map.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTES)).value(), map.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTES)).value()); } QTEST_MAIN(IPv4SettingTest) diff --git a/autotests/settings/ipv6settingtest.cpp b/autotests/settings/ipv6settingtest.cpp index 9d9bc6e..4155ac0 100644 --- a/autotests/settings/ipv6settingtest.cpp +++ b/autotests/settings/ipv6settingtest.cpp @@ -1,174 +1,178 @@ /* Copyright 2012-2013 Jan Grulich This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #include "ipv6settingtest.h" #include "generictypes.h" #include "utils.h" #include "settings/ipv6setting.h" #include #include #if NM_CHECK_VERSION(1, 0, 0) #include #else #include #endif #include #include using namespace NetworkManager; //TODO: Test DNS,IPv6Addresses and IPv6Routes void IPv6SettingTest::testSetting_data() { QTest::addColumn("method"); QTest::addColumn("dns"); QTest::addColumn("dnsSearch"); QTest::addColumn("addresses"); QTest::addColumn("routes"); + QTest::addColumn("routeMetric"); QTest::addColumn("ignoreAutoRoutes"); QTest::addColumn("ignoreAutoDns"); QTest::addColumn("neverDefault"); QTest::addColumn("mayFail"); QTest::addColumn("privacy"); QStringList dnsSearch; dnsSearch << "foo.com"; dnsSearch << "foo.bar"; IpV6DBusNameservers dns; QByteArray dnsAddr1 = ipv6AddressFromHostAddress(QHostAddress("2607:f0d0:1002:0051:0000:0000:0000:0004")); dns << dnsAddr1; IpV6DBusAddressList addresses; IpV6DBusAddress address; address.address = ipv6AddressFromHostAddress(QHostAddress("2001:0db8:0000:0000:0000::1428:57ab")); address.prefix = 64; address.gateway = ipv6AddressFromHostAddress(QHostAddress("2001:0db8:0:f101::1")); addresses << address; IpV6DBusRouteList routes; IpV6DBusRoute route; route.destination = ipv6AddressFromHostAddress(QHostAddress("2001:0db8:0000:0000:0000::1428:57ab")); route.prefix = 48; route.nexthop = ipv6AddressFromHostAddress(QHostAddress("2001:638:500:101:2e0:81ff:fe24:37c6")); route.metric = 1024; routes << route; QTest::newRow("setting1") << QString("auto") // method << dns // dns << dnsSearch // dnsSearch << addresses // addresses << routes // routes + << 100 // routeMetric << true // ignoreAutoRoutes << true // ignoreAutoDns << true // neverDefault << false // mayFail << (quint32) 0; // privacy } void IPv6SettingTest::testSetting() { QFETCH(QString, method); QFETCH(IpV6DBusNameservers, dns); QFETCH(QStringList, dnsSearch); QFETCH(IpV6DBusAddressList, addresses); QFETCH(IpV6DBusRouteList, routes); + QFETCH(int, routeMetric); QFETCH(bool, ignoreAutoRoutes); QFETCH(bool, ignoreAutoDns); QFETCH(bool, neverDefault); QFETCH(bool, mayFail); QFETCH(quint32, privacy); QVariantMap map; map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), method); map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS), QVariant::fromValue(dns)); map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS_SEARCH), dnsSearch); map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES), QVariant::fromValue(addresses)); map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES), QVariant::fromValue(routes)); + map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC), routeMetric); map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES), ignoreAutoRoutes); map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS), ignoreAutoDns); map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT), neverDefault); map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_MAY_FAIL), mayFail); map.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY), privacy); NetworkManager::Ipv6Setting setting; setting.fromMap(map); QVariantMap map1 = setting.toMap(); // Will fail if set some default values, because they are skipped in toMap() method QVariantMap::const_iterator it = map.constBegin(); while (it != map.constEnd()) { if (it.key() != QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS) && it.key() != QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES) && it.key() != QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES)) { QCOMPARE(it.value(), map1.value(it.key())); } ++it; } IpV6DBusNameservers nameServers1 = map.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS)).value(); IpV6DBusNameservers nameServers2 = map1.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS)).value(); for (int i = 0; i < nameServers1.size(); i++) { QHostAddress dnsAddr1 = ipv6AddressAsHostAddress(nameServers1.at(i)); QHostAddress dnsAddr2 = ipv6AddressAsHostAddress(nameServers2.at(i)); QCOMPARE(dnsAddr1.protocol(), QAbstractSocket::IPv6Protocol); QCOMPARE(dnsAddr2.protocol(), QAbstractSocket::IPv6Protocol); QCOMPARE(dnsAddr1, dnsAddr2); } IpV6DBusAddressList addresses1 = map.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES)).value(); IpV6DBusAddressList addresses2 = map1.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES)).value(); for (int i = 0; i < addresses1.size(); i++) { QHostAddress addr1(QString(addresses1.at(i).address)); QHostAddress addr2(QString(addresses2.at(i).address)); QHostAddress gateway1(QString(addresses1.at(i).gateway)); QHostAddress gateway2(QString(addresses2.at(i).gateway)); QCOMPARE(addr1, addr2); QCOMPARE(addresses1.at(i).prefix, addresses2.at(i).prefix); QCOMPARE(gateway1, gateway2); } IpV6DBusRouteList routes1 = map.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES)).value(); IpV6DBusRouteList routes2 = map1.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES)).value(); for (int i = 0; i < routes1.size(); i++) { QHostAddress destination1(QString(routes1.at(i).destination)); QHostAddress destination2(QString(routes2.at(i).destination)); QHostAddress nexthop1(QString(routes1.at(i).nexthop)); QHostAddress nexthop2(QString(routes2.at(i).nexthop)); QCOMPARE(destination1, destination2); QCOMPARE(routes1.at(i).prefix, routes2.at(i).prefix); QCOMPARE(nexthop1, nexthop2); QCOMPARE(routes1.at(i).metric, routes2.at(i).metric); } } QTEST_MAIN(IPv6SettingTest) diff --git a/src/settings/ipv4setting.cpp b/src/settings/ipv4setting.cpp index 5bffbff..efe813f 100644 --- a/src/settings/ipv4setting.cpp +++ b/src/settings/ipv4setting.cpp @@ -1,494 +1,519 @@ /* Copyright 2012-2013 Jan Grulich Copyright 2013 Daniel Nicoletti This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #include "ipv4setting.h" #include "ipv4setting_p.h" #include "generictypes.h" #include #if !NM_CHECK_VERSION(1, 0, 0) #include #endif #include NetworkManager::Ipv4SettingPrivate::Ipv4SettingPrivate() : name(NMQT_SETTING_IP4_CONFIG_SETTING_NAME) , method(NetworkManager::Ipv4Setting::Automatic) + , routeMetric(-1) , ignoreAutoRoutes(false) , ignoreAutoDns(false) , dhcpSendHostname(true) , neverDefault(false) , mayFail(true) { } NetworkManager::Ipv4Setting::Ipv4Setting() : Setting(Setting::Ipv4) , d_ptr(new Ipv4SettingPrivate()) { } NetworkManager::Ipv4Setting::Ipv4Setting(const Ptr &other) : Setting(other) , d_ptr(new Ipv4SettingPrivate()) { setMethod(other->method()); setDns(other->dns()); setDnsSearch(other->dnsSearch()); setAddresses(other->addresses()); setRoutes(other->routes()); + setRouteMetric(other->routeMetric()); setIgnoreAutoRoutes(other->ignoreAutoRoutes()); setIgnoreAutoDns(other->ignoreAutoDns()); setDhcpClientId(other->dhcpClientId()); setDhcpSendHostname(other->dhcpSendHostname()); setDhcpHostname(other->dhcpHostname()); setNeverDefault(other->neverDefault()); setMayFail(other->mayFail()); } NetworkManager::Ipv4Setting::~Ipv4Setting() { delete d_ptr; } QString NetworkManager::Ipv4Setting::name() const { Q_D(const Ipv4Setting); return d->name; } void NetworkManager::Ipv4Setting::setMethod(NetworkManager::Ipv4Setting::ConfigMethod type) { Q_D(Ipv4Setting); d->method = type; } NetworkManager::Ipv4Setting::ConfigMethod NetworkManager::Ipv4Setting::method() const { Q_D(const Ipv4Setting); return d->method; } void NetworkManager::Ipv4Setting::setDns(const QList &dns) { Q_D(Ipv4Setting); d->dns = dns; } QList NetworkManager::Ipv4Setting::dns() const { Q_D(const Ipv4Setting); return d->dns; } void NetworkManager::Ipv4Setting::setDnsSearch(const QStringList &domains) { Q_D(Ipv4Setting); d->dnsSearch = domains; } QStringList NetworkManager::Ipv4Setting::dnsSearch() const { Q_D(const Ipv4Setting); return d->dnsSearch; } void NetworkManager::Ipv4Setting::setAddresses(const QList &ipv4addresses) { Q_D(Ipv4Setting); d->addresses = ipv4addresses; } QList< NetworkManager::IpAddress > NetworkManager::Ipv4Setting::addresses() const { Q_D(const Ipv4Setting); return d->addresses; } void NetworkManager::Ipv4Setting::setRoutes(const QList &ipv4routes) { Q_D(Ipv4Setting); d->routes = ipv4routes; } QList< NetworkManager::IpRoute > NetworkManager::Ipv4Setting::routes() const { Q_D(const Ipv4Setting); return d->routes; } +void NetworkManager::Ipv4Setting::setRouteMetric(int metric) +{ + Q_D(Ipv4Setting); + + d->routeMetric = metric; +} + +int NetworkManager::Ipv4Setting::routeMetric() const +{ + Q_D(const Ipv4Setting); + + return d->routeMetric; +} + void NetworkManager::Ipv4Setting::setIgnoreAutoRoutes(bool ignore) { Q_D(Ipv4Setting); d->ignoreAutoRoutes = ignore; } bool NetworkManager::Ipv4Setting::ignoreAutoRoutes() const { Q_D(const Ipv4Setting); return d->ignoreAutoRoutes; } void NetworkManager::Ipv4Setting::setIgnoreAutoDns(bool ignore) { Q_D(Ipv4Setting); d->ignoreAutoDns = ignore; } bool NetworkManager::Ipv4Setting::ignoreAutoDns() const { Q_D(const Ipv4Setting); return d->ignoreAutoDns; } void NetworkManager::Ipv4Setting::setDhcpClientId(const QString &id) { Q_D(Ipv4Setting); d->dhcpClientId = id; } QString NetworkManager::Ipv4Setting::dhcpClientId() const { Q_D(const Ipv4Setting); return d->dhcpClientId; } void NetworkManager::Ipv4Setting::setDhcpSendHostname(bool send) { Q_D(Ipv4Setting); d->dhcpSendHostname = send; } bool NetworkManager::Ipv4Setting::dhcpSendHostname() const { Q_D(const Ipv4Setting); return d->dhcpSendHostname; } void NetworkManager::Ipv4Setting::setDhcpHostname(const QString &hostname) { Q_D(Ipv4Setting); d->dhcpHostname = hostname; } QString NetworkManager::Ipv4Setting::dhcpHostname() const { Q_D(const Ipv4Setting); return d->dhcpHostname; } void NetworkManager::Ipv4Setting::setNeverDefault(bool neverDefault) { Q_D(Ipv4Setting); d->neverDefault = neverDefault; } bool NetworkManager::Ipv4Setting::neverDefault() const { Q_D(const Ipv4Setting); return d->neverDefault; } void NetworkManager::Ipv4Setting::setMayFail(bool mayFail) { Q_D(Ipv4Setting); d->mayFail = mayFail; } bool NetworkManager::Ipv4Setting::mayFail() const { Q_D(const Ipv4Setting); return d->mayFail; } void NetworkManager::Ipv4Setting::fromMap(const QVariantMap &setting) { if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD))) { const QString methodType = setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD)).toString(); if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD_AUTO)) { setMethod(Automatic); } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL)) { setMethod(LinkLocal); } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD_MANUAL)) { setMethod(Manual); } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD_SHARED)) { setMethod(Shared); } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD_DISABLED)) { setMethod(Disabled); } else { setMethod(Automatic); } } if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS))) { QList dbusDns; QList temp; if (setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS)).canConvert()) { QDBusArgument dnsArg = setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS)).value(); temp = qdbus_cast >(dnsArg); } else { temp = setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS)).value >(); } Q_FOREACH (const uint utmp, temp) { QHostAddress tmpHost(ntohl(utmp)); dbusDns << tmpHost; } setDns(dbusDns); } if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS_SEARCH))) { setDnsSearch(setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS_SEARCH)).toStringList()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_ADDRESSES))) { QList addresses; QList > temp; if (setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ADDRESSES)).canConvert< QDBusArgument>()) { QDBusArgument addressArg = setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ADDRESSES)).value(); temp = qdbus_cast > >(addressArg); } else { temp = setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ADDRESSES)).value > >(); } Q_FOREACH (const QList &uintList, temp) { if (uintList.count() != 3) { continue; } NetworkManager::IpAddress address; address.setIp(QHostAddress(ntohl(uintList.at(0)))); address.setPrefixLength(uintList.at(1)); address.setGateway(QHostAddress(ntohl(uintList.at(2)))); if (!address.isValid()) { continue; } addresses << address; } setAddresses(addresses); } if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTES))) { QList routes; QList > temp; if (setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTES)).canConvert< QDBusArgument>()) { QDBusArgument routeArg = setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTES)).value(); temp = qdbus_cast > >(routeArg); } else { temp = setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTES)).value > >(); } Q_FOREACH (const QList &uintList, temp) { if (uintList.count() != 4) { continue; } NetworkManager::IpRoute route; route.setIp(QHostAddress(ntohl(uintList.at(0)))); route.setPrefixLength(uintList.at(1)); route.setNextHop(QHostAddress(ntohl(uintList.at(2)))); route.setMetric((quint32)uintList.at(3)); if (!route.isValid()) { continue; } routes << route; } if (!routes.isEmpty()) { setRoutes(routes); } } + if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTE_METRIC))) { + setRouteMetric(setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTE_METRIC)).toInt()); + } + if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES))) { setIgnoreAutoRoutes(setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES)).toBool()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS))) { setIgnoreAutoDns(setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS)).toBool()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_CLIENT_ID))) { setDhcpClientId(setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_CLIENT_ID)).toString()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME))) { setDhcpSendHostname(setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME)).toBool()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_HOSTNAME))) { setDhcpHostname(setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_HOSTNAME)).toString()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_NEVER_DEFAULT))) { setNeverDefault(setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_NEVER_DEFAULT)).toBool()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP4_CONFIG_MAY_FAIL))) { setMayFail(setting.value(QLatin1String(NMQT_SETTING_IP4_CONFIG_MAY_FAIL)).toBool()); } } QVariantMap NetworkManager::Ipv4Setting::toMap() const { QVariantMap setting; if (method() == Automatic) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD_AUTO)); } else if (method() == LinkLocal) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL)); } else if (method() == Manual) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD_MANUAL)); } else if (method() == Shared) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD_SHARED)); } else if (method() == Disabled) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP4_CONFIG_METHOD_DISABLED)); } if (!dns().isEmpty()) { QList dbusDns; Q_FOREACH (const QHostAddress & dns, dns()) { dbusDns << htonl(dns.toIPv4Address()); } setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS), QVariant::fromValue(dbusDns)); } if (!dnsSearch().isEmpty()) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_DNS_SEARCH), dnsSearch()); } if (!addresses().isEmpty()) { QList > dbusAddresses; Q_FOREACH (const NetworkManager::IpAddress & addr, addresses()) { QList dbusAddress; dbusAddress << htonl(addr.ip().toIPv4Address()) << addr.prefixLength() << htonl(addr.gateway().toIPv4Address()); dbusAddresses << dbusAddress; } setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_ADDRESSES), QVariant::fromValue(dbusAddresses)); } if (!routes().isEmpty()) { QList > dbusRoutes; Q_FOREACH (const NetworkManager::IpRoute & route, routes()) { QList dbusRoute; dbusRoute << htonl(route.ip().toIPv4Address()) << route.prefixLength() << htonl(route.nextHop().toIPv4Address()) << route.metric(); dbusRoutes << dbusRoute; } setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTES), QVariant::fromValue(dbusRoutes)); } + if(routeMetric() >= 0) { + setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_ROUTE_METRIC), routeMetric()); + } + if (ignoreAutoRoutes()) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES), ignoreAutoRoutes()); } if (ignoreAutoDns()) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS), ignoreAutoDns()); } if (!dhcpClientId().isEmpty()) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_CLIENT_ID), dhcpClientId()); } if (!dhcpSendHostname()) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME), dhcpSendHostname()); } if (!dhcpHostname().isEmpty()) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_DHCP_HOSTNAME), dhcpHostname()); } if (neverDefault()) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_NEVER_DEFAULT), neverDefault()); } if (!mayFail()) { setting.insert(QLatin1String(NMQT_SETTING_IP4_CONFIG_MAY_FAIL), mayFail()); } return setting; } QDebug NetworkManager::operator <<(QDebug dbg, const NetworkManager::Ipv4Setting &setting) { dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n'; dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; dbg.nospace() << NMQT_SETTING_IP4_CONFIG_METHOD << ": " << setting.method() << '\n'; dbg.nospace() << NMQT_SETTING_IP4_CONFIG_DNS << ":\n"; Q_FOREACH (const QHostAddress & address, setting.dns()) { dbg.nospace() << address.toString() << '\n'; } dbg.nospace() << NMQT_SETTING_IP4_CONFIG_DNS_SEARCH << ": " << setting.dnsSearch() << '\n'; dbg.nospace() << NMQT_SETTING_IP4_CONFIG_ADDRESSES << '\n'; Q_FOREACH (const NetworkManager::IpAddress & address, setting.addresses()) { dbg.nospace() << address.ip() << ": " << address.gateway() << ": " << address.netmask() << '\n'; } dbg.nospace() << NMQT_SETTING_IP4_CONFIG_ROUTES << '\n'; Q_FOREACH (const NetworkManager::IpRoute & route, setting.routes()) { dbg.nospace() << route.ip() << ": " << route.netmask() << ": " << route.nextHop() << ": " << route.metric() << '\n'; } + dbg.nospace() << NMQT_SETTING_IP4_CONFIG_ROUTE_METRIC << ":" << setting.routeMetric() << '\n'; dbg.nospace() << NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES << ": " << setting.ignoreAutoRoutes() << '\n'; dbg.nospace() << NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS << ": " << setting.ignoreAutoDns() << '\n'; dbg.nospace() << NMQT_SETTING_IP4_CONFIG_DHCP_CLIENT_ID << ": " << setting.dhcpClientId() << '\n'; dbg.nospace() << NMQT_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME << ": " << setting.dhcpSendHostname() << '\n'; dbg.nospace() << NMQT_SETTING_IP4_CONFIG_DHCP_HOSTNAME << ": " << setting.dhcpHostname() << '\n'; dbg.nospace() << NMQT_SETTING_IP4_CONFIG_NEVER_DEFAULT << ": " << setting.neverDefault() << '\n'; dbg.nospace() << NMQT_SETTING_IP4_CONFIG_MAY_FAIL << ": " << setting.mayFail() << '\n'; return dbg.maybeSpace(); } diff --git a/src/settings/ipv4setting.h b/src/settings/ipv4setting.h index 9f6fcf3..53bf7a4 100644 --- a/src/settings/ipv4setting.h +++ b/src/settings/ipv4setting.h @@ -1,147 +1,150 @@ /* Copyright 2012-2013 Jan Grulich This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #ifndef NETWORKMANAGERQT_IPV4_SETTING_H #define NETWORKMANAGERQT_IPV4_SETTING_H #include "ipconfig.h" #include #include "setting.h" #include #include #if NM_CHECK_VERSION(1, 0, 0) #define NMQT_SETTING_IP4_CONFIG_SETTING_NAME NM_SETTING_IP4_CONFIG_SETTING_NAME #define NMQT_SETTING_IP4_CONFIG_METHOD NM_SETTING_IP_CONFIG_METHOD #define NMQT_SETTING_IP4_CONFIG_DNS NM_SETTING_IP_CONFIG_DNS #define NMQT_SETTING_IP4_CONFIG_DNS_SEARCH NM_SETTING_IP_CONFIG_DNS_SEARCH #define NMQT_SETTING_IP4_CONFIG_ADDRESSES NM_SETTING_IP_CONFIG_ADDRESSES #define NMQT_SETTING_IP4_CONFIG_GATEWAY NM_SETTING_IP_CONFIG_GATEWAY #define NMQT_SETTING_IP4_CONFIG_ROUTES NM_SETTING_IP_CONFIG_ROUTES #define NMQT_SETTING_IP4_CONFIG_ROUTE_METRIC NM_SETTING_IP_CONFIG_ROUTE_METRIC #define NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES #define NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS #define NMQT_SETTING_IP4_CONFIG_DHCP_HOSTNAME NM_SETTING_IP_CONFIG_DHCP_HOSTNAME #define NMQT_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME #define NMQT_SETTING_IP4_CONFIG_NEVER_DEFAULT NM_SETTING_IP_CONFIG_NEVER_DEFAULT #define NMQT_SETTING_IP4_CONFIG_MAY_FAIL NM_SETTING_IP_CONFIG_MAY_FAIL #define NMQT_SETTING_IP4_CONFIG_DHCP_CLIENT_ID NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID #define NMQT_SETTING_IP4_CONFIG_METHOD_AUTO NM_SETTING_IP4_CONFIG_METHOD_AUTO #define NMQT_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL #define NMQT_SETTING_IP4_CONFIG_METHOD_MANUAL NM_SETTING_IP4_CONFIG_METHOD_MANUAL #define NMQT_SETTING_IP4_CONFIG_METHOD_SHARED NM_SETTING_IP4_CONFIG_METHOD_SHARED #define NMQT_SETTING_IP4_CONFIG_METHOD_DISABLED NM_SETTING_IP4_CONFIG_METHOD_DISABLED #else #define NMQT_SETTING_IP4_CONFIG_SETTING_NAME NM_SETTING_IP4_CONFIG_SETTING_NAME #define NMQT_SETTING_IP4_CONFIG_METHOD NM_SETTING_IP4_CONFIG_METHOD #define NMQT_SETTING_IP4_CONFIG_DNS NM_SETTING_IP4_CONFIG_DNS #define NMQT_SETTING_IP4_CONFIG_DNS_SEARCH NM_SETTING_IP4_CONFIG_DNS_SEARCH #define NMQT_SETTING_IP4_CONFIG_ADDRESSES NM_SETTING_IP4_CONFIG_ADDRESSES #define NMQT_SETTING_IP4_CONFIG_GATEWAY NM_SETTING_IP4_CONFIG_GATEWAY #define NMQT_SETTING_IP4_CONFIG_ROUTES NM_SETTING_IP4_CONFIG_ROUTES #define NMQT_SETTING_IP4_CONFIG_ROUTE_METRIC NM_SETTING_IP4_CONFIG_ROUTE_METRIC #define NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES #define NMQT_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS #define NMQT_SETTING_IP4_CONFIG_DHCP_HOSTNAME NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME #define NMQT_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME #define NMQT_SETTING_IP4_CONFIG_NEVER_DEFAULT NM_SETTING_IP4_CONFIG_NEVER_DEFAULT #define NMQT_SETTING_IP4_CONFIG_MAY_FAIL NM_SETTING_IP4_CONFIG_MAY_FAIL #define NMQT_SETTING_IP4_CONFIG_DHCP_CLIENT_ID NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID #define NMQT_SETTING_IP4_CONFIG_METHOD_AUTO NM_SETTING_IP4_CONFIG_METHOD_AUTO #define NMQT_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL #define NMQT_SETTING_IP4_CONFIG_METHOD_MANUAL NM_SETTING_IP4_CONFIG_METHOD_MANUAL #define NMQT_SETTING_IP4_CONFIG_METHOD_SHARED NM_SETTING_IP4_CONFIG_METHOD_SHARED #define NMQT_SETTING_IP4_CONFIG_METHOD_DISABLED NM_SETTING_IP4_CONFIG_METHOD_DISABLED #endif namespace NetworkManager { class Ipv4SettingPrivate; /** * Represents ipv4 setting */ class NETWORKMANAGERQT_EXPORT Ipv4Setting : public Setting { public: typedef QSharedPointer Ptr; typedef QList List; enum ConfigMethod {Automatic, LinkLocal, Manual, Shared, Disabled}; Ipv4Setting(); explicit Ipv4Setting(const Ptr &other); ~Ipv4Setting(); QString name() const Q_DECL_OVERRIDE; void setMethod(ConfigMethod method); ConfigMethod method() const; void setDns(const QList &dns); QList dns() const; void setDnsSearch(const QStringList &domains); QStringList dnsSearch() const; void setAddresses(const QList &ipv4addresses); QList addresses() const; void setRoutes(const QList &ipv4routes); QList routes() const; + void setRouteMetric(int metric); + int routeMetric() const; + void setIgnoreAutoRoutes(bool ignore); bool ignoreAutoRoutes() const; void setIgnoreAutoDns(bool ignore); bool ignoreAutoDns() const; void setDhcpClientId(const QString &id); QString dhcpClientId() const; void setDhcpSendHostname(bool send); bool dhcpSendHostname() const; void setDhcpHostname(const QString &hostname); QString dhcpHostname() const; void setNeverDefault(bool neverDefault); bool neverDefault() const; void setMayFail(bool mayFail); bool mayFail() const; void fromMap(const QVariantMap &setting) Q_DECL_OVERRIDE; QVariantMap toMap() const Q_DECL_OVERRIDE; protected: Ipv4SettingPrivate *d_ptr; private: Q_DECLARE_PRIVATE(Ipv4Setting) }; NETWORKMANAGERQT_EXPORT QDebug operator<<(QDebug dbg, const Ipv4Setting &setting); } #endif // NETWORKMANAGERQT_IPV4_SETTING_H diff --git a/src/settings/ipv4setting_p.h b/src/settings/ipv4setting_p.h index ae60b12..8cc91bb 100644 --- a/src/settings/ipv4setting_p.h +++ b/src/settings/ipv4setting_p.h @@ -1,53 +1,54 @@ /* Copyright 2012-2013 Jan Grulich This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #ifndef NETWORKMANAGERQT_IPV4_SETTING_P_H #define NETWORKMANAGERQT_IPV4_SETTING_P_H #include "../ipconfig.h" #include #include namespace NetworkManager { class Ipv4SettingPrivate { public: Ipv4SettingPrivate(); QString name; NetworkManager::Ipv4Setting::ConfigMethod method; QList dns; QStringList dnsSearch; QList addresses; QList routes; + int routeMetric; bool ignoreAutoRoutes; bool ignoreAutoDns; QString dhcpClientId; bool dhcpSendHostname; QString dhcpHostname; bool neverDefault; bool mayFail; }; } #endif // NETWORKMANAGERQT_IPV4_SETTING_P_H diff --git a/src/settings/ipv6setting.cpp b/src/settings/ipv6setting.cpp index e7ddbd5..4ab5d8d 100644 --- a/src/settings/ipv6setting.cpp +++ b/src/settings/ipv6setting.cpp @@ -1,441 +1,466 @@ /* Copyright 2012-2013 Jan Grulich Copyright 2013 Daniel Nicoletti This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #include "ipv6setting.h" #include "ipv6setting_p.h" #include "utils.h" #include "generictypes.h" #include "../ipconfig.h" #include #if !NM_CHECK_VERSION(1, 0, 0) #include #endif NetworkManager::Ipv6SettingPrivate::Ipv6SettingPrivate() : name(NMQT_SETTING_IP6_CONFIG_SETTING_NAME) , method(NetworkManager::Ipv6Setting::Automatic) + , routeMetric(-1) , ignoreAutoRoutes(false) , ignoreAutoDns(false) , neverDefault(false) , mayFail(true) , privacy(NetworkManager::Ipv6Setting::Unknown) { } NetworkManager::Ipv6Setting::Ipv6Setting() : Setting(Setting::Ipv6) , d_ptr(new Ipv6SettingPrivate()) { } NetworkManager::Ipv6Setting::Ipv6Setting(const Ptr &other) : Setting(other) , d_ptr(new Ipv6SettingPrivate()) { setMethod(other->method()); setDns(other->dns()); setDnsSearch(other->dnsSearch()); setAddresses(other->addresses()); setRoutes(other->routes()); + setRouteMetric(other->routeMetric()); setIgnoreAutoRoutes(other->ignoreAutoRoutes()); setIgnoreAutoDns(other->ignoreAutoDns()); setNeverDefault(other->neverDefault()); setMayFail(other->mayFail()); } NetworkManager::Ipv6Setting::~Ipv6Setting() { delete d_ptr; } QString NetworkManager::Ipv6Setting::name() const { Q_D(const Ipv6Setting); return d->name; } void NetworkManager::Ipv6Setting::setMethod(NetworkManager::Ipv6Setting::ConfigMethod type) { Q_D(Ipv6Setting); d->method = type; } NetworkManager::Ipv6Setting::ConfigMethod NetworkManager::Ipv6Setting::method() const { Q_D(const Ipv6Setting); return d->method; } void NetworkManager::Ipv6Setting::setDns(const QList &dns) { Q_D(Ipv6Setting); d->dns = dns; } QList NetworkManager::Ipv6Setting::dns() const { Q_D(const Ipv6Setting); return d->dns; } void NetworkManager::Ipv6Setting::setDnsSearch(const QStringList &domains) { Q_D(Ipv6Setting); d->dnsSearch = domains; } QStringList NetworkManager::Ipv6Setting::dnsSearch() const { Q_D(const Ipv6Setting); return d->dnsSearch; } void NetworkManager::Ipv6Setting::setAddresses(const QList ipv6addresses) { Q_D(Ipv6Setting); d->addresses = ipv6addresses; } QList< NetworkManager::IpAddress > NetworkManager::Ipv6Setting::addresses() const { Q_D(const Ipv6Setting); return d->addresses; } void NetworkManager::Ipv6Setting::setRoutes(const QList< NetworkManager::IpRoute > ipv6routes) { Q_D(Ipv6Setting); d->routes = ipv6routes; } QList NetworkManager::Ipv6Setting::routes() const { Q_D(const Ipv6Setting); return d->routes; } +void NetworkManager::Ipv6Setting::setRouteMetric(int metric) +{ + Q_D(Ipv6Setting); + + d->routeMetric = metric; +} + +int NetworkManager::Ipv6Setting::routeMetric() const +{ + Q_D(const Ipv6Setting); + + return d->routeMetric; +} + void NetworkManager::Ipv6Setting::setIgnoreAutoRoutes(bool ignore) { Q_D(Ipv6Setting); d->ignoreAutoRoutes = ignore; } bool NetworkManager::Ipv6Setting::ignoreAutoRoutes() const { Q_D(const Ipv6Setting); return d->ignoreAutoRoutes; } void NetworkManager::Ipv6Setting::setIgnoreAutoDns(bool ignore) { Q_D(Ipv6Setting); d->ignoreAutoDns = ignore; } bool NetworkManager::Ipv6Setting::ignoreAutoDns() const { Q_D(const Ipv6Setting); return d->ignoreAutoDns; } void NetworkManager::Ipv6Setting::setNeverDefault(bool neverDefault) { Q_D(Ipv6Setting); d->neverDefault = neverDefault; } bool NetworkManager::Ipv6Setting::neverDefault() const { Q_D(const Ipv6Setting); return d->neverDefault; } void NetworkManager::Ipv6Setting::setMayFail(bool mayFail) { Q_D(Ipv6Setting); d->mayFail = mayFail; } bool NetworkManager::Ipv6Setting::mayFail() const { Q_D(const Ipv6Setting); return d->mayFail; } void NetworkManager::Ipv6Setting::setPrivacy(IPv6Privacy privacy) { Q_D(Ipv6Setting); d->privacy = privacy; } NetworkManager::Ipv6Setting::IPv6Privacy NetworkManager::Ipv6Setting::privacy() const { Q_D(const Ipv6Setting); return d->privacy; } void NetworkManager::Ipv6Setting::fromMap(const QVariantMap &setting) { if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD))) { const QString methodType = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD)).toString(); if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_AUTO)) { setMethod(Automatic); } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_DHCP)) { setMethod(Dhcp); } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL)) { setMethod(LinkLocal); } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_MANUAL)) { setMethod(Manual); } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_IGNORE)) { setMethod(Ignored); } else { setMethod(Automatic); } } if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS))) { QList dbusDns; QList temp; if (setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS)).canConvert()) { QDBusArgument dnsArg = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS)).value< QDBusArgument>(); temp = qdbus_cast >(dnsArg); } else { temp = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS)).value >(); } Q_FOREACH (const QByteArray & utmp, temp) { dbusDns << ipv6AddressAsHostAddress(utmp); } setDns(dbusDns); } if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS_SEARCH))) { setDnsSearch(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS_SEARCH)).toStringList()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES))) { QList temp; if (setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS)).canConvert()) { QDBusArgument addressArg = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES)).value< QDBusArgument>(); temp = qdbus_cast >(addressArg); } else { temp = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES)).value >(); } QList addresses; Q_FOREACH (const IpV6DBusAddress & addressMap, temp) { if (addressMap.address.isEmpty() || !addressMap.prefix || addressMap.gateway.isEmpty()) { continue; } NetworkManager::IpAddress address; address.setIp(ipv6AddressAsHostAddress(addressMap.address)); address.setPrefixLength(addressMap.prefix); address.setGateway(ipv6AddressAsHostAddress(addressMap.gateway)); if (!address.isValid()) { continue; } addresses << address; } setAddresses(addresses); } if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES))) { QList temp; if (setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES)).canConvert()) { QDBusArgument routeArg = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES)).value< QDBusArgument>(); temp = qdbus_cast >(routeArg); } else { temp = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES)).value >(); } QList routes; Q_FOREACH (const IpV6DBusRoute & routeMap, temp) { if (routeMap.destination.isEmpty() || !routeMap.prefix || routeMap.nexthop.isEmpty() || !routeMap.metric) { continue; } NetworkManager::IpRoute route; route.setIp(ipv6AddressAsHostAddress(routeMap.destination)); route.setPrefixLength(routeMap.prefix); route.setNextHop(ipv6AddressAsHostAddress(routeMap.nexthop)); route.setMetric(routeMap.metric); if (!route.isValid()) { continue; } routes << route; } setRoutes(routes); } + if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC))) { + setRouteMetric(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC)).toInt()); + } + if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES))) { setIgnoreAutoRoutes(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES)).toBool()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS))) { setIgnoreAutoDns(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS)).toBool()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT))) { setNeverDefault(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT)).toBool()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_MAY_FAIL))) { setMayFail(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_MAY_FAIL)).toBool()); } if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY))) { setPrivacy((IPv6Privacy)setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY)).toUInt()); } } QVariantMap NetworkManager::Ipv6Setting::toMap() const { QVariantMap setting; if (method() == Automatic) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_AUTO)); } else if (method() == Dhcp) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_DHCP)); } else if (method() == LinkLocal) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL)); } else if (method() == Manual) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_MANUAL)); } else if (method() == Ignored) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_IGNORE)); } if (!dns().isEmpty()) { QList dbusDns; Q_FOREACH (const QHostAddress & dns, dns()) { dbusDns << ipv6AddressFromHostAddress(dns); } setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS), QVariant::fromValue(dbusDns)); } if (!dnsSearch().isEmpty()) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS_SEARCH), dnsSearch()); } if (!addresses().isEmpty()) { QList dbusAddresses; Q_FOREACH (const NetworkManager::IpAddress & addr, addresses()) { IpV6DBusAddress dbusAddress; dbusAddress.address = ipv6AddressFromHostAddress(addr.ip()); dbusAddress.prefix = addr.prefixLength(); dbusAddress.gateway = ipv6AddressFromHostAddress(addr.gateway()); dbusAddresses << dbusAddress; } setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES), QVariant::fromValue(dbusAddresses)); } if (!routes().isEmpty()) { QList dbusRoutes; Q_FOREACH (const NetworkManager::IpRoute & route, routes()) { IpV6DBusRoute dbusRoute; dbusRoute.destination = ipv6AddressFromHostAddress(route.ip()); dbusRoute.prefix = route.prefixLength(); dbusRoute.nexthop = ipv6AddressFromHostAddress(route.nextHop()); dbusRoute.metric = route.metric(); dbusRoutes << dbusRoute; } setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES), QVariant::fromValue(dbusRoutes)); } + if(routeMetric() >= 0) { + setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC), routeMetric()); + } + if (ignoreAutoRoutes()) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES), ignoreAutoRoutes()); } if (ignoreAutoDns()) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS), ignoreAutoDns()); } if (neverDefault()) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT), neverDefault()); } if (!mayFail()) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_MAY_FAIL), mayFail()); } if (privacy() != Unknown) { setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY), privacy()); } return setting; } QDebug NetworkManager::operator <<(QDebug dbg, const NetworkManager::Ipv6Setting &setting) { dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n'; dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; dbg.nospace() << NMQT_SETTING_IP6_CONFIG_METHOD << ": " << setting.method() << '\n'; dbg.nospace() << NMQT_SETTING_IP6_CONFIG_DNS << '\n'; Q_FOREACH (const QHostAddress & address, setting.dns()) { dbg.nospace() << address.toString() << '\n'; } dbg.nospace() << NMQT_SETTING_IP6_CONFIG_DNS_SEARCH << ": " << setting.dnsSearch() << '\n'; dbg.nospace() << NMQT_SETTING_IP6_CONFIG_ADDRESSES << '\n'; Q_FOREACH (const NetworkManager::IpAddress & address, setting.addresses()) { dbg.nospace() << address.ip().toString() << ": " << address.gateway().toString() << ": " << address.netmask() << '\n'; } dbg.nospace() << NMQT_SETTING_IP6_CONFIG_ROUTES << '\n'; Q_FOREACH (const NetworkManager::IpRoute & route, setting.routes()) { dbg.nospace() << route.ip().toString() << ": " << route.metric() << ": " << route.nextHop().toString() << ": " << route.metric() << '\n'; } + dbg.nospace() << NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC << ":" << setting.routeMetric() << '\n'; dbg.nospace() << NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES << ": " << setting.ignoreAutoRoutes() << '\n'; dbg.nospace() << NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS << ": " << setting.ignoreAutoDns() << '\n'; dbg.nospace() << NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT << ": " << setting.neverDefault() << '\n'; dbg.nospace() << NMQT_SETTING_IP6_CONFIG_MAY_FAIL << ": " << setting.mayFail() << '\n'; dbg.nospace() << NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY << ": " << setting.privacy() << '\n'; return dbg.maybeSpace(); } diff --git a/src/settings/ipv6setting.h b/src/settings/ipv6setting.h index b7d087d..a2b7420 100644 --- a/src/settings/ipv6setting.h +++ b/src/settings/ipv6setting.h @@ -1,146 +1,149 @@ /* Copyright 2012-2013 Jan Grulich This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #ifndef NETWORKMANAGERQT_IPV6_SETTING_H #define NETWORKMANAGERQT_IPV6_SETTING_H #include "ipconfig.h" #include #include "setting.h" #include #include #if NM_CHECK_VERSION(1, 0, 0) #define NMQT_SETTING_IP6_CONFIG_SETTING_NAME NM_SETTING_IP6_CONFIG_SETTING_NAME #define NMQT_SETTING_IP6_CONFIG_METHOD NM_SETTING_IP_CONFIG_METHOD #define NMQT_SETTING_IP6_CONFIG_DNS NM_SETTING_IP_CONFIG_DNS #define NMQT_SETTING_IP6_CONFIG_DNS_SEARCH NM_SETTING_IP_CONFIG_DNS_SEARCH #define NMQT_SETTING_IP6_CONFIG_ADDRESSES NM_SETTING_IP_CONFIG_ADDRESSES #define NMQT_SETTING_IP6_CONFIG_GATEWAY NM_SETTING_IP_CONFIG_GATEWAY #define NMQT_SETTING_IP6_CONFIG_ROUTES NM_SETTING_IP_CONFIG_ROUTES #define NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC NM_SETTING_IP_CONFIG_ROUTE_METRIC #define NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES #define NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS #define NMQT_SETTING_IP6_CONFIG_DHCP_HOSTNAME NM_SETTING_IP_CONFIG_DHCP_HOSTNAME #define NMQT_SETTING_IP6_CONFIG_DHCP_SEND_HOSTNAME NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME #define NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT NM_SETTING_IP_CONFIG_NEVER_DEFAULT #define NMQT_SETTING_IP6_CONFIG_MAY_FAIL NM_SETTING_IP_CONFIG_MAY_FAIL #define NMQT_SETTING_IP6_CONFIG_DHCP_CLIENT_ID NM_SETTING_IP6_CONFIG_DHCP_CLIENT_ID #define NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY NM_SETTING_IP6_CONFIG_IP6_PRIVACY #define NMQT_SETTING_IP6_CONFIG_METHOD_IGNORE NM_SETTING_IP6_CONFIG_METHOD_IGNORE #define NMQT_SETTING_IP6_CONFIG_METHOD_AUTO NM_SETTING_IP6_CONFIG_METHOD_AUTO #define NMQT_SETTING_IP6_CONFIG_METHOD_DHCP NM_SETTING_IP6_CONFIG_METHOD_DHCP #define NMQT_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL #define NMQT_SETTING_IP6_CONFIG_METHOD_MANUAL NM_SETTING_IP6_CONFIG_METHOD_MANUAL #define NMQT_SETTING_IP6_CONFIG_METHOD_SHARED NM_SETTING_IP6_CONFIG_METHOD_SHARED #else #define NMQT_SETTING_IP6_CONFIG_SETTING_NAME NM_SETTING_IP6_CONFIG_SETTING_NAME #define NMQT_SETTING_IP6_CONFIG_METHOD NM_SETTING_IP6_CONFIG_METHOD #define NMQT_SETTING_IP6_CONFIG_DNS NM_SETTING_IP6_CONFIG_DNS #define NMQT_SETTING_IP6_CONFIG_DNS_SEARCH NM_SETTING_IP6_CONFIG_DNS_SEARCH #define NMQT_SETTING_IP6_CONFIG_ADDRESSES NM_SETTING_IP6_CONFIG_ADDRESSES #define NMQT_SETTING_IP6_CONFIG_GATEWAY NM_SETTING_IP6_CONFIG_GATEWAY #define NMQT_SETTING_IP6_CONFIG_ROUTES NM_SETTING_IP6_CONFIG_ROUTES #define NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC NM_SETTING_IP6_CONFIG_ROUTE_METRIC #define NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES #define NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS #define NMQT_SETTING_IP6_CONFIG_DHCP_HOSTNAME NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME #define NMQT_SETTING_IP6_CONFIG_DHCP_SEND_HOSTNAME NM_SETTING_IP6_CONFIG_DHCP_SEND_HOSTNAME #define NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT NM_SETTING_IP6_CONFIG_NEVER_DEFAULT #define NMQT_SETTING_IP6_CONFIG_MAY_FAIL NM_SETTING_IP6_CONFIG_MAY_FAIL #define NMQT_SETTING_IP6_CONFIG_DHCP_CLIENT_ID NM_SETTING_IP6_CONFIG_DHCP_CLIENT_ID #define NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY NM_SETTING_IP6_CONFIG_IP6_PRIVACY #define NMQT_SETTING_IP6_CONFIG_METHOD_IGNORE NM_SETTING_IP6_CONFIG_METHOD_IGNORE #define NMQT_SETTING_IP6_CONFIG_METHOD_AUTO NM_SETTING_IP6_CONFIG_METHOD_AUTO #define NMQT_SETTING_IP6_CONFIG_METHOD_DHCP NM_SETTING_IP6_CONFIG_METHOD_DHCP #define NMQT_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL #define NMQT_SETTING_IP6_CONFIG_METHOD_MANUAL NM_SETTING_IP6_CONFIG_METHOD_MANUAL #define NMQT_SETTING_IP6_CONFIG_METHOD_SHARED NM_SETTING_IP6_CONFIG_METHOD_SHARED #endif namespace NetworkManager { class Ipv6SettingPrivate; /** * Represents ipv6 setting */ class NETWORKMANAGERQT_EXPORT Ipv6Setting : public Setting { public: typedef QSharedPointer Ptr; typedef QList List; enum ConfigMethod {Automatic, Dhcp, LinkLocal, Manual, Ignored}; enum IPv6Privacy {Unknown = -1, Disabled, PreferPublic, PreferTemporary}; Ipv6Setting(); explicit Ipv6Setting(const Ptr &other); ~Ipv6Setting(); QString name() const Q_DECL_OVERRIDE; void setMethod(ConfigMethod method); ConfigMethod method() const; void setDns(const QList &dns); QList dns() const; void setDnsSearch(const QStringList &domains); QStringList dnsSearch() const; void setAddresses(const QList ipv6addresses); QList addresses() const; void setRoutes(const QList ipv6routes); QList routes() const; + void setRouteMetric(int metric); + int routeMetric() const; + void setIgnoreAutoRoutes(bool ignore); bool ignoreAutoRoutes() const; void setIgnoreAutoDns(bool ignore); bool ignoreAutoDns() const; void setNeverDefault(bool neverDefault); bool neverDefault() const; void setMayFail(bool mayFail); bool mayFail() const; void setPrivacy(IPv6Privacy privacy); IPv6Privacy privacy() const; void fromMap(const QVariantMap &setting) Q_DECL_OVERRIDE; QVariantMap toMap() const Q_DECL_OVERRIDE; protected: Ipv6SettingPrivate *const d_ptr; private: Q_DECLARE_PRIVATE(Ipv6Setting) }; NETWORKMANAGERQT_EXPORT QDebug operator<<(QDebug dbg, const Ipv6Setting &setting); } #endif // NETWORKMANAGERQT_IPV6_SETTING_H diff --git a/src/settings/ipv6setting_p.h b/src/settings/ipv6setting_p.h index 6f37e58..ca41fc6 100644 --- a/src/settings/ipv6setting_p.h +++ b/src/settings/ipv6setting_p.h @@ -1,51 +1,52 @@ /* Copyright 2012-2013 Jan Grulich This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #ifndef NETWORKMANAGERQT_IPV6_SETTING_P_H #define NETWORKMANAGERQT_IPV6_SETTING_P_H #include "../ipconfig.h" #include #include namespace NetworkManager { class Ipv6SettingPrivate { public: Ipv6SettingPrivate(); QString name; NetworkManager::Ipv6Setting::ConfigMethod method; QList dns; QStringList dnsSearch; QList addresses; QList routes; + int routeMetric; bool ignoreAutoRoutes; bool ignoreAutoDns; bool neverDefault; bool mayFail; NetworkManager::Ipv6Setting::IPv6Privacy privacy; }; } #endif // NETWORKMANAGERQT_IPV6_SETTING_P_H