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 }