| 1 | /* |
| 2 | SPDX-FileCopyrightText: 2012-2013 Jan Grulich <jgrulich@redhat.com> |
| 3 | |
| 4 | SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL |
| 5 | */ |
| 6 | |
| 7 | #include "setting.h" |
| 8 | |
| 9 | #undef signals |
| 10 | #include <nm-version.h> |
| 11 | #define signals Q_SIGNALS |
| 12 | |
| 13 | #include <QDebug> |
| 14 | |
| 15 | #if !NM_CHECK_VERSION(1, 16, 0) |
| 16 | #define NM_SETTING_WIREGUARD_SETTING_NAME "wireguard" |
| 17 | #endif |
| 18 | |
| 19 | #if !NM_CHECK_VERSION(1, 14, 0) |
| 20 | #define NM_SETTING_MATCH_SETTING_NAME "match" |
| 21 | #endif |
| 22 | |
| 23 | #if !NM_CHECK_VERSION(1, 10, 0) |
| 24 | #define NM_SETTING_OVS_BRIDGE_SETTING_NAME "ovs-bridge" |
| 25 | #define NM_SETTING_OVS_INTERFACE_SETTING_NAME "ovs-interface" |
| 26 | #define NM_SETTING_OVS_PATCH_SETTING_NAME "ovs-patch" |
| 27 | #define NM_SETTING_OVS_PORT_SETTING_NAME "ovs-port" |
| 28 | #define NM_SETTING_TC_CONFIG_SETTING_NAME "tc" |
| 29 | #define NM_SETTING_TEAM_PORT_SETTING_NAME "team-port" |
| 30 | #endif |
| 31 | |
| 32 | #if !NM_CHECK_VERSION(1, 8, 0) |
| 33 | #define NM_SETTING_USER_SETTING_NAME "user" |
| 34 | #endif |
| 35 | |
| 36 | #if !NM_CHECK_VERSION(1, 6, 0) |
| 37 | #define NM_SETTING_MACSEC_SETTING_NAME "macsec" |
| 38 | #define NM_SETTING_PROXY_SETTING_NAME "proxy" |
| 39 | #endif |
| 40 | |
| 41 | namespace NetworkManager |
| 42 | { |
| 43 | class SettingPrivate |
| 44 | { |
| 45 | public: |
| 46 | SettingPrivate(); |
| 47 | |
| 48 | Setting::SettingType type; |
| 49 | bool initialized; |
| 50 | }; |
| 51 | |
| 52 | QDebug operator<<(QDebug dbg, const Setting &setting) |
| 53 | { |
| 54 | dbg.nospace() << "type: " << setting.typeAsString(type: setting.type()) << '\n'; |
| 55 | dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; |
| 56 | return dbg.maybeSpace(); |
| 57 | } |
| 58 | |
| 59 | } |
| 60 | |
| 61 | NetworkManager::SettingPrivate::SettingPrivate() |
| 62 | : type(Setting::Wired) |
| 63 | , initialized(false) |
| 64 | { |
| 65 | } |
| 66 | |
| 67 | QString NetworkManager::Setting::typeAsString(NetworkManager::Setting::SettingType type) |
| 68 | { |
| 69 | QString typeString; |
| 70 | |
| 71 | switch (type) { |
| 72 | case Cdma: |
| 73 | typeString = QLatin1String(NM_SETTING_CDMA_SETTING_NAME); |
| 74 | break; |
| 75 | case Gsm: |
| 76 | typeString = QLatin1String(NM_SETTING_GSM_SETTING_NAME); |
| 77 | break; |
| 78 | case Bluetooth: |
| 79 | typeString = QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME); |
| 80 | break; |
| 81 | case Ipv4: |
| 82 | typeString = QLatin1String(NM_SETTING_IP4_CONFIG_SETTING_NAME); |
| 83 | break; |
| 84 | case Ipv6: |
| 85 | typeString = QLatin1String(NM_SETTING_IP6_CONFIG_SETTING_NAME); |
| 86 | break; |
| 87 | case Ppp: |
| 88 | typeString = QLatin1String(NM_SETTING_PPP_SETTING_NAME); |
| 89 | break; |
| 90 | case Pppoe: |
| 91 | typeString = QLatin1String(NM_SETTING_PPPOE_SETTING_NAME); |
| 92 | break; |
| 93 | case Security8021x: |
| 94 | typeString = QLatin1String(NM_SETTING_802_1X_SETTING_NAME); |
| 95 | break; |
| 96 | case Serial: |
| 97 | typeString = QLatin1String(NM_SETTING_SERIAL_SETTING_NAME); |
| 98 | break; |
| 99 | case Vpn: |
| 100 | typeString = QLatin1String(NM_SETTING_VPN_SETTING_NAME); |
| 101 | break; |
| 102 | case Wired: |
| 103 | typeString = QLatin1String(NM_SETTING_WIRED_SETTING_NAME); |
| 104 | break; |
| 105 | case Wireless: |
| 106 | typeString = QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME); |
| 107 | break; |
| 108 | case WirelessSecurity: |
| 109 | typeString = QLatin1String(NM_SETTING_WIRELESS_SECURITY_SETTING_NAME); |
| 110 | break; |
| 111 | case OlpcMesh: |
| 112 | typeString = QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME); |
| 113 | break; |
| 114 | case Vlan: |
| 115 | typeString = QLatin1String(NM_SETTING_VLAN_SETTING_NAME); |
| 116 | break; |
| 117 | case Wimax: |
| 118 | typeString = QLatin1String(NM_SETTING_WIMAX_SETTING_NAME); |
| 119 | break; |
| 120 | case Bond: |
| 121 | typeString = QLatin1String(NM_SETTING_BOND_SETTING_NAME); |
| 122 | break; |
| 123 | case Bridge: |
| 124 | typeString = QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME); |
| 125 | break; |
| 126 | case Team: |
| 127 | typeString = QLatin1String(NM_SETTING_TEAM_SETTING_NAME); |
| 128 | break; |
| 129 | case Vxlan: |
| 130 | typeString = QLatin1String(NM_SETTING_VXLAN_SETTING_NAME); |
| 131 | break; |
| 132 | case IpTunnel: |
| 133 | typeString = QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME); |
| 134 | break; |
| 135 | case Proxy: |
| 136 | typeString = QLatin1String(NM_SETTING_PROXY_SETTING_NAME); |
| 137 | break; |
| 138 | case User: |
| 139 | typeString = QLatin1String(NM_SETTING_USER_SETTING_NAME); |
| 140 | break; |
| 141 | case OvsInterface: |
| 142 | typeString = QLatin1String(NM_SETTING_OVS_INTERFACE_SETTING_NAME); |
| 143 | break; |
| 144 | case OvsBridge: |
| 145 | typeString = QLatin1String(NM_SETTING_OVS_BRIDGE_SETTING_NAME); |
| 146 | break; |
| 147 | case OvsPatch: |
| 148 | typeString = QLatin1String(NM_SETTING_OVS_PATCH_SETTING_NAME); |
| 149 | break; |
| 150 | case OvsPort: |
| 151 | typeString = QLatin1String(NM_SETTING_OVS_PORT_SETTING_NAME); |
| 152 | break; |
| 153 | case Match: |
| 154 | typeString = QLatin1String(NM_SETTING_MATCH_SETTING_NAME); |
| 155 | break; |
| 156 | case Tc: |
| 157 | typeString = QLatin1String(NM_SETTING_TC_CONFIG_SETTING_NAME); |
| 158 | break; |
| 159 | case TeamPort: |
| 160 | typeString = QLatin1String(NM_SETTING_TEAM_PORT_SETTING_NAME); |
| 161 | break; |
| 162 | case Macsec: |
| 163 | typeString = QLatin1String(NM_SETTING_MACSEC_SETTING_NAME); |
| 164 | break; |
| 165 | case Dcb: |
| 166 | typeString = QLatin1String(NM_SETTING_DCB_SETTING_NAME); |
| 167 | break; |
| 168 | case NetworkManager::Setting::WireGuard: |
| 169 | typeString = QLatin1String(NM_SETTING_WIREGUARD_SETTING_NAME); |
| 170 | break; |
| 171 | case NetworkManager::Setting::Generic: |
| 172 | typeString = QLatin1String(NM_SETTING_GENERIC_SETTING_NAME); |
| 173 | break; |
| 174 | default: |
| 175 | break; |
| 176 | } |
| 177 | |
| 178 | return typeString; |
| 179 | } |
| 180 | |
| 181 | NetworkManager::Setting::SettingType NetworkManager::Setting::typeFromString(const QString &typeString) |
| 182 | { |
| 183 | SettingType type = Wired; |
| 184 | |
| 185 | if (typeString == QLatin1String(NM_SETTING_CDMA_SETTING_NAME)) { |
| 186 | type = Cdma; |
| 187 | } else if (typeString == QLatin1String(NM_SETTING_GSM_SETTING_NAME)) { |
| 188 | type = Gsm; |
| 189 | } else if (typeString == QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME)) { |
| 190 | type = Bluetooth; |
| 191 | } else if (typeString == QLatin1String(NM_SETTING_IP4_CONFIG_SETTING_NAME)) { |
| 192 | type = Ipv4; |
| 193 | } else if (typeString == QLatin1String(NM_SETTING_IP6_CONFIG_SETTING_NAME)) { |
| 194 | type = Ipv6; |
| 195 | } else if (typeString == QLatin1String(NM_SETTING_PPP_SETTING_NAME)) { |
| 196 | type = Ppp; |
| 197 | } else if (typeString == QLatin1String(NM_SETTING_PPPOE_SETTING_NAME)) { |
| 198 | type = Pppoe; |
| 199 | } else if (typeString == QLatin1String(NM_SETTING_SERIAL_SETTING_NAME)) { |
| 200 | type = Serial; |
| 201 | } else if (typeString == QLatin1String(NM_SETTING_802_1X_SETTING_NAME)) { |
| 202 | type = Security8021x; |
| 203 | } else if (typeString == QLatin1String(NM_SETTING_VPN_SETTING_NAME)) { |
| 204 | type = Vpn; |
| 205 | } else if (typeString == QLatin1String(NM_SETTING_WIRED_SETTING_NAME)) { |
| 206 | type = Wired; |
| 207 | } else if (typeString == QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME)) { |
| 208 | type = Wireless; |
| 209 | } else if (typeString == QLatin1String(NM_SETTING_WIRELESS_SECURITY_SETTING_NAME)) { |
| 210 | type = WirelessSecurity; |
| 211 | } else if (typeString == QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME)) { |
| 212 | type = OlpcMesh; |
| 213 | } else if (typeString == QLatin1String(NM_SETTING_VLAN_SETTING_NAME)) { |
| 214 | type = Vlan; |
| 215 | } else if (typeString == QLatin1String(NM_SETTING_WIMAX_SETTING_NAME)) { |
| 216 | type = Wimax; |
| 217 | } else if (typeString == QLatin1String(NM_SETTING_BOND_SETTING_NAME)) { |
| 218 | type = Bond; |
| 219 | } else if (typeString == QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME)) { |
| 220 | type = Bridge; |
| 221 | } else if (typeString == QLatin1String(NM_SETTING_TEAM_SETTING_NAME)) { |
| 222 | type = Team; |
| 223 | } else if (typeString == QLatin1String(NM_SETTING_VXLAN_SETTING_NAME)) { |
| 224 | type = Vxlan; |
| 225 | } else if (typeString == QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME)) { |
| 226 | type = IpTunnel; |
| 227 | } else if (typeString == QLatin1String(NM_SETTING_GENERIC_SETTING_NAME)) { |
| 228 | type = Generic; |
| 229 | } else if (typeString == QLatin1String(NM_SETTING_USER_SETTING_NAME)) { |
| 230 | type = User; |
| 231 | } else if (typeString == QLatin1String(NM_SETTING_PROXY_SETTING_NAME)) { |
| 232 | type = Proxy; |
| 233 | } else if (typeString == QLatin1String(NM_SETTING_OVS_INTERFACE_SETTING_NAME)) { |
| 234 | type = OvsInterface; |
| 235 | } else if (typeString == QLatin1String(NM_SETTING_OVS_BRIDGE_SETTING_NAME)) { |
| 236 | type = OvsBridge; |
| 237 | } else if (typeString == QLatin1String(NM_SETTING_OVS_PATCH_SETTING_NAME)) { |
| 238 | type = OvsPatch; |
| 239 | } else if (typeString == QLatin1String(NM_SETTING_OVS_PORT_SETTING_NAME)) { |
| 240 | type = OvsPort; |
| 241 | } else if (typeString == QLatin1String(NM_SETTING_MATCH_SETTING_NAME)) { |
| 242 | type = Match; |
| 243 | } else if (typeString == QLatin1String(NM_SETTING_TC_CONFIG_SETTING_NAME)) { |
| 244 | type = Tc; |
| 245 | } else if (typeString == QLatin1String(NM_SETTING_TEAM_PORT_SETTING_NAME)) { |
| 246 | type = TeamPort; |
| 247 | } else if (typeString == QLatin1String(NM_SETTING_MACSEC_SETTING_NAME)) { |
| 248 | type = Macsec; |
| 249 | } else if (typeString == QLatin1String(NM_SETTING_DCB_SETTING_NAME)) { |
| 250 | type = Dcb; |
| 251 | } else if (typeString == QLatin1String(NM_SETTING_WIREGUARD_SETTING_NAME)) { |
| 252 | type = WireGuard; |
| 253 | } |
| 254 | |
| 255 | return type; |
| 256 | } |
| 257 | |
| 258 | NetworkManager::Setting::Setting(SettingType type) |
| 259 | : d_ptr(new SettingPrivate()) |
| 260 | { |
| 261 | setType(type); |
| 262 | } |
| 263 | |
| 264 | NetworkManager::Setting::Setting(const NetworkManager::Setting::Ptr &setting) |
| 265 | : d_ptr(new SettingPrivate()) |
| 266 | { |
| 267 | setInitialized(!setting->isNull()); |
| 268 | setType(setting->type()); |
| 269 | } |
| 270 | |
| 271 | NetworkManager::Setting::~Setting() |
| 272 | { |
| 273 | delete d_ptr; |
| 274 | } |
| 275 | |
| 276 | void NetworkManager::Setting::fromMap(const QVariantMap &map) |
| 277 | { |
| 278 | Q_UNUSED(map); |
| 279 | } |
| 280 | |
| 281 | QVariantMap NetworkManager::Setting::toMap() const |
| 282 | { |
| 283 | return QVariantMap(); |
| 284 | } |
| 285 | |
| 286 | QStringList NetworkManager::Setting::needSecrets(bool requestNew) const |
| 287 | { |
| 288 | Q_UNUSED(requestNew); |
| 289 | return QStringList(); |
| 290 | } |
| 291 | |
| 292 | QString NetworkManager::Setting::name() const |
| 293 | { |
| 294 | return QString(); |
| 295 | } |
| 296 | |
| 297 | void NetworkManager::Setting::secretsFromMap(const QVariantMap &map) |
| 298 | { |
| 299 | Q_UNUSED(map); |
| 300 | } |
| 301 | |
| 302 | void NetworkManager::Setting::secretsFromStringMap(const NMStringMap &map) |
| 303 | { |
| 304 | QVariantMap secretsMap; |
| 305 | NMStringMap::ConstIterator i = map.constBegin(); |
| 306 | while (i != map.constEnd()) { |
| 307 | secretsMap.insert(key: i.key(), value: i.value()); |
| 308 | ++i; |
| 309 | } |
| 310 | secretsFromMap(map: secretsMap); |
| 311 | } |
| 312 | |
| 313 | QVariantMap NetworkManager::Setting::secretsToMap() const |
| 314 | { |
| 315 | return QVariantMap(); |
| 316 | } |
| 317 | |
| 318 | NMStringMap NetworkManager::Setting::secretsToStringMap() const |
| 319 | { |
| 320 | NMStringMap ret; |
| 321 | const QVariantMap secretsMap = secretsToMap(); |
| 322 | for (auto it = secretsMap.begin(); it != secretsMap.end(); ++it) { |
| 323 | ret.insert(key: it.key(), value: it.value().toString()); |
| 324 | } |
| 325 | |
| 326 | return ret; |
| 327 | } |
| 328 | |
| 329 | void NetworkManager::Setting::setInitialized(bool initialized) |
| 330 | { |
| 331 | Q_D(Setting); |
| 332 | |
| 333 | d->initialized = initialized; |
| 334 | } |
| 335 | |
| 336 | bool NetworkManager::Setting::isNull() const |
| 337 | { |
| 338 | Q_D(const Setting); |
| 339 | |
| 340 | return !d->initialized; |
| 341 | } |
| 342 | |
| 343 | void NetworkManager::Setting::setType(NetworkManager::Setting::SettingType type) |
| 344 | { |
| 345 | Q_D(Setting); |
| 346 | |
| 347 | d->type = type; |
| 348 | } |
| 349 | |
| 350 | NetworkManager::Setting::SettingType NetworkManager::Setting::type() const |
| 351 | { |
| 352 | Q_D(const Setting); |
| 353 | |
| 354 | return d->type; |
| 355 | } |
| 356 | |