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