File indexing completed on 2024-04-21 04:00:02
0001 /* 0002 SPDX-FileCopyrightText: Pranav Gade <pranavgade20@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "dcbsetting.h" 0008 #include "dcbsetting_p.h" 0009 0010 #include <QDebug> 0011 0012 NetworkManager::DcbSettingPrivate::DcbSettingPrivate() 0013 : name(NM_SETTING_DCB_SETTING_NAME) 0014 , appFcoeMode(NM_SETTING_DCB_FCOE_MODE_FABRIC) 0015 , appFcoePriority(-1) 0016 , appFipPriority(-1) 0017 , appIscsiPriority(-1) 0018 , priorityFlowControl({0, 0, 0, 0, 0, 0, 0, 0}) 0019 , priorityBandwidth({0, 0, 0, 0, 0, 0, 0, 0}) 0020 , priorityGroupBandwidth({0, 0, 0, 0, 0, 0, 0, 0}) 0021 , priorityGroupId({0, 0, 0, 0, 0, 0, 0, 0}) 0022 , priorityStrictBandwidth({0, 0, 0, 0, 0, 0, 0, 0}) 0023 , priorityTrafficClass({0, 0, 0, 0, 0, 0, 0, 0}) 0024 { 0025 } 0026 0027 NetworkManager::DcbSetting::DcbSetting() 0028 : Setting(Setting::Dcb) 0029 , d_ptr(new DcbSettingPrivate()) 0030 { 0031 } 0032 0033 NetworkManager::DcbSetting::DcbSetting(const Ptr &other) 0034 : Setting(other) 0035 , d_ptr(new DcbSettingPrivate()) 0036 { 0037 setAppFcoeMode(other->appFcoeMode()); 0038 setAppFcoePriority(other->appFcoePriority()); 0039 setAppFipPriority(other->appFipPriority()); 0040 setAppIscsiPriority(other->appIscsiPriority()); 0041 setAppFcoeFlags(other->appFcoeFlags()); 0042 setAppFipFlags(other->appFipFlags()); 0043 setAppIscsiFlags(other->appIscsiFlags()); 0044 setPriorityGroupFlags(other->priorityGroupFlags()); 0045 setPriorityFlowControlFlags(other->priorityFlowControlFlags()); 0046 setPriorityFlowControl(other->priorityFlowControl()); 0047 setPriorityBandwidth(other->priorityBandwidth()); 0048 setPriorityGroupBandwidth(other->priorityGroupBandwidth()); 0049 setPriorityGroupId(other->priorityGroupId()); 0050 setPriorityStrictBandwidth(other->priorityStrictBandwidth()); 0051 setPriorityTrafficClass(other->priorityTrafficClass()); 0052 } 0053 0054 NetworkManager::DcbSetting::~DcbSetting() 0055 { 0056 delete d_ptr; 0057 } 0058 0059 QString NetworkManager::DcbSetting::name() const 0060 { 0061 Q_D(const DcbSetting); 0062 0063 return d->name; 0064 } 0065 0066 void NetworkManager::DcbSetting::setAppFcoeMode(const QString &mode) 0067 { 0068 Q_D(DcbSetting); 0069 0070 d->appFcoeMode = mode; 0071 } 0072 0073 QString NetworkManager::DcbSetting::appFcoeMode() const 0074 { 0075 Q_D(const DcbSetting); 0076 0077 return d->appFcoeMode; 0078 } 0079 0080 void NetworkManager::DcbSetting::setAppFcoePriority(qint32 priority) 0081 { 0082 Q_D(DcbSetting); 0083 0084 d->appFcoePriority = priority; 0085 } 0086 0087 qint32 NetworkManager::DcbSetting::appFcoePriority() const 0088 { 0089 Q_D(const DcbSetting); 0090 0091 return d->appFcoePriority; 0092 } 0093 0094 void NetworkManager::DcbSetting::setAppFipPriority(qint32 priority) 0095 { 0096 Q_D(DcbSetting); 0097 0098 d->appFipPriority = priority; 0099 } 0100 0101 qint32 NetworkManager::DcbSetting::appFipPriority() const 0102 { 0103 Q_D(const DcbSetting); 0104 0105 return d->appFipPriority; 0106 } 0107 0108 void NetworkManager::DcbSetting::setAppIscsiPriority(qint32 priority) 0109 { 0110 Q_D(DcbSetting); 0111 0112 d->appIscsiPriority = priority; 0113 } 0114 0115 qint32 NetworkManager::DcbSetting::appIscsiPriority() const 0116 { 0117 Q_D(const DcbSetting); 0118 0119 return d->appIscsiPriority; 0120 } 0121 0122 void NetworkManager::DcbSetting::setAppFcoeFlags(NetworkManager::DcbSetting::DcbFlags flags) 0123 { 0124 Q_D(DcbSetting); 0125 0126 d->appFcoeFlags = flags; 0127 } 0128 0129 NetworkManager::DcbSetting::DcbFlags NetworkManager::DcbSetting::appFcoeFlags() const 0130 { 0131 Q_D(const DcbSetting); 0132 0133 return d->appFcoeFlags; 0134 } 0135 0136 void NetworkManager::DcbSetting::setAppFipFlags(NetworkManager::DcbSetting::DcbFlags flags) 0137 { 0138 Q_D(DcbSetting); 0139 0140 d->appFipFlags = flags; 0141 } 0142 0143 NetworkManager::DcbSetting::DcbFlags NetworkManager::DcbSetting::appFipFlags() const 0144 { 0145 Q_D(const DcbSetting); 0146 0147 return d->appFipFlags; 0148 } 0149 0150 void NetworkManager::DcbSetting::setAppIscsiFlags(NetworkManager::DcbSetting::DcbFlags flags) 0151 { 0152 Q_D(DcbSetting); 0153 0154 d->appIscsiFlags = flags; 0155 } 0156 0157 NetworkManager::DcbSetting::DcbFlags NetworkManager::DcbSetting::appIscsiFlags() const 0158 { 0159 Q_D(const DcbSetting); 0160 0161 return d->appIscsiFlags; 0162 } 0163 0164 void NetworkManager::DcbSetting::setPriorityGroupFlags(NetworkManager::DcbSetting::DcbFlags flags) 0165 { 0166 Q_D(DcbSetting); 0167 0168 d->priorityGroupFlags = flags; 0169 } 0170 0171 NetworkManager::DcbSetting::DcbFlags NetworkManager::DcbSetting::priorityGroupFlags() const 0172 { 0173 Q_D(const DcbSetting); 0174 0175 return d->priorityGroupFlags; 0176 } 0177 0178 void NetworkManager::DcbSetting::setPriorityFlowControlFlags(NetworkManager::DcbSetting::DcbFlags flags) 0179 { 0180 Q_D(DcbSetting); 0181 0182 d->priorityFlowControlFlags = flags; 0183 } 0184 0185 NetworkManager::DcbSetting::DcbFlags NetworkManager::DcbSetting::priorityFlowControlFlags() const 0186 { 0187 Q_D(const DcbSetting); 0188 0189 return d->priorityFlowControlFlags; 0190 } 0191 0192 void NetworkManager::DcbSetting::setPriorityFlowControl(quint32 userPriority, bool enabled) 0193 { 0194 Q_D(DcbSetting); 0195 0196 if (userPriority < 8) { 0197 d->priorityFlowControl[userPriority] = enabled; 0198 } 0199 } 0200 0201 bool NetworkManager::DcbSetting::priorityFlowControl(quint32 userPriority) const 0202 { 0203 Q_D(const DcbSetting); 0204 0205 if (userPriority < 8) { 0206 return d->priorityFlowControl.value(userPriority); 0207 } 0208 return false; 0209 } 0210 0211 void NetworkManager::DcbSetting::setPriorityFlowControl(const UIntList &list) 0212 { 0213 Q_D(DcbSetting); 0214 0215 d->priorityFlowControl = list; 0216 } 0217 0218 UIntList NetworkManager::DcbSetting::priorityFlowControl() const 0219 { 0220 Q_D(const DcbSetting); 0221 0222 return d->priorityFlowControl; 0223 } 0224 0225 void NetworkManager::DcbSetting::setPriorityBandwidth(quint32 userPriority, quint32 bandwidthPercent) 0226 { 0227 Q_D(DcbSetting); 0228 0229 if (userPriority < 8) { 0230 d->priorityBandwidth[userPriority] = bandwidthPercent; 0231 } 0232 } 0233 0234 quint32 NetworkManager::DcbSetting::priorityBandwidth(quint32 userPriority) const 0235 { 0236 Q_D(const DcbSetting); 0237 0238 if (userPriority < 8) { 0239 return d->priorityBandwidth.value(userPriority); 0240 } 0241 return 0; 0242 } 0243 0244 void NetworkManager::DcbSetting::setPriorityBandwidth(const UIntList &list) 0245 { 0246 Q_D(DcbSetting); 0247 0248 d->priorityBandwidth = list; 0249 } 0250 0251 UIntList NetworkManager::DcbSetting::priorityBandwidth() const 0252 { 0253 Q_D(const DcbSetting); 0254 0255 return d->priorityBandwidth; 0256 } 0257 0258 void NetworkManager::DcbSetting::setPriorityGroupBandwidth(quint32 groupId, quint32 bandwidthPercent) 0259 { 0260 Q_D(DcbSetting); 0261 0262 if (groupId < 8) { 0263 d->priorityGroupBandwidth[groupId] = bandwidthPercent; 0264 } 0265 } 0266 0267 quint32 NetworkManager::DcbSetting::priorityGroupBandwidth(quint32 groupId) const 0268 { 0269 Q_D(const DcbSetting); 0270 0271 if (groupId < 8) { 0272 return d->priorityGroupBandwidth.value(groupId); 0273 } 0274 return 0; 0275 } 0276 0277 void NetworkManager::DcbSetting::setPriorityGroupBandwidth(const UIntList &list) 0278 { 0279 Q_D(DcbSetting); 0280 0281 d->priorityGroupBandwidth = list; 0282 } 0283 0284 UIntList NetworkManager::DcbSetting::priorityGroupBandwidth() const 0285 { 0286 Q_D(const DcbSetting); 0287 0288 return d->priorityGroupBandwidth; 0289 } 0290 0291 void NetworkManager::DcbSetting::setPriorityGroupId(quint32 userPriority, quint32 groupId) 0292 { 0293 Q_D(DcbSetting); 0294 0295 if (userPriority < 8) { 0296 d->priorityGroupId[userPriority] = groupId; 0297 } 0298 } 0299 0300 quint32 NetworkManager::DcbSetting::priorityGroupId(quint32 userPriority) const 0301 { 0302 Q_D(const DcbSetting); 0303 0304 if (userPriority < 8) { 0305 return d->priorityGroupId.value(userPriority); 0306 } 0307 return 0; 0308 } 0309 0310 void NetworkManager::DcbSetting::setPriorityGroupId(const UIntList &list) 0311 { 0312 Q_D(DcbSetting); 0313 0314 d->priorityGroupId = list; 0315 } 0316 0317 UIntList NetworkManager::DcbSetting::priorityGroupId() const 0318 { 0319 Q_D(const DcbSetting); 0320 0321 return d->priorityGroupId; 0322 } 0323 0324 void NetworkManager::DcbSetting::setPriorityStrictBandwidth(quint32 userPriority, bool strict) 0325 { 0326 Q_D(DcbSetting); 0327 0328 if (userPriority < 8) { 0329 d->priorityStrictBandwidth[userPriority] = strict; 0330 } 0331 } 0332 0333 bool NetworkManager::DcbSetting::priorityStrictBandwidth(quint32 userPriority) const 0334 { 0335 Q_D(const DcbSetting); 0336 0337 if (userPriority < 8) { 0338 return d->priorityStrictBandwidth.value(userPriority); 0339 } 0340 return false; 0341 } 0342 0343 void NetworkManager::DcbSetting::setPriorityStrictBandwidth(const UIntList &list) 0344 { 0345 Q_D(DcbSetting); 0346 0347 d->priorityStrictBandwidth = list; 0348 } 0349 0350 UIntList NetworkManager::DcbSetting::priorityStrictBandwidth() const 0351 { 0352 Q_D(const DcbSetting); 0353 0354 return d->priorityStrictBandwidth; 0355 } 0356 0357 void NetworkManager::DcbSetting::setPriorityTrafficClass(quint32 userPriority, quint32 trafficClass) 0358 { 0359 Q_D(DcbSetting); 0360 0361 if (userPriority < 8) { 0362 d->priorityTrafficClass[userPriority] = trafficClass; 0363 } 0364 } 0365 0366 quint32 NetworkManager::DcbSetting::priorityTrafficClass(quint32 userPriority) const 0367 { 0368 Q_D(const DcbSetting); 0369 0370 if (userPriority < 8) { 0371 return d->priorityTrafficClass.value(userPriority); 0372 } 0373 return 0; 0374 } 0375 0376 void NetworkManager::DcbSetting::setPriorityTrafficClass(const UIntList &list) 0377 { 0378 Q_D(DcbSetting); 0379 0380 d->priorityTrafficClass = list; 0381 } 0382 0383 UIntList NetworkManager::DcbSetting::priorityTrafficClass() const 0384 { 0385 Q_D(const DcbSetting); 0386 0387 return d->priorityTrafficClass; 0388 } 0389 0390 void NetworkManager::DcbSetting::fromMap(const QVariantMap &setting) 0391 { 0392 if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_FCOE_MODE))) { 0393 setAppFcoeMode(setting.value(QLatin1String(NM_SETTING_DCB_APP_FCOE_MODE)).toString()); 0394 } 0395 0396 if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_FCOE_PRIORITY))) { 0397 setAppFcoePriority(setting.value(QLatin1String(NM_SETTING_DCB_APP_FCOE_PRIORITY)).toInt()); 0398 } 0399 0400 if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_FIP_PRIORITY))) { 0401 setAppFipPriority(setting.value(QLatin1String(NM_SETTING_DCB_APP_FIP_PRIORITY)).toInt()); 0402 } 0403 0404 if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_ISCSI_PRIORITY))) { 0405 setAppIscsiPriority(setting.value(QLatin1String(NM_SETTING_DCB_APP_ISCSI_PRIORITY)).toInt()); 0406 } 0407 0408 if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_FCOE_FLAGS))) { 0409 setAppFcoeFlags(static_cast<DcbFlags>(setting.value(QLatin1String(NM_SETTING_DCB_APP_FCOE_FLAGS)).toUInt())); 0410 } 0411 0412 if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_FIP_FLAGS))) { 0413 setAppFipFlags(static_cast<DcbFlags>(setting.value(QLatin1String(NM_SETTING_DCB_APP_FIP_FLAGS)).toUInt())); 0414 } 0415 0416 if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_ISCSI_FLAGS))) { 0417 setAppIscsiFlags(static_cast<DcbFlags>(setting.value(QLatin1String(NM_SETTING_DCB_APP_ISCSI_FLAGS)).toUInt())); 0418 } 0419 0420 if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_FLAGS))) { 0421 setPriorityGroupFlags(static_cast<DcbFlags>(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_FLAGS)).toUInt())); 0422 } 0423 0424 if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS))) { 0425 setPriorityFlowControlFlags(static_cast<DcbFlags>(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS)).toUInt())); 0426 } 0427 0428 if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL))) { 0429 setPriorityFlowControl(qdbus_cast<UIntList>(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL)))); 0430 } 0431 0432 if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_BANDWIDTH))) { 0433 setPriorityBandwidth(qdbus_cast<UIntList>(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_BANDWIDTH)))); 0434 } 0435 0436 if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH))) { 0437 setPriorityGroupBandwidth(qdbus_cast<UIntList>(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH)))); 0438 } 0439 0440 if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_ID))) { 0441 setPriorityGroupId(qdbus_cast<UIntList>(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_ID)))); 0442 } 0443 0444 if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH))) { 0445 setPriorityStrictBandwidth(qdbus_cast<UIntList>(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH)))); 0446 } 0447 0448 if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS))) { 0449 setPriorityTrafficClass(qdbus_cast<UIntList>(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS)))); 0450 } 0451 } 0452 0453 QVariantMap NetworkManager::DcbSetting::toMap() const 0454 { 0455 QVariantMap setting; 0456 0457 if (!appFcoeMode().isEmpty()) { 0458 setting.insert(QLatin1String(NM_SETTING_DCB_APP_FCOE_MODE), appFcoeMode()); 0459 } 0460 0461 if (appFcoePriority() >= 0) { 0462 setting.insert(QLatin1String(NM_SETTING_DCB_APP_FCOE_PRIORITY), appFcoePriority()); 0463 } 0464 0465 if (appFipPriority() >= 0) { 0466 setting.insert(QLatin1String(NM_SETTING_DCB_APP_FIP_PRIORITY), appFipPriority()); 0467 } 0468 0469 if (appIscsiPriority() >= 0) { 0470 setting.insert(QLatin1String(NM_SETTING_DCB_APP_ISCSI_PRIORITY), appIscsiPriority()); 0471 } 0472 0473 setting.insert(QLatin1String(NM_SETTING_DCB_APP_FCOE_FLAGS), (int)appFcoeFlags()); 0474 setting.insert(QLatin1String(NM_SETTING_DCB_APP_FIP_FLAGS), (int)appFipFlags()); 0475 setting.insert(QLatin1String(NM_SETTING_DCB_APP_ISCSI_FLAGS), (int)appIscsiFlags()); 0476 setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_FLAGS), (int)priorityGroupFlags()); 0477 setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS), (int)priorityFlowControlFlags()); 0478 0479 setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL), QVariant::fromValue(priorityFlowControl())); 0480 setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_BANDWIDTH), QVariant::fromValue(priorityBandwidth())); 0481 setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH), QVariant::fromValue(priorityGroupBandwidth())); 0482 setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_ID), QVariant::fromValue(priorityGroupId())); 0483 setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH), QVariant::fromValue(priorityStrictBandwidth())); 0484 setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS), QVariant::fromValue(priorityTrafficClass())); 0485 0486 return setting; 0487 } 0488 0489 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::DcbSetting &setting) 0490 { 0491 dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n'; 0492 dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; 0493 0494 dbg.nospace() << NM_SETTING_DCB_APP_FCOE_MODE << ": " << setting.appFcoeMode() << '\n'; 0495 dbg.nospace() << NM_SETTING_DCB_APP_FCOE_PRIORITY << ": " << setting.appFcoePriority() << '\n'; 0496 dbg.nospace() << NM_SETTING_DCB_APP_FIP_PRIORITY << ": " << setting.appFipPriority() << '\n'; 0497 dbg.nospace() << NM_SETTING_DCB_APP_ISCSI_PRIORITY << ": " << setting.appIscsiPriority() << '\n'; 0498 dbg.nospace() << NM_SETTING_DCB_APP_FCOE_FLAGS << ": " << setting.appFcoeFlags() << '\n'; 0499 dbg.nospace() << NM_SETTING_DCB_APP_FIP_FLAGS << ": " << setting.appFipFlags() << '\n'; 0500 dbg.nospace() << NM_SETTING_DCB_APP_ISCSI_FLAGS << ": " << setting.appIscsiFlags() << '\n'; 0501 dbg.nospace() << NM_SETTING_DCB_PRIORITY_GROUP_FLAGS << ": " << setting.priorityGroupFlags() << '\n'; 0502 dbg.nospace() << NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS << ": " << setting.priorityFlowControlFlags() << '\n'; 0503 0504 dbg.nospace() << NM_SETTING_DCB_PRIORITY_FLOW_CONTROL << ": "; 0505 const auto flowControlList = setting.priorityFlowControl(); 0506 for (const quint32 enabled : flowControlList) { 0507 dbg.nospace() << enabled << ' '; 0508 } 0509 dbg.nospace() << '\n'; 0510 0511 dbg.nospace() << NM_SETTING_DCB_PRIORITY_BANDWIDTH << ": "; 0512 const auto bwList = setting.priorityBandwidth(); 0513 for (const quint32 bandwidthPercent : bwList) { 0514 dbg.nospace() << bandwidthPercent << ' '; 0515 } 0516 dbg.nospace() << '\n'; 0517 0518 dbg.nospace() << NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH << ": "; 0519 const auto gbwList = setting.priorityGroupBandwidth(); 0520 for (const quint32 bandwidthPercent : gbwList) { 0521 dbg.nospace() << bandwidthPercent << ' '; 0522 } 0523 dbg.nospace() << '\n'; 0524 0525 dbg.nospace() << NM_SETTING_DCB_PRIORITY_GROUP_ID << ": "; 0526 const auto groupIds = setting.priorityGroupId(); 0527 for (const quint32 groupId : groupIds) { 0528 dbg.nospace() << groupId << ' '; 0529 } 0530 dbg.nospace() << '\n'; 0531 0532 dbg.nospace() << NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH << ": "; 0533 const auto strictList = setting.priorityStrictBandwidth(); 0534 for (const quint32 strict : strictList) { 0535 dbg.nospace() << strict << ' '; 0536 } 0537 dbg.nospace() << '\n'; 0538 0539 dbg.nospace() << NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS << ": "; 0540 const auto trafficList = setting.priorityTrafficClass(); 0541 for (const quint32 trafficClass : trafficList) { 0542 dbg.nospace() << trafficClass << ' '; 0543 } 0544 dbg.nospace() << '\n'; 0545 0546 return dbg.maybeSpace(); 0547 }