File indexing completed on 2024-04-28 15:33:16

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 "teamportsetting.h"
0008 #include "teamportsetting_p.h"
0009 
0010 #include <QDebug>
0011 
0012 #if !NM_CHECK_VERSION(1, 10, 0)
0013 #define NM_SETTING_TEAM_PORT_SETTING_NAME "team-port"
0014 
0015 #define NM_SETTING_TEAM_PORT_CONFIG "config"
0016 #define NM_SETTING_TEAM_PORT_QUEUE_ID "queue-id"
0017 #define NM_SETTING_TEAM_PORT_PRIO "prio"
0018 #define NM_SETTING_TEAM_PORT_STICKY "sticky"
0019 #define NM_SETTING_TEAM_PORT_LACP_PRIO "lacp-prio"
0020 #define NM_SETTING_TEAM_PORT_LACP_KEY "lacp-key"
0021 #define NM_SETTING_TEAM_PORT_LINK_WATCHERS "link-watchers"
0022 #endif
0023 
0024 NetworkManager::TeamPortSettingPrivate::TeamPortSettingPrivate()
0025     : name(NM_SETTING_TEAM_PORT_SETTING_NAME)
0026     , lacpKey(0)
0027     , lacpPrio(255)
0028     , prio(0)
0029     , queueId(-1)
0030     , sticky(false)
0031 {
0032 }
0033 
0034 NetworkManager::TeamPortSetting::TeamPortSetting()
0035     : Setting(Setting::TeamPort)
0036     , d_ptr(new TeamPortSettingPrivate())
0037 {
0038 }
0039 
0040 NetworkManager::TeamPortSetting::TeamPortSetting(const Ptr &other)
0041     : Setting(other)
0042     , d_ptr(new TeamPortSettingPrivate())
0043 {
0044     config(other->config());
0045     lacpKey(other->lacpKey());
0046     lacpPrio(other->lacpPrio());
0047     prio(other->prio());
0048     queueId(other->queueId());
0049     sticky(other->sticky());
0050     setLinkWatchers(other->linkWatchers());
0051 }
0052 
0053 NetworkManager::TeamPortSetting::~TeamPortSetting()
0054 {
0055     delete d_ptr;
0056 }
0057 
0058 QString NetworkManager::TeamPortSetting::name() const
0059 {
0060     Q_D(const TeamPortSetting);
0061 
0062     return d->name;
0063 }
0064 
0065 void NetworkManager::TeamPortSetting::config(const QString &config)
0066 {
0067     Q_D(TeamPortSetting);
0068 
0069     d->config = config;
0070 }
0071 
0072 QString NetworkManager::TeamPortSetting::config() const
0073 {
0074     Q_D(const TeamPortSetting);
0075 
0076     return d->config;
0077 }
0078 
0079 void NetworkManager::TeamPortSetting::lacpKey(qint32 key)
0080 {
0081     Q_D(TeamPortSetting);
0082 
0083     d->lacpKey = key;
0084 }
0085 
0086 qint32 NetworkManager::TeamPortSetting::lacpKey() const
0087 {
0088     Q_D(const TeamPortSetting);
0089 
0090     return d->lacpKey;
0091 }
0092 
0093 void NetworkManager::TeamPortSetting::lacpPrio(qint32 priority)
0094 {
0095     Q_D(TeamPortSetting);
0096 
0097     d->lacpPrio = priority;
0098 }
0099 
0100 qint32 NetworkManager::TeamPortSetting::lacpPrio() const
0101 {
0102     Q_D(const TeamPortSetting);
0103 
0104     return d->lacpPrio;
0105 }
0106 
0107 void NetworkManager::TeamPortSetting::prio(qint32 prio)
0108 {
0109     Q_D(TeamPortSetting);
0110 
0111     d->prio = prio;
0112 }
0113 
0114 qint32 NetworkManager::TeamPortSetting::prio() const
0115 {
0116     Q_D(const TeamPortSetting);
0117 
0118     return d->prio;
0119 }
0120 
0121 void NetworkManager::TeamPortSetting::queueId(qint32 id)
0122 {
0123     Q_D(TeamPortSetting);
0124 
0125     d->queueId = id;
0126 }
0127 
0128 qint32 NetworkManager::TeamPortSetting::queueId() const
0129 {
0130     Q_D(const TeamPortSetting);
0131 
0132     return d->queueId;
0133 }
0134 
0135 void NetworkManager::TeamPortSetting::sticky(bool sticky)
0136 {
0137     Q_D(TeamPortSetting);
0138 
0139     d->sticky = sticky;
0140 }
0141 
0142 bool NetworkManager::TeamPortSetting::sticky() const
0143 {
0144     Q_D(const TeamPortSetting);
0145 
0146     return d->sticky;
0147 }
0148 
0149 void NetworkManager::TeamPortSetting::setLinkWatchers(const NMVariantMapList &linkWatchers)
0150 {
0151     Q_D(TeamPortSetting);
0152 
0153     d->linkWatchers = linkWatchers;
0154 }
0155 
0156 NMVariantMapList NetworkManager::TeamPortSetting::linkWatchers() const
0157 {
0158     Q_D(const TeamPortSetting);
0159 
0160     return d->linkWatchers;
0161 }
0162 
0163 void NetworkManager::TeamPortSetting::fromMap(const QVariantMap &setting)
0164 {
0165     if (setting.contains(QLatin1String(NM_SETTING_TEAM_PORT_CONFIG))) {
0166         config(setting.value(QLatin1String(NM_SETTING_TEAM_PORT_CONFIG)).toString());
0167     }
0168 
0169     if (setting.contains(QLatin1String(NM_SETTING_TEAM_PORT_LACP_KEY))) {
0170         lacpKey(setting.value(QLatin1String(NM_SETTING_TEAM_PORT_LACP_KEY)).toUInt());
0171     }
0172 
0173     if (setting.contains(QLatin1String(NM_SETTING_TEAM_PORT_LACP_PRIO))) {
0174         lacpPrio(setting.value(QLatin1String(NM_SETTING_TEAM_PORT_LACP_PRIO)).toUInt());
0175     }
0176 
0177     if (setting.contains(QLatin1String(NM_SETTING_TEAM_PORT_PRIO))) {
0178         prio(setting.value(QLatin1String(NM_SETTING_TEAM_PORT_PRIO)).toUInt());
0179     }
0180 
0181     if (setting.contains(QLatin1String(NM_SETTING_TEAM_PORT_QUEUE_ID))) {
0182         queueId(setting.value(QLatin1String(NM_SETTING_TEAM_PORT_QUEUE_ID)).toUInt());
0183     }
0184 
0185     if (setting.contains(QLatin1String(NM_SETTING_TEAM_PORT_STICKY))) {
0186         sticky(setting.value(QLatin1String(NM_SETTING_TEAM_PORT_STICKY)).toBool());
0187     }
0188 
0189     if (setting.contains(QLatin1String(NM_SETTING_TEAM_PORT_LINK_WATCHERS))) {
0190         setLinkWatchers(qdbus_cast<NMVariantMapList>(setting.value(QLatin1String(NM_SETTING_TEAM_PORT_LINK_WATCHERS))));
0191     }
0192 }
0193 
0194 QVariantMap NetworkManager::TeamPortSetting::toMap() const
0195 {
0196     QVariantMap setting;
0197 
0198     if (!config().isEmpty()) {
0199         setting.insert(QLatin1String(NM_SETTING_TEAM_PORT_CONFIG), config());
0200     }
0201 
0202     if (lacpKey() != 0) {
0203         setting.insert(QLatin1String(NM_SETTING_TEAM_PORT_LACP_KEY), lacpKey());
0204     }
0205 
0206     if (lacpPrio() != 255) {
0207         setting.insert(QLatin1String(NM_SETTING_TEAM_PORT_LACP_PRIO), lacpPrio());
0208     }
0209 
0210     if (prio() != 0) {
0211         setting.insert(QLatin1String(NM_SETTING_TEAM_PORT_PRIO), prio());
0212     }
0213 
0214     if (queueId() != -1) {
0215         setting.insert(QLatin1String(NM_SETTING_TEAM_PORT_QUEUE_ID), queueId());
0216     }
0217 
0218     if (sticky()) {
0219         setting.insert(QLatin1String(NM_SETTING_TEAM_PORT_STICKY), sticky());
0220     }
0221 
0222     if (!linkWatchers().empty()) {
0223         setting.insert(QLatin1String(NM_SETTING_TEAM_PORT_LINK_WATCHERS), QVariant::fromValue(linkWatchers()));
0224     }
0225 
0226     return setting;
0227 }
0228 
0229 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::TeamPortSetting &setting)
0230 {
0231     dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n';
0232     dbg.nospace() << "initialized: " << !setting.isNull() << '\n';
0233 
0234     dbg.nospace() << NM_SETTING_TEAM_PORT_CONFIG << ": " << setting.config() << '\n';
0235     dbg.nospace() << NM_SETTING_TEAM_PORT_LACP_KEY << ": " << setting.lacpKey() << '\n';
0236     dbg.nospace() << NM_SETTING_TEAM_PORT_LACP_PRIO << ": " << setting.lacpPrio() << '\n';
0237     dbg.nospace() << NM_SETTING_TEAM_PORT_PRIO << ": " << setting.prio() << '\n';
0238     dbg.nospace() << NM_SETTING_TEAM_PORT_QUEUE_ID << ": " << setting.queueId() << '\n';
0239     dbg.nospace() << NM_SETTING_TEAM_PORT_STICKY << ": " << setting.sticky() << '\n';
0240 
0241     dbg.nospace() << NM_SETTING_TEAM_PORT_LINK_WATCHERS << ": " << '\n';
0242     const NMVariantMapList variantMapList = setting.linkWatchers();
0243     for (const QVariantMap &linkWatcher : variantMapList) {
0244         QVariantMap::const_iterator i = linkWatcher.constBegin();
0245         while (i != linkWatcher.constEnd()) {
0246             dbg.nospace() << i.key() << ": " << i.value() << '\n';
0247         }
0248     }
0249 
0250     return dbg.maybeSpace();
0251 }