File indexing completed on 2024-04-21 04:00:03
0001 /* 0002 SPDX-FileCopyrightText: 2012-2013 Jan Grulich <jgrulich@redhat.com> 0003 SPDX-FileCopyrightText: 2013 Daniel Nicoletti <dantti12@gmail.com> 0004 0005 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0006 */ 0007 0008 #include "ipv6setting.h" 0009 #include "ipv6setting_p.h" 0010 0011 #include "../ipconfig.h" 0012 #include "generictypes.h" 0013 #include "utils.h" 0014 0015 #include <arpa/inet.h> 0016 0017 NetworkManager::Ipv6SettingPrivate::Ipv6SettingPrivate() 0018 : name(NMQT_SETTING_IP6_CONFIG_SETTING_NAME) 0019 , method(NetworkManager::Ipv6Setting::Automatic) 0020 , routeMetric(-1) 0021 , ignoreAutoRoutes(false) 0022 , ignoreAutoDns(false) 0023 , neverDefault(false) 0024 , mayFail(true) 0025 , privacy(NetworkManager::Ipv6Setting::Unknown) 0026 , dadTimeout(-1) 0027 , addressGenMode(NetworkManager::Ipv6Setting::StablePrivacy) 0028 , dhcpTimeout(0) 0029 , routeTable(0) 0030 { 0031 } 0032 0033 NetworkManager::Ipv6Setting::Ipv6Setting() 0034 : Setting(Setting::Ipv6) 0035 , d_ptr(new Ipv6SettingPrivate()) 0036 { 0037 } 0038 0039 NetworkManager::Ipv6Setting::Ipv6Setting(const Ptr &other) 0040 : Setting(other) 0041 , d_ptr(new Ipv6SettingPrivate()) 0042 { 0043 setMethod(other->method()); 0044 setDns(other->dns()); 0045 setDnsSearch(other->dnsSearch()); 0046 setAddresses(other->addresses()); 0047 setRoutes(other->routes()); 0048 setRouteMetric(other->routeMetric()); 0049 setIgnoreAutoRoutes(other->ignoreAutoRoutes()); 0050 setIgnoreAutoDns(other->ignoreAutoDns()); 0051 setNeverDefault(other->neverDefault()); 0052 setMayFail(other->mayFail()); 0053 setDadTimeout(other->dadTimeout()); 0054 setAddressGenMode(other->addressGenMode()); 0055 setDhcpTimeout(other->dhcpTimeout()); 0056 setDhcpHostname(other->dhcpHostname()); 0057 setDhcpDuid(other->dhcpDuid()); 0058 setToken(other->token()); 0059 setDnsOptions(other->dnsOptions()); 0060 setAddressData(other->addressData()); 0061 setRouteData(other->routeData()); 0062 setRouteTable(other->routeTable()); 0063 } 0064 0065 NetworkManager::Ipv6Setting::~Ipv6Setting() 0066 { 0067 delete d_ptr; 0068 } 0069 0070 QString NetworkManager::Ipv6Setting::name() const 0071 { 0072 Q_D(const Ipv6Setting); 0073 0074 return d->name; 0075 } 0076 0077 void NetworkManager::Ipv6Setting::setMethod(NetworkManager::Ipv6Setting::ConfigMethod type) 0078 { 0079 Q_D(Ipv6Setting); 0080 0081 d->method = type; 0082 } 0083 0084 NetworkManager::Ipv6Setting::ConfigMethod NetworkManager::Ipv6Setting::method() const 0085 { 0086 Q_D(const Ipv6Setting); 0087 0088 return d->method; 0089 } 0090 0091 void NetworkManager::Ipv6Setting::setDns(const QList<QHostAddress> &dns) 0092 { 0093 Q_D(Ipv6Setting); 0094 0095 d->dns = dns; 0096 } 0097 0098 QList<QHostAddress> NetworkManager::Ipv6Setting::dns() const 0099 { 0100 Q_D(const Ipv6Setting); 0101 0102 return d->dns; 0103 } 0104 0105 void NetworkManager::Ipv6Setting::setDnsSearch(const QStringList &domains) 0106 { 0107 Q_D(Ipv6Setting); 0108 0109 d->dnsSearch = domains; 0110 } 0111 0112 QStringList NetworkManager::Ipv6Setting::dnsSearch() const 0113 { 0114 Q_D(const Ipv6Setting); 0115 0116 return d->dnsSearch; 0117 } 0118 0119 void NetworkManager::Ipv6Setting::setAddresses(const QList<IpAddress> ipv6addresses) 0120 { 0121 Q_D(Ipv6Setting); 0122 0123 d->addresses = ipv6addresses; 0124 } 0125 0126 QList<NetworkManager::IpAddress> NetworkManager::Ipv6Setting::addresses() const 0127 { 0128 Q_D(const Ipv6Setting); 0129 0130 return d->addresses; 0131 } 0132 0133 void NetworkManager::Ipv6Setting::setRoutes(const QList<NetworkManager::IpRoute> ipv6routes) 0134 { 0135 Q_D(Ipv6Setting); 0136 0137 d->routes = ipv6routes; 0138 } 0139 0140 QList<NetworkManager::IpRoute> NetworkManager::Ipv6Setting::routes() const 0141 { 0142 Q_D(const Ipv6Setting); 0143 0144 return d->routes; 0145 } 0146 0147 void NetworkManager::Ipv6Setting::setRouteMetric(int metric) 0148 { 0149 Q_D(Ipv6Setting); 0150 0151 d->routeMetric = metric; 0152 } 0153 0154 int NetworkManager::Ipv6Setting::routeMetric() const 0155 { 0156 Q_D(const Ipv6Setting); 0157 0158 return d->routeMetric; 0159 } 0160 0161 void NetworkManager::Ipv6Setting::setIgnoreAutoRoutes(bool ignore) 0162 { 0163 Q_D(Ipv6Setting); 0164 0165 d->ignoreAutoRoutes = ignore; 0166 } 0167 0168 bool NetworkManager::Ipv6Setting::ignoreAutoRoutes() const 0169 { 0170 Q_D(const Ipv6Setting); 0171 0172 return d->ignoreAutoRoutes; 0173 } 0174 0175 void NetworkManager::Ipv6Setting::setIgnoreAutoDns(bool ignore) 0176 { 0177 Q_D(Ipv6Setting); 0178 0179 d->ignoreAutoDns = ignore; 0180 } 0181 0182 bool NetworkManager::Ipv6Setting::ignoreAutoDns() const 0183 { 0184 Q_D(const Ipv6Setting); 0185 0186 return d->ignoreAutoDns; 0187 } 0188 0189 void NetworkManager::Ipv6Setting::setNeverDefault(bool neverDefault) 0190 { 0191 Q_D(Ipv6Setting); 0192 0193 d->neverDefault = neverDefault; 0194 } 0195 0196 bool NetworkManager::Ipv6Setting::neverDefault() const 0197 { 0198 Q_D(const Ipv6Setting); 0199 0200 return d->neverDefault; 0201 } 0202 0203 void NetworkManager::Ipv6Setting::setMayFail(bool mayFail) 0204 { 0205 Q_D(Ipv6Setting); 0206 0207 d->mayFail = mayFail; 0208 } 0209 0210 bool NetworkManager::Ipv6Setting::mayFail() const 0211 { 0212 Q_D(const Ipv6Setting); 0213 0214 return d->mayFail; 0215 } 0216 0217 void NetworkManager::Ipv6Setting::setPrivacy(IPv6Privacy privacy) 0218 { 0219 Q_D(Ipv6Setting); 0220 0221 d->privacy = privacy; 0222 } 0223 0224 NetworkManager::Ipv6Setting::IPv6Privacy NetworkManager::Ipv6Setting::privacy() const 0225 { 0226 Q_D(const Ipv6Setting); 0227 0228 return d->privacy; 0229 } 0230 0231 void NetworkManager::Ipv6Setting::setDadTimeout(qint32 timeout) 0232 { 0233 Q_D(Ipv6Setting); 0234 0235 d->dadTimeout = timeout; 0236 } 0237 0238 qint32 NetworkManager::Ipv6Setting::dadTimeout() const 0239 { 0240 Q_D(const Ipv6Setting); 0241 0242 return d->dadTimeout; 0243 } 0244 0245 void NetworkManager::Ipv6Setting::setDhcpTimeout(qint32 timeout) 0246 { 0247 Q_D(Ipv6Setting); 0248 0249 d->dhcpTimeout = timeout; 0250 } 0251 0252 qint32 NetworkManager::Ipv6Setting::dhcpTimeout() const 0253 { 0254 Q_D(const Ipv6Setting); 0255 0256 return d->dhcpTimeout; 0257 } 0258 0259 void NetworkManager::Ipv6Setting::setDhcpHostname(const QString &hostname) 0260 { 0261 Q_D(Ipv6Setting); 0262 0263 d->dhcpHostname = hostname; 0264 } 0265 0266 QString NetworkManager::Ipv6Setting::dhcpHostname() const 0267 { 0268 Q_D(const Ipv6Setting); 0269 0270 return d->dhcpHostname; 0271 } 0272 0273 void NetworkManager::Ipv6Setting::setDhcpDuid(const QString &duid) 0274 { 0275 Q_D(Ipv6Setting); 0276 0277 d->dhcpDuid = duid; 0278 } 0279 0280 QString NetworkManager::Ipv6Setting::dhcpDuid() const 0281 { 0282 Q_D(const Ipv6Setting); 0283 0284 return d->dhcpDuid; 0285 } 0286 0287 void NetworkManager::Ipv6Setting::setDnsOptions(const QStringList &options) 0288 { 0289 Q_D(Ipv6Setting); 0290 0291 d->dnsOptions = options; 0292 } 0293 0294 QStringList NetworkManager::Ipv6Setting::dnsOptions() const 0295 { 0296 Q_D(const Ipv6Setting); 0297 0298 return d->dnsOptions; 0299 } 0300 0301 void NetworkManager::Ipv6Setting::setAddressData(const NMVariantMapList &addressData) 0302 { 0303 Q_D(Ipv6Setting); 0304 0305 d->addressData = addressData; 0306 } 0307 0308 NMVariantMapList NetworkManager::Ipv6Setting::addressData() const 0309 { 0310 Q_D(const Ipv6Setting); 0311 0312 return d->addressData; 0313 } 0314 0315 void NetworkManager::Ipv6Setting::setAddressGenMode(IPv6AddressGenMode mode) 0316 { 0317 Q_D(Ipv6Setting); 0318 0319 d->addressGenMode = mode; 0320 } 0321 0322 NetworkManager::Ipv6Setting::IPv6AddressGenMode NetworkManager::Ipv6Setting::addressGenMode() const 0323 { 0324 Q_D(const Ipv6Setting); 0325 0326 return d->addressGenMode; 0327 } 0328 0329 void NetworkManager::Ipv6Setting::setRouteData(const NMVariantMapList &routeData) 0330 { 0331 Q_D(Ipv6Setting); 0332 0333 d->routeData = routeData; 0334 } 0335 0336 NMVariantMapList NetworkManager::Ipv6Setting::routeData() const 0337 { 0338 Q_D(const Ipv6Setting); 0339 0340 return d->routeData; 0341 } 0342 0343 void NetworkManager::Ipv6Setting::setToken(const QString &token) 0344 { 0345 Q_D(Ipv6Setting); 0346 0347 d->token = token; 0348 } 0349 0350 QString NetworkManager::Ipv6Setting::token() const 0351 { 0352 Q_D(const Ipv6Setting); 0353 0354 return d->token; 0355 } 0356 0357 void NetworkManager::Ipv6Setting::setRouteTable(quint32 routeTable) 0358 { 0359 Q_D(Ipv6Setting); 0360 0361 d->routeTable = routeTable; 0362 } 0363 0364 quint32 NetworkManager::Ipv6Setting::routeTable() const 0365 { 0366 Q_D(const Ipv6Setting); 0367 0368 return d->routeTable; 0369 } 0370 0371 void NetworkManager::Ipv6Setting::fromMap(const QVariantMap &setting) 0372 { 0373 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD))) { 0374 const QString methodType = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD)).toString(); 0375 0376 if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_AUTO)) { 0377 setMethod(Automatic); 0378 } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_DHCP)) { 0379 setMethod(Dhcp); 0380 } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL)) { 0381 setMethod(LinkLocal); 0382 } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_MANUAL)) { 0383 setMethod(Manual); 0384 } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_IGNORE)) { 0385 setMethod(Ignored); 0386 } else if (methodType.toLower() == QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_DISABLED)) { 0387 setMethod(ConfigDisabled); 0388 } else { 0389 setMethod(Automatic); 0390 } 0391 } 0392 0393 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS))) { 0394 QList<QHostAddress> dbusDns; 0395 QList<QByteArray> temp; 0396 if (setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS)).canConvert<QDBusArgument>()) { 0397 QDBusArgument dnsArg = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS)).value<QDBusArgument>(); 0398 temp = qdbus_cast<QList<QByteArray>>(dnsArg); 0399 } else { 0400 temp = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS)).value<QList<QByteArray>>(); 0401 } 0402 0403 for (const QByteArray &utmp : std::as_const(temp)) { 0404 dbusDns << ipv6AddressAsHostAddress(utmp); 0405 } 0406 0407 setDns(dbusDns); 0408 } 0409 0410 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS_SEARCH))) { 0411 setDnsSearch(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS_SEARCH)).toStringList()); 0412 } 0413 0414 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES))) { 0415 QList<IpV6DBusAddress> temp; 0416 if (setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS)).canConvert<QDBusArgument>()) { 0417 QDBusArgument addressArg = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES)).value<QDBusArgument>(); 0418 temp = qdbus_cast<QList<IpV6DBusAddress>>(addressArg); 0419 } else { 0420 temp = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES)).value<QList<IpV6DBusAddress>>(); 0421 } 0422 QList<NetworkManager::IpAddress> addresses; 0423 0424 for (const IpV6DBusAddress &addressMap : std::as_const(temp)) { 0425 if (addressMap.address.isEmpty() || !addressMap.prefix || addressMap.gateway.isEmpty()) { 0426 continue; 0427 } 0428 0429 NetworkManager::IpAddress address; 0430 address.setIp(ipv6AddressAsHostAddress(addressMap.address)); 0431 address.setPrefixLength(addressMap.prefix); 0432 address.setGateway(ipv6AddressAsHostAddress(addressMap.gateway)); 0433 if (!address.isValid()) { 0434 continue; 0435 } 0436 0437 addresses << address; 0438 } 0439 0440 setAddresses(addresses); 0441 } 0442 0443 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES))) { 0444 QList<IpV6DBusRoute> temp; 0445 if (setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES)).canConvert<QDBusArgument>()) { 0446 QDBusArgument routeArg = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES)).value<QDBusArgument>(); 0447 temp = qdbus_cast<QList<IpV6DBusRoute>>(routeArg); 0448 } else { 0449 temp = setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES)).value<QList<IpV6DBusRoute>>(); 0450 } 0451 QList<NetworkManager::IpRoute> routes; 0452 0453 for (const IpV6DBusRoute &routeMap : std::as_const(temp)) { 0454 if (routeMap.destination.isEmpty() || !routeMap.prefix || routeMap.nexthop.isEmpty() || !routeMap.metric) { 0455 continue; 0456 } 0457 0458 NetworkManager::IpRoute route; 0459 route.setIp(ipv6AddressAsHostAddress(routeMap.destination)); 0460 route.setPrefixLength(routeMap.prefix); 0461 route.setNextHop(ipv6AddressAsHostAddress(routeMap.nexthop)); 0462 route.setMetric(routeMap.metric); 0463 if (!route.isValid()) { 0464 continue; 0465 } 0466 0467 routes << route; 0468 } 0469 setRoutes(routes); 0470 } 0471 0472 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC))) { 0473 setRouteMetric(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC)).toInt()); 0474 } 0475 0476 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES))) { 0477 setIgnoreAutoRoutes(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES)).toBool()); 0478 } 0479 0480 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS))) { 0481 setIgnoreAutoDns(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS)).toBool()); 0482 } 0483 0484 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT))) { 0485 setNeverDefault(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT)).toBool()); 0486 } 0487 0488 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_MAY_FAIL))) { 0489 setMayFail(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_MAY_FAIL)).toBool()); 0490 } 0491 0492 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY))) { 0493 setPrivacy((IPv6Privacy)setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY)).toUInt()); 0494 } 0495 0496 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_DAD_TIMEOUT))) { 0497 setDadTimeout(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DAD_TIMEOUT)).toUInt()); 0498 } 0499 0500 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_DHCP_TIMEOUT))) { 0501 setDhcpTimeout(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DHCP_TIMEOUT)).toUInt()); 0502 } 0503 0504 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESS_GEN_MODE))) { 0505 setAddressGenMode(static_cast<IPv6AddressGenMode>(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESS_GEN_MODE)).toUInt())); 0506 } 0507 0508 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_DHCP_HOSTNAME))) { 0509 setDhcpHostname(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DHCP_HOSTNAME)).toString()); 0510 } 0511 0512 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_DHCP_DUID))) { 0513 setDhcpDuid(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DHCP_DUID)).toString()); 0514 } 0515 0516 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_TOKEN))) { 0517 setToken(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_TOKEN)).toString()); 0518 } 0519 0520 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS_OPTIONS))) { 0521 setDnsOptions(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS_OPTIONS)).toStringList()); 0522 } 0523 0524 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_DATA))) { 0525 setRouteData(qdbus_cast<NMVariantMapList>(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_DATA)))); 0526 } 0527 0528 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESS_DATA))) { 0529 setAddressData(qdbus_cast<NMVariantMapList>(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESS_DATA)))); 0530 } 0531 0532 if (setting.contains(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_TABLE))) { 0533 setRouteTable(setting.value(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_TABLE)).toUInt()); 0534 } 0535 } 0536 0537 QVariantMap NetworkManager::Ipv6Setting::toMap() const 0538 { 0539 QVariantMap setting; 0540 0541 if (method() == Automatic) { 0542 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_AUTO)); 0543 } else if (method() == Dhcp) { 0544 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_DHCP)); 0545 } else if (method() == LinkLocal) { 0546 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL)); 0547 } else if (method() == Manual) { 0548 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_MANUAL)); 0549 } else if (method() == Ignored) { 0550 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_IGNORE)); 0551 } else if (method() == ConfigDisabled) { 0552 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD), QLatin1String(NMQT_SETTING_IP6_CONFIG_METHOD_DISABLED)); 0553 } 0554 0555 if (!dns().isEmpty()) { 0556 QList<QByteArray> dbusDns; 0557 const QList<QHostAddress> dnsList = dns(); 0558 for (const QHostAddress &dns : dnsList) { 0559 dbusDns << ipv6AddressFromHostAddress(dns); 0560 } 0561 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS), QVariant::fromValue(dbusDns)); 0562 } 0563 0564 if (!dnsSearch().isEmpty()) { 0565 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS_SEARCH), dnsSearch()); 0566 } 0567 0568 if (!addresses().isEmpty()) { 0569 QList<IpV6DBusAddress> dbusAddresses; 0570 const QList<NetworkManager::IpAddress> addressesList = addresses(); 0571 for (const NetworkManager::IpAddress &addr : addressesList) { 0572 IpV6DBusAddress dbusAddress; 0573 dbusAddress.address = ipv6AddressFromHostAddress(addr.ip()); 0574 dbusAddress.prefix = addr.prefixLength(); 0575 dbusAddress.gateway = ipv6AddressFromHostAddress(addr.gateway()); 0576 dbusAddresses << dbusAddress; 0577 } 0578 0579 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESSES), QVariant::fromValue(dbusAddresses)); 0580 } 0581 0582 if (!routes().isEmpty()) { 0583 QList<IpV6DBusRoute> dbusRoutes; 0584 const QList<NetworkManager::IpRoute> routesList = routes(); 0585 for (const NetworkManager::IpRoute &route : routesList) { 0586 IpV6DBusRoute dbusRoute; 0587 dbusRoute.destination = ipv6AddressFromHostAddress(route.ip()); 0588 dbusRoute.prefix = route.prefixLength(); 0589 dbusRoute.nexthop = ipv6AddressFromHostAddress(route.nextHop()); 0590 dbusRoute.metric = route.metric(); 0591 dbusRoutes << dbusRoute; 0592 } 0593 0594 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTES), QVariant::fromValue(dbusRoutes)); 0595 } 0596 0597 if (routeMetric() >= 0) { 0598 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC), routeMetric()); 0599 } 0600 0601 if (ignoreAutoRoutes()) { 0602 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES), ignoreAutoRoutes()); 0603 } 0604 0605 if (ignoreAutoDns()) { 0606 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS), ignoreAutoDns()); 0607 } 0608 0609 if (neverDefault()) { 0610 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT), neverDefault()); 0611 } 0612 0613 if (!mayFail()) { 0614 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_MAY_FAIL), mayFail()); 0615 } 0616 0617 if (privacy() != Unknown) { 0618 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY), privacy()); 0619 } 0620 0621 if (dadTimeout() >= 0) { 0622 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DAD_TIMEOUT), dadTimeout()); 0623 } 0624 0625 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESS_GEN_MODE), addressGenMode()); 0626 0627 if (dhcpTimeout() > 0) { 0628 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DHCP_TIMEOUT), dhcpTimeout()); 0629 } 0630 0631 if (!dhcpHostname().isEmpty()) { 0632 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DHCP_HOSTNAME), dhcpHostname()); 0633 } 0634 0635 if (!dhcpDuid().isEmpty()) { 0636 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DHCP_DUID), dhcpDuid()); 0637 } 0638 0639 if (!token().isEmpty()) { 0640 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_TOKEN), token()); 0641 } 0642 0643 if (!dnsOptions().isEmpty()) { 0644 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_DNS_OPTIONS), dnsOptions()); 0645 } 0646 0647 if (!addressData().empty()) { 0648 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ADDRESS_DATA), QVariant::fromValue(addressData())); 0649 } 0650 0651 if (!routeData().empty()) { 0652 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_DATA), QVariant::fromValue(routeData())); 0653 } 0654 0655 if (routeTable() > 0) { 0656 setting.insert(QLatin1String(NMQT_SETTING_IP6_CONFIG_ROUTE_TABLE), routeTable()); 0657 } 0658 0659 return setting; 0660 } 0661 0662 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::Ipv6Setting &setting) 0663 { 0664 dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n'; 0665 dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; 0666 0667 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_METHOD << ": " << setting.method() << '\n'; 0668 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_DNS << '\n'; 0669 const QList<QHostAddress> hostAdresses = setting.dns(); 0670 for (const QHostAddress &address : hostAdresses) { 0671 dbg.nospace() << address.toString() << '\n'; 0672 } 0673 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_DNS_SEARCH << ": " << setting.dnsSearch() << '\n'; 0674 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_ADDRESSES << '\n'; 0675 const QList<NetworkManager::IpAddress> ipList = setting.addresses(); 0676 for (const NetworkManager::IpAddress &address : ipList) { 0677 dbg.nospace() << address.ip().toString() << ": " << address.gateway().toString() << ": " << address.netmask() << '\n'; 0678 } 0679 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_ROUTES << '\n'; 0680 const QList<NetworkManager::IpRoute> routesList = setting.routes(); 0681 for (const NetworkManager::IpRoute &route : routesList) { 0682 dbg.nospace() << route.ip().toString() << ": " << route.metric() << ": " << route.nextHop().toString() << ": " << route.metric() << '\n'; 0683 } 0684 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_ROUTE_METRIC << ":" << setting.routeMetric() << '\n'; 0685 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES << ": " << setting.ignoreAutoRoutes() << '\n'; 0686 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS << ": " << setting.ignoreAutoDns() << '\n'; 0687 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_NEVER_DEFAULT << ": " << setting.neverDefault() << '\n'; 0688 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_MAY_FAIL << ": " << setting.mayFail() << '\n'; 0689 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_IP6_PRIVACY << ": " << setting.privacy() << '\n'; 0690 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_DAD_TIMEOUT << ": " << setting.dadTimeout() << '\n'; 0691 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_ADDRESS_GEN_MODE << ": " << setting.addressGenMode() << '\n'; 0692 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_DHCP_TIMEOUT << ": " << setting.dhcpTimeout() << '\n'; 0693 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_DHCP_HOSTNAME << ": " << setting.dhcpHostname() << '\n'; 0694 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_DHCP_DUID << ": " << setting.dhcpDuid() << '\n'; 0695 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_TOKEN << ": " << setting.token() << '\n'; 0696 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_DNS_OPTIONS << ": " << setting.dnsOptions() << '\n'; 0697 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_ADDRESS_DATA << ": " << '\n'; 0698 const auto dataList = setting.addressData(); 0699 for (const QVariantMap &addressData : dataList) { 0700 QVariantMap::const_iterator i = addressData.constBegin(); 0701 while (i != addressData.constEnd()) { 0702 dbg.nospace() << i.key() << ": " << i.value() << '\n'; 0703 } 0704 } 0705 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_ROUTE_DATA << ": " << '\n'; 0706 const auto routeDataList = setting.routeData(); 0707 for (const QVariantMap &routeData : routeDataList) { 0708 QVariantMap::const_iterator i = routeData.constBegin(); 0709 while (i != routeData.constEnd()) { 0710 dbg.nospace() << i.key() << ": " << i.value() << '\n'; 0711 } 0712 } 0713 dbg.nospace() << NMQT_SETTING_IP6_CONFIG_ROUTE_TABLE << ": " << setting.routeTable() << '\n'; 0714 0715 return dbg.maybeSpace(); 0716 }