File indexing completed on 2024-04-21 04:00:04
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 "macsecsetting.h" 0008 #include "macsecsetting_p.h" 0009 0010 #include <QDebug> 0011 0012 #if !NM_CHECK_VERSION(1, 6, 0) 0013 #define NM_SETTING_MACSEC_SETTING_NAME "macsec" 0014 0015 #define NM_SETTING_MACSEC_PARENT "parent" 0016 #define NM_SETTING_MACSEC_MODE "mode" 0017 #define NM_SETTING_MACSEC_ENCRYPT "encrypt" 0018 #define NM_SETTING_MACSEC_MKA_CAK "mka-cak" 0019 #define NM_SETTING_MACSEC_MKA_CAK_FLAGS "mka-cak-flags" 0020 #define NM_SETTING_MACSEC_MKA_CKN "mka-ckn" 0021 #define NM_SETTING_MACSEC_PORT "port" 0022 #define NM_SETTING_MACSEC_VALIDATION "validation" 0023 #endif 0024 0025 #if !NM_CHECK_VERSION(1, 12, 0) 0026 #define NM_SETTING_MACSEC_SEND_SCI "send-sci" 0027 #endif 0028 0029 NetworkManager::MacsecSettingPrivate::MacsecSettingPrivate() 0030 : name(NM_SETTING_MACSEC_SETTING_NAME) 0031 , encrypt(true) 0032 , mode(NetworkManager::MacsecSetting::Psk) 0033 , port(1) 0034 , sendSci(true) 0035 , validation(NetworkManager::MacsecSetting::Strict) 0036 { 0037 } 0038 0039 NetworkManager::MacsecSetting::MacsecSetting() 0040 : Setting(Setting::Macsec) 0041 , d_ptr(new MacsecSettingPrivate()) 0042 { 0043 } 0044 0045 NetworkManager::MacsecSetting::MacsecSetting(const Ptr &other) 0046 : Setting(other) 0047 , d_ptr(new MacsecSettingPrivate()) 0048 { 0049 setEncrypt(other->encrypt()); 0050 setMkaCak(other->mkaCak()); 0051 setMkaCkn(other->mkaCkn()); 0052 setMode(other->mode()); 0053 setParent(other->parent()); 0054 setPort(other->port()); 0055 setSendSci(other->sendSci()); 0056 setValidation(other->validation()); 0057 setMkaCakFlags(other->mkaCakFlags()); 0058 } 0059 0060 NetworkManager::MacsecSetting::~MacsecSetting() 0061 { 0062 delete d_ptr; 0063 } 0064 0065 QString NetworkManager::MacsecSetting::name() const 0066 { 0067 Q_D(const MacsecSetting); 0068 0069 return d->name; 0070 } 0071 0072 void NetworkManager::MacsecSetting::setEncrypt(bool encrypt) 0073 { 0074 Q_D(MacsecSetting); 0075 0076 d->encrypt = encrypt; 0077 } 0078 0079 bool NetworkManager::MacsecSetting::encrypt() const 0080 { 0081 Q_D(const MacsecSetting); 0082 0083 return d->encrypt; 0084 } 0085 0086 void NetworkManager::MacsecSetting::setMkaCak(const QString &mkaCak) 0087 { 0088 Q_D(MacsecSetting); 0089 0090 d->mkaCak = mkaCak; 0091 } 0092 0093 QString NetworkManager::MacsecSetting::mkaCak() const 0094 { 0095 Q_D(const MacsecSetting); 0096 0097 return d->mkaCak; 0098 } 0099 0100 void NetworkManager::MacsecSetting::setMkaCkn(const QString &mkaCkn) 0101 { 0102 Q_D(MacsecSetting); 0103 0104 d->mkaCkn = mkaCkn; 0105 } 0106 0107 QString NetworkManager::MacsecSetting::mkaCkn() const 0108 { 0109 Q_D(const MacsecSetting); 0110 0111 return d->mkaCkn; 0112 } 0113 0114 void NetworkManager::MacsecSetting::setMode(Mode mode) 0115 { 0116 Q_D(MacsecSetting); 0117 0118 d->mode = mode; 0119 } 0120 0121 NetworkManager::MacsecSetting::Mode NetworkManager::MacsecSetting::mode() const 0122 { 0123 Q_D(const MacsecSetting); 0124 0125 return d->mode; 0126 } 0127 0128 void NetworkManager::MacsecSetting::setParent(const QString &parent) 0129 { 0130 Q_D(MacsecSetting); 0131 0132 d->parent = parent; 0133 } 0134 0135 QString NetworkManager::MacsecSetting::parent() const 0136 { 0137 Q_D(const MacsecSetting); 0138 0139 return d->parent; 0140 } 0141 0142 void NetworkManager::MacsecSetting::setPort(qint32 port) 0143 { 0144 Q_D(MacsecSetting); 0145 0146 d->port = port; 0147 } 0148 0149 qint32 NetworkManager::MacsecSetting::port() const 0150 { 0151 Q_D(const MacsecSetting); 0152 0153 return d->port; 0154 } 0155 0156 void NetworkManager::MacsecSetting::setSendSci(bool sendSci) 0157 { 0158 Q_D(MacsecSetting); 0159 0160 d->sendSci = sendSci; 0161 } 0162 0163 bool NetworkManager::MacsecSetting::sendSci() const 0164 { 0165 Q_D(const MacsecSetting); 0166 0167 return d->sendSci; 0168 } 0169 0170 void NetworkManager::MacsecSetting::setValidation(Validation validation) 0171 { 0172 Q_D(MacsecSetting); 0173 0174 d->validation = validation; 0175 } 0176 0177 NetworkManager::MacsecSetting::Validation NetworkManager::MacsecSetting::validation() const 0178 { 0179 Q_D(const MacsecSetting); 0180 0181 return d->validation; 0182 } 0183 0184 void NetworkManager::MacsecSetting::setMkaCakFlags(NetworkManager::Setting::SecretFlags flags) 0185 { 0186 Q_D(MacsecSetting); 0187 0188 d->mkaCakFlags = flags; 0189 } 0190 0191 NetworkManager::Setting::SecretFlags NetworkManager::MacsecSetting::mkaCakFlags() const 0192 { 0193 Q_D(const MacsecSetting); 0194 0195 return d->mkaCakFlags; 0196 } 0197 0198 QStringList NetworkManager::MacsecSetting::needSecrets(bool requestNew) const 0199 { 0200 QStringList secrets; 0201 0202 if ((mkaCak().isEmpty() || requestNew) && !mkaCakFlags().testFlag(Setting::NotRequired)) { 0203 secrets << QLatin1String(NM_SETTING_MACSEC_MKA_CAK); 0204 } 0205 0206 return secrets; 0207 } 0208 0209 void NetworkManager::MacsecSetting::secretsFromMap(const QVariantMap &secrets) 0210 { 0211 if (secrets.contains(QLatin1String(NM_SETTING_MACSEC_MKA_CAK))) { 0212 setMkaCak(secrets.value(QLatin1String(NM_SETTING_MACSEC_MKA_CAK)).toString()); 0213 } 0214 } 0215 0216 QVariantMap NetworkManager::MacsecSetting::secretsToMap() const 0217 { 0218 QVariantMap secrets; 0219 0220 if (!mkaCak().isEmpty()) { 0221 secrets.insert(QLatin1String(NM_SETTING_MACSEC_MKA_CAK), mkaCak()); 0222 } 0223 0224 return secrets; 0225 } 0226 0227 void NetworkManager::MacsecSetting::fromMap(const QVariantMap &setting) 0228 { 0229 if (setting.contains(QLatin1String(NM_SETTING_MACSEC_ENCRYPT))) { 0230 setEncrypt(setting.value(QLatin1String(NM_SETTING_MACSEC_ENCRYPT)).toBool()); 0231 } 0232 0233 if (setting.contains(QLatin1String(NM_SETTING_MACSEC_MKA_CAK))) { 0234 setMkaCak(setting.value(QLatin1String(NM_SETTING_MACSEC_MKA_CAK)).toString()); 0235 } 0236 0237 if (setting.contains(QLatin1String(NM_SETTING_MACSEC_MKA_CKN))) { 0238 setMkaCkn(setting.value(QLatin1String(NM_SETTING_MACSEC_MKA_CKN)).toString()); 0239 } 0240 0241 if (setting.contains(QLatin1String(NM_SETTING_MACSEC_MODE))) { 0242 setMode((Mode)setting.value(QLatin1String(NM_SETTING_MACSEC_MODE)).toInt()); 0243 } 0244 0245 if (setting.contains(QLatin1String(NM_SETTING_MACSEC_PARENT))) { 0246 setParent(setting.value(QLatin1String(NM_SETTING_MACSEC_PARENT)).toString()); 0247 } 0248 0249 if (setting.contains(QLatin1String(NM_SETTING_MACSEC_PORT))) { 0250 setPort(setting.value(QLatin1String(NM_SETTING_MACSEC_PORT)).toInt()); 0251 } 0252 0253 if (setting.contains(QLatin1String(NM_SETTING_MACSEC_SEND_SCI))) { 0254 setSendSci(setting.value(QLatin1String(NM_SETTING_MACSEC_SEND_SCI)).toBool()); 0255 } 0256 0257 if (setting.contains(QLatin1String(NM_SETTING_MACSEC_VALIDATION))) { 0258 setValidation((Validation)setting.value(QLatin1String(NM_SETTING_MACSEC_VALIDATION)).toInt()); 0259 } 0260 0261 if (setting.contains(QLatin1String(NM_SETTING_MACSEC_MKA_CAK_FLAGS))) { 0262 setMkaCakFlags((Setting::SecretFlags)setting.value(QLatin1String(NM_SETTING_MACSEC_MKA_CAK_FLAGS)).toUInt()); 0263 } 0264 } 0265 0266 QVariantMap NetworkManager::MacsecSetting::toMap() const 0267 { 0268 QVariantMap setting; 0269 0270 if (!encrypt()) { 0271 setting.insert(QLatin1String(NM_SETTING_MACSEC_ENCRYPT), encrypt()); 0272 } 0273 0274 if (!mkaCak().isEmpty()) { 0275 setting.insert(QLatin1String(NM_SETTING_MACSEC_MKA_CAK), mkaCak()); 0276 } 0277 0278 if (!mkaCkn().isEmpty()) { 0279 setting.insert(QLatin1String(NM_SETTING_MACSEC_MKA_CKN), mkaCkn()); 0280 } 0281 0282 if (mode() > NetworkManager::MacsecSetting::Psk) { 0283 setting.insert(QLatin1String(NM_SETTING_MACSEC_MODE), (int)mode()); 0284 } 0285 0286 if (!parent().isEmpty()) { 0287 setting.insert(QLatin1String(NM_SETTING_MACSEC_PARENT), parent()); 0288 } 0289 0290 if (port() > 1) { 0291 setting.insert(QLatin1String(NM_SETTING_MACSEC_PORT), port()); 0292 } 0293 0294 if (!sendSci()) { 0295 setting.insert(QLatin1String(NM_SETTING_MACSEC_SEND_SCI), sendSci()); 0296 } 0297 0298 if (validation() != NetworkManager::MacsecSetting::Strict) { 0299 setting.insert(QLatin1String(NM_SETTING_MACSEC_VALIDATION), (int)validation()); 0300 } 0301 0302 setting.insert(QLatin1String(NM_SETTING_MACSEC_MKA_CAK_FLAGS), (int)mkaCakFlags()); 0303 0304 return setting; 0305 } 0306 0307 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::MacsecSetting &setting) 0308 { 0309 dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n'; 0310 dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; 0311 0312 dbg.nospace() << NM_SETTING_MACSEC_ENCRYPT << ": " << setting.encrypt() << '\n'; 0313 dbg.nospace() << NM_SETTING_MACSEC_MKA_CAK << ": " << setting.mkaCak() << '\n'; 0314 dbg.nospace() << NM_SETTING_MACSEC_MKA_CKN << ": " << setting.mkaCkn() << '\n'; 0315 dbg.nospace() << NM_SETTING_MACSEC_MODE << ": " << setting.mode() << '\n'; 0316 dbg.nospace() << NM_SETTING_MACSEC_PARENT << ": " << setting.parent() << '\n'; 0317 dbg.nospace() << NM_SETTING_MACSEC_PORT << ": " << setting.port() << '\n'; 0318 dbg.nospace() << NM_SETTING_MACSEC_SEND_SCI << ": " << setting.sendSci() << '\n'; 0319 dbg.nospace() << NM_SETTING_MACSEC_VALIDATION << ": " << setting.validation() << '\n'; 0320 dbg.nospace() << NM_SETTING_MACSEC_MKA_CAK_FLAGS << ": " << setting.mkaCakFlags() << '\n'; 0321 0322 return dbg.maybeSpace(); 0323 }