File indexing completed on 2024-04-14 03:57:38

0001 /*
0002     SPDX-FileCopyrightText: 2012-2013 Jan Grulich <jgrulich@redhat.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "setting.h"
0008 
0009 #undef signals
0010 #include <nm-version.h>
0011 #define signals Q_SIGNALS
0012 
0013 #include <QDebug>
0014 
0015 #if !NM_CHECK_VERSION(1, 16, 0)
0016 #define NM_SETTING_WIREGUARD_SETTING_NAME "wireguard"
0017 #endif
0018 
0019 #if !NM_CHECK_VERSION(1, 14, 0)
0020 #define NM_SETTING_MATCH_SETTING_NAME "match"
0021 #endif
0022 
0023 #if !NM_CHECK_VERSION(1, 10, 0)
0024 #define NM_SETTING_OVS_BRIDGE_SETTING_NAME "ovs-bridge"
0025 #define NM_SETTING_OVS_INTERFACE_SETTING_NAME "ovs-interface"
0026 #define NM_SETTING_OVS_PATCH_SETTING_NAME "ovs-patch"
0027 #define NM_SETTING_OVS_PORT_SETTING_NAME "ovs-port"
0028 #define NM_SETTING_TC_CONFIG_SETTING_NAME "tc"
0029 #define NM_SETTING_TEAM_PORT_SETTING_NAME "team-port"
0030 #endif
0031 
0032 #if !NM_CHECK_VERSION(1, 8, 0)
0033 #define NM_SETTING_USER_SETTING_NAME "user"
0034 #endif
0035 
0036 #if !NM_CHECK_VERSION(1, 6, 0)
0037 #define NM_SETTING_MACSEC_SETTING_NAME "macsec"
0038 #define NM_SETTING_PROXY_SETTING_NAME "proxy"
0039 #endif
0040 
0041 namespace NetworkManager
0042 {
0043 class SettingPrivate
0044 {
0045 public:
0046     SettingPrivate();
0047 
0048     Setting::SettingType type;
0049     bool initialized;
0050 };
0051 
0052 QDebug operator<<(QDebug dbg, const Setting &setting)
0053 {
0054     dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n';
0055     dbg.nospace() << "initialized: " << !setting.isNull() << '\n';
0056     return dbg.maybeSpace();
0057 }
0058 
0059 }
0060 
0061 NetworkManager::SettingPrivate::SettingPrivate()
0062     : type(Setting::Wired)
0063     , initialized(false)
0064 {
0065 }
0066 
0067 QString NetworkManager::Setting::typeAsString(NetworkManager::Setting::SettingType type)
0068 {
0069     QString typeString;
0070 
0071     switch (type) {
0072     case Cdma:
0073         typeString = QLatin1String(NM_SETTING_CDMA_SETTING_NAME);
0074         break;
0075     case Gsm:
0076         typeString = QLatin1String(NM_SETTING_GSM_SETTING_NAME);
0077         break;
0078     case Bluetooth:
0079         typeString = QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME);
0080         break;
0081     case Ipv4:
0082         typeString = QLatin1String(NM_SETTING_IP4_CONFIG_SETTING_NAME);
0083         break;
0084     case Ipv6:
0085         typeString = QLatin1String(NM_SETTING_IP6_CONFIG_SETTING_NAME);
0086         break;
0087     case Ppp:
0088         typeString = QLatin1String(NM_SETTING_PPP_SETTING_NAME);
0089         break;
0090     case Pppoe:
0091         typeString = QLatin1String(NM_SETTING_PPPOE_SETTING_NAME);
0092         break;
0093     case Security8021x:
0094         typeString = QLatin1String(NM_SETTING_802_1X_SETTING_NAME);
0095         break;
0096     case Serial:
0097         typeString = QLatin1String(NM_SETTING_SERIAL_SETTING_NAME);
0098         break;
0099     case Vpn:
0100         typeString = QLatin1String(NM_SETTING_VPN_SETTING_NAME);
0101         break;
0102     case Wired:
0103         typeString = QLatin1String(NM_SETTING_WIRED_SETTING_NAME);
0104         break;
0105     case Wireless:
0106         typeString = QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME);
0107         break;
0108     case WirelessSecurity:
0109         typeString = QLatin1String(NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
0110         break;
0111     case OlpcMesh:
0112         typeString = QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME);
0113         break;
0114     case Vlan:
0115         typeString = QLatin1String(NM_SETTING_VLAN_SETTING_NAME);
0116         break;
0117     case Wimax:
0118         typeString = QLatin1String(NM_SETTING_WIMAX_SETTING_NAME);
0119         break;
0120     case Bond:
0121         typeString = QLatin1String(NM_SETTING_BOND_SETTING_NAME);
0122         break;
0123     case Bridge:
0124         typeString = QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME);
0125         break;
0126     case Team:
0127         typeString = QLatin1String(NM_SETTING_TEAM_SETTING_NAME);
0128         break;
0129     case Vxlan:
0130         typeString = QLatin1String(NM_SETTING_VXLAN_SETTING_NAME);
0131         break;
0132     case IpTunnel:
0133         typeString = QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME);
0134         break;
0135     case Proxy:
0136         typeString = QLatin1String(NM_SETTING_PROXY_SETTING_NAME);
0137         break;
0138     case User:
0139         typeString = QLatin1String(NM_SETTING_USER_SETTING_NAME);
0140         break;
0141     case OvsInterface:
0142         typeString = QLatin1String(NM_SETTING_OVS_INTERFACE_SETTING_NAME);
0143         break;
0144     case OvsBridge:
0145         typeString = QLatin1String(NM_SETTING_OVS_BRIDGE_SETTING_NAME);
0146         break;
0147     case OvsPatch:
0148         typeString = QLatin1String(NM_SETTING_OVS_PATCH_SETTING_NAME);
0149         break;
0150     case OvsPort:
0151         typeString = QLatin1String(NM_SETTING_OVS_PORT_SETTING_NAME);
0152         break;
0153     case Match:
0154         typeString = QLatin1String(NM_SETTING_MATCH_SETTING_NAME);
0155         break;
0156     case Tc:
0157         typeString = QLatin1String(NM_SETTING_TC_CONFIG_SETTING_NAME);
0158         break;
0159     case TeamPort:
0160         typeString = QLatin1String(NM_SETTING_TEAM_PORT_SETTING_NAME);
0161         break;
0162     case Macsec:
0163         typeString = QLatin1String(NM_SETTING_MACSEC_SETTING_NAME);
0164         break;
0165     case Dcb:
0166         typeString = QLatin1String(NM_SETTING_DCB_SETTING_NAME);
0167         break;
0168     case NetworkManager::Setting::WireGuard:
0169         typeString = QLatin1String(NM_SETTING_WIREGUARD_SETTING_NAME);
0170         break;
0171     case NetworkManager::Setting::Generic:
0172         typeString = QLatin1String(NM_SETTING_GENERIC_SETTING_NAME);
0173         break;
0174     default:
0175         break;
0176     }
0177 
0178     return typeString;
0179 }
0180 
0181 NetworkManager::Setting::SettingType NetworkManager::Setting::typeFromString(const QString &typeString)
0182 {
0183     SettingType type = Wired;
0184 
0185     if (typeString == QLatin1String(NM_SETTING_CDMA_SETTING_NAME)) {
0186         type = Cdma;
0187     } else if (typeString == QLatin1String(NM_SETTING_GSM_SETTING_NAME)) {
0188         type = Gsm;
0189     } else if (typeString == QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME)) {
0190         type = Bluetooth;
0191     } else if (typeString == QLatin1String(NM_SETTING_IP4_CONFIG_SETTING_NAME)) {
0192         type = Ipv4;
0193     } else if (typeString == QLatin1String(NM_SETTING_IP6_CONFIG_SETTING_NAME)) {
0194         type = Ipv6;
0195     } else if (typeString == QLatin1String(NM_SETTING_PPP_SETTING_NAME)) {
0196         type = Ppp;
0197     } else if (typeString == QLatin1String(NM_SETTING_PPPOE_SETTING_NAME)) {
0198         type = Pppoe;
0199     } else if (typeString == QLatin1String(NM_SETTING_SERIAL_SETTING_NAME)) {
0200         type = Serial;
0201     } else if (typeString == QLatin1String(NM_SETTING_802_1X_SETTING_NAME)) {
0202         type = Security8021x;
0203     } else if (typeString == QLatin1String(NM_SETTING_VPN_SETTING_NAME)) {
0204         type = Vpn;
0205     } else if (typeString == QLatin1String(NM_SETTING_WIRED_SETTING_NAME)) {
0206         type = Wired;
0207     } else if (typeString == QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME)) {
0208         type = Wireless;
0209     } else if (typeString == QLatin1String(NM_SETTING_WIRELESS_SECURITY_SETTING_NAME)) {
0210         type = WirelessSecurity;
0211     } else if (typeString == QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME)) {
0212         type = OlpcMesh;
0213     } else if (typeString == QLatin1String(NM_SETTING_VLAN_SETTING_NAME)) {
0214         type = Vlan;
0215     } else if (typeString == QLatin1String(NM_SETTING_WIMAX_SETTING_NAME)) {
0216         type = Wimax;
0217     } else if (typeString == QLatin1String(NM_SETTING_BOND_SETTING_NAME)) {
0218         type = Bond;
0219     } else if (typeString == QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME)) {
0220         type = Bridge;
0221     } else if (typeString == QLatin1String(NM_SETTING_TEAM_SETTING_NAME)) {
0222         type = Team;
0223     } else if (typeString == QLatin1String(NM_SETTING_VXLAN_SETTING_NAME)) {
0224         type = Vxlan;
0225     } else if (typeString == QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME)) {
0226         type = IpTunnel;
0227     } else if (typeString == QLatin1String(NM_SETTING_GENERIC_SETTING_NAME)) {
0228         type = Generic;
0229     } else if (typeString == QLatin1String(NM_SETTING_USER_SETTING_NAME)) {
0230         type = User;
0231     } else if (typeString == QLatin1String(NM_SETTING_PROXY_SETTING_NAME)) {
0232         type = Proxy;
0233     } else if (typeString == QLatin1String(NM_SETTING_OVS_INTERFACE_SETTING_NAME)) {
0234         type = OvsInterface;
0235     } else if (typeString == QLatin1String(NM_SETTING_OVS_BRIDGE_SETTING_NAME)) {
0236         type = OvsBridge;
0237     } else if (typeString == QLatin1String(NM_SETTING_OVS_PATCH_SETTING_NAME)) {
0238         type = OvsPatch;
0239     } else if (typeString == QLatin1String(NM_SETTING_OVS_PORT_SETTING_NAME)) {
0240         type = OvsPort;
0241     } else if (typeString == QLatin1String(NM_SETTING_MATCH_SETTING_NAME)) {
0242         type = Match;
0243     } else if (typeString == QLatin1String(NM_SETTING_TC_CONFIG_SETTING_NAME)) {
0244         type = Tc;
0245     } else if (typeString == QLatin1String(NM_SETTING_TEAM_PORT_SETTING_NAME)) {
0246         type = TeamPort;
0247     } else if (typeString == QLatin1String(NM_SETTING_MACSEC_SETTING_NAME)) {
0248         type = Macsec;
0249     } else if (typeString == QLatin1String(NM_SETTING_DCB_SETTING_NAME)) {
0250         type = Dcb;
0251     } else if (typeString == QLatin1String(NM_SETTING_WIREGUARD_SETTING_NAME)) {
0252         type = WireGuard;
0253     }
0254 
0255     return type;
0256 }
0257 
0258 NetworkManager::Setting::Setting(SettingType type)
0259     : d_ptr(new SettingPrivate())
0260 {
0261     setType(type);
0262 }
0263 
0264 NetworkManager::Setting::Setting(const NetworkManager::Setting::Ptr &setting)
0265     : d_ptr(new SettingPrivate())
0266 {
0267     setInitialized(!setting->isNull());
0268     setType(setting->type());
0269 }
0270 
0271 NetworkManager::Setting::~Setting()
0272 {
0273     delete d_ptr;
0274 }
0275 
0276 void NetworkManager::Setting::fromMap(const QVariantMap &map)
0277 {
0278     Q_UNUSED(map);
0279 }
0280 
0281 QVariantMap NetworkManager::Setting::toMap() const
0282 {
0283     return QVariantMap();
0284 }
0285 
0286 QStringList NetworkManager::Setting::needSecrets(bool requestNew) const
0287 {
0288     Q_UNUSED(requestNew);
0289     return QStringList();
0290 }
0291 
0292 QString NetworkManager::Setting::name() const
0293 {
0294     return QString();
0295 }
0296 
0297 void NetworkManager::Setting::secretsFromMap(const QVariantMap &map)
0298 {
0299     Q_UNUSED(map);
0300 }
0301 
0302 void NetworkManager::Setting::secretsFromStringMap(const NMStringMap &map)
0303 {
0304     QVariantMap secretsMap;
0305     NMStringMap::ConstIterator i = map.constBegin();
0306     while (i != map.constEnd()) {
0307         secretsMap.insert(i.key(), i.value());
0308         ++i;
0309     }
0310     secretsFromMap(secretsMap);
0311 }
0312 
0313 QVariantMap NetworkManager::Setting::secretsToMap() const
0314 {
0315     return QVariantMap();
0316 }
0317 
0318 NMStringMap NetworkManager::Setting::secretsToStringMap() const
0319 {
0320     NMStringMap ret;
0321     QVariantMap secretsMap = secretsToMap();
0322     QVariantMap::ConstIterator i = secretsMap.constBegin();
0323     while (i != secretsMap.constEnd()) {
0324         ret.insert(i.key(), i.value().toString());
0325         ++i;
0326     }
0327 
0328     return ret;
0329 }
0330 
0331 void NetworkManager::Setting::setInitialized(bool initialized)
0332 {
0333     Q_D(Setting);
0334 
0335     d->initialized = initialized;
0336 }
0337 
0338 bool NetworkManager::Setting::isNull() const
0339 {
0340     Q_D(const Setting);
0341 
0342     return !d->initialized;
0343 }
0344 
0345 void NetworkManager::Setting::setType(NetworkManager::Setting::SettingType type)
0346 {
0347     Q_D(Setting);
0348 
0349     d->type = type;
0350 }
0351 
0352 NetworkManager::Setting::SettingType NetworkManager::Setting::type() const
0353 {
0354     Q_D(const Setting);
0355 
0356     return d->type;
0357 }