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 }