1 | /* |
2 | SPDX-FileCopyrightText: Pranav Gade <pranavgade20@gmail.com> |
3 | |
4 | SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL |
5 | */ |
6 | |
7 | #include "iptunnelsetting.h" |
8 | #include "iptunnelsetting_p.h" |
9 | |
10 | #include <QDebug> |
11 | |
12 | #if !NM_CHECK_VERSION(1, 12, 0) |
13 | #define NM_SETTING_IP_TUNNEL_FLAGS "flags" |
14 | #endif |
15 | |
16 | NetworkManager::IpTunnelSettingPrivate::IpTunnelSettingPrivate() |
17 | : name(NM_SETTING_IP_TUNNEL_SETTING_NAME) |
18 | , mode(IpTunnelSetting::Unknown) |
19 | , pathMtuDiscovery(true) |
20 | , encapsulationLimit(0) |
21 | , flags(IpTunnelSetting::None) |
22 | , flowLabel(0) |
23 | , mtu(0) |
24 | , tos(0) |
25 | , ttl(0) |
26 | { |
27 | } |
28 | |
29 | NetworkManager::IpTunnelSetting::IpTunnelSetting() |
30 | : Setting(Setting::IpTunnel) |
31 | , d_ptr(new IpTunnelSettingPrivate()) |
32 | { |
33 | } |
34 | |
35 | NetworkManager::IpTunnelSetting::IpTunnelSetting(const Ptr &other) |
36 | : Setting(other) |
37 | , d_ptr(new IpTunnelSettingPrivate()) |
38 | { |
39 | setMode(other->mode()); |
40 | setPathMtuDiscovery(other->pathMtuDiscovery()); |
41 | setEncapsulationLimit(other->encapsulationLimit()); |
42 | setFlags(other->flags()); |
43 | setFlowLabel(other->flowLabel()); |
44 | setMtu(other->mtu()); |
45 | setTos(other->tos()); |
46 | setTtl(other->ttl()); |
47 | setInputKey(other->inputKey()); |
48 | setLocal(other->local()); |
49 | setOutputKey(other->outputKey()); |
50 | setParent(other->parent()); |
51 | setRemote(other->remote()); |
52 | } |
53 | |
54 | NetworkManager::IpTunnelSetting::~IpTunnelSetting() |
55 | { |
56 | delete d_ptr; |
57 | } |
58 | |
59 | QString NetworkManager::IpTunnelSetting::name() const |
60 | { |
61 | Q_D(const IpTunnelSetting); |
62 | |
63 | return d->name; |
64 | } |
65 | |
66 | void NetworkManager::IpTunnelSetting::setMode(NetworkManager::IpTunnelSetting::Mode mode) |
67 | { |
68 | Q_D(IpTunnelSetting); |
69 | |
70 | d->mode = mode; |
71 | } |
72 | |
73 | NetworkManager::IpTunnelSetting::Mode NetworkManager::IpTunnelSetting::mode() const |
74 | { |
75 | Q_D(const IpTunnelSetting); |
76 | |
77 | return d->mode; |
78 | } |
79 | |
80 | void NetworkManager::IpTunnelSetting::setPathMtuDiscovery(bool discovery) |
81 | { |
82 | Q_D(IpTunnelSetting); |
83 | |
84 | d->pathMtuDiscovery = discovery; |
85 | } |
86 | |
87 | bool NetworkManager::IpTunnelSetting::pathMtuDiscovery() const |
88 | { |
89 | Q_D(const IpTunnelSetting); |
90 | |
91 | return d->pathMtuDiscovery; |
92 | } |
93 | |
94 | void NetworkManager::IpTunnelSetting::setEncapsulationLimit(quint32 limit) |
95 | { |
96 | Q_D(IpTunnelSetting); |
97 | |
98 | d->encapsulationLimit = limit; |
99 | } |
100 | |
101 | quint32 NetworkManager::IpTunnelSetting::encapsulationLimit() const |
102 | { |
103 | Q_D(const IpTunnelSetting); |
104 | |
105 | return d->encapsulationLimit; |
106 | } |
107 | |
108 | void NetworkManager::IpTunnelSetting::setFlags(NetworkManager::IpTunnelSetting::Flags flags) |
109 | { |
110 | Q_D(IpTunnelSetting); |
111 | |
112 | d->flags = flags; |
113 | } |
114 | |
115 | NetworkManager::IpTunnelSetting::Flags NetworkManager::IpTunnelSetting::flags() const |
116 | { |
117 | Q_D(const IpTunnelSetting); |
118 | |
119 | return d->flags; |
120 | } |
121 | |
122 | void NetworkManager::IpTunnelSetting::setFlowLabel(quint32 label) |
123 | { |
124 | Q_D(IpTunnelSetting); |
125 | |
126 | d->flowLabel = label; |
127 | } |
128 | |
129 | quint32 NetworkManager::IpTunnelSetting::flowLabel() const |
130 | { |
131 | Q_D(const IpTunnelSetting); |
132 | |
133 | return d->flowLabel; |
134 | } |
135 | |
136 | void NetworkManager::IpTunnelSetting::setMtu(quint32 mtu) |
137 | { |
138 | Q_D(IpTunnelSetting); |
139 | |
140 | d->mtu = mtu; |
141 | } |
142 | |
143 | quint32 NetworkManager::IpTunnelSetting::mtu() const |
144 | { |
145 | Q_D(const IpTunnelSetting); |
146 | |
147 | return d->mtu; |
148 | } |
149 | |
150 | void NetworkManager::IpTunnelSetting::setTos(quint32 tos) |
151 | { |
152 | Q_D(IpTunnelSetting); |
153 | |
154 | d->tos = tos; |
155 | } |
156 | |
157 | quint32 NetworkManager::IpTunnelSetting::tos() const |
158 | { |
159 | Q_D(const IpTunnelSetting); |
160 | |
161 | return d->tos; |
162 | } |
163 | |
164 | void NetworkManager::IpTunnelSetting::setTtl(quint32 ttl) |
165 | { |
166 | Q_D(IpTunnelSetting); |
167 | |
168 | d->ttl = ttl; |
169 | } |
170 | |
171 | quint32 NetworkManager::IpTunnelSetting::ttl() const |
172 | { |
173 | Q_D(const IpTunnelSetting); |
174 | |
175 | return d->ttl; |
176 | } |
177 | |
178 | void NetworkManager::IpTunnelSetting::setInputKey(const QString &key) |
179 | { |
180 | Q_D(IpTunnelSetting); |
181 | |
182 | d->inputKey = key; |
183 | } |
184 | |
185 | QString NetworkManager::IpTunnelSetting::inputKey() const |
186 | { |
187 | Q_D(const IpTunnelSetting); |
188 | |
189 | return d->inputKey; |
190 | } |
191 | |
192 | void NetworkManager::IpTunnelSetting::setLocal(const QString &local) |
193 | { |
194 | Q_D(IpTunnelSetting); |
195 | |
196 | d->local = local; |
197 | } |
198 | |
199 | QString NetworkManager::IpTunnelSetting::local() const |
200 | { |
201 | Q_D(const IpTunnelSetting); |
202 | |
203 | return d->local; |
204 | } |
205 | |
206 | void NetworkManager::IpTunnelSetting::setParent(const QString &parent) |
207 | { |
208 | Q_D(IpTunnelSetting); |
209 | |
210 | d->parent = parent; |
211 | } |
212 | |
213 | QString NetworkManager::IpTunnelSetting::parent() const |
214 | { |
215 | Q_D(const IpTunnelSetting); |
216 | |
217 | return d->parent; |
218 | } |
219 | |
220 | void NetworkManager::IpTunnelSetting::setOutputKey(const QString &key) |
221 | { |
222 | Q_D(IpTunnelSetting); |
223 | |
224 | d->outputKey = key; |
225 | } |
226 | |
227 | QString NetworkManager::IpTunnelSetting::outputKey() const |
228 | { |
229 | Q_D(const IpTunnelSetting); |
230 | |
231 | return d->outputKey; |
232 | } |
233 | |
234 | void NetworkManager::IpTunnelSetting::setRemote(const QString &remote) |
235 | { |
236 | Q_D(IpTunnelSetting); |
237 | |
238 | d->remote = remote; |
239 | } |
240 | |
241 | QString NetworkManager::IpTunnelSetting::remote() const |
242 | { |
243 | Q_D(const IpTunnelSetting); |
244 | |
245 | return d->remote; |
246 | } |
247 | |
248 | void NetworkManager::IpTunnelSetting::fromMap(const QVariantMap &setting) |
249 | { |
250 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_MODE))) { |
251 | setMode((Mode)setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_MODE)).toUInt()); |
252 | } |
253 | |
254 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY))) { |
255 | setPathMtuDiscovery(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY)).toBool()); |
256 | } |
257 | |
258 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT))) { |
259 | setEncapsulationLimit(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT)).toUInt()); |
260 | } |
261 | |
262 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_FLAGS))) { |
263 | setFlags((Flag)setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_FLAGS)).toUInt()); |
264 | } |
265 | |
266 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_FLOW_LABEL))) { |
267 | setFlowLabel(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_FLOW_LABEL)).toUInt()); |
268 | } |
269 | |
270 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_MTU))) { |
271 | setMtu(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_MTU)).toUInt()); |
272 | } |
273 | |
274 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_TOS))) { |
275 | setTos(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_TOS)).toUInt()); |
276 | } |
277 | |
278 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_TTL))) { |
279 | setTtl(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_TTL)).toUInt()); |
280 | } |
281 | |
282 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_INPUT_KEY))) { |
283 | setInputKey(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_INPUT_KEY)).toString()); |
284 | } |
285 | |
286 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_LOCAL))) { |
287 | setLocal(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_LOCAL)).toString()); |
288 | } |
289 | |
290 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_PARENT))) { |
291 | setParent(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_PARENT)).toString()); |
292 | } |
293 | |
294 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_OUTPUT_KEY))) { |
295 | setOutputKey(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_OUTPUT_KEY)).toString()); |
296 | } |
297 | |
298 | if (setting.contains(key: QLatin1String(NM_SETTING_IP_TUNNEL_REMOTE))) { |
299 | setRemote(setting.value(key: QLatin1String(NM_SETTING_IP_TUNNEL_REMOTE)).toString()); |
300 | } |
301 | } |
302 | |
303 | QVariantMap NetworkManager::IpTunnelSetting::toMap() const |
304 | { |
305 | QVariantMap setting; |
306 | |
307 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY), value: pathMtuDiscovery()); |
308 | |
309 | if (mode() != Unknown) { |
310 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_MODE), value: (int)mode()); |
311 | } |
312 | |
313 | if (encapsulationLimit() > 0) { |
314 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT), value: encapsulationLimit()); |
315 | } |
316 | |
317 | if (flags() > None) { |
318 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_FLAGS), value: (int)flags()); |
319 | } |
320 | |
321 | if (flowLabel() > 0) { |
322 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_FLOW_LABEL), value: flowLabel()); |
323 | } |
324 | |
325 | if (mtu() > 0) { |
326 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_MTU), value: mtu()); |
327 | } |
328 | |
329 | if (tos() > 0) { |
330 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_TOS), value: tos()); |
331 | } |
332 | |
333 | if (ttl() > 0) { |
334 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_TTL), value: ttl()); |
335 | } |
336 | |
337 | if (!inputKey().isEmpty()) { |
338 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_INPUT_KEY), value: inputKey()); |
339 | } |
340 | |
341 | if (!local().isEmpty()) { |
342 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_LOCAL), value: local()); |
343 | } |
344 | |
345 | if (!parent().isEmpty()) { |
346 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_PARENT), value: parent()); |
347 | } |
348 | |
349 | if (!outputKey().isEmpty()) { |
350 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_OUTPUT_KEY), value: outputKey()); |
351 | } |
352 | |
353 | if (!remote().isEmpty()) { |
354 | setting.insert(key: QLatin1String(NM_SETTING_IP_TUNNEL_REMOTE), value: remote()); |
355 | } |
356 | |
357 | return setting; |
358 | } |
359 | |
360 | QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::IpTunnelSetting &setting) |
361 | { |
362 | dbg.nospace() << "type: " << setting.typeAsString(type: setting.type()) << '\n'; |
363 | dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; |
364 | |
365 | dbg.nospace() << NM_SETTING_IP_TUNNEL_MODE << ": " << setting.mode() << '\n'; |
366 | dbg.nospace() << NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY << ": " << setting.pathMtuDiscovery() << '\n'; |
367 | dbg.nospace() << NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT << ": " << setting.encapsulationLimit() << '\n'; |
368 | dbg.nospace() << NM_SETTING_IP_TUNNEL_FLAGS << ": " << setting.flags() << '\n'; |
369 | dbg.nospace() << NM_SETTING_IP_TUNNEL_FLOW_LABEL << ": " << setting.flowLabel() << '\n'; |
370 | dbg.nospace() << NM_SETTING_IP_TUNNEL_MTU << ": " << setting.mtu() << '\n'; |
371 | dbg.nospace() << NM_SETTING_IP_TUNNEL_TOS << ": " << setting.tos() << '\n'; |
372 | dbg.nospace() << NM_SETTING_IP_TUNNEL_TTL << ": " << setting.ttl() << '\n'; |
373 | dbg.nospace() << NM_SETTING_IP_TUNNEL_INPUT_KEY << ": " << setting.inputKey() << '\n'; |
374 | dbg.nospace() << NM_SETTING_IP_TUNNEL_LOCAL << ": " << setting.local() << '\n'; |
375 | dbg.nospace() << NM_SETTING_IP_TUNNEL_PARENT << ": " << setting.parent() << '\n'; |
376 | dbg.nospace() << NM_SETTING_IP_TUNNEL_OUTPUT_KEY << ": " << setting.outputKey() << '\n'; |
377 | dbg.nospace() << NM_SETTING_IP_TUNNEL_REMOTE << ": " << setting.remote() << '\n'; |
378 | |
379 | return dbg.maybeSpace(); |
380 | } |
381 | |