File indexing completed on 2024-05-05 09:54:19
0001 /* 0002 SPDX-FileCopyrightText: 2013-2018 Jan Grulich <jgrulich@redhat.com> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 #include "networkmodelitem.h" 0007 #include "networkmodel.h" 0008 #include "uiutils.h" 0009 0010 #include <unordered_map> 0011 0012 #include <NetworkManagerQt/AdslDevice> 0013 #include <NetworkManagerQt/BluetoothDevice> 0014 #include <NetworkManagerQt/BondDevice> 0015 #include <NetworkManagerQt/BridgeDevice> 0016 #include <NetworkManagerQt/InfinibandDevice> 0017 #include <NetworkManagerQt/Manager> 0018 #include <NetworkManagerQt/ModemDevice> 0019 #include <NetworkManagerQt/Settings> 0020 #include <NetworkManagerQt/TeamDevice> 0021 #include <NetworkManagerQt/VlanDevice> 0022 #include <NetworkManagerQt/VpnSetting> 0023 #include <NetworkManagerQt/WiredDevice> 0024 #include <NetworkManagerQt/WirelessDevice> 0025 #include <NetworkManagerQt/WirelessSetting> 0026 0027 #include <KLocalizedString> 0028 0029 #include <ModemManagerQt/Manager> 0030 #include <ModemManagerQt/Modem3Gpp> 0031 #include <ModemManagerQt/Modem> 0032 #include <ModemManagerQt/ModemCdma> 0033 #include <ModemManagerQt/ModemDevice> 0034 0035 #include <QStringBuilder> 0036 0037 namespace 0038 { 0039 using ConnectionType = NetworkManager::ConnectionSettings::ConnectionType; 0040 0041 static const std::unordered_map<ConnectionType, QString> s_connectionTypeToString{ 0042 {ConnectionType::Unknown, i18nc("@info:tooltip", "The connection type is Unknown")}, 0043 {ConnectionType::Adsl, i18nc("@info:tooltip", "The connection type is ADSL")}, 0044 {ConnectionType::Bluetooth, i18nc("@info:tooltip", "The connection type is Bluetooth")}, 0045 {ConnectionType::Bridge, i18nc("@info:tooltip", "The connection type is Bridge")}, 0046 {ConnectionType::Cdma, i18nc("@info:tooltip", "The connection type is CDMA")}, 0047 {ConnectionType::Gsm, i18nc("@info:tooltip", "The connection type is GSM")}, 0048 {ConnectionType::Infiniband, i18nc("@info:tooltip", "The connection type is Infiniband")}, 0049 {ConnectionType::OLPCMesh, i18nc("@info:tooltip", "The connection type is OLPC Mesh")}, 0050 {ConnectionType::Pppoe, i18nc("@info:tooltip", "The connection type is PPOPE")}, 0051 {ConnectionType::Vlan, i18nc("@info:tooltip", "The connection type is VLAN")}, 0052 {ConnectionType::Vpn, i18nc("@info:tooltip", "The connection type is VPN")}, 0053 {ConnectionType::Wimax, i18nc("@info:tooltip", "The connection type is Wimax")}, 0054 {ConnectionType::Wired, i18nc("@info:tooltip", "The connection type is Wired")}, 0055 {ConnectionType::Wireless, i18nc("@info:tooltip", "The connection type is Wireless")}, 0056 {ConnectionType::Team, i18nc("@info:tooltip", "The connection type is Team")}, 0057 {ConnectionType::Generic, i18nc("@info:tooltip", "The connection type is Generic")}, 0058 {ConnectionType::Tun, i18nc("@info:tooltip", "The connection type is Tunnel")}, 0059 {ConnectionType::IpTunnel, i18nc("@info:tooltip", "The connection type is IP Tunnel")}, 0060 {ConnectionType::WireGuard, i18nc("@info:tooltip", "The connection type is WireGuard")}, 0061 }; 0062 } 0063 0064 NetworkModelItem::NetworkModelItem(QObject *parent) 0065 : QObject(parent) 0066 , m_connectionState(NetworkManager::ActiveConnection::Deactivated) 0067 , m_deviceState(NetworkManager::Device::UnknownState) 0068 , m_detailsValid(false) 0069 , m_delayModelUpdates(false) 0070 , m_duplicate(false) 0071 , m_mode(NetworkManager::WirelessSetting::Infrastructure) 0072 , m_securityType(NetworkManager::NoneSecurity) 0073 , m_signal(0) 0074 , m_slave(false) 0075 , m_type(NetworkManager::ConnectionSettings::Unknown) 0076 , m_vpnState(NetworkManager::VpnConnection::Unknown) 0077 , m_rxBytes(0) 0078 , m_txBytes(0) 0079 { 0080 } 0081 0082 NetworkModelItem::NetworkModelItem(const NetworkModelItem *item, QObject *parent) 0083 : QObject(parent) 0084 , m_connectionPath(item->connectionPath()) 0085 , m_connectionState(NetworkManager::ActiveConnection::Deactivated) 0086 , m_detailsValid(false) 0087 , m_delayModelUpdates(item->delayModelUpdates()) 0088 , m_duplicate(true) 0089 , m_mode(item->mode()) 0090 , m_name(item->name()) 0091 , m_securityType(item->securityType()) 0092 , m_slave(item->slave()) 0093 , m_ssid(item->ssid()) 0094 , m_timestamp(item->timestamp()) 0095 , m_type(item->type()) 0096 , m_uuid(item->uuid()) 0097 , m_vpnState(NetworkManager::VpnConnection::Unknown) 0098 , m_rxBytes(0) 0099 , m_txBytes(0) 0100 { 0101 } 0102 0103 NetworkModelItem::~NetworkModelItem() = default; 0104 0105 QString NetworkModelItem::activeConnectionPath() const 0106 { 0107 return m_activeConnectionPath; 0108 } 0109 0110 void NetworkModelItem::setActiveConnectionPath(const QString &path) 0111 { 0112 m_activeConnectionPath = path; 0113 } 0114 0115 QString NetworkModelItem::connectionPath() const 0116 { 0117 return m_connectionPath; 0118 } 0119 0120 void NetworkModelItem::setConnectionPath(const QString &path) 0121 { 0122 if (m_connectionPath != path) { 0123 m_connectionPath = path; 0124 m_changedRoles << NetworkModel::ConnectionPathRole << NetworkModel::UniRole; 0125 } 0126 } 0127 0128 NetworkManager::ActiveConnection::State NetworkModelItem::connectionState() const 0129 { 0130 return m_connectionState; 0131 } 0132 0133 void NetworkModelItem::setConnectionState(NetworkManager::ActiveConnection::State state) 0134 { 0135 if (m_connectionState != state) { 0136 m_connectionState = state; 0137 m_changedRoles << NetworkModel::ConnectionStateRole << NetworkModel::SectionRole; 0138 refreshIcon(); 0139 } 0140 } 0141 0142 QStringList NetworkModelItem::details() const 0143 { 0144 if (!m_detailsValid) { 0145 updateDetails(); 0146 } 0147 return m_details; 0148 } 0149 0150 QString NetworkModelItem::devicePath() const 0151 { 0152 return m_devicePath; 0153 } 0154 0155 QString NetworkModelItem::deviceName() const 0156 { 0157 return m_deviceName; 0158 } 0159 0160 void NetworkModelItem::setDeviceName(const QString &name) 0161 { 0162 if (m_deviceName != name) { 0163 m_deviceName = name; 0164 m_changedRoles << NetworkModel::DeviceName; 0165 } 0166 } 0167 0168 void NetworkModelItem::setDevicePath(const QString &path) 0169 { 0170 if (m_devicePath != path) { 0171 m_devicePath = path; 0172 m_changedRoles << NetworkModel::DevicePathRole << NetworkModel::ItemTypeRole << NetworkModel::UniRole; 0173 } 0174 } 0175 0176 QString NetworkModelItem::deviceState() const 0177 { 0178 return UiUtils::connectionStateToString(m_deviceState); 0179 } 0180 0181 void NetworkModelItem::setDeviceState(const NetworkManager::Device::State state) 0182 { 0183 if (m_deviceState != state) { 0184 m_deviceState = state; 0185 m_changedRoles << NetworkModel::DeviceStateRole; 0186 } 0187 } 0188 0189 bool NetworkModelItem::duplicate() const 0190 { 0191 return m_duplicate; 0192 } 0193 0194 void NetworkModelItem::setIcon(const QString &icon) 0195 { 0196 if (icon != m_icon) { 0197 m_icon = icon; 0198 m_changedRoles << NetworkModel::ConnectionIconRole; 0199 } 0200 } 0201 0202 void NetworkModelItem::refreshIcon() 0203 { 0204 setIcon(computeIcon()); 0205 } 0206 0207 QString NetworkModelItem::computeIcon() const 0208 { 0209 switch (m_type) { 0210 case NetworkManager::ConnectionSettings::Adsl: 0211 return QStringLiteral("network-mobile-100"); 0212 break; 0213 case NetworkManager::ConnectionSettings::Bluetooth: 0214 return QStringLiteral("network-wireless-bluetooth-symbolic"); 0215 break; 0216 case NetworkManager::ConnectionSettings::Bond: 0217 break; 0218 case NetworkManager::ConnectionSettings::Bridge: 0219 break; 0220 case NetworkManager::ConnectionSettings::Cdma: 0221 case NetworkManager::ConnectionSettings::Gsm: 0222 if (m_signal == 0) { 0223 return QStringLiteral("network-mobile-0"); 0224 } else if (m_signal < 20) { 0225 return QStringLiteral("network-mobile-20"); 0226 } else if (m_signal < 40) { 0227 return QStringLiteral("network-mobile-40"); 0228 } else if (m_signal < 60) { 0229 return QStringLiteral("network-mobile-60"); 0230 } else if (m_signal < 80) { 0231 return QStringLiteral("network-mobile-80"); 0232 } else { 0233 return QStringLiteral("network-mobile-100"); 0234 } 0235 break; 0236 case NetworkManager::ConnectionSettings::Infiniband: 0237 break; 0238 case NetworkManager::ConnectionSettings::OLPCMesh: 0239 break; 0240 case NetworkManager::ConnectionSettings::Pppoe: 0241 return QStringLiteral("network-mobile-100"); 0242 break; 0243 case NetworkManager::ConnectionSettings::Vlan: 0244 break; 0245 case NetworkManager::ConnectionSettings::Vpn: 0246 case NetworkManager::ConnectionSettings::WireGuard: 0247 return QStringLiteral("network-vpn"); 0248 break; 0249 case NetworkManager::ConnectionSettings::Wired: 0250 if (m_connectionState == NetworkManager::ActiveConnection::Activated) { 0251 return QStringLiteral("network-wired-activated"); 0252 } else { 0253 return QStringLiteral("network-wired"); 0254 } 0255 break; 0256 case NetworkManager::ConnectionSettings::Wireless: 0257 if (m_signal == 0) { 0258 if (m_mode == NetworkManager::WirelessSetting::Adhoc || m_mode == NetworkManager::WirelessSetting::Ap) { 0259 return (m_securityType <= NetworkManager::NoneSecurity) ? QStringLiteral("network-wireless-100") 0260 : QStringLiteral("network-wireless-100-locked"); 0261 } 0262 return (m_securityType <= NetworkManager::NoneSecurity) ? QStringLiteral("network-wireless-0") : QStringLiteral("network-wireless-0-locked"); 0263 } else if (m_signal < 20) { 0264 return (m_securityType <= NetworkManager::NoneSecurity) ? QStringLiteral("network-wireless-20") : QStringLiteral("network-wireless-20-locked"); 0265 } else if (m_signal < 40) { 0266 return (m_securityType <= NetworkManager::NoneSecurity) ? QStringLiteral("network-wireless-40") : QStringLiteral("network-wireless-40-locked"); 0267 } else if (m_signal < 60) { 0268 return (m_securityType <= NetworkManager::NoneSecurity) ? QStringLiteral("network-wireless-60") : QStringLiteral("network-wireless-60-locked"); 0269 } else if (m_signal < 80) { 0270 return (m_securityType <= NetworkManager::NoneSecurity) ? QStringLiteral("network-wireless-80") : QStringLiteral("network-wireless-80-locked"); 0271 } else { 0272 return (m_securityType <= NetworkManager::NoneSecurity) ? QStringLiteral("network-wireless-100") : QStringLiteral("network-wireless-100-locked"); 0273 } 0274 break; 0275 default: 0276 break; 0277 } 0278 0279 if (m_connectionState == NetworkManager::ActiveConnection::Activated) { 0280 return QStringLiteral("network-wired-activated"); 0281 } else { 0282 return QStringLiteral("network-wired"); 0283 } 0284 } 0285 0286 NetworkModelItem::ItemType NetworkModelItem::itemType() const 0287 { 0288 if (!m_devicePath.isEmpty() // 0289 || m_type == NetworkManager::ConnectionSettings::Bond // 0290 || m_type == NetworkManager::ConnectionSettings::Bridge // 0291 || m_type == NetworkManager::ConnectionSettings::Vlan // 0292 || m_type == NetworkManager::ConnectionSettings::Team // 0293 || ((NetworkManager::status() == NetworkManager::Connected // 0294 || NetworkManager::status() == NetworkManager::ConnectedLinkLocal // 0295 || NetworkManager::status() == NetworkManager::ConnectedSiteOnly) 0296 && (m_type == NetworkManager::ConnectionSettings::Vpn || m_type == NetworkManager::ConnectionSettings::WireGuard))) { 0297 if (m_connectionPath.isEmpty() && m_type == NetworkManager::ConnectionSettings::Wireless) { 0298 return NetworkModelItem::AvailableAccessPoint; 0299 } else { 0300 return NetworkModelItem::AvailableConnection; 0301 } 0302 } 0303 return NetworkModelItem::UnavailableConnection; 0304 } 0305 0306 NetworkManager::WirelessSetting::NetworkMode NetworkModelItem::mode() const 0307 { 0308 return m_mode; 0309 } 0310 0311 void NetworkModelItem::setMode(const NetworkManager::WirelessSetting::NetworkMode mode) 0312 { 0313 if (m_mode != mode) { 0314 m_mode = mode; 0315 refreshIcon(); 0316 } 0317 } 0318 0319 QString NetworkModelItem::name() const 0320 { 0321 return m_name; 0322 } 0323 0324 void NetworkModelItem::setName(const QString &name) 0325 { 0326 if (m_name != name) { 0327 m_name = name; 0328 m_changedRoles << NetworkModel::ItemUniqueNameRole << NetworkModel::NameRole; 0329 } 0330 } 0331 0332 QString NetworkModelItem::originalName() const 0333 { 0334 if (m_deviceName.isEmpty()) { 0335 return m_name; 0336 } 0337 return m_name % QLatin1String(" (") % m_deviceName % ')'; 0338 } 0339 0340 QString NetworkModelItem::sectionType() const 0341 { 0342 if (m_connectionState == NetworkManager::ActiveConnection::Deactivated) { 0343 return QStringLiteral("Available connections"); 0344 } else { 0345 return {}; 0346 } 0347 } 0348 0349 NetworkManager::WirelessSecurityType NetworkModelItem::securityType() const 0350 { 0351 return m_securityType; 0352 } 0353 0354 void NetworkModelItem::setSecurityType(NetworkManager::WirelessSecurityType type) 0355 { 0356 if (m_securityType != type) { 0357 m_securityType = type; 0358 m_changedRoles << NetworkModel::SecurityTypeStringRole << NetworkModel::SecurityTypeRole; 0359 refreshIcon(); 0360 } 0361 } 0362 0363 int NetworkModelItem::signal() const 0364 { 0365 return m_signal; 0366 } 0367 0368 void NetworkModelItem::setSignal(int signal) 0369 { 0370 if (m_signal != signal) { 0371 m_signal = signal; 0372 m_changedRoles << NetworkModel::SignalRole; 0373 refreshIcon(); 0374 } 0375 } 0376 0377 bool NetworkModelItem::slave() const 0378 { 0379 return m_slave; 0380 } 0381 0382 void NetworkModelItem::setSlave(bool slave) 0383 { 0384 if (m_slave != slave) { 0385 m_slave = slave; 0386 m_changedRoles << NetworkModel::SlaveRole; 0387 } 0388 } 0389 0390 QString NetworkModelItem::specificPath() const 0391 { 0392 return m_specificPath; 0393 } 0394 0395 void NetworkModelItem::setSpecificPath(const QString &path) 0396 { 0397 if (m_specificPath != path) { 0398 m_specificPath = path; 0399 m_changedRoles << NetworkModel::SpecificPathRole; 0400 } 0401 } 0402 0403 QString NetworkModelItem::ssid() const 0404 { 0405 return m_ssid; 0406 } 0407 0408 void NetworkModelItem::setSsid(const QString &ssid) 0409 { 0410 if (m_ssid != ssid) { 0411 m_ssid = ssid; 0412 m_changedRoles << NetworkModel::SsidRole << NetworkModel::UniRole; 0413 } 0414 } 0415 0416 NetworkManager::ConnectionSettings::ConnectionType NetworkModelItem::type() const 0417 { 0418 return m_type; 0419 } 0420 0421 QDateTime NetworkModelItem::timestamp() const 0422 { 0423 return m_timestamp; 0424 } 0425 0426 void NetworkModelItem::setTimestamp(const QDateTime &date) 0427 { 0428 if (m_timestamp != date) { 0429 m_timestamp = date; 0430 m_changedRoles << NetworkModel::TimeStampRole; 0431 } 0432 } 0433 0434 void NetworkModelItem::setType(NetworkManager::ConnectionSettings::ConnectionType type) 0435 { 0436 if (m_type == type) { 0437 return; 0438 } 0439 0440 m_type = type; 0441 0442 const auto it = s_connectionTypeToString.find(type); 0443 if (it != s_connectionTypeToString.end()) { 0444 m_accessibleDescription = it->second; 0445 } else { 0446 m_accessibleDescription = s_connectionTypeToString.at(NetworkManager::ConnectionSettings::ConnectionType::Unknown); 0447 } 0448 0449 m_changedRoles << NetworkModel::TypeRole << NetworkModel::ItemTypeRole << NetworkModel::UniRole << Qt::AccessibleDescriptionRole; 0450 0451 refreshIcon(); 0452 } 0453 0454 QString NetworkModelItem::accessibleDescription() const 0455 { 0456 return m_accessibleDescription; 0457 } 0458 0459 QString NetworkModelItem::uni() const 0460 { 0461 if (m_type == NetworkManager::ConnectionSettings::Wireless && m_uuid.isEmpty()) { 0462 return m_ssid + '%' + m_devicePath; 0463 } else { 0464 return m_connectionPath + '%' + m_devicePath; 0465 } 0466 } 0467 0468 QString NetworkModelItem::uuid() const 0469 { 0470 return m_uuid; 0471 } 0472 0473 void NetworkModelItem::setUuid(const QString &uuid) 0474 { 0475 if (m_uuid != uuid) { 0476 m_uuid = uuid; 0477 m_changedRoles << NetworkModel::UuidRole; 0478 } 0479 } 0480 0481 QString NetworkModelItem::vpnState() const 0482 { 0483 return UiUtils::vpnConnectionStateToString(m_vpnState); 0484 } 0485 0486 void NetworkModelItem::setVpnState(NetworkManager::VpnConnection::State state) 0487 { 0488 if (m_vpnState != state) { 0489 m_vpnState = state; 0490 m_changedRoles << NetworkModel::VpnState; 0491 } 0492 } 0493 0494 QString NetworkModelItem::vpnType() const 0495 { 0496 return m_vpnType; 0497 } 0498 0499 void NetworkModelItem::setVpnType(const QString &type) 0500 { 0501 if (m_vpnType != type) { 0502 m_vpnType = type; 0503 m_changedRoles << NetworkModel::VpnType; 0504 } 0505 } 0506 0507 qulonglong NetworkModelItem::rxBytes() const 0508 { 0509 return m_rxBytes; 0510 } 0511 0512 void NetworkModelItem::setRxBytes(qulonglong bytes) 0513 { 0514 if (m_rxBytes != bytes) { 0515 m_rxBytes = bytes; 0516 m_changedRoles << NetworkModel::RxBytesRole; 0517 } 0518 } 0519 0520 qulonglong NetworkModelItem::txBytes() const 0521 { 0522 return m_txBytes; 0523 } 0524 0525 void NetworkModelItem::setTxBytes(qulonglong bytes) 0526 { 0527 if (m_txBytes != bytes) { 0528 m_txBytes = bytes; 0529 m_changedRoles << NetworkModel::TxBytesRole; 0530 } 0531 } 0532 0533 bool NetworkModelItem::delayModelUpdates() const 0534 { 0535 return m_delayModelUpdates; 0536 } 0537 0538 void NetworkModelItem::setDelayModelUpdates(bool delay) 0539 { 0540 // special case, does not need m_changedRoles 0541 m_delayModelUpdates = delay; 0542 } 0543 0544 bool NetworkModelItem::operator==(const NetworkModelItem *item) const 0545 { 0546 if (!item->uuid().isEmpty() && !uuid().isEmpty()) { 0547 if (item->devicePath() == devicePath() && item->uuid() == uuid()) { 0548 return true; 0549 } 0550 } else if (item->type() == NetworkManager::ConnectionSettings::Wireless && type() == NetworkManager::ConnectionSettings::Wireless) { 0551 if (item->ssid() == ssid() && item->devicePath() == devicePath()) { 0552 return true; 0553 } 0554 } 0555 0556 return false; 0557 } 0558 0559 void NetworkModelItem::invalidateDetails() 0560 { 0561 m_detailsValid = false; 0562 m_changedRoles << NetworkModel::ConnectionDetailsRole; 0563 } 0564 0565 void NetworkModelItem::updateDetails() const 0566 { 0567 m_detailsValid = true; 0568 m_details.clear(); 0569 0570 if (itemType() == NetworkModelItem::UnavailableConnection) { 0571 return; 0572 } 0573 0574 NetworkManager::Device::Ptr device = NetworkManager::findNetworkInterface(m_devicePath); 0575 0576 // Get IPv[46]Address and related nameservers + IPv[46] default gateway 0577 if (device && device->ipV4Config().isValid() && m_connectionState == NetworkManager::ActiveConnection::Activated) { 0578 if (!device->ipV4Config().addresses().isEmpty()) { 0579 QHostAddress addr = device->ipV4Config().addresses().first().ip(); 0580 if (!addr.isNull() && addr.isGlobal()) { 0581 m_details << i18n("IPv4 Address") << addr.toString(); 0582 } 0583 } 0584 if (!device->ipV4Config().gateway().isEmpty()) { 0585 QString addr = device->ipV4Config().gateway(); 0586 if (!addr.isNull()) { 0587 m_details << i18n("IPv4 Default Gateway") << addr; 0588 } 0589 } 0590 if (!device->ipV4Config().nameservers().isEmpty()) { 0591 QHostAddress addr1 = device->ipV4Config().nameservers().first(); 0592 QHostAddress addr2 = device->ipV4Config().nameservers().last(); 0593 if (!addr1.isNull()) { 0594 m_details << i18n("IPv4 Primary Nameserver") << addr1.toString(); 0595 } 0596 if (!addr2.isNull() && !addr1.isNull()) { 0597 if (addr2 != addr1) { 0598 m_details << i18n("IPv4 Secondary Nameserver") << addr2.toString(); 0599 } 0600 } 0601 } 0602 } 0603 0604 if (device && device->ipV6Config().isValid() && m_connectionState == NetworkManager::ActiveConnection::Activated) { 0605 if (!device->ipV6Config().addresses().isEmpty()) { 0606 QHostAddress addr = device->ipV6Config().addresses().first().ip(); 0607 if (!addr.isNull() && addr.isGlobal() && !addr.isUniqueLocalUnicast()) { 0608 m_details << i18n("IPv6 Address") << addr.toString(); 0609 } else if (!addr.isNull() && addr.isGlobal() && addr.isUniqueLocalUnicast()) { 0610 m_details << i18n("IPv6 ULA Address") << addr.toString(); 0611 } 0612 } 0613 if (!device->ipV6Config().gateway().isEmpty()) { 0614 QString addr = device->ipV6Config().gateway(); 0615 if (!addr.isNull()) { 0616 m_details << i18n("IPv6 Default Gateway") << addr; 0617 } 0618 } 0619 if (!device->ipV6Config().nameservers().isEmpty()) { 0620 QHostAddress addr1 = device->ipV6Config().nameservers().first(); 0621 QHostAddress addr2 = device->ipV6Config().nameservers().last(); 0622 if (!addr1.isNull()) { 0623 m_details << i18n("IPv6 Primary Nameserver") << addr1.toString(); 0624 } 0625 if (!addr2.isNull() && !addr1.isNull()) { 0626 if (addr2 != addr1) { 0627 m_details << i18n("IPv6 Secondary Nameserver") << addr2.toString(); 0628 } 0629 } 0630 } 0631 } 0632 if (m_type == NetworkManager::ConnectionSettings::Wired) { 0633 NetworkManager::WiredDevice::Ptr wiredDevice = device.objectCast<NetworkManager::WiredDevice>(); 0634 if (wiredDevice) { 0635 if (m_connectionState == NetworkManager::ActiveConnection::Activated) { 0636 m_details << i18n("Connection speed") << UiUtils::connectionSpeed(wiredDevice->bitRate()); 0637 } 0638 m_details << i18n("MAC Address") << wiredDevice->hardwareAddress(); 0639 } 0640 } else if (m_type == NetworkManager::ConnectionSettings::Wireless) { 0641 NetworkManager::WirelessDevice::Ptr wirelessDevice = device.objectCast<NetworkManager::WirelessDevice>(); 0642 m_details << i18n("Access Point (SSID)") << m_ssid; 0643 if (m_mode == NetworkManager::WirelessSetting::Infrastructure) { 0644 m_details << i18n("Signal Strength") << i18nc("WiFi signal strength percentage indicator", "%1%", m_signal); 0645 } 0646 m_details << i18n("Security Type") << UiUtils::labelFromWirelessSecurity(m_securityType); 0647 if (wirelessDevice) { 0648 if (m_connectionState == NetworkManager::ActiveConnection::Activated) { 0649 m_details << i18n("Connection Speed") << UiUtils::connectionSpeed(wirelessDevice->bitRate()); 0650 } 0651 const NetworkManager::AccessPoint::Ptr accessPoint = wirelessDevice->findAccessPoint(m_specificPath); 0652 if (accessPoint) { 0653 m_details << i18n("Frequency") << UiUtils::wirelessFrequencyToString(accessPoint->frequency()); 0654 m_details << i18n("BSSID") << accessPoint->hardwareAddress(); 0655 } 0656 m_details << i18n("MAC Address") << wirelessDevice->hardwareAddress(); 0657 } 0658 } else if (m_type == NetworkManager::ConnectionSettings::Gsm || m_type == NetworkManager::ConnectionSettings::Cdma) { 0659 NetworkManager::ModemDevice::Ptr modemDevice = device.objectCast<NetworkManager::ModemDevice>(); 0660 if (modemDevice) { 0661 ModemManager::ModemDevice::Ptr modem = ModemManager::findModemDevice(modemDevice->udi()); 0662 if (modem) { 0663 ModemManager::Modem::Ptr modemNetwork = modem->interface(ModemManager::ModemDevice::ModemInterface).objectCast<ModemManager::Modem>(); 0664 0665 if (m_type == NetworkManager::ConnectionSettings::Gsm) { 0666 ModemManager::Modem3gpp::Ptr gsmNet = modem->interface(ModemManager::ModemDevice::GsmInterface).objectCast<ModemManager::Modem3gpp>(); 0667 if (gsmNet) { 0668 m_details << i18n("Operator") << gsmNet->operatorName(); 0669 } 0670 } else { 0671 ModemManager::ModemCdma::Ptr cdmaNet = modem->interface(ModemManager::ModemDevice::CdmaInterface).objectCast<ModemManager::ModemCdma>(); 0672 m_details << i18n("Network ID") << QStringLiteral("%1").arg(cdmaNet->nid()); 0673 } 0674 0675 if (modemNetwork) { 0676 m_details << i18n("Signal Quality") << QStringLiteral("%1%").arg(modemNetwork->signalQuality().signal); 0677 m_details << i18n("Access Technology") << UiUtils::convertAccessTechnologyToString(modemNetwork->accessTechnologies()); 0678 } 0679 } 0680 } 0681 } else if (m_type == NetworkManager::ConnectionSettings::Vpn) { 0682 m_details << i18n("VPN Plugin") << m_vpnType; 0683 0684 if (m_connectionState == NetworkManager::ActiveConnection::Activated) { 0685 NetworkManager::ActiveConnection::Ptr active = NetworkManager::findActiveConnection(m_activeConnectionPath); 0686 NetworkManager::VpnConnection::Ptr vpnConnection; 0687 0688 if (active) { 0689 vpnConnection = NetworkManager::VpnConnection::Ptr(new NetworkManager::VpnConnection(active->path()), &QObject::deleteLater); 0690 } 0691 0692 if (vpnConnection && !vpnConnection->banner().isEmpty()) { 0693 m_details << i18n("Banner") << vpnConnection->banner().simplified(); 0694 } 0695 } 0696 } else if (m_type == NetworkManager::ConnectionSettings::Bluetooth) { 0697 NetworkManager::BluetoothDevice::Ptr bluetoothDevice = device.objectCast<NetworkManager::BluetoothDevice>(); 0698 if (bluetoothDevice) { 0699 m_details << i18n("Name") << bluetoothDevice->name(); 0700 if (bluetoothDevice->bluetoothCapabilities() == NetworkManager::BluetoothDevice::Pan) { 0701 m_details << i18n("Capabilities") << QStringLiteral("PAN"); 0702 } else if (bluetoothDevice->bluetoothCapabilities() == NetworkManager::BluetoothDevice::Dun) { 0703 m_details << i18n("Capabilities") << QStringLiteral("DUN"); 0704 } 0705 m_details << i18n("MAC Address") << bluetoothDevice->hardwareAddress(); 0706 } 0707 } else if (m_type == NetworkManager::ConnectionSettings::Infiniband) { 0708 NetworkManager::InfinibandDevice::Ptr infinibandDevice = device.objectCast<NetworkManager::InfinibandDevice>(); 0709 m_details << i18n("Type") << i18n("Infiniband"); 0710 if (infinibandDevice) { 0711 m_details << i18n("MAC Address") << infinibandDevice->hwAddress(); 0712 } 0713 } else if (m_type == NetworkManager::ConnectionSettings::Bond) { 0714 NetworkManager::BondDevice::Ptr bondDevice = device.objectCast<NetworkManager::BondDevice>(); 0715 m_details << i18n("Type") << i18n("Bond"); 0716 if (bondDevice) { 0717 m_details << i18n("MAC Address") << bondDevice->hwAddress(); 0718 } 0719 } else if (m_type == NetworkManager::ConnectionSettings::Bridge) { 0720 NetworkManager::BridgeDevice::Ptr bridgeDevice = device.objectCast<NetworkManager::BridgeDevice>(); 0721 m_details << i18n("Type") << i18n("Bridge"); 0722 if (bridgeDevice) { 0723 m_details << i18n("MAC Address") << bridgeDevice->hwAddress(); 0724 } 0725 } else if (m_type == NetworkManager::ConnectionSettings::Vlan) { 0726 NetworkManager::VlanDevice::Ptr vlanDevice = device.objectCast<NetworkManager::VlanDevice>(); 0727 m_details << i18n("Type") << i18n("Vlan"); 0728 if (vlanDevice) { 0729 m_details << i18n("Vlan ID") << QString("%1").arg(vlanDevice->vlanId()); 0730 m_details << i18n("MAC Address") << vlanDevice->hwAddress(); 0731 } 0732 } else if (m_type == NetworkManager::ConnectionSettings::Adsl) { 0733 m_details << i18n("Type") << i18n("Adsl"); 0734 } else if (m_type == NetworkManager::ConnectionSettings::Team) { 0735 NetworkManager::TeamDevice::Ptr teamDevice = device.objectCast<NetworkManager::TeamDevice>(); 0736 m_details << i18n("Type") << i18n("Team"); 0737 if (teamDevice) { 0738 m_details << i18n("MAC Address") << teamDevice->hwAddress(); 0739 } 0740 } 0741 0742 if (device && m_connectionState == NetworkManager::ActiveConnection::Activated) { 0743 m_details << i18n("Device") << device->interfaceName(); 0744 } 0745 } 0746 0747 #include "moc_networkmodelitem.cpp"