File indexing completed on 2024-04-21 04:00:07
0001 /* 0002 SPDX-FileCopyrightText: 2012-2013 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 0007 #include "wiredsetting.h" 0008 #include "manager.h" 0009 #include "wiredsetting_p.h" 0010 0011 #include <QDebug> 0012 0013 #define NM_SETTING_WIRED_ASSIGNED_MAC_ADDRESS "assigned-mac-address" 0014 0015 NetworkManager::WiredSettingPrivate::WiredSettingPrivate() 0016 : name(NM_SETTING_WIRED_SETTING_NAME) 0017 , port(NetworkManager::WiredSetting::UnknownPort) 0018 , speed(0) 0019 , duplex(NetworkManager::WiredSetting::UnknownDuplexType) 0020 , mtu(0) 0021 , s390NetType(NetworkManager::WiredSetting::Undefined) 0022 , wakeOnLan(NetworkManager::WiredSetting::WakeOnLanDefault) 0023 { 0024 if (NetworkManager::checkVersion(1, 6, 0)) { 0025 autoNegotiate = false; 0026 } else { 0027 autoNegotiate = true; 0028 } 0029 } 0030 0031 NetworkManager::WiredSetting::WiredSetting() 0032 : Setting(Setting::Wired) 0033 , d_ptr(new WiredSettingPrivate()) 0034 { 0035 } 0036 0037 NetworkManager::WiredSetting::WiredSetting(const WiredSetting::Ptr &other) 0038 : Setting(other) 0039 , d_ptr(new WiredSettingPrivate()) 0040 { 0041 setPort(other->port()); 0042 setSpeed(other->speed()); 0043 setDuplexType(other->duplexType()); 0044 setAutoNegotiate(other->autoNegotiate()); 0045 setGenerateMacAddressMask(other->generateMacAddressMask()); 0046 setMacAddress(other->macAddress()); 0047 setClonedMacAddress(other->clonedMacAddress()); 0048 setMacAddressBlacklist(other->macAddressBlacklist()); 0049 setMtu(other->mtu()); 0050 setS390Subchannels(other->s390Subchannels()); 0051 setS390NetType(other->s390NetType()); 0052 setS390Options(other->s390Options()); 0053 setWakeOnLan(other->wakeOnLan()); 0054 setWakeOnLanPassword(other->wakeOnLanPassword()); 0055 setAssignedMacAddress(other->assignedMacAddress()); 0056 } 0057 0058 NetworkManager::WiredSetting::~WiredSetting() 0059 { 0060 delete d_ptr; 0061 } 0062 0063 QString NetworkManager::WiredSetting::name() const 0064 { 0065 Q_D(const WiredSetting); 0066 0067 return d->name; 0068 } 0069 0070 void NetworkManager::WiredSetting::setPort(NetworkManager::WiredSetting::PortType port) 0071 { 0072 Q_D(WiredSetting); 0073 0074 d->port = port; 0075 } 0076 0077 NetworkManager::WiredSetting::PortType NetworkManager::WiredSetting::port() const 0078 { 0079 Q_D(const WiredSetting); 0080 0081 return d->port; 0082 } 0083 0084 void NetworkManager::WiredSetting::setSpeed(quint32 speed) 0085 { 0086 Q_D(WiredSetting); 0087 0088 d->speed = speed; 0089 } 0090 0091 quint32 NetworkManager::WiredSetting::speed() const 0092 { 0093 Q_D(const WiredSetting); 0094 0095 return d->speed; 0096 } 0097 0098 void NetworkManager::WiredSetting::setDuplexType(NetworkManager::WiredSetting::DuplexType type) 0099 { 0100 Q_D(WiredSetting); 0101 0102 d->duplex = type; 0103 } 0104 0105 NetworkManager::WiredSetting::DuplexType NetworkManager::WiredSetting::duplexType() const 0106 { 0107 Q_D(const WiredSetting); 0108 0109 return d->duplex; 0110 } 0111 0112 void NetworkManager::WiredSetting::setAutoNegotiate(bool autoNegotiate) 0113 { 0114 Q_D(WiredSetting); 0115 0116 d->autoNegotiate = autoNegotiate; 0117 } 0118 0119 bool NetworkManager::WiredSetting::autoNegotiate() const 0120 { 0121 Q_D(const WiredSetting); 0122 0123 return d->autoNegotiate; 0124 } 0125 0126 QString NetworkManager::WiredSetting::generateMacAddressMask() const 0127 { 0128 Q_D(const WiredSetting); 0129 0130 return d->generateMacAddressMask; 0131 } 0132 0133 void NetworkManager::WiredSetting::setGenerateMacAddressMask(const QString &mask) 0134 { 0135 Q_D(WiredSetting); 0136 0137 d->generateMacAddressMask = mask; 0138 } 0139 0140 void NetworkManager::WiredSetting::setMacAddress(const QByteArray &address) 0141 { 0142 Q_D(WiredSetting); 0143 0144 d->macAddress = address; 0145 } 0146 0147 QByteArray NetworkManager::WiredSetting::macAddress() const 0148 { 0149 Q_D(const WiredSetting); 0150 0151 return d->macAddress; 0152 } 0153 0154 void NetworkManager::WiredSetting::setClonedMacAddress(const QByteArray &address) 0155 { 0156 Q_D(WiredSetting); 0157 0158 d->clonedMacAddress = address; 0159 } 0160 0161 QByteArray NetworkManager::WiredSetting::clonedMacAddress() const 0162 { 0163 Q_D(const WiredSetting); 0164 0165 return d->clonedMacAddress; 0166 } 0167 0168 void NetworkManager::WiredSetting::setMacAddressBlacklist(const QStringList &list) 0169 { 0170 Q_D(WiredSetting); 0171 0172 d->macAddressBlacklist = list; 0173 } 0174 0175 QStringList NetworkManager::WiredSetting::macAddressBlacklist() const 0176 { 0177 Q_D(const WiredSetting); 0178 0179 return d->macAddressBlacklist; 0180 } 0181 0182 void NetworkManager::WiredSetting::setMtu(quint32 mtu) 0183 { 0184 Q_D(WiredSetting); 0185 0186 d->mtu = mtu; 0187 } 0188 0189 quint32 NetworkManager::WiredSetting::mtu() const 0190 { 0191 Q_D(const WiredSetting); 0192 0193 return d->mtu; 0194 } 0195 0196 void NetworkManager::WiredSetting::setS390Subchannels(const QStringList &channels) 0197 { 0198 Q_D(WiredSetting); 0199 0200 d->s390Subchannels = channels; 0201 } 0202 0203 QStringList NetworkManager::WiredSetting::s390Subchannels() const 0204 { 0205 Q_D(const WiredSetting); 0206 0207 return d->s390Subchannels; 0208 } 0209 0210 void NetworkManager::WiredSetting::setS390NetType(NetworkManager::WiredSetting::S390Nettype type) 0211 { 0212 Q_D(WiredSetting); 0213 0214 d->s390NetType = type; 0215 } 0216 0217 NetworkManager::WiredSetting::S390Nettype NetworkManager::WiredSetting::s390NetType() const 0218 { 0219 Q_D(const WiredSetting); 0220 0221 return d->s390NetType; 0222 } 0223 0224 void NetworkManager::WiredSetting::setS390Options(const QMap<QString, QString> &options) 0225 { 0226 Q_D(WiredSetting); 0227 0228 d->s390Options = options; 0229 } 0230 0231 QMap<QString, QString> NetworkManager::WiredSetting::s390Options() const 0232 { 0233 Q_D(const WiredSetting); 0234 0235 return d->s390Options; 0236 } 0237 0238 NetworkManager::WiredSetting::WakeOnLanFlags NetworkManager::WiredSetting::wakeOnLan() const 0239 { 0240 Q_D(const WiredSetting); 0241 0242 return d->wakeOnLan; 0243 } 0244 0245 void NetworkManager::WiredSetting::setWakeOnLan(NetworkManager::WiredSetting::WakeOnLanFlags wol) 0246 { 0247 Q_D(WiredSetting); 0248 0249 d->wakeOnLan = wol; 0250 } 0251 0252 QString NetworkManager::WiredSetting::wakeOnLanPassword() const 0253 { 0254 Q_D(const WiredSetting); 0255 0256 return d->wakeOnLanPassword; 0257 } 0258 0259 void NetworkManager::WiredSetting::setWakeOnLanPassword(const QString &password) 0260 { 0261 Q_D(WiredSetting); 0262 0263 d->wakeOnLanPassword = password; 0264 } 0265 0266 void NetworkManager::WiredSetting::setAssignedMacAddress(const QString &assignedMacAddress) 0267 { 0268 Q_D(WiredSetting); 0269 0270 d->assignedMacAddress = assignedMacAddress; 0271 } 0272 0273 QString NetworkManager::WiredSetting::assignedMacAddress() const 0274 { 0275 Q_D(const WiredSetting); 0276 0277 return d->assignedMacAddress; 0278 } 0279 0280 void NetworkManager::WiredSetting::fromMap(const QVariantMap &setting) 0281 { 0282 if (setting.contains(QLatin1String(NM_SETTING_WIRED_PORT))) { 0283 const QString port = setting.value(QLatin1String(NM_SETTING_WIRED_PORT)).toString(); 0284 0285 if (port == "tp") { 0286 setPort(Tp); 0287 } else if (port == "aui") { 0288 setPort(Aui); 0289 } else if (port == "bnc") { 0290 setPort(Bnc); 0291 } else if (port == "mii") { 0292 setPort(Mii); 0293 } 0294 } 0295 0296 if (setting.contains(QLatin1String(NM_SETTING_WIRED_SPEED))) { 0297 setSpeed(setting.value(QLatin1String(NM_SETTING_WIRED_SPEED)).toUInt()); 0298 } 0299 0300 if (setting.contains(QLatin1String(NM_SETTING_WIRED_DUPLEX))) { 0301 const QString duplex = setting.value(QLatin1String(NM_SETTING_WIRED_DUPLEX)).toString(); 0302 0303 if (duplex == "half") { 0304 setDuplexType(Half); 0305 } else if (duplex == "full") { 0306 setDuplexType(Full); 0307 } 0308 } 0309 0310 if (setting.contains(QLatin1String(NM_SETTING_WIRED_AUTO_NEGOTIATE))) { 0311 setAutoNegotiate(setting.value(QLatin1String(NM_SETTING_WIRED_AUTO_NEGOTIATE)).toBool()); 0312 } 0313 0314 if (setting.contains(QLatin1String(NM_SETTING_WIRED_GENERATE_MAC_ADDRESS_MASK))) { 0315 setGenerateMacAddressMask(setting.value(QLatin1String(NM_SETTING_WIRED_GENERATE_MAC_ADDRESS_MASK)).toString()); 0316 } 0317 0318 if (setting.contains(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS))) { 0319 setMacAddress(setting.value(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS)).toByteArray()); 0320 } 0321 0322 if (setting.contains(QLatin1String(NM_SETTING_WIRED_CLONED_MAC_ADDRESS))) { 0323 setClonedMacAddress(setting.value(QLatin1String(NM_SETTING_WIRED_CLONED_MAC_ADDRESS)).toByteArray()); 0324 } 0325 0326 if (setting.contains(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST))) { 0327 setMacAddressBlacklist(setting.value(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST)).toStringList()); 0328 } 0329 0330 if (setting.contains(QLatin1String(NM_SETTING_WIRED_MTU))) { 0331 setMtu(setting.value(QLatin1String(NM_SETTING_WIRED_MTU)).toUInt()); 0332 } 0333 0334 if (setting.contains(QLatin1String(NM_SETTING_WIRED_S390_SUBCHANNELS))) { 0335 setS390Subchannels(setting.value(QLatin1String(NM_SETTING_WIRED_S390_SUBCHANNELS)).toStringList()); 0336 } 0337 0338 if (setting.contains(QLatin1String(NM_SETTING_WIRED_S390_NETTYPE))) { 0339 const QString nettype = setting.value(QLatin1String(NM_SETTING_WIRED_S390_NETTYPE)).toString(); 0340 0341 if (nettype == "qeth") { 0342 setS390NetType(Qeth); 0343 } else if (nettype == "lcs") { 0344 setS390NetType(Lcs); 0345 } else if (nettype == "ctc") { 0346 setS390NetType(Ctc); 0347 } 0348 } 0349 0350 if (setting.contains(QLatin1String(NM_SETTING_WIRED_S390_OPTIONS))) { 0351 QMap<QString, QString> tmp; 0352 if (setting.value(QLatin1String(NM_SETTING_WIRED_S390_OPTIONS)).canConvert<QDBusArgument>()) { 0353 QDBusArgument arg = setting.value(QLatin1String(NM_SETTING_WIRED_S390_OPTIONS)).value<QDBusArgument>(); 0354 tmp = qdbus_cast<NMStringMap>(arg); 0355 } else { 0356 tmp = setting.value(QLatin1String(NM_SETTING_WIRED_S390_OPTIONS)).value<NMStringMap>(); 0357 } 0358 setS390Options(tmp); 0359 } 0360 0361 if (setting.contains(QLatin1String(NM_SETTING_WIRED_WAKE_ON_LAN))) { 0362 setWakeOnLan((NetworkManager::WiredSetting::WakeOnLanFlags)setting.value(QLatin1String(NM_SETTING_WIRED_WAKE_ON_LAN)).toUInt()); 0363 } 0364 0365 if (setting.contains(QLatin1String(NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD))) { 0366 setWakeOnLanPassword(setting.value(QLatin1String(NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD)).toString()); 0367 } 0368 0369 if (setting.contains(QLatin1String(NM_SETTING_WIRED_ASSIGNED_MAC_ADDRESS))) { 0370 setAssignedMacAddress(setting.value(QLatin1String(NM_SETTING_WIRED_ASSIGNED_MAC_ADDRESS)).toString()); 0371 } 0372 } 0373 0374 QVariantMap NetworkManager::WiredSetting::toMap() const 0375 { 0376 QVariantMap setting; 0377 0378 switch (port()) { 0379 case Tp: 0380 setting.insert(QLatin1String(NM_SETTING_WIRED_PORT), "tp"); 0381 break; 0382 case Aui: 0383 setting.insert(QLatin1String(NM_SETTING_WIRED_PORT), "aui"); 0384 break; 0385 case Bnc: 0386 setting.insert(QLatin1String(NM_SETTING_WIRED_PORT), "bnc"); 0387 break; 0388 case Mii: 0389 setting.insert(QLatin1String(NM_SETTING_WIRED_PORT), "mii"); 0390 break; 0391 case UnknownPort: // Make GCC hapy 0392 break; 0393 } 0394 0395 // When autonegotiation is set we have to avoid setting speed and duplex, while 0396 // when autonegotiation is disabled, we have to specify both 0397 if (autoNegotiate()) { 0398 setting.insert(QLatin1String(NM_SETTING_WIRED_AUTO_NEGOTIATE), autoNegotiate()); 0399 } else { 0400 setting.insert(QLatin1String(NM_SETTING_WIRED_AUTO_NEGOTIATE), autoNegotiate()); 0401 setting.insert(QLatin1String(NM_SETTING_WIRED_SPEED), speed()); 0402 0403 switch (duplexType()) { 0404 case Half: 0405 setting.insert(QLatin1String(NM_SETTING_WIRED_DUPLEX), "half"); 0406 break; 0407 case Full: 0408 setting.insert(QLatin1String(NM_SETTING_WIRED_DUPLEX), "full"); 0409 break; 0410 case UnknownDuplexType: 0411 break; 0412 } 0413 } 0414 0415 if (!generateMacAddressMask().isEmpty()) { 0416 setting.insert(QLatin1String(NM_SETTING_WIRED_GENERATE_MAC_ADDRESS_MASK), generateMacAddressMask()); 0417 } 0418 0419 if (!macAddress().isEmpty()) { 0420 setting.insert(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS), macAddress()); 0421 } 0422 if (!clonedMacAddress().isEmpty()) { 0423 setting.insert(QLatin1String(NM_SETTING_WIRED_CLONED_MAC_ADDRESS), clonedMacAddress()); 0424 } 0425 if (!macAddressBlacklist().isEmpty()) { 0426 setting.insert(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST), macAddressBlacklist()); 0427 } 0428 if (mtu()) { 0429 setting.insert(QLatin1String(NM_SETTING_WIRED_MTU), mtu()); 0430 } 0431 if (!s390Subchannels().isEmpty()) { 0432 setting.insert(QLatin1String(NM_SETTING_WIRED_S390_SUBCHANNELS), s390Subchannels()); 0433 } 0434 0435 switch (s390NetType()) { 0436 case Qeth: 0437 setting.insert(QLatin1String(NM_SETTING_WIRED_S390_NETTYPE), "qeth"); 0438 break; 0439 case Lcs: 0440 setting.insert(QLatin1String(NM_SETTING_WIRED_S390_NETTYPE), "lcs"); 0441 break; 0442 case Ctc: 0443 setting.insert(QLatin1String(NM_SETTING_WIRED_S390_NETTYPE), "ctc"); 0444 break; 0445 case Undefined: 0446 break; 0447 } 0448 0449 if (!s390Options().isEmpty()) { 0450 setting.insert(QLatin1String(NM_SETTING_WIRED_S390_OPTIONS), QVariant::fromValue(s390Options())); 0451 } 0452 0453 setting.insert(QLatin1String(NM_SETTING_WIRED_WAKE_ON_LAN), (uint)wakeOnLan()); 0454 0455 if (!wakeOnLanPassword().isEmpty()) { 0456 setting.insert(QLatin1String(NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD), wakeOnLanPassword()); 0457 } 0458 0459 if (!assignedMacAddress().isEmpty()) { 0460 setting.insert(QLatin1String(NM_SETTING_WIRED_ASSIGNED_MAC_ADDRESS), assignedMacAddress()); 0461 } 0462 0463 return setting; 0464 } 0465 0466 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::WiredSetting &setting) 0467 { 0468 dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n'; 0469 dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; 0470 0471 dbg.nospace() << NM_SETTING_WIRED_PORT << ": " << setting.port() << '\n'; 0472 dbg.nospace() << NM_SETTING_WIRED_SPEED << ": " << setting.speed() << '\n'; 0473 dbg.nospace() << NM_SETTING_WIRED_DUPLEX << ": " << setting.duplexType() << '\n'; 0474 dbg.nospace() << NM_SETTING_WIRED_AUTO_NEGOTIATE << ": " << setting.autoNegotiate() << '\n'; 0475 dbg.nospace() << NM_SETTING_WIRED_GENERATE_MAC_ADDRESS_MASK << ": " << setting.generateMacAddressMask() << '\n'; 0476 dbg.nospace() << NM_SETTING_WIRED_MAC_ADDRESS << ": " << setting.macAddress() << '\n'; 0477 dbg.nospace() << NM_SETTING_WIRED_CLONED_MAC_ADDRESS << ": " << setting.clonedMacAddress() << '\n'; 0478 dbg.nospace() << NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST << ": " << setting.macAddressBlacklist() << '\n'; 0479 dbg.nospace() << NM_SETTING_WIRED_MTU << ": " << setting.mtu() << '\n'; 0480 dbg.nospace() << NM_SETTING_WIRED_S390_SUBCHANNELS << ": " << setting.s390Subchannels() << '\n'; 0481 dbg.nospace() << NM_SETTING_WIRED_S390_NETTYPE << ": " << setting.s390NetType() << '\n'; 0482 dbg.nospace() << NM_SETTING_WIRED_S390_OPTIONS << ": " << setting.s390Options() << '\n'; 0483 dbg.nospace() << NM_SETTING_WIRED_WAKE_ON_LAN << ": " << setting.wakeOnLan() << '\n'; 0484 dbg.nospace() << NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD << ": " << setting.wakeOnLanPassword() << '\n'; 0485 dbg.nospace() << NM_SETTING_WIRED_ASSIGNED_MAC_ADDRESS << ": " << setting.assignedMacAddress() << '\n'; 0486 0487 return dbg.maybeSpace(); 0488 }