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 "iptunnelsetting.h"
0008 #include "iptunnelsetting_p.h"
0009 
0010 #include <QDebug>
0011 
0012 #if !NM_CHECK_VERSION(1, 12, 0)
0013 #define NM_SETTING_IP_TUNNEL_FLAGS "flags"
0014 #endif
0015 
0016 NetworkManager::IpTunnelSettingPrivate::IpTunnelSettingPrivate()
0017     : name(NM_SETTING_IP_TUNNEL_SETTING_NAME)
0018     , mode(IpTunnelSetting::Unknown)
0019     , pathMtuDiscovery(true)
0020     , encapsulationLimit(0)
0021     , flags(IpTunnelSetting::None)
0022     , flowLabel(0)
0023     , mtu(0)
0024     , tos(0)
0025     , ttl(0)
0026 {
0027 }
0028 
0029 NetworkManager::IpTunnelSetting::IpTunnelSetting()
0030     : Setting(Setting::IpTunnel)
0031     , d_ptr(new IpTunnelSettingPrivate())
0032 {
0033 }
0034 
0035 NetworkManager::IpTunnelSetting::IpTunnelSetting(const Ptr &other)
0036     : Setting(other)
0037     , d_ptr(new IpTunnelSettingPrivate())
0038 {
0039     setMode(other->mode());
0040     setPathMtuDiscovery(other->pathMtuDiscovery());
0041     setEncapsulationLimit(other->encapsulationLimit());
0042     setFlags(other->flags());
0043     setFlowLabel(other->flowLabel());
0044     setMtu(other->mtu());
0045     setTos(other->tos());
0046     setTtl(other->ttl());
0047     setInputKey(other->inputKey());
0048     setLocal(other->local());
0049     setOutputKey(other->outputKey());
0050     setParent(other->parent());
0051     setRemote(other->remote());
0052 }
0053 
0054 NetworkManager::IpTunnelSetting::~IpTunnelSetting()
0055 {
0056     delete d_ptr;
0057 }
0058 
0059 QString NetworkManager::IpTunnelSetting::name() const
0060 {
0061     Q_D(const IpTunnelSetting);
0062 
0063     return d->name;
0064 }
0065 
0066 void NetworkManager::IpTunnelSetting::setMode(NetworkManager::IpTunnelSetting::Mode mode)
0067 {
0068     Q_D(IpTunnelSetting);
0069 
0070     d->mode = mode;
0071 }
0072 
0073 NetworkManager::IpTunnelSetting::Mode NetworkManager::IpTunnelSetting::mode() const
0074 {
0075     Q_D(const IpTunnelSetting);
0076 
0077     return d->mode;
0078 }
0079 
0080 void NetworkManager::IpTunnelSetting::setPathMtuDiscovery(bool discovery)
0081 {
0082     Q_D(IpTunnelSetting);
0083 
0084     d->pathMtuDiscovery = discovery;
0085 }
0086 
0087 bool NetworkManager::IpTunnelSetting::pathMtuDiscovery() const
0088 {
0089     Q_D(const IpTunnelSetting);
0090 
0091     return d->pathMtuDiscovery;
0092 }
0093 
0094 void NetworkManager::IpTunnelSetting::setEncapsulationLimit(quint32 limit)
0095 {
0096     Q_D(IpTunnelSetting);
0097 
0098     d->encapsulationLimit = limit;
0099 }
0100 
0101 quint32 NetworkManager::IpTunnelSetting::encapsulationLimit() const
0102 {
0103     Q_D(const IpTunnelSetting);
0104 
0105     return d->encapsulationLimit;
0106 }
0107 
0108 void NetworkManager::IpTunnelSetting::setFlags(NetworkManager::IpTunnelSetting::Flags flags)
0109 {
0110     Q_D(IpTunnelSetting);
0111 
0112     d->flags = flags;
0113 }
0114 
0115 NetworkManager::IpTunnelSetting::Flags NetworkManager::IpTunnelSetting::flags() const
0116 {
0117     Q_D(const IpTunnelSetting);
0118 
0119     return d->flags;
0120 }
0121 
0122 void NetworkManager::IpTunnelSetting::setFlowLabel(quint32 label)
0123 {
0124     Q_D(IpTunnelSetting);
0125 
0126     d->flowLabel = label;
0127 }
0128 
0129 quint32 NetworkManager::IpTunnelSetting::flowLabel() const
0130 {
0131     Q_D(const IpTunnelSetting);
0132 
0133     return d->flowLabel;
0134 }
0135 
0136 void NetworkManager::IpTunnelSetting::setMtu(quint32 mtu)
0137 {
0138     Q_D(IpTunnelSetting);
0139 
0140     d->mtu = mtu;
0141 }
0142 
0143 quint32 NetworkManager::IpTunnelSetting::mtu() const
0144 {
0145     Q_D(const IpTunnelSetting);
0146 
0147     return d->mtu;
0148 }
0149 
0150 void NetworkManager::IpTunnelSetting::setTos(quint32 tos)
0151 {
0152     Q_D(IpTunnelSetting);
0153 
0154     d->tos = tos;
0155 }
0156 
0157 quint32 NetworkManager::IpTunnelSetting::tos() const
0158 {
0159     Q_D(const IpTunnelSetting);
0160 
0161     return d->tos;
0162 }
0163 
0164 void NetworkManager::IpTunnelSetting::setTtl(quint32 ttl)
0165 {
0166     Q_D(IpTunnelSetting);
0167 
0168     d->ttl = ttl;
0169 }
0170 
0171 quint32 NetworkManager::IpTunnelSetting::ttl() const
0172 {
0173     Q_D(const IpTunnelSetting);
0174 
0175     return d->ttl;
0176 }
0177 
0178 void NetworkManager::IpTunnelSetting::setInputKey(const QString &key)
0179 {
0180     Q_D(IpTunnelSetting);
0181 
0182     d->inputKey = key;
0183 }
0184 
0185 QString NetworkManager::IpTunnelSetting::inputKey() const
0186 {
0187     Q_D(const IpTunnelSetting);
0188 
0189     return d->inputKey;
0190 }
0191 
0192 void NetworkManager::IpTunnelSetting::setLocal(const QString &local)
0193 {
0194     Q_D(IpTunnelSetting);
0195 
0196     d->local = local;
0197 }
0198 
0199 QString NetworkManager::IpTunnelSetting::local() const
0200 {
0201     Q_D(const IpTunnelSetting);
0202 
0203     return d->local;
0204 }
0205 
0206 void NetworkManager::IpTunnelSetting::setParent(const QString &parent)
0207 {
0208     Q_D(IpTunnelSetting);
0209 
0210     d->parent = parent;
0211 }
0212 
0213 QString NetworkManager::IpTunnelSetting::parent() const
0214 {
0215     Q_D(const IpTunnelSetting);
0216 
0217     return d->parent;
0218 }
0219 
0220 void NetworkManager::IpTunnelSetting::setOutputKey(const QString &key)
0221 {
0222     Q_D(IpTunnelSetting);
0223 
0224     d->outputKey = key;
0225 }
0226 
0227 QString NetworkManager::IpTunnelSetting::outputKey() const
0228 {
0229     Q_D(const IpTunnelSetting);
0230 
0231     return d->outputKey;
0232 }
0233 
0234 void NetworkManager::IpTunnelSetting::setRemote(const QString &remote)
0235 {
0236     Q_D(IpTunnelSetting);
0237 
0238     d->remote = remote;
0239 }
0240 
0241 QString NetworkManager::IpTunnelSetting::remote() const
0242 {
0243     Q_D(const IpTunnelSetting);
0244 
0245     return d->remote;
0246 }
0247 
0248 void NetworkManager::IpTunnelSetting::fromMap(const QVariantMap &setting)
0249 {
0250     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_MODE))) {
0251         setMode((Mode)setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_MODE)).toUInt());
0252     }
0253 
0254     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY))) {
0255         setPathMtuDiscovery(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY)).toBool());
0256     }
0257 
0258     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT))) {
0259         setEncapsulationLimit(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT)).toUInt());
0260     }
0261 
0262     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_FLAGS))) {
0263         setFlags((Flag)setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_FLAGS)).toUInt());
0264     }
0265 
0266     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_FLOW_LABEL))) {
0267         setFlowLabel(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_FLOW_LABEL)).toUInt());
0268     }
0269 
0270     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_MTU))) {
0271         setMtu(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_MTU)).toUInt());
0272     }
0273 
0274     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_TOS))) {
0275         setTos(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_TOS)).toUInt());
0276     }
0277 
0278     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_TTL))) {
0279         setTtl(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_TTL)).toUInt());
0280     }
0281 
0282     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_INPUT_KEY))) {
0283         setInputKey(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_INPUT_KEY)).toString());
0284     }
0285 
0286     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_LOCAL))) {
0287         setLocal(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_LOCAL)).toString());
0288     }
0289 
0290     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_PARENT))) {
0291         setParent(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_PARENT)).toString());
0292     }
0293 
0294     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_OUTPUT_KEY))) {
0295         setOutputKey(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_OUTPUT_KEY)).toString());
0296     }
0297 
0298     if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_REMOTE))) {
0299         setRemote(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_REMOTE)).toString());
0300     }
0301 }
0302 
0303 QVariantMap NetworkManager::IpTunnelSetting::toMap() const
0304 {
0305     QVariantMap setting;
0306 
0307     setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY), pathMtuDiscovery());
0308 
0309     if (mode() != Unknown) {
0310         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_MODE), (int)mode());
0311     }
0312 
0313     if (encapsulationLimit() > 0) {
0314         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT), encapsulationLimit());
0315     }
0316 
0317     if (flags() > None) {
0318         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_FLAGS), (int)flags());
0319     }
0320 
0321     if (flowLabel() > 0) {
0322         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_FLOW_LABEL), flowLabel());
0323     }
0324 
0325     if (mtu() > 0) {
0326         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_MTU), mtu());
0327     }
0328 
0329     if (tos() > 0) {
0330         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_TOS), tos());
0331     }
0332 
0333     if (ttl() > 0) {
0334         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_TTL), ttl());
0335     }
0336 
0337     if (!inputKey().isEmpty()) {
0338         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_INPUT_KEY), inputKey());
0339     }
0340 
0341     if (!local().isEmpty()) {
0342         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_LOCAL), local());
0343     }
0344 
0345     if (!parent().isEmpty()) {
0346         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_PARENT), parent());
0347     }
0348 
0349     if (!outputKey().isEmpty()) {
0350         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_OUTPUT_KEY), outputKey());
0351     }
0352 
0353     if (!remote().isEmpty()) {
0354         setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_REMOTE), remote());
0355     }
0356 
0357     return setting;
0358 }
0359 
0360 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::IpTunnelSetting &setting)
0361 {
0362     dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n';
0363     dbg.nospace() << "initialized: " << !setting.isNull() << '\n';
0364 
0365     dbg.nospace() << NM_SETTING_IP_TUNNEL_MODE << ": " << setting.mode() << '\n';
0366     dbg.nospace() << NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY << ": " << setting.pathMtuDiscovery() << '\n';
0367     dbg.nospace() << NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT << ": " << setting.encapsulationLimit() << '\n';
0368     dbg.nospace() << NM_SETTING_IP_TUNNEL_FLAGS << ": " << setting.flags() << '\n';
0369     dbg.nospace() << NM_SETTING_IP_TUNNEL_FLOW_LABEL << ": " << setting.flowLabel() << '\n';
0370     dbg.nospace() << NM_SETTING_IP_TUNNEL_MTU << ": " << setting.mtu() << '\n';
0371     dbg.nospace() << NM_SETTING_IP_TUNNEL_TOS << ": " << setting.tos() << '\n';
0372     dbg.nospace() << NM_SETTING_IP_TUNNEL_TTL << ": " << setting.ttl() << '\n';
0373     dbg.nospace() << NM_SETTING_IP_TUNNEL_INPUT_KEY << ": " << setting.inputKey() << '\n';
0374     dbg.nospace() << NM_SETTING_IP_TUNNEL_LOCAL << ": " << setting.local() << '\n';
0375     dbg.nospace() << NM_SETTING_IP_TUNNEL_PARENT << ": " << setting.parent() << '\n';
0376     dbg.nospace() << NM_SETTING_IP_TUNNEL_OUTPUT_KEY << ": " << setting.outputKey() << '\n';
0377     dbg.nospace() << NM_SETTING_IP_TUNNEL_REMOTE << ": " << setting.remote() << '\n';
0378 
0379     return dbg.maybeSpace();
0380 }