diff --git a/TODO b/TODO --- a/TODO +++ b/TODO @@ -79,7 +79,6 @@ - dns-options - dns-priority - route-data - - route-metric - ipv6 setting ----------------- @@ -90,5 +89,4 @@ - dhcp-fqdn - dns-options - route-data - - route-metrics - token diff --git a/autotests/settings/ipv4settingtest.cpp b/autotests/settings/ipv4settingtest.cpp --- a/autotests/settings/ipv4settingtest.cpp +++ b/autotests/settings/ipv4settingtest.cpp @@ -41,6 +41,7 @@ QTest::addColumn("dnsSearch"); QTest::addColumn("addresses"); QTest::addColumn("routes"); + QTest::addColumn("routeMetric"); QTest::addColumn("ignoreAutoRoutes"); QTest::addColumn("ignoreAutoDns"); QTest::addColumn("dhcpClientId"); @@ -78,6 +79,7 @@ << dnsSearch // dnsSearch << addresses // addresses << routes // routes + << 100 // routeMetric << true // ignoreAutoRoutes << true // ignoreAutoDns << QString("home-test") // dhcpClientId @@ -94,6 +96,7 @@ QFETCH(QStringList, dnsSearch); QFETCH(UIntListList, addresses); QFETCH(UIntListList, routes); + QFETCH(int, routeMetric); QFETCH(bool, ignoreAutoRoutes); QFETCH(bool, ignoreAutoDns); QFETCH(QString, dhcpClientId); @@ -109,6 +112,7 @@ 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); diff --git a/autotests/settings/ipv6settingtest.cpp b/autotests/settings/ipv6settingtest.cpp --- a/autotests/settings/ipv6settingtest.cpp +++ b/autotests/settings/ipv6settingtest.cpp @@ -46,6 +46,7 @@ QTest::addColumn("dnsSearch"); QTest::addColumn("addresses"); QTest::addColumn("routes"); + QTest::addColumn("routeMetric"); QTest::addColumn("ignoreAutoRoutes"); QTest::addColumn("ignoreAutoDns"); QTest::addColumn("neverDefault"); @@ -81,6 +82,7 @@ << dnsSearch // dnsSearch << addresses // addresses << routes // routes + << 100 // routeMetric << true // ignoreAutoRoutes << true // ignoreAutoDns << true // neverDefault @@ -95,6 +97,7 @@ QFETCH(QStringList, dnsSearch); QFETCH(IpV6DBusAddressList, addresses); QFETCH(IpV6DBusRouteList, routes); + QFETCH(int, routeMetric); QFETCH(bool, ignoreAutoRoutes); QFETCH(bool, ignoreAutoDns); QFETCH(bool, neverDefault); @@ -108,6 +111,7 @@ 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); diff --git a/src/settings/ipv4setting.h b/src/settings/ipv4setting.h --- a/src/settings/ipv4setting.h +++ b/src/settings/ipv4setting.h @@ -108,6 +108,9 @@ void setRoutes(const QList &ipv4routes); QList routes() const; + void setRouteMetric(int metric); + int routeMetric() const; + void setIgnoreAutoRoutes(bool ignore); bool ignoreAutoRoutes() const; diff --git a/src/settings/ipv4setting.cpp b/src/settings/ipv4setting.cpp --- a/src/settings/ipv4setting.cpp +++ b/src/settings/ipv4setting.cpp @@ -35,6 +35,7 @@ NetworkManager::Ipv4SettingPrivate::Ipv4SettingPrivate() : name(NMQT_SETTING_IP4_CONFIG_SETTING_NAME) , method(NetworkManager::Ipv4Setting::Automatic) + , routeMetric(-1) , ignoreAutoRoutes(false) , ignoreAutoDns(false) , dhcpSendHostname(true) @@ -56,6 +57,7 @@ setDnsSearch(other->dnsSearch()); setAddresses(other->addresses()); setRoutes(other->routes()); + setRouteMetric(other->routeMetric()); setIgnoreAutoRoutes(other->ignoreAutoRoutes()); setIgnoreAutoDns(other->ignoreAutoDns()); setDhcpClientId(other->dhcpClientId()); @@ -147,6 +149,20 @@ 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); @@ -347,6 +363,10 @@ } } + 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()); } @@ -432,6 +452,10 @@ 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()); } @@ -482,6 +506,7 @@ 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'; diff --git a/src/settings/ipv4setting_p.h b/src/settings/ipv4setting_p.h --- a/src/settings/ipv4setting_p.h +++ b/src/settings/ipv4setting_p.h @@ -40,6 +40,7 @@ QStringList dnsSearch; QList addresses; QList routes; + int routeMetric; bool ignoreAutoRoutes; bool ignoreAutoDns; QString dhcpClientId; diff --git a/src/settings/ipv6setting.h b/src/settings/ipv6setting.h --- a/src/settings/ipv6setting.h +++ b/src/settings/ipv6setting.h @@ -113,6 +113,9 @@ void setRoutes(const QList ipv6routes); QList routes() const; + void setRouteMetric(int metric); + int routeMetric() const; + void setIgnoreAutoRoutes(bool ignore); bool ignoreAutoRoutes() const; diff --git a/src/settings/ipv6setting.cpp b/src/settings/ipv6setting.cpp --- a/src/settings/ipv6setting.cpp +++ b/src/settings/ipv6setting.cpp @@ -35,6 +35,7 @@ NetworkManager::Ipv6SettingPrivate::Ipv6SettingPrivate() : name(NMQT_SETTING_IP6_CONFIG_SETTING_NAME) , method(NetworkManager::Ipv6Setting::Automatic) + , routeMetric(-1) , ignoreAutoRoutes(false) , ignoreAutoDns(false) , neverDefault(false) @@ -56,6 +57,7 @@ setDnsSearch(other->dnsSearch()); setAddresses(other->addresses()); setRoutes(other->routes()); + setRouteMetric(other->routeMetric()); setIgnoreAutoRoutes(other->ignoreAutoRoutes()); setIgnoreAutoDns(other->ignoreAutoDns()); setNeverDefault(other->neverDefault()); @@ -144,6 +146,20 @@ 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); @@ -313,6 +329,10 @@ 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()); } @@ -389,6 +409,10 @@ 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()); } @@ -431,6 +455,7 @@ 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'; diff --git a/src/settings/ipv6setting_p.h b/src/settings/ipv6setting_p.h --- a/src/settings/ipv6setting_p.h +++ b/src/settings/ipv6setting_p.h @@ -40,6 +40,7 @@ QStringList dnsSearch; QList addresses; QList routes; + int routeMetric; bool ignoreAutoRoutes; bool ignoreAutoDns; bool neverDefault;