File indexing completed on 2024-04-21 04:00:07

0001 /*
0002     SPDX-FileCopyrightText: 2018 Billy Laws <blaws05@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 "vxlansetting.h"
0008 #include "vxlansetting_p.h"
0009 
0010 #include <QDebug>
0011 
0012 NetworkManager::VxlanSettingPrivate::VxlanSettingPrivate()
0013     : name(NM_SETTING_VXLAN_SETTING_NAME)
0014     , ageing(32)
0015     , destinationPort(8472)
0016     , id(0)
0017     , l2Miss(false)
0018     , l3Miss(false)
0019     , learning(true)
0020     , limit(0)
0021     , proxy(false)
0022     , rsc(false)
0023     , sourcePortMax(0)
0024     , sourcePortMin(0)
0025     , tos(0)
0026     , ttl(0)
0027 {
0028 }
0029 
0030 NetworkManager::VxlanSetting::VxlanSetting()
0031     : Setting(Setting::Vxlan)
0032     , d_ptr(new VxlanSettingPrivate())
0033 {
0034 }
0035 
0036 NetworkManager::VxlanSetting::VxlanSetting(const NetworkManager::VxlanSetting::Ptr &other)
0037     : Setting(other)
0038     , d_ptr(new VxlanSettingPrivate())
0039 {
0040     setAgeing(other->ageing());
0041     setDestinationPort(other->destinationPort());
0042     setId(other->id());
0043     setL2Miss(other->l2Miss());
0044     setL3Miss(other->l3Miss());
0045     setLearning(other->learning());
0046     setLimit(other->limit());
0047     setLocal(other->local());
0048     setParent(other->parent());
0049     setProxy(other->proxy());
0050     setRemote(other->remote());
0051     setRsc(other->rsc());
0052     setSourcePortMax(other->sourcePortMax());
0053     setSourcePortMin(other->sourcePortMin());
0054     setTos(other->tos());
0055     setTtl(other->ttl());
0056 }
0057 
0058 NetworkManager::VxlanSetting::~VxlanSetting()
0059 {
0060     delete d_ptr;
0061 }
0062 
0063 QString NetworkManager::VxlanSetting::name() const
0064 {
0065     Q_D(const VxlanSetting);
0066 
0067     return d->name;
0068 }
0069 
0070 void NetworkManager::VxlanSetting::setAgeing(quint32 ageing)
0071 {
0072     Q_D(VxlanSetting);
0073 
0074     d->ageing = ageing;
0075 }
0076 
0077 quint32 NetworkManager::VxlanSetting::ageing() const
0078 {
0079     Q_D(const VxlanSetting);
0080 
0081     return d->ageing;
0082 }
0083 
0084 void NetworkManager::VxlanSetting::setDestinationPort(quint32 port)
0085 {
0086     Q_D(VxlanSetting);
0087 
0088     d->destinationPort = port;
0089 }
0090 
0091 quint32 NetworkManager::VxlanSetting::destinationPort() const
0092 {
0093     Q_D(const VxlanSetting);
0094 
0095     return d->destinationPort;
0096 }
0097 
0098 void NetworkManager::VxlanSetting::setId(quint32 id)
0099 {
0100     Q_D(VxlanSetting);
0101 
0102     d->id = id;
0103 }
0104 
0105 quint32 NetworkManager::VxlanSetting::id() const
0106 {
0107     Q_D(const VxlanSetting);
0108 
0109     return d->id;
0110 }
0111 
0112 void NetworkManager::VxlanSetting::setL2Miss(bool enable)
0113 {
0114     Q_D(VxlanSetting);
0115 
0116     d->l2Miss = enable;
0117 }
0118 
0119 bool NetworkManager::VxlanSetting::l2Miss() const
0120 {
0121     Q_D(const VxlanSetting);
0122 
0123     return d->l2Miss;
0124 }
0125 
0126 void NetworkManager::VxlanSetting::setL3Miss(bool enable)
0127 {
0128     Q_D(VxlanSetting);
0129 
0130     d->l3Miss = enable;
0131 }
0132 
0133 bool NetworkManager::VxlanSetting::l3Miss() const
0134 {
0135     Q_D(const VxlanSetting);
0136 
0137     return d->l3Miss;
0138 }
0139 
0140 void NetworkManager::VxlanSetting::setLearning(bool enable)
0141 {
0142     Q_D(VxlanSetting);
0143 
0144     d->learning = enable;
0145 }
0146 
0147 bool NetworkManager::VxlanSetting::learning() const
0148 {
0149     Q_D(const VxlanSetting);
0150 
0151     return d->learning;
0152 }
0153 
0154 void NetworkManager::VxlanSetting::setLimit(quint32 limit)
0155 {
0156     Q_D(VxlanSetting);
0157 
0158     d->limit = limit;
0159 }
0160 
0161 quint32 NetworkManager::VxlanSetting::limit() const
0162 {
0163     Q_D(const VxlanSetting);
0164 
0165     return d->limit;
0166 }
0167 
0168 void NetworkManager::VxlanSetting::setLocal(QString local)
0169 {
0170     Q_D(VxlanSetting);
0171 
0172     d->local = local;
0173 }
0174 
0175 QString NetworkManager::VxlanSetting::local() const
0176 {
0177     Q_D(const VxlanSetting);
0178 
0179     return d->local;
0180 }
0181 
0182 void NetworkManager::VxlanSetting::setParent(QString parent)
0183 {
0184     Q_D(VxlanSetting);
0185 
0186     d->parent = parent;
0187 }
0188 
0189 QString NetworkManager::VxlanSetting::parent() const
0190 {
0191     Q_D(const VxlanSetting);
0192 
0193     return d->parent;
0194 }
0195 
0196 void NetworkManager::VxlanSetting::setProxy(bool enable)
0197 {
0198     Q_D(VxlanSetting);
0199 
0200     d->proxy = enable;
0201 }
0202 
0203 bool NetworkManager::VxlanSetting::proxy() const
0204 {
0205     Q_D(const VxlanSetting);
0206 
0207     return d->proxy;
0208 }
0209 
0210 void NetworkManager::VxlanSetting::setRemote(QString remote)
0211 {
0212     Q_D(VxlanSetting);
0213 
0214     d->remote = remote;
0215 }
0216 
0217 QString NetworkManager::VxlanSetting::remote() const
0218 {
0219     Q_D(const VxlanSetting);
0220 
0221     return d->remote;
0222 }
0223 
0224 void NetworkManager::VxlanSetting::setRsc(bool enable)
0225 {
0226     Q_D(VxlanSetting);
0227 
0228     d->rsc = enable;
0229 }
0230 
0231 bool NetworkManager::VxlanSetting::rsc() const
0232 {
0233     Q_D(const VxlanSetting);
0234 
0235     return d->rsc;
0236 }
0237 
0238 void NetworkManager::VxlanSetting::setSourcePortMax(quint32 maxPort)
0239 {
0240     Q_D(VxlanSetting);
0241 
0242     d->sourcePortMax = maxPort;
0243 }
0244 
0245 quint32 NetworkManager::VxlanSetting::sourcePortMax() const
0246 {
0247     Q_D(const VxlanSetting);
0248 
0249     return d->sourcePortMax;
0250 }
0251 
0252 void NetworkManager::VxlanSetting::setSourcePortMin(quint32 minPort)
0253 {
0254     Q_D(VxlanSetting);
0255 
0256     d->sourcePortMin = minPort;
0257 }
0258 
0259 quint32 NetworkManager::VxlanSetting::sourcePortMin() const
0260 {
0261     Q_D(const VxlanSetting);
0262 
0263     return d->sourcePortMin;
0264 }
0265 
0266 void NetworkManager::VxlanSetting::setTos(quint32 tos)
0267 {
0268     Q_D(VxlanSetting);
0269 
0270     d->tos = tos;
0271 }
0272 
0273 quint32 NetworkManager::VxlanSetting::tos() const
0274 {
0275     Q_D(const VxlanSetting);
0276 
0277     return d->tos;
0278 }
0279 
0280 void NetworkManager::VxlanSetting::setTtl(quint32 ttl)
0281 {
0282     Q_D(VxlanSetting);
0283 
0284     d->ttl = ttl;
0285 }
0286 
0287 quint32 NetworkManager::VxlanSetting::ttl() const
0288 {
0289     Q_D(const VxlanSetting);
0290 
0291     return d->ttl;
0292 }
0293 void NetworkManager::VxlanSetting::fromMap(const QVariantMap &setting)
0294 {
0295     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_AGEING))) {
0296         setAgeing(setting.value(QLatin1String(NM_SETTING_VXLAN_AGEING)).toUInt());
0297     }
0298 
0299     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_DESTINATION_PORT))) {
0300         setDestinationPort(setting.value(QLatin1String(NM_SETTING_VXLAN_DESTINATION_PORT)).toUInt());
0301     }
0302 
0303     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_ID))) {
0304         setId(setting.value(QLatin1String(NM_SETTING_VXLAN_ID)).toUInt());
0305     }
0306 
0307     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_L2_MISS))) {
0308         setL2Miss(setting.value(QLatin1String(NM_SETTING_VXLAN_L2_MISS)).toBool());
0309     }
0310 
0311     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_L3_MISS))) {
0312         setL3Miss(setting.value(QLatin1String(NM_SETTING_VXLAN_L3_MISS)).toBool());
0313     }
0314 
0315     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_LEARNING))) {
0316         setLearning(setting.value(QLatin1String(NM_SETTING_VXLAN_LEARNING)).toBool());
0317     }
0318 
0319     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_LIMIT))) {
0320         setLimit(setting.value(QLatin1String(NM_SETTING_VXLAN_LIMIT)).toUInt());
0321     }
0322 
0323     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_LOCAL))) {
0324         setLocal(setting.value(QLatin1String(NM_SETTING_VXLAN_LOCAL)).toString());
0325     }
0326 
0327     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_PARENT))) {
0328         setParent(setting.value(QLatin1String(NM_SETTING_VXLAN_PARENT)).toString());
0329     }
0330 
0331     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_PROXY))) {
0332         setProxy(setting.value(QLatin1String(NM_SETTING_VXLAN_PROXY)).toBool());
0333     }
0334 
0335     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_REMOTE))) {
0336         setRemote(setting.value(QLatin1String(NM_SETTING_VXLAN_REMOTE)).toString());
0337     }
0338 
0339     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_RSC))) {
0340         setRsc(setting.value(QLatin1String(NM_SETTING_VXLAN_RSC)).toBool());
0341     }
0342 
0343     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_SOURCE_PORT_MAX))) {
0344         setSourcePortMax(setting.value(QLatin1String(NM_SETTING_VXLAN_SOURCE_PORT_MAX)).toUInt());
0345     }
0346 
0347     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_SOURCE_PORT_MIN))) {
0348         setSourcePortMin(setting.value(QLatin1String(NM_SETTING_VXLAN_SOURCE_PORT_MIN)).toUInt());
0349     }
0350 
0351     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_TOS))) {
0352         setTos(setting.value(QLatin1String(NM_SETTING_VXLAN_TOS)).toUInt());
0353     }
0354 
0355     if (setting.contains(QLatin1String(NM_SETTING_VXLAN_TTL))) {
0356         setTtl(setting.value(QLatin1String(NM_SETTING_VXLAN_TTL)).toUInt());
0357     }
0358 }
0359 
0360 QVariantMap NetworkManager::VxlanSetting::toMap() const
0361 {
0362     QVariantMap setting;
0363 
0364     if (ageing() != 32) {
0365         setting.insert(QLatin1String(NM_SETTING_VXLAN_AGEING), ageing());
0366     }
0367 
0368     if (destinationPort() != 8472) {
0369         setting.insert(QLatin1String(NM_SETTING_VXLAN_DESTINATION_PORT), destinationPort());
0370     }
0371 
0372     if (id()) {
0373         setting.insert(QLatin1String(NM_SETTING_VXLAN_ID), id());
0374     }
0375 
0376     if (l2Miss()) {
0377         setting.insert(QLatin1String(NM_SETTING_VXLAN_L2_MISS), l2Miss());
0378     }
0379 
0380     if (l3Miss()) {
0381         setting.insert(QLatin1String(NM_SETTING_VXLAN_L3_MISS), l3Miss());
0382     }
0383 
0384     if (!learning()) {
0385         setting.insert(QLatin1String(NM_SETTING_VXLAN_LEARNING), learning());
0386     }
0387 
0388     if (limit()) {
0389         setting.insert(QLatin1String(NM_SETTING_VXLAN_LIMIT), limit());
0390     }
0391 
0392     if (!local().isEmpty()) {
0393         setting.insert(QLatin1String(NM_SETTING_VXLAN_LOCAL), local());
0394     }
0395 
0396     if (!parent().isEmpty()) {
0397         setting.insert(QLatin1String(NM_SETTING_VXLAN_PARENT), parent());
0398     }
0399 
0400     if (proxy()) {
0401         setting.insert(QLatin1String(NM_SETTING_VXLAN_PROXY), proxy());
0402     }
0403 
0404     if (!remote().isEmpty()) {
0405         setting.insert(QLatin1String(NM_SETTING_VXLAN_REMOTE), remote());
0406     }
0407 
0408     if (rsc()) {
0409         setting.insert(QLatin1String(NM_SETTING_VXLAN_RSC), rsc());
0410     }
0411 
0412     if (sourcePortMax()) {
0413         setting.insert(QLatin1String(NM_SETTING_VXLAN_SOURCE_PORT_MAX), sourcePortMax());
0414     }
0415 
0416     if (sourcePortMin()) {
0417         setting.insert(QLatin1String(NM_SETTING_VXLAN_SOURCE_PORT_MIN), sourcePortMin());
0418     }
0419 
0420     if (tos()) {
0421         setting.insert(QLatin1String(NM_SETTING_VXLAN_TOS), tos());
0422     }
0423 
0424     if (ttl()) {
0425         setting.insert(QLatin1String(NM_SETTING_VXLAN_TTL), ttl());
0426     }
0427 
0428     return setting;
0429 }
0430 
0431 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::VxlanSetting &setting)
0432 {
0433     dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n';
0434     dbg.nospace() << "initialized: " << !setting.isNull() << '\n';
0435 
0436     dbg.nospace() << NM_SETTING_VXLAN_AGEING << ": " << setting.ageing() << '\n';
0437     dbg.nospace() << NM_SETTING_VXLAN_DESTINATION_PORT << ": " << setting.destinationPort() << '\n';
0438     dbg.nospace() << NM_SETTING_VXLAN_ID << ": " << setting.id() << '\n';
0439     dbg.nospace() << NM_SETTING_VXLAN_L2_MISS << ": " << setting.l2Miss() << '\n';
0440     dbg.nospace() << NM_SETTING_VXLAN_L3_MISS << ": " << setting.l3Miss() << '\n';
0441     dbg.nospace() << NM_SETTING_VXLAN_LEARNING << ": " << setting.learning() << '\n';
0442     dbg.nospace() << NM_SETTING_VXLAN_LIMIT << ": " << setting.limit() << '\n';
0443     dbg.nospace() << NM_SETTING_VXLAN_LOCAL << ": " << setting.local() << '\n';
0444     dbg.nospace() << NM_SETTING_VXLAN_PARENT << ": " << setting.parent() << '\n';
0445     dbg.nospace() << NM_SETTING_VXLAN_PROXY << ": " << setting.proxy() << '\n';
0446     dbg.nospace() << NM_SETTING_VXLAN_REMOTE << ": " << setting.remote() << '\n';
0447     dbg.nospace() << NM_SETTING_VXLAN_RSC << ": " << setting.rsc() << '\n';
0448     dbg.nospace() << NM_SETTING_VXLAN_SOURCE_PORT_MAX << ": " << setting.sourcePortMax() << '\n';
0449     dbg.nospace() << NM_SETTING_VXLAN_SOURCE_PORT_MIN << ": " << setting.sourcePortMin() << '\n';
0450     dbg.nospace() << NM_SETTING_VXLAN_TOS << ": " << setting.tos() << '\n';
0451     dbg.nospace() << NM_SETTING_VXLAN_TTL << ": " << setting.ttl() << '\n';
0452 
0453     return dbg.maybeSpace();
0454 }