diff --git a/autotests/settings/CMakeLists.txt b/autotests/settings/CMakeLists.txt index b929b84..5480601 100644 --- a/autotests/settings/CMakeLists.txt +++ b/autotests/settings/CMakeLists.txt @@ -1,33 +1,34 @@ macro(NETWORKMANAGERQT_AUTOTESTS) foreach(_testname ${ARGN}) ecm_add_test(${_testname}.cpp LINK_LIBRARIES Qt5::Test KF5NetworkManagerQt_static) endforeach(_testname) endmacro(NETWORKMANAGERQT_AUTOTESTS) NETWORKMANAGERQT_AUTOTESTS( 8021xsettingtest adslsettingtest bluetoothsettingtest bondsettingtest bridgesettingtest bridgeportsettingtest cdmasettingtest connectionsettingtest gsmsettingtest infinibandsettingtest + iptunnelsettingtest ipv4settingtest ipv6settingtest olpcmeshsettingtest pppsettingtest pppoesettingtest serialsettingtest tunsettingtest vlansettingtest vxlansettingtest vpnsettingtest wimaxsettingtest wiredsettingtest wirelesssettingtest wirelesssecuritysettingtest ) diff --git a/autotests/settings/iptunnelsettingtest.cpp b/autotests/settings/iptunnelsettingtest.cpp new file mode 100644 index 0000000..17db0b0 --- /dev/null +++ b/autotests/settings/iptunnelsettingtest.cpp @@ -0,0 +1,106 @@ +/* + Copyright 2018 Pranav Gade + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) version 3, or any + later version accepted by the membership of KDE e.V. (or its + successor approved by the membership of KDE e.V.), which shall + act as a proxy defined in Section 6 of version 3 of the license. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . +*/ + +#include "iptunnelsettingtest.h" + +#include "settings/iptunnelsetting.h" + +#include + +#include + +void IpTunnelSettingTest::testSetting_data() +{ + QTest::addColumn("mode"); + QTest::addColumn("pathMtuDiscovery"); + QTest::addColumn("encapsulationLimit"); + QTest::addColumn("flags"); + QTest::addColumn("flowLabel"); + QTest::addColumn("mtu"); + QTest::addColumn("tos"); + QTest::addColumn("ttl"); + QTest::addColumn("inputKey"); + QTest::addColumn("local"); + QTest::addColumn("parent"); + QTest::addColumn("outputKey"); + QTest::addColumn("remote"); + + QTest::newRow("setting1") + << (quint32)2 // mode + << false // pathMtuDiscovery + << (quint32)1 // encapsulationLimit + << (quint32)0x02 // flags + << (quint32)1 // flowLabel + << (quint32)1 // mtu + << (quint32)1 // tos + << (quint32)1 // ttl + << QString("key") // inputKey + << QString("abc") // local + << QString("par") // parent + << QString("out") // outputKey + << QString("rem"); // remote +} + +void IpTunnelSettingTest::testSetting() +{ + QFETCH(quint32, mode); + QFETCH(bool, pathMtuDiscovery); + QFETCH(quint32, encapsulationLimit); + QFETCH(quint32, flags); + QFETCH(quint32, flowLabel); + QFETCH(quint32, mtu); + QFETCH(quint32, tos); + QFETCH(quint32, ttl); + QFETCH(QString, inputKey); + QFETCH(QString, local); + QFETCH(QString, parent); + QFETCH(QString, outputKey); + QFETCH(QString, remote); + + QVariantMap map; + + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_MODE), mode); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY), pathMtuDiscovery); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT), encapsulationLimit); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_FLAGS), flags); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_FLOW_LABEL), flowLabel); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_MTU), mtu); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_TOS), tos); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_TTL), ttl); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_INPUT_KEY), inputKey); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_LOCAL), local); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_PARENT), parent); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_OUTPUT_KEY), outputKey); + map.insert(QLatin1String(NM_SETTING_IP_TUNNEL_REMOTE), remote); + + NetworkManager::IpTunnelSetting setting; + setting.fromMap(map); + + QVariantMap map1 = setting.toMap(); + + // Will fail if set some default values, because they are skipped in toMap() method + QVariantMap::const_iterator it = map.constBegin(); + while (it != map.constEnd()) { + QCOMPARE(it.value(), map1.value(it.key())); + ++it; + } +} + +QTEST_MAIN(IpTunnelSettingTest) diff --git a/autotests/settings/iptunnelsettingtest.h b/autotests/settings/iptunnelsettingtest.h new file mode 100644 index 0000000..bf71ba2 --- /dev/null +++ b/autotests/settings/iptunnelsettingtest.h @@ -0,0 +1,36 @@ +/* + Copyright Pranav Gade + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) version 3, or any + later version accepted by the membership of KDE e.V. (or its + successor approved by the membership of KDE e.V.), which shall + act as a proxy defined in Section 6 of version 3 of the license. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . +*/ + +#ifndef NETWORKMANAGERQT_IP_TUNNEL_SETTING_TEST_H +#define NETWORKMANAGERQT_IP_TUNNEL_SETTING_TEST_H + +#include + +class IpTunnelSettingTest : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void testSetting_data(); + void testSetting(); +}; + +#endif // NETWORKMANAGERQT_IP_TUNNEL_SETTING_TEST_H + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0c7645a..88e33ea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,276 +1,278 @@ # add_subdirectory(dbus) include_directories( ${NETWORKMANAGER_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/dbus ${CMAKE_CURRENT_SOURCE_DIR}/settings ) set(NetworkManagerQt_PART_SRCS device.cpp accesspoint.cpp activeconnection.cpp adsldevice.cpp bluetoothdevice.cpp bonddevice.cpp bridgedevice.cpp connection.cpp dhcp4config.cpp dhcp6config.cpp devicestatistics.cpp dnsconfiguration.cpp dnsdomain.cpp infinibanddevice.cpp ipaddress.cpp iproute.cpp ipconfig.cpp manager.cpp modemdevice.cpp olpcmeshdevice.cpp secretagent.cpp settings.cpp utils.cpp vlandevice.cpp vpnconnection.cpp vpnplugin.cpp wimaxdevice.cpp wimaxnsp.cpp wireddevice.cpp wirelessdevice.cpp wirelessnetwork.cpp generictypes.cpp genericdevice.cpp gredevice.cpp iptunneldevice.cpp macvlandevice.cpp teamdevice.cpp tundevice.cpp vethdevice.cpp wimaxdevice.cpp wimaxnsp.cpp ) set(NetworkManagerQt_SETTINGS_SRCS settings/adslsetting.cpp settings/bluetoothsetting.cpp settings/bondsetting.cpp settings/bridgesetting.cpp settings/bridgeportsetting.cpp settings/cdmasetting.cpp settings/connectionsettings.cpp settings/gsmsetting.cpp + settings/iptunnelsetting.cpp settings/ipv4setting.cpp settings/ipv6setting.cpp settings/infinibandsetting.cpp settings/olpcmeshsetting.cpp settings/pppsetting.cpp settings/pppoesetting.cpp settings/setting.cpp settings/serialsetting.cpp settings/security8021xsetting.cpp #settings/template.cpp settings/vlansetting.cpp settings/vpnsetting.cpp settings/wimaxsetting.cpp settings/wiredsetting.cpp settings/wirelesssetting.cpp settings/wirelesssecuritysetting.cpp settings/teamsetting.cpp settings/genericsetting.cpp settings/tunsetting.cpp settings/vxlansetting.cpp ) set(DBUS_INTERFACE_SRCS dbus/accesspointinterface.cpp dbus/activeconnectioninterface.cpp dbus/adsldeviceinterface.cpp dbus/agentmanagerinterface.cpp dbus/bluetoothdeviceinterface.cpp dbus/bonddeviceinterface.cpp dbus/bridgedeviceinterface.cpp dbus/connectioninterface.cpp dbus/deviceinterface.cpp dbus/devicestatisticsinterface.cpp dbus/dhcp4configinterface.cpp dbus/dhcp6configinterface.cpp dbus/dnsmanagerinterface.cpp dbus/genericdeviceinterface.cpp dbus/gredeviceinterface.cpp dbus/checkpointinterface.cpp dbus/infinibanddeviceinterface.cpp dbus/iptunneldeviceinterface.cpp dbus/ip4configinterface.cpp dbus/ip6configinterface.cpp dbus/macsecdeviceinterface.cpp dbus/macvlandeviceinterface.cpp dbus/modemdeviceinterface.cpp dbus/networkmanagerinterface.cpp dbus/olpcmeshdeviceinterface.cpp dbus/pppinterface.cpp dbus/secretagentadaptor.cpp dbus/settingsinterface.cpp dbus/teamdeviceinterface.cpp dbus/tundeviceinterface.cpp dbus/vethdeviceinterface.cpp dbus/vlandeviceinterface.cpp dbus/vpnconnectioninterface.cpp dbus/vpnplugininterface.cpp dbus/vxlandeviceinterface.cpp dbus/wimaxdeviceinterface.cpp dbus/wimaxnspinterface.cpp dbus/wireddeviceinterface.cpp dbus/wirelessdeviceinterface.cpp ) add_library(KF5NetworkManagerQt SHARED ${NetworkManagerQt_PART_SRCS} ${NetworkManagerQt_SETTINGS_SRCS} ${DBUS_INTERFACE_SRCS}) generate_export_header(KF5NetworkManagerQt EXPORT_FILE_NAME ${NetworkManagerQt_BINARY_DIR}/networkmanagerqt/networkmanagerqt_export.h BASE_NAME NetworkManagerQt) add_library(KF5::NetworkManagerQt ALIAS KF5NetworkManagerQt) target_include_directories(KF5NetworkManagerQt INTERFACE "$") # for examples to build target_include_directories(KF5NetworkManagerQt PUBLIC "$") target_link_libraries(KF5NetworkManagerQt PUBLIC Qt5::Core Qt5::Network Qt5::DBus) set_target_properties(KF5NetworkManagerQt PROPERTIES VERSION ${NETWORKMANAGERQT_VERSION_STRING} SOVERSION ${NETWORKMANAGERQT_SOVERSION} EXPORT_NAME NetworkManagerQt ) if (${NETWORKMANAGER_VERSION} VERSION_EQUAL 1.0.0 OR ${NETWORKMANAGER_VERSION} VERSION_GREATER 1.0.0) target_include_directories(KF5NetworkManagerQt PUBLIC ${NM-CORE_INCLUDE_DIRS}) else() target_include_directories(KF5NetworkManagerQt PUBLIC ${NETWORKMANAGER_INCLUDE_DIRS} SYSTEM PUBLIC ${NM-UTIL_INCLUDE_DIRS} ${NM-GLIB_INCLUDE_DIRS}) endif() ########### static lib for tests ############### add_library(KF5NetworkManagerQt_static STATIC ${NetworkManagerQt_PART_SRCS} ${NetworkManagerQt_SETTINGS_SRCS} ${DBUS_INTERFACE_SRCS}) set_target_properties(KF5NetworkManagerQt_static PROPERTIES COMPILE_FLAGS -DNMQT_STATIC=1) target_link_libraries(KF5NetworkManagerQt_static PUBLIC Qt5::Core Qt5::Network Qt5::DBus) target_include_directories(KF5NetworkManagerQt_static PUBLIC "$") ecm_generate_headers(NetworkManagerQt_CamelCase_HEADERS HEADER_NAMES AccessPoint ActiveConnection AdslDevice BluetoothDevice BondDevice BridgeDevice Connection Device DeviceStatistics Dhcp4Config Dhcp6Config DnsConfiguration DnsDomain GenericDevice GenericTypes GreDevice InfinibandDevice IpAddress IpConfig IpRoute IpTunnelDevice MacVlanDevice Manager ModemDevice OlpcMeshDevice SecretAgent Settings TeamDevice TunDevice Utils VethDevice VlanDevice VpnConnection VpnPlugin WimaxDevice WimaxNsp WiredDevice WirelessDevice WirelessNetwork REQUIRED_HEADERS NetworkManagerQt_HEADERS PREFIX NetworkManagerQt ) ecm_generate_headers(NetworkManagerQt_SETTINGS_CamelCase_HEADERS HEADER_NAMES AdslSetting BluetoothSetting BondSetting BridgeSetting BridgePortSetting CdmaSetting ConnectionSettings GsmSetting GenericSetting InfinibandSetting + IpTunnelSetting Ipv4Setting Ipv6Setting OlpcMeshSetting PppoeSetting PppSetting Security8021xSetting SerialSetting Setting TeamSetting TunSetting VlanSetting VpnSetting WimaxSetting WiredSetting WirelessSecuritySetting WirelessSetting RELATIVE settings REQUIRED_HEADERS NetworkManagerQt_SETTINGS_HEADERS PREFIX NetworkManagerQt ) install(TARGETS KF5NetworkManagerQt EXPORT KF5NetworkManagerQtTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES ${NetworkManagerQt_CamelCase_HEADERS} ${NetworkManagerQt_SETTINGS_CamelCase_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/NetworkManagerQt/NetworkManagerQt COMPONENT Devel ) install(FILES ${NetworkManagerQt_BINARY_DIR}/networkmanagerqt/networkmanagerqt_export.h ${NetworkManagerQt_HEADERS} ${NetworkManagerQt_SETTINGS_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/NetworkManagerQt/networkmanagerqt COMPONENT Devel ) if(BUILD_QCH) ecm_add_qch( KF5NetworkManagerQt_QCH NAME NetworkManagerQt BASE_NAME KF5NetworkManagerQt VERSION ${KF5_VERSION} ORG_DOMAIN org.kde SOURCES # using only public headers, to cover only public API ${NetworkManagerQt_HEADERS} ${NetworkManagerQt_SETTINGS_HEADERS} MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md" LINK_QCHS Qt5Core_QCH Qt5Network_QCH Qt5DBus_QCH BLANK_MACROS NETWORKMANAGERQT_EXPORT NETWORKMANAGERQT_DEPRECATED NETWORKMANAGERQT_DEPRECATED_EXPORT TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} COMPONENT Devel ) endif() include(ECMGeneratePriFile) ecm_generate_pri_file(BASE_NAME NetworkManagerQt LIB_NAME KF5NetworkManagerQt DEPS "core" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/NetworkManagerQt) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) diff --git a/src/settings/connectionsettings.cpp b/src/settings/connectionsettings.cpp index 4f81145..ade664e 100644 --- a/src/settings/connectionsettings.cpp +++ b/src/settings/connectionsettings.cpp @@ -1,1075 +1,1094 @@ /* Copyright 2012-2013 Jan Grulich Copyright 2013 Daniel Nicoletti This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #include "connectionsettings.h" #include "connectionsettings_p.h" #include "wiredsetting.h" #include "olpcmeshsetting.h" #include "wirelesssetting.h" #include "wirelesssecuritysetting.h" #include "security8021xsetting.h" #include "adslsetting.h" #include "bluetoothsetting.h" #include "bondsetting.h" #include "bridgesetting.h" #include "bridgeportsetting.h" #include "gsmsetting.h" #include "cdmasetting.h" #include "infinibandsetting.h" +#include "iptunnelsetting.h" #include "ipv4setting.h" #include "ipv6setting.h" #include "pppsetting.h" #include "pppoesetting.h" #include "serialsetting.h" #include "tunsetting.h" #include "vlansetting.h" #include "vpnsetting.h" #include "wimaxsetting.h" #undef signals #include #if !NM_CHECK_VERSION(1, 6, 0) #define NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES "autoconnect-retries" #endif #include "teamsetting.h" #include "genericsetting.h" #include namespace NetworkManager { extern int checkVersion(const int x, const int y, const int z); } NetworkManager::ConnectionSettingsPrivate::ConnectionSettingsPrivate(ConnectionSettings *q) : name(NM_SETTING_CONNECTION_SETTING_NAME) , uuid(QUuid().toString()) , type(ConnectionSettings::Wired) , autoconnect(true) , readOnly(false) , gatewayPingTimeout(0) , autoconnectPriority(0) , autoconnectRetries(-1) , autoconnectSlaves(ConnectionSettings::SlavesDefault) , lldp(ConnectionSettings::LldpDefault) , metered(ConnectionSettings::MeteredUnknown) , q_ptr(q) { } void NetworkManager::ConnectionSettingsPrivate::addSetting(const NetworkManager::Setting::Ptr &setting) { settings.push_back(setting); } void NetworkManager::ConnectionSettingsPrivate::clearSettings() { settings.clear(); } void NetworkManager::ConnectionSettingsPrivate::initSettings(NMBluetoothCapabilities bt_cap) { clearSettings(); switch (type) { case ConnectionSettings::Adsl: addSetting(Setting::Ptr(new AdslSetting())); addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); break; case ConnectionSettings::Bond: addSetting(Setting::Ptr(new BondSetting())); addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); break; case ConnectionSettings::Bluetooth: addSetting(Setting::Ptr(new BluetoothSetting())); addSetting(Setting::Ptr(new Ipv4Setting())); //addSetting(Setting::Ptr(new Ipv6Setting())); if (bt_cap == NM_BT_CAPABILITY_DUN) { addSetting(Setting::Ptr(new GsmSetting())); addSetting(Setting::Ptr(new PppSetting())); addSetting(Setting::Ptr(new SerialSetting())); } break; case ConnectionSettings::Bridge: addSetting(Setting::Ptr(new BridgeSetting())); addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); break; case ConnectionSettings::Cdma: addSetting(Setting::Ptr(new CdmaSetting())); addSetting(Setting::Ptr(new Ipv4Setting())); if (NetworkManager::checkVersion(1, 0, 0)) { addSetting(Setting::Ptr(new Ipv6Setting())); } addSetting(Setting::Ptr(new PppSetting())); break; case ConnectionSettings::Gsm: addSetting(Setting::Ptr(new GsmSetting())); addSetting(Setting::Ptr(new Ipv4Setting())); if (NetworkManager::checkVersion(1, 0, 0)) { addSetting(Setting::Ptr(new Ipv6Setting())); } addSetting(Setting::Ptr(new PppSetting())); break; case ConnectionSettings::Infiniband: addSetting(Setting::Ptr(new InfinibandSetting())); addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); break; case ConnectionSettings::OLPCMesh: addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); addSetting(Setting::Ptr(new OlpcMeshSetting())); break; case ConnectionSettings::Pppoe: addSetting(Setting::Ptr(new Ipv4Setting())); //addSetting(new Ipv6Setting())); addSetting(Setting::Ptr(new PppSetting())); addSetting(Setting::Ptr(new PppoeSetting())); addSetting(Setting::Ptr(new WiredSetting())); break; case ConnectionSettings::Vlan: addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); addSetting(Setting::Ptr(new VlanSetting())); break; case ConnectionSettings::Vpn: addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); addSetting(Setting::Ptr(new VpnSetting())); break; case ConnectionSettings::Wimax: addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); addSetting(Setting::Ptr(new WimaxSetting())); break; case ConnectionSettings::Wired: addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); addSetting(Setting::Ptr(new Security8021xSetting())); addSetting(Setting::Ptr(new WiredSetting())); break; case ConnectionSettings::Wireless: addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); addSetting(Setting::Ptr(new Security8021xSetting())); addSetting(Setting::Ptr(new WirelessSetting())); addSetting(Setting::Ptr(new WirelessSecuritySetting())); break; case ConnectionSettings::Team: addSetting(Setting::Ptr(new TeamSetting())); addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); break; case ConnectionSettings::Generic: addSetting(Setting::Ptr(new GenericSetting())); addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); break; case ConnectionSettings::Tun: addSetting(Setting::Ptr(new TunSetting())); addSetting(Setting::Ptr(new Ipv4Setting())); addSetting(Setting::Ptr(new Ipv6Setting())); break; + case ConnectionSettings::IpTunnel: + addSetting(Setting::Ptr(new IpTunnelSetting())); + addSetting(Setting::Ptr(new Ipv4Setting())); + addSetting(Setting::Ptr(new Ipv6Setting())); + break; case ConnectionSettings::Unknown: default: break; } } void NetworkManager::ConnectionSettingsPrivate::initSettings(const NetworkManager::ConnectionSettings::Ptr &connectionSettings) { Q_Q(ConnectionSettings); clearSettings(); switch (type) { case ConnectionSettings::Adsl: addSetting(connectionSettings->setting(Setting::Adsl)); addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); break; case ConnectionSettings::Bond: addSetting(connectionSettings->setting(Setting::Bond)); addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); break; case ConnectionSettings::Bluetooth: addSetting(connectionSettings->setting(Setting::Bluetooth)); addSetting(connectionSettings->setting(Setting::Ipv4)); if (NetworkManager::checkVersion(1, 0, 0)) { addSetting(connectionSettings->setting(Setting::Ipv6)); } if (q->setting(Setting::Gsm) && q->setting(Setting::Ppp) && q->setting(Setting::Serial)) { addSetting(connectionSettings->setting(Setting::Gsm)); addSetting(connectionSettings->setting(Setting::Ppp)); addSetting(connectionSettings->setting(Setting::Serial)); } break; case ConnectionSettings::Bridge: addSetting(connectionSettings->setting(Setting::Bridge)); addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); break; case ConnectionSettings::Cdma: addSetting(connectionSettings->setting(Setting::Cdma)); addSetting(connectionSettings->setting(Setting::Ipv4)); if (NetworkManager::checkVersion(1, 0, 0)) { addSetting(connectionSettings->setting(Setting::Ipv6)); } addSetting(connectionSettings->setting(Setting::Ppp)); break; case ConnectionSettings::Gsm: addSetting(connectionSettings->setting(Setting::Gsm)); addSetting(connectionSettings->setting(Setting::Ipv4)); if (NetworkManager::checkVersion(1, 0, 0)) { addSetting(connectionSettings->setting(Setting::Ipv6)); } addSetting(connectionSettings->setting(Setting::Ppp)); break; case ConnectionSettings::Infiniband: addSetting(connectionSettings->setting(Setting::Infiniband)); addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); break; case ConnectionSettings::OLPCMesh: addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); addSetting(connectionSettings->setting(Setting::OlpcMesh)); break; case ConnectionSettings::Pppoe: addSetting(connectionSettings->setting(Setting::Ipv4)); //addSetting(Ipv6Setting(connectionSettings->setting(Setting::Ipv6)); addSetting(connectionSettings->setting(Setting::Ppp)); addSetting(connectionSettings->setting(Setting::Pppoe)); addSetting(connectionSettings->setting(Setting::Wired)); break; case ConnectionSettings::Vlan: addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); addSetting(connectionSettings->setting(Setting::Vlan)); break; case ConnectionSettings::Vpn: addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); addSetting(connectionSettings->setting(Setting::Vpn)); break; case ConnectionSettings::Wimax: addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); addSetting(connectionSettings->setting(Setting::Wimax)); break; case ConnectionSettings::Wired: addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); addSetting(connectionSettings->setting(Setting::Security8021x)); addSetting(connectionSettings->setting(Setting::Wired)); break; case ConnectionSettings::Wireless: addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); addSetting(connectionSettings->setting(Setting::Security8021x)); addSetting(connectionSettings->setting(Setting::Wireless)); addSetting(connectionSettings->setting(Setting::WirelessSecurity)); break; case ConnectionSettings::Team: addSetting(connectionSettings->setting(Setting::Team)); addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); break; case ConnectionSettings::Generic: addSetting(connectionSettings->setting(Setting::Generic)); addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); break; case ConnectionSettings::Tun: addSetting(connectionSettings->setting(Setting::Tun)); addSetting(connectionSettings->setting(Setting::Ipv4)); addSetting(connectionSettings->setting(Setting::Ipv6)); break; + case ConnectionSettings::IpTunnel: + addSetting(connectionSettings->setting(Setting::IpTunnel)); + addSetting(connectionSettings->setting(Setting::Ipv4)); + addSetting(connectionSettings->setting(Setting::Ipv6)); + break; case ConnectionSettings::Unknown: default: break; } } NetworkManager::ConnectionSettings::ConnectionType NetworkManager::ConnectionSettings::typeFromString(const QString &typeString) { ConnectionSettings::ConnectionType type = Wired; if (typeString == QLatin1String(NM_SETTING_ADSL_SETTING_NAME)) { type = Adsl; } else if (typeString == QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME)) { type = Bluetooth; } else if (typeString == QLatin1String(NM_SETTING_BOND_SETTING_NAME)) { type = Bond; } else if (typeString == QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME)) { type = Bridge; } else if (typeString == QLatin1String(NM_SETTING_CDMA_SETTING_NAME)) { type = Cdma; } else if (typeString == QLatin1String(NM_SETTING_GSM_SETTING_NAME)) { type = Gsm; } else if (typeString == QLatin1String(NM_SETTING_INFINIBAND_SETTING_NAME)) { type = Infiniband; } else if (typeString == QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME)) { type = OLPCMesh; } else if (typeString == QLatin1String(NM_SETTING_PPPOE_SETTING_NAME)) { type = Pppoe; } else if (typeString == QLatin1String(NM_SETTING_VLAN_SETTING_NAME)) { type = Vlan; } else if (typeString == QLatin1String(NM_SETTING_VPN_SETTING_NAME)) { type = Vpn; } else if (typeString == QLatin1String(NM_SETTING_WIMAX_SETTING_NAME)) { type = Wimax; } else if (typeString == QLatin1String(NM_SETTING_WIRED_SETTING_NAME)) { type = Wired; } else if (typeString == QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME)) { type = Wireless; } else if (typeString == QLatin1String(NM_SETTING_TEAM_SETTING_NAME)) { type = Team; } else if (typeString == QLatin1String(NM_SETTING_GENERIC_SETTING_NAME)) { type = Generic; } else if (typeString == QLatin1String(NM_SETTING_TUN_SETTING_NAME)) { type = Tun; + } else if (typeString == QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME)) { + type = IpTunnel; } return type; } QString NetworkManager::ConnectionSettings::typeAsString(NetworkManager::ConnectionSettings::ConnectionType type) { QString typeString; switch (type) { case Adsl: typeString = QLatin1String(NM_SETTING_ADSL_SETTING_NAME); break; case Bond: typeString = QLatin1String(NM_SETTING_BOND_SETTING_NAME); break; case Bluetooth: typeString = QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME); break; case Bridge: typeString = QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME); break; case Cdma: typeString = QLatin1String(NM_SETTING_CDMA_SETTING_NAME); break; case Gsm: typeString = QLatin1String(NM_SETTING_GSM_SETTING_NAME); break; case Infiniband: typeString = QLatin1String(NM_SETTING_INFINIBAND_SETTING_NAME); break; case OLPCMesh: typeString = QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME); break; case Pppoe: typeString = QLatin1String(NM_SETTING_PPPOE_SETTING_NAME); break; case Vlan: typeString = QLatin1String(NM_SETTING_VLAN_SETTING_NAME); break; case Vpn: typeString = QLatin1String(NM_SETTING_VPN_SETTING_NAME); break; case Wimax: typeString = QLatin1String(NM_SETTING_WIMAX_SETTING_NAME); break; case Wired: typeString = QLatin1String(NM_SETTING_WIRED_SETTING_NAME); break; case Wireless: typeString = QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME); break; case Team: typeString = QLatin1String(NM_SETTING_TEAM_SETTING_NAME); break; case Generic: typeString = QLatin1String(NM_SETTING_GENERIC_SETTING_NAME); break; case Tun: typeString = QLatin1String(NM_SETTING_TUN_SETTING_NAME); break; + case IpTunnel: + typeString = QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME); + break; default: break; }; return typeString; } QString NetworkManager::ConnectionSettings::createNewUuid() { return QUuid::createUuid().toString().mid(1, QUuid::createUuid().toString().length() - 2); } NetworkManager::ConnectionSettings::ConnectionSettings() : d_ptr(new ConnectionSettingsPrivate(this)) { } NetworkManager::ConnectionSettings::ConnectionSettings(NetworkManager::ConnectionSettings::ConnectionType type, NMBluetoothCapabilities bt_cap) : d_ptr(new ConnectionSettingsPrivate(this)) { setConnectionType(type, bt_cap); } NetworkManager::ConnectionSettings::ConnectionSettings(const NetworkManager::ConnectionSettings::Ptr &other) : d_ptr(new ConnectionSettingsPrivate(this)) { Q_D(ConnectionSettings); setId(other->id()); setUuid(other->uuid()); setInterfaceName(other->interfaceName()); setConnectionType(other->connectionType()); setPermissions(other->permissions()); setAutoconnect(other->autoconnect()); setAutoconnectPriority(other->autoconnectPriority()); setTimestamp(other->timestamp()); setReadOnly(other->readOnly()); setZone(other->zone()); setMaster(other->master()); setSlaveType(other->slaveType()); setGatewayPingTimeout(other->gatewayPingTimeout()); setAutoconnectRetries(other->autoconnectRetries()); setAutoconnectSlaves(other->autoconnectSlaves()); setLldp(other->lldp()); setMetered(other->metered()); setStableId(other->stableId()); d->initSettings(other); } NetworkManager::ConnectionSettings::ConnectionSettings(const NMVariantMapMap &map) : d_ptr(new ConnectionSettingsPrivate(this)) { fromMap(map); } NetworkManager::ConnectionSettings::~ConnectionSettings() { d_ptr->clearSettings(); delete d_ptr; } void NetworkManager::ConnectionSettings::fromMap(const NMVariantMapMap &map) { QVariantMap connectionSettings = map.value(QLatin1String(NM_SETTING_CONNECTION_SETTING_NAME)); setId(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_ID)).toString()); setUuid(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_UUID)).toString()); setConnectionType(typeFromString(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_TYPE)).toString())); if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_INTERFACE_NAME))) { setInterfaceName(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_INTERFACE_NAME)).toString()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_PERMISSIONS))) { QStringList permissions = connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_PERMISSIONS)).toStringList(); Q_FOREACH (const QString & permission, permissions) { const QStringList split = permission.split(QLatin1String(":"), QString::KeepEmptyParts); addToPermissions(split.at(1), split.at(2)); } } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT))) { setAutoconnect(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT)).toBool()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY))) { setAutoconnectPriority(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY)).toInt()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_TIMESTAMP))) { const int timestamp = connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_TIMESTAMP)).toInt(); QDateTime dateTime; dateTime.setTime_t(timestamp); setTimestamp(dateTime); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_READ_ONLY))) { setReadOnly(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_READ_ONLY)).toBool()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_ZONE))) { setZone(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_ZONE)).toString()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_MASTER))) { setMaster(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_MASTER)).toString()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_SLAVE_TYPE))) { setSlaveType(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_SLAVE_TYPE)).toString()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_SECONDARIES))) { setSecondaries(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_SECONDARIES)).toStringList()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT))) { setGatewayPingTimeout(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT)).toUInt()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES))) { setAutoconnectRetries(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES)).toInt()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES))) { setAutoconnectSlaves((NetworkManager::ConnectionSettings::AutoconnectSlaves)connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES)).toInt()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_LLDP))) { setLldp((NetworkManager::ConnectionSettings::Lldp)connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_LLDP)).toInt()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_METERED))) { setMetered((NetworkManager::ConnectionSettings::Metered)connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_METERED)).toInt()); } if (connectionSettings.contains(QLatin1String(NM_SETTING_CONNECTION_STABLE_ID))) { setStableId(connectionSettings.value(QLatin1String(NM_SETTING_CONNECTION_STABLE_ID)).toString()); } Q_FOREACH (const Setting::Ptr & setting, settings()) { if (map.contains(setting->name())) { setting->fromMap(map.value(setting->name())); setting->setInitialized(true); } else { setting->setInitialized(false); } } } NMVariantMapMap NetworkManager::ConnectionSettings::toMap() const { NMVariantMapMap result; QVariantMap connectionSetting; if (!id().isEmpty()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_ID), id()); } if (!uuid().isEmpty()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_UUID), uuid()); } if (connectionType()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_TYPE), typeAsString(connectionType())); } if (!interfaceName().isEmpty()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_INTERFACE_NAME), interfaceName()); } if (!permissions().isEmpty()) { QStringList perm; QHash perms = permissions(); QHash::const_iterator it = perms.constBegin(); while (it != perms.constEnd()) { const QString tmp = "user:" + it.key() + ':' + it.value(); perm << tmp; ++it; } connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_PERMISSIONS), perm); } if (!autoconnect()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT), autoconnect()); } if (autoconnectPriority()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY), autoconnectPriority()); } if (timestamp().isValid()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_TIMESTAMP), timestamp().toTime_t()); } if (readOnly()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_READ_ONLY), readOnly()); } if (!zone().isEmpty()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_ZONE), zone()); } if (!master().isEmpty()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_MASTER), master()); } if (!slaveType().isEmpty()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_SLAVE_TYPE), slaveType()); } if (!secondaries().isEmpty()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_SECONDARIES), secondaries()); } if (gatewayPingTimeout()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT), gatewayPingTimeout()); } if (autoconnectRetries() >= 0) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES), autoconnectRetries()); } connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES), autoconnectSlaves()); connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_LLDP), lldp()); connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_METERED), metered()); if (!stableId().isEmpty()) { connectionSetting.insert(QLatin1String(NM_SETTING_CONNECTION_STABLE_ID), stableId()); } result.insert(QLatin1String(NM_SETTING_CONNECTION_SETTING_NAME), connectionSetting); Q_FOREACH (const Setting::Ptr & setting, settings()) { QVariantMap map = setting->toMap(); if (!setting->isNull()) { result.insert(setting->name(), map); } } return result; } QString NetworkManager::ConnectionSettings::name() const { Q_D(const ConnectionSettings); return d->name; } void NetworkManager::ConnectionSettings::setId(const QString &id) { Q_D(ConnectionSettings); d->id = id; } QString NetworkManager::ConnectionSettings::id() const { Q_D(const ConnectionSettings); return d->id; } void NetworkManager::ConnectionSettings::setUuid(const QString &uuid) { Q_D(ConnectionSettings); d->uuid = uuid; } QString NetworkManager::ConnectionSettings::uuid() const { Q_D(const ConnectionSettings); return d->uuid; } void NetworkManager::ConnectionSettings::setInterfaceName(const QString &interfaceName) { Q_D(ConnectionSettings); d->interfaceName = interfaceName; } QString NetworkManager::ConnectionSettings::interfaceName() const { Q_D(const ConnectionSettings); return d->interfaceName; } void NetworkManager::ConnectionSettings::setConnectionType(NetworkManager::ConnectionSettings::ConnectionType type, NMBluetoothCapabilities bt_cap) { Q_D(ConnectionSettings); d->type = type; d->initSettings(bt_cap); } NetworkManager::ConnectionSettings::ConnectionType NetworkManager::ConnectionSettings::connectionType() const { Q_D(const ConnectionSettings); return d->type; } void NetworkManager::ConnectionSettings::addToPermissions(const QString &user, const QString &type) { Q_D(ConnectionSettings); d->permissions.insert(user, type); } void NetworkManager::ConnectionSettings::setPermissions(const QHash< QString, QString > &perm) { Q_D(ConnectionSettings); d->permissions = perm; } QHash< QString, QString > NetworkManager::ConnectionSettings::permissions() const { Q_D(const ConnectionSettings); return d->permissions; } void NetworkManager::ConnectionSettings::setAutoconnect(bool autoconnect) { Q_D(ConnectionSettings); d->autoconnect = autoconnect; } bool NetworkManager::ConnectionSettings::autoconnect() const { Q_D(const ConnectionSettings); return d->autoconnect; } void NetworkManager::ConnectionSettings::setAutoconnectPriority(int priority) { Q_D(ConnectionSettings); d->autoconnectPriority = priority; } int NetworkManager::ConnectionSettings::autoconnectPriority() const { Q_D(const ConnectionSettings); return d->autoconnectPriority; } void NetworkManager::ConnectionSettings::setTimestamp(const QDateTime ×tamp) { Q_D(ConnectionSettings); d->timestamp = timestamp; } QDateTime NetworkManager::ConnectionSettings::timestamp() const { Q_D(const ConnectionSettings); return d->timestamp; } void NetworkManager::ConnectionSettings::setReadOnly(bool readonly) { Q_D(ConnectionSettings); d->readOnly = readonly; } bool NetworkManager::ConnectionSettings::readOnly() const { Q_D(const ConnectionSettings); return d->readOnly; } void NetworkManager::ConnectionSettings::setZone(const QString &zone) { Q_D(ConnectionSettings); d->zone = zone; } QString NetworkManager::ConnectionSettings::zone() const { Q_D(const ConnectionSettings); return d->zone; } bool NetworkManager::ConnectionSettings::isSlave() const { Q_D(const ConnectionSettings); return !d->master.isEmpty() && !d->slaveType.isEmpty(); } void NetworkManager::ConnectionSettings::setMaster(const QString &master) { Q_D(ConnectionSettings); d->master = master; } QString NetworkManager::ConnectionSettings::master() const { Q_D(const ConnectionSettings); return d->master; } void NetworkManager::ConnectionSettings::setSlaveType(const QString &type) { Q_D(ConnectionSettings); d->slaveType = type; } QString NetworkManager::ConnectionSettings::slaveType() const { Q_D(const ConnectionSettings); return d->slaveType; } void NetworkManager::ConnectionSettings::setSecondaries(const QStringList &secondaries) { Q_D(ConnectionSettings); d->secondaries = secondaries; } QStringList NetworkManager::ConnectionSettings::secondaries() const { Q_D(const ConnectionSettings); return d->secondaries; } void NetworkManager::ConnectionSettings::setGatewayPingTimeout(quint32 timeout) { Q_D(ConnectionSettings); d->gatewayPingTimeout = timeout; } quint32 NetworkManager::ConnectionSettings::gatewayPingTimeout() const { Q_D(const ConnectionSettings); return d->gatewayPingTimeout; } int NetworkManager::ConnectionSettings::autoconnectRetries() const { Q_D(const ConnectionSettings); return d->autoconnectRetries; } void NetworkManager::ConnectionSettings::setAutoconnectRetries(int retries) { Q_D(ConnectionSettings); d->autoconnectRetries = retries; } NetworkManager::ConnectionSettings::AutoconnectSlaves NetworkManager::ConnectionSettings::autoconnectSlaves() const { Q_D(const ConnectionSettings); return d->autoconnectSlaves; } void NetworkManager::ConnectionSettings::setAutoconnectSlaves(NetworkManager::ConnectionSettings::AutoconnectSlaves autoconnectSlaves) { Q_D(ConnectionSettings); d->autoconnectSlaves = autoconnectSlaves; } NetworkManager::ConnectionSettings::Lldp NetworkManager::ConnectionSettings::lldp() const { Q_D(const ConnectionSettings); return d->lldp; } void NetworkManager::ConnectionSettings::setLldp(NetworkManager::ConnectionSettings::Lldp lldp) { Q_D(ConnectionSettings); d->lldp = lldp; } NetworkManager::ConnectionSettings::Metered NetworkManager::ConnectionSettings::metered() const { Q_D(const ConnectionSettings); return d->metered; } void NetworkManager::ConnectionSettings::setMetered(NetworkManager::ConnectionSettings::Metered metered) { Q_D(ConnectionSettings); d->metered = metered; } QString NetworkManager::ConnectionSettings::stableId() const { Q_D(const ConnectionSettings); return d->stableId; } void NetworkManager::ConnectionSettings::setStableId(const QString &stableId) { Q_D(ConnectionSettings); d->stableId = stableId; } NetworkManager::Setting::Ptr NetworkManager::ConnectionSettings::setting(Setting::SettingType type) const { Q_FOREACH (const Setting::Ptr & setting, settings()) { if (setting->type() == type) { return setting; } } return Setting::Ptr(); } NetworkManager::Setting::Ptr NetworkManager::ConnectionSettings::setting(const QString &type) const { return setting(Setting::typeFromString(type)); } NetworkManager::Setting::List NetworkManager::ConnectionSettings::settings() const { Q_D(const ConnectionSettings); return d->settings; } QDebug NetworkManager::operator <<(QDebug dbg, const NetworkManager::ConnectionSettings &setting) { dbg.nospace() << "CONNECTION SETTINGS\n"; dbg.nospace() << "===================\n"; dbg.nospace() << NM_SETTING_CONNECTION_ID << ": " << setting.id() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_UUID << ": " << setting.uuid() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_INTERFACE_NAME << ": " << setting.interfaceName() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_TYPE << ": " << setting.typeAsString(setting.connectionType()) << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_PERMISSIONS << ": " << setting.permissions() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT << ": " << setting.autoconnect() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY << ": " << setting.autoconnectPriority() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_TIMESTAMP << ": " << setting.timestamp().toTime_t() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_READ_ONLY << ": " << setting.readOnly() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_ZONE << ": " << setting.zone() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_MASTER << ": " << setting.master() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_SLAVE_TYPE << ": " << setting.slaveType() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_SECONDARIES << ": " << setting.secondaries() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT << ": " << setting.gatewayPingTimeout() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES << ": " << setting.autoconnectRetries() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES << ": " << setting.autoconnectSlaves() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_LLDP << ": " << setting.lldp() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_METERED << ": " << setting.metered() << '\n'; dbg.nospace() << NM_SETTING_CONNECTION_STABLE_ID << ": " << setting.stableId() << '\n'; dbg.nospace() << "===================\n"; Q_FOREACH (const Setting::Ptr & settingPtr, setting.settings()) { dbg.nospace() << settingPtr->typeAsString(settingPtr->type()).toUpper() << " SETTINGS\n"; dbg.nospace() << "---------------------------\n"; switch (settingPtr->type()) { case Setting::Adsl: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Bond: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Bluetooth: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Bridge: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::BridgePort: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Cdma: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Gsm: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Infiniband: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Ipv4: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Ipv6: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::OlpcMesh: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Ppp: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Pppoe: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Security8021x: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Serial: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Vlan: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Vpn: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Wimax: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Wired: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Wireless: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::WirelessSecurity: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Team: dbg.nospace() << *(settingPtr.staticCast().data()); break; case Setting::Tun: dbg.nospace() << *(settingPtr.staticCast().data()); break; + case Setting::IpTunnel: + dbg.nospace() << *(settingPtr.staticCast().data()); + break; default: dbg.nospace() << *settingPtr.data(); } dbg.nospace() << '\n'; } return dbg.maybeSpace(); } diff --git a/src/settings/connectionsettings.h b/src/settings/connectionsettings.h index bb1bc3f..080bc1a 100644 --- a/src/settings/connectionsettings.h +++ b/src/settings/connectionsettings.h @@ -1,186 +1,187 @@ /* Copyright 2012-2013 Jan Grulich Copyright 2013 Daniel Nicoletti This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #ifndef NETWORKMANAGERQT_CONNECTION_SETTINGS_H #define NETWORKMANAGERQT_CONNECTION_SETTINGS_H #include #include "setting.h" #undef signals #include #define signals Q_SIGNALS #include #include #include namespace NetworkManager { class ConnectionSettingsPrivate; /** * Represents collection of all connection settings */ class NETWORKMANAGERQT_EXPORT ConnectionSettings { Q_ENUMS(ConnectionType) public: typedef QSharedPointer Ptr; typedef QList List; enum ConnectionType { Unknown = 0, Adsl, Bluetooth, Bond, Bridge, Cdma, Gsm, Infiniband, OLPCMesh, Pppoe, Vlan, Vpn, Wimax, Wired, Wireless, Team, Generic, - Tun + Tun, + IpTunnel }; enum AutoconnectSlaves { SlavesDefault = -1, DoNotConnectSlaves = 0, ConnectAllSlaves = 1 }; enum Lldp { LldpDefault = -1, LldpDisable = 0, LldpEnableRx = 1, }; // FIXME same enum as in device.h, unfortunately it's not possible to use that one // maybe in future move all enums into one header so they can be used across all classes enum Metered { MeteredUnknown = 0, MeteredYes = 1, MeteredNo = 2, MeteredGuessYes = 3, MeteredGuessNo = 4 }; static ConnectionType typeFromString(const QString &typeString); static QString typeAsString(const ConnectionType type); static QString createNewUuid(); ConnectionSettings(); explicit ConnectionSettings(ConnectionType type, NMBluetoothCapabilities bt_cap = NM_BT_CAPABILITY_DUN); explicit ConnectionSettings(const ConnectionSettings::Ptr &other); explicit ConnectionSettings(const NMVariantMapMap &map); virtual ~ConnectionSettings(); QString name() const; void fromMap(const NMVariantMapMap &map); NMVariantMapMap toMap() const; void setId(const QString &id); QString id() const; void setUuid(const QString &uuid); QString uuid() const; void setInterfaceName(const QString &interfaceName); QString interfaceName() const; void setConnectionType(ConnectionType type, NMBluetoothCapabilities bt_cap = NM_BT_CAPABILITY_DUN); ConnectionType connectionType() const; void addToPermissions(const QString &user, const QString &type); void setPermissions(const QHash &perm); QHash permissions() const; void setAutoconnect(bool autoconnect); bool autoconnect() const; void setAutoconnectPriority(int priority); int autoconnectPriority() const; void setTimestamp(const QDateTime ×tamp); QDateTime timestamp() const; void setReadOnly(bool readonly); bool readOnly() const; void setZone(const QString &zone); QString zone() const; bool isSlave() const; void setMaster(const QString &master); QString master() const; void setSlaveType(const QString &type); QString slaveType() const; void setSecondaries(const QStringList &secondaries); QStringList secondaries() const; void setGatewayPingTimeout(quint32 timeout); quint32 gatewayPingTimeout() const; void setAutoconnectRetries(int retries); int autoconnectRetries() const; void setAutoconnectSlaves(AutoconnectSlaves autoconnectSlaves); AutoconnectSlaves autoconnectSlaves() const; void setLldp(Lldp lldp); Lldp lldp() const; void setMetered(Metered metered); Metered metered() const; void setStableId(const QString &stableId); QString stableId() const; Setting::Ptr setting(Setting::SettingType type) const; Setting::Ptr setting(const QString &type) const; Setting::List settings() const; protected: ConnectionSettingsPrivate *d_ptr; private: Q_DECLARE_PRIVATE(ConnectionSettings) }; NETWORKMANAGERQT_EXPORT QDebug operator<<(QDebug dbg, const ConnectionSettings &setting); } #endif // NETWORKMANAGERQT_CONNECTION_SETTINGS_H diff --git a/src/settings/iptunnelsetting.cpp b/src/settings/iptunnelsetting.cpp new file mode 100644 index 0000000..f5620a9 --- /dev/null +++ b/src/settings/iptunnelsetting.cpp @@ -0,0 +1,392 @@ +/* + Copyright Pranav Gade + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) version 3, or any + later version accepted by the membership of KDE e.V. (or its + successor approved by the membership of KDE e.V.), which shall + act as a proxy defined in Section 6 of version 3 of the license. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . +*/ + +#include "iptunnelsetting.h" +#include "iptunnelsetting_p.h" + +#include + +#if NM_CHECK_VERSION(1, 12, 0) +#define NM_SETTING_IP_TUNNEL_FLAGS "flags" +#endif + +NetworkManager::IpTunnelSettingPrivate::IpTunnelSettingPrivate() + : name(NM_SETTING_IP_TUNNEL_SETTING_NAME) + , mode(IpTunnelSetting::Unknown) + , pathMtuDiscovery(true) + , encapsulationLimit(0) + , flags(IpTunnelSetting::Unknown) + , flowLabel(0) + , mtu(0) + , tos(0) + , ttl(0) +{ } + +NetworkManager::IpTunnelSetting::IpTunnelSetting() + : Setting(Setting::IpTunnel) + , d_ptr(new IpTunnelSettingPrivate()) +{ } + +NetworkManager::IpTunnelSetting::IpTunnelSetting(const Ptr &other) + : Setting(other) + , d_ptr(new IpTunnelSettingPrivate()) +{ + setMode(other->mode()); + setPathMtuDiscovery(other->pathMtuDiscovery()); + setEncapsulationLimit(other->encapsulationLimit()); + setFlags(other->flags()); + setFlowLabel(other->flowLabel()); + setMtu(other->mtu()); + setTos(other->tos()); + setTtl(other->ttl()); + setInputKey(other->inputKey()); + setLocal(other->local()); + setOutputKey(other->outputKey()); + setParent(other->parent()); + setRemote(other->remote()); +} + +NetworkManager::IpTunnelSetting::~IpTunnelSetting() +{ + delete d_ptr; +} + +QString NetworkManager::IpTunnelSetting::name() const +{ + Q_D(const IpTunnelSetting); + + return d->name; +} + +void NetworkManager::IpTunnelSetting::setMode(NetworkManager::IpTunnelSetting::Mode mode) +{ + Q_D(IpTunnelSetting); + + d->mode = mode; +} + +NetworkManager::IpTunnelSetting::Mode NetworkManager::IpTunnelSetting::mode() const +{ + Q_D(const IpTunnelSetting); + + return d->mode; +} + +void NetworkManager::IpTunnelSetting::setPathMtuDiscovery(bool discovery) +{ + Q_D(IpTunnelSetting); + + d->pathMtuDiscovery = discovery; +} + +bool NetworkManager::IpTunnelSetting::pathMtuDiscovery() const +{ + Q_D(const IpTunnelSetting); + + return d->pathMtuDiscovery; +} + +void NetworkManager::IpTunnelSetting::setEncapsulationLimit(quint32 limit) +{ + Q_D(IpTunnelSetting); + + d->encapsulationLimit = limit; +} + +quint32 NetworkManager::IpTunnelSetting::encapsulationLimit() const +{ + Q_D(const IpTunnelSetting); + + return d->encapsulationLimit; +} + +void NetworkManager::IpTunnelSetting::setFlags(NetworkManager::IpTunnelSetting::Flags flags) +{ + Q_D(IpTunnelSetting); + + d->flags = flags; +} + +NetworkManager::IpTunnelSetting::Flags NetworkManager::IpTunnelSetting::flags() const +{ + Q_D(const IpTunnelSetting); + + return d->flags; +} + +void NetworkManager::IpTunnelSetting::setFlowLabel(quint32 label) +{ + Q_D(IpTunnelSetting); + + d->flowLabel = label; +} + +quint32 NetworkManager::IpTunnelSetting::flowLabel() const +{ + Q_D(const IpTunnelSetting); + + return d->flowLabel; +} + +void NetworkManager::IpTunnelSetting::setMtu(quint32 mtu) +{ + Q_D(IpTunnelSetting); + + d->mtu = mtu; +} + +quint32 NetworkManager::IpTunnelSetting::mtu() const +{ + Q_D(const IpTunnelSetting); + + return d->mtu; +} + +void NetworkManager::IpTunnelSetting::setTos(quint32 tos) +{ + Q_D(IpTunnelSetting); + + d->tos = tos; +} + +quint32 NetworkManager::IpTunnelSetting::tos() const +{ + Q_D(const IpTunnelSetting); + + return d->tos; +} + +void NetworkManager::IpTunnelSetting::setTtl(quint32 ttl) +{ + Q_D(IpTunnelSetting); + + d->ttl = ttl; +} + +quint32 NetworkManager::IpTunnelSetting::ttl() const +{ + Q_D(const IpTunnelSetting); + + return d->ttl; +} + +void NetworkManager::IpTunnelSetting::setInputKey(const QString &key) +{ + Q_D(IpTunnelSetting); + + d->inputKey = key; +} + +QString NetworkManager::IpTunnelSetting::inputKey() const +{ + Q_D(const IpTunnelSetting); + + return d->inputKey; +} + +void NetworkManager::IpTunnelSetting::setLocal(const QString &local) +{ + Q_D(IpTunnelSetting); + + d->local = local; +} + +QString NetworkManager::IpTunnelSetting::local() const +{ + Q_D(const IpTunnelSetting); + + return d->local; +} + +void NetworkManager::IpTunnelSetting::setParent(const QString &parent) +{ + Q_D(IpTunnelSetting); + + d->parent = parent; +} + +QString NetworkManager::IpTunnelSetting::parent() const +{ + Q_D(const IpTunnelSetting); + + return d->parent; +} + +void NetworkManager::IpTunnelSetting::setOutputKey(const QString &key) +{ + Q_D(IpTunnelSetting); + + d->outputKey = key; +} + +QString NetworkManager::IpTunnelSetting::outputKey() const +{ + Q_D(const IpTunnelSetting); + + return d->outputKey; +} + +void NetworkManager::IpTunnelSetting::setRemote(const QString &remote) +{ + Q_D(IpTunnelSetting); + + d->remote = remote; +} + +QString NetworkManager::IpTunnelSetting::remote() const +{ + Q_D(const IpTunnelSetting); + + return d->remote; +} + +void NetworkManager::IpTunnelSetting::fromMap(const QVariantMap &setting) +{ + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_MODE))) { + setMode((Mode)setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_MODE)).toUInt()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY))) { + setPathMtuDiscovery(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY)).toBool()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT))) { + setEncapsulationLimit(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT)).toUInt()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_FLAGS))) { + setFlags((Flag)setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_FLAGS)).toUInt()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_FLOW_LABEL))) { + setFlowLabel(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_FLOW_LABEL)).toUInt()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_MTU))) { + setMtu(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_MTU)).toUInt()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_TOS))) { + setTos(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_TOS)).toUInt()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_TTL))) { + setTtl(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_TTL)).toUInt()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_INPUT_KEY))) { + setInputKey(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_INPUT_KEY)).toString()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_LOCAL))) { + setLocal(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_LOCAL)).toString()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_PARENT))) { + setParent(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_PARENT)).toString()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_OUTPUT_KEY))) { + setOutputKey(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_OUTPUT_KEY)).toString()); + } + + if (setting.contains(QLatin1String(NM_SETTING_IP_TUNNEL_REMOTE))) { + setRemote(setting.value(QLatin1String(NM_SETTING_IP_TUNNEL_REMOTE)).toString()); + } +} + +QVariantMap NetworkManager::IpTunnelSetting::toMap() const +{ + QVariantMap setting; + + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY), pathMtuDiscovery()); + + if (mode() != Unknown) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_MODE), (int)mode()); + } + + if (encapsulationLimit() > 0) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT), encapsulationLimit()); + } + + if (flags() > None) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_FLAGS), (int)flags()); + } + + if (flowLabel() > 0) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_FLOW_LABEL), flowLabel()); + } + + if (mtu() > 0) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_MTU), mtu()); + } + + if (tos() > 0) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_TOS), tos()); + } + + if (ttl() > 0) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_TTL), ttl()); + } + + if (!inputKey().isEmpty()) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_INPUT_KEY), inputKey()); + } + + if (!local().isEmpty()) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_LOCAL), local()); + } + + if (!parent().isEmpty()) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_PARENT), parent()); + } + + if (!outputKey().isEmpty()) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_OUTPUT_KEY), outputKey()); + } + + if (!remote().isEmpty()) { + setting.insert(QLatin1String(NM_SETTING_IP_TUNNEL_REMOTE), remote()); + } + + return setting; +} + +QDebug NetworkManager::operator <<(QDebug dbg, const NetworkManager::IpTunnelSetting &setting) +{ + dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n'; + dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; + + dbg.nospace() << NM_SETTING_IP_TUNNEL_MODE << ": " << setting.mode() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY << ": " << setting.pathMtuDiscovery() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT << ": " << setting.encapsulationLimit() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_FLAGS << ": " << setting.flags() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_FLOW_LABEL << ": " << setting.flowLabel() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_MTU << ": " << setting.mtu() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_TOS << ": " << setting.tos() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_TTL << ": " << setting.ttl() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_INPUT_KEY << ": " << setting.inputKey() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_LOCAL << ": " << setting.local() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_PARENT << ": " << setting.parent() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_OUTPUT_KEY << ": " << setting.outputKey() << '\n'; + dbg.nospace() << NM_SETTING_IP_TUNNEL_REMOTE << ": " << setting.remote() << '\n'; + + return dbg.maybeSpace(); +} diff --git a/src/settings/iptunnelsetting.h b/src/settings/iptunnelsetting.h new file mode 100644 index 0000000..a8e0711 --- /dev/null +++ b/src/settings/iptunnelsetting.h @@ -0,0 +1,126 @@ +/* + Copyright 2018 Pranav Gade + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) version 3, or any + later version accepted by the membership of KDE e.V. (or its + successor approved by the membership of KDE e.V.), which shall + act as a proxy defined in Section 6 of version 3 of the license. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . +*/ + +#ifndef NETWORKMANAGERQT_IPTUNNEL_SETTING_H +#define NETWORKMANAGERQT_IPTUNNEL_SETTING_H + +#include +#include "setting.h" + +namespace NetworkManager +{ + +class IpTunnelSettingPrivate; + +/** + * Represents IpTunnel setting + */ +class NETWORKMANAGERQT_EXPORT IpTunnelSetting : public Setting +{ +public: + typedef QSharedPointer Ptr; + typedef QList List; + enum Mode { + Unknown = NM_IP_TUNNEL_MODE_UNKNOWN, + Ipip = NM_IP_TUNNEL_MODE_IPIP, + Gre = NM_IP_TUNNEL_MODE_GRE, + Sit = NM_IP_TUNNEL_MODE_SIT, + Isatap = NM_IP_TUNNEL_MODE_ISATAP, + Vti = NM_IP_TUNNEL_MODE_VTI, + Ip6ip6 = NM_IP_TUNNEL_MODE_IP6IP6, + Ipip6 = NM_IP_TUNNEL_MODE_IPIP6, + Ip6gre = NM_IP_TUNNEL_MODE_IP6GRE, + Vti6 = NM_IP_TUNNEL_MODE_VTI + }; + + enum Flag { + None = NM_IP_TUNNEL_FLAG_NONE, + Ip6IgnEncapLimit = NM_IP_TUNNEL_FLAG_IP6_IGN_ENCAP_LIMIT, + Ip6UseOrigTclass = NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_TCLASS, + Ip6UseOrigFlowlabel = NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FLOWLABEL, + Ip6Mip6Dev = NM_IP_TUNNEL_FLAG_IP6_MIP6_DEV, + Ip6RcvDscpCopy = NM_IP_TUNNEL_FLAG_IP6_RCV_DSCP_COPY, + Ip6UseOrigFwmark = NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FWMARK + }; + Q_DECLARE_FLAGS(Flags, Flag) + + IpTunnelSetting(); + explicit IpTunnelSetting(const Ptr &other); + ~IpTunnelSetting() override; + + QString name() const override; + + void setMode(Mode mode); + Mode mode() const; + + void setPathMtuDiscovery(bool discovery); + bool pathMtuDiscovery() const; + + void setEncapsulationLimit(quint32 limit); + quint32 encapsulationLimit() const; + + void setFlags(Flags flags); + Flags flags() const; + + void setFlowLabel(quint32 label); + quint32 flowLabel() const; + + void setMtu(quint32 mtu); + quint32 mtu() const; + + void setTos(quint32 tos); + quint32 tos() const; + + void setTtl(quint32 ttl); + quint32 ttl() const; + + void setInputKey(const QString &key); + QString inputKey() const; + + void setLocal(const QString &local); + QString local() const; + + void setParent(const QString &parent); + QString parent() const; + + void setOutputKey(const QString &key); + QString outputKey() const; + + void setRemote(const QString &remote); + QString remote() const; + + void fromMap(const QVariantMap &setting) override; + + QVariantMap toMap() const override; + +protected: + IpTunnelSettingPrivate *d_ptr; + +private: + Q_DECLARE_PRIVATE(IpTunnelSetting) +}; +Q_DECLARE_OPERATORS_FOR_FLAGS(IpTunnelSetting::Flags) + +NETWORKMANAGERQT_EXPORT QDebug operator<<(QDebug dbg, const IpTunnelSetting &setting); + +} + +#endif // NETWORKMANAGERQT_IP_TUNNEL_SETTING_H + diff --git a/src/settings/iptunnelsetting_p.h b/src/settings/iptunnelsetting_p.h new file mode 100644 index 0000000..a032148 --- /dev/null +++ b/src/settings/iptunnelsetting_p.h @@ -0,0 +1,54 @@ +/* + Copyright 2018 Pranav Gade + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) version 3, or any + later version accepted by the membership of KDE e.V. (or its + successor approved by the membership of KDE e.V.), which shall + act as a proxy defined in Section 6 of version 3 of the license. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . +*/ + +#ifndef NETWORKMANAGERQT_IP_TUNNEL_SETTING_P_H +#define NETWORKMANAGERQT_IP_TUNNEL_SETTING_P_H + +#include + +namespace NetworkManager +{ + +class IpTunnelSettingPrivate +{ +public: + IpTunnelSettingPrivate(); + + QString name; + + NetworkManager::IpTunnelSetting::Mode mode; + bool pathMtuDiscovery; + quint32 encapsulationLimit; + NetworkManager::IpTunnelSetting::Flags flags; + quint32 flowLabel; + quint32 mtu; + quint32 tos; + quint32 ttl; + QString inputKey; + QString local; + QString outputKey; + QString parent; + QString remote; +}; + +} + +#endif // NETWORKMANAGERQT_IP_TUNNEL_SETTING_P_H + diff --git a/src/settings/setting.cpp b/src/settings/setting.cpp index cd8aef9..22d9c14 100644 --- a/src/settings/setting.cpp +++ b/src/settings/setting.cpp @@ -1,281 +1,286 @@ /* Copyright 2012-2013 Jan Grulich This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #include "setting.h" #undef signals #include #include #define signals Q_SIGNALS #include namespace NetworkManager { class SettingPrivate { public: SettingPrivate(); Setting::SettingType type; bool initialized; }; QDebug operator <<(QDebug dbg, const Setting &setting) { dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n'; dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; return dbg.maybeSpace(); } } NetworkManager::SettingPrivate::SettingPrivate(): type(Setting::Wired), initialized(false) { } QString NetworkManager::Setting::typeAsString(NetworkManager::Setting::SettingType type) { QString typeString; switch (type) { case Cdma: typeString = QLatin1String(NM_SETTING_CDMA_SETTING_NAME); break; case Gsm: typeString = QLatin1String(NM_SETTING_GSM_SETTING_NAME); break; case Bluetooth: typeString = QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME); break; case Ipv4: typeString = QLatin1String(NM_SETTING_IP4_CONFIG_SETTING_NAME); break; case Ipv6: typeString = QLatin1String(NM_SETTING_IP6_CONFIG_SETTING_NAME); break; case Ppp: typeString = QLatin1String(NM_SETTING_PPP_SETTING_NAME); break; case Pppoe: typeString = QLatin1String(NM_SETTING_PPPOE_SETTING_NAME); break; case Security8021x: typeString = QLatin1String(NM_SETTING_802_1X_SETTING_NAME); break; case Serial: typeString = QLatin1String(NM_SETTING_SERIAL_SETTING_NAME); break; case Vpn: typeString = QLatin1String(NM_SETTING_VPN_SETTING_NAME); break; case Wired: typeString = QLatin1String(NM_SETTING_WIRED_SETTING_NAME); break; case Wireless: typeString = QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME); break; case WirelessSecurity: typeString = QLatin1String(NM_SETTING_WIRELESS_SECURITY_SETTING_NAME); break; case OlpcMesh: typeString = QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME); break; case Vlan: typeString = QLatin1String(NM_SETTING_VLAN_SETTING_NAME); break; case Wimax: typeString = QLatin1String(NM_SETTING_WIMAX_SETTING_NAME); break; case Bond: typeString = QLatin1String(NM_SETTING_BOND_SETTING_NAME); break; case Bridge: typeString = QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME); break; case Team: typeString = QLatin1String(NM_SETTING_TEAM_SETTING_NAME); break; case Vxlan: typeString = QLatin1String(NM_SETTING_VXLAN_SETTING_NAME); break; + case IpTunnel: + typeString = QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME); + break; case NetworkManager::Setting::Generic: typeString = QLatin1String(NM_SETTING_GENERIC_SETTING_NAME); break; default: break; } return typeString; } NetworkManager::Setting::SettingType NetworkManager::Setting::typeFromString(const QString &typeString) { SettingType type = Wired; if (typeString == QLatin1String(NM_SETTING_CDMA_SETTING_NAME)) { type = Cdma; } else if (typeString == QLatin1String(NM_SETTING_GSM_SETTING_NAME)) { type = Gsm; } else if (typeString == QLatin1String(NM_SETTING_BLUETOOTH_SETTING_NAME)) { type = Bluetooth; } else if (typeString == QLatin1String(NM_SETTING_IP4_CONFIG_SETTING_NAME)) { type = Ipv4; } else if (typeString == QLatin1String(NM_SETTING_IP6_CONFIG_SETTING_NAME)) { type = Ipv6; } else if (typeString == QLatin1String(NM_SETTING_PPP_SETTING_NAME)) { type = Ppp; } else if (typeString == QLatin1String(NM_SETTING_PPPOE_SETTING_NAME)) { type = Pppoe; } else if (typeString == QLatin1String(NM_SETTING_SERIAL_SETTING_NAME)) { type = Serial; } else if (typeString == QLatin1String(NM_SETTING_802_1X_SETTING_NAME)) { type = Security8021x; } else if (typeString == QLatin1String(NM_SETTING_VPN_SETTING_NAME)) { type = Vpn; } else if (typeString == QLatin1String(NM_SETTING_WIRED_SETTING_NAME)) { type = Wired; } else if (typeString == QLatin1String(NM_SETTING_WIRELESS_SETTING_NAME)) { type = Wireless; } else if (typeString == QLatin1String(NM_SETTING_WIRELESS_SECURITY_SETTING_NAME)) { type = WirelessSecurity; } else if (typeString == QLatin1String(NM_SETTING_OLPC_MESH_SETTING_NAME)) { type = OlpcMesh; } else if (typeString == QLatin1String(NM_SETTING_VLAN_SETTING_NAME)) { type = Vlan; } else if (typeString == QLatin1String(NM_SETTING_WIMAX_SETTING_NAME)) { type = Wimax; } else if (typeString == QLatin1String(NM_SETTING_BOND_SETTING_NAME)) { type = Bond; } else if (typeString == QLatin1String(NM_SETTING_BRIDGE_SETTING_NAME)) { type = Bridge; } else if (typeString == QLatin1String(NM_SETTING_TEAM_SETTING_NAME)) { type = Team; } else if (typeString == QLatin1String(NM_SETTING_VXLAN_SETTING_NAME)) { type = Vxlan; + } else if (typeString == QLatin1String(NM_SETTING_IP_TUNNEL_SETTING_NAME)) { + type = IpTunnel; } else if (typeString == QLatin1String(NM_SETTING_GENERIC_SETTING_NAME)) { type = Generic; } return type; } NetworkManager::Setting::Setting(SettingType type) : d_ptr(new SettingPrivate()) { setType(type); } NetworkManager::Setting::Setting(const NetworkManager::Setting::Ptr &setting) : d_ptr(new SettingPrivate()) { setInitialized(!setting->isNull()); setType(setting->type()); } NetworkManager::Setting::~Setting() { delete d_ptr; } void NetworkManager::Setting::fromMap(const QVariantMap &map) { Q_UNUSED(map); } QVariantMap NetworkManager::Setting::toMap() const { return QVariantMap(); } QStringList NetworkManager::Setting::needSecrets(bool requestNew) const { Q_UNUSED(requestNew); return QStringList(); } QString NetworkManager::Setting::name() const { return QString(); } void NetworkManager::Setting::secretsFromMap(const QVariantMap &map) { Q_UNUSED(map); } void NetworkManager::Setting::secretsFromStringMap(const NMStringMap &map) { QVariantMap secretsMap; NMStringMap::ConstIterator i = map.constBegin(); while (i != map.constEnd()) { secretsMap.insert(i.key(), i.value()); ++i; } secretsFromMap(secretsMap); } QVariantMap NetworkManager::Setting::secretsToMap() const { return QVariantMap(); } NMStringMap NetworkManager::Setting::secretsToStringMap() const { NMStringMap ret; QVariantMap secretsMap = secretsToMap(); QVariantMap::ConstIterator i = secretsMap.constBegin(); while (i != secretsMap.constEnd()) { ret.insert(i.key(), i.value().toString()); ++i; } return ret; } void NetworkManager::Setting::setInitialized(bool initialized) { Q_D(Setting); d->initialized = initialized; } bool NetworkManager::Setting::isNull() const { Q_D(const Setting); return !d->initialized; } void NetworkManager::Setting::setType(NetworkManager::Setting::SettingType type) { Q_D(Setting); d->type = type; } NetworkManager::Setting::SettingType NetworkManager::Setting::type() const { Q_D(const Setting); return d->type; } diff --git a/src/settings/setting.h b/src/settings/setting.h index bc23453..7f1b397 100644 --- a/src/settings/setting.h +++ b/src/settings/setting.h @@ -1,153 +1,154 @@ /* Copyright 2012-2013 Jan Grulich This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #ifndef NETWORKMANAGERQT_SETTING_H #define NETWORKMANAGERQT_SETTING_H #include #include "generictypes.h" #undef signals #include #define signals Q_SIGNALS #include #include #include #include namespace NetworkManager { class SettingPrivate; /** * Base class for all kinds of setting */ class NETWORKMANAGERQT_EXPORT Setting { public: typedef QSharedPointer Ptr; typedef QList List; enum SettingType { Adsl, Cdma, Gsm, Infiniband, Ipv4, Ipv6, Ppp, Pppoe, Security8021x, Serial, Vpn, Wired, Wireless, WirelessSecurity, Bluetooth, OlpcMesh, Vlan, Wimax, Bond, Bridge, BridgePort, Team, Generic, Tun, - Vxlan + Vxlan, + IpTunnel }; enum SecretFlagType { None = 0, AgentOwned = 0x01, NotSaved = 0x02, NotRequired = 0x04 }; Q_DECLARE_FLAGS(SecretFlags, SecretFlagType) enum MacAddressRandomization { MacAddressRandomizationDefault = 0, MacAddressRandomizationNever, MacAddressRandomizationAlways }; static QString typeAsString(SettingType type); static SettingType typeFromString(const QString &type); explicit Setting(SettingType type); explicit Setting(const Ptr &setting); virtual ~Setting(); /** * @brief Must be reimplemented, default implementation does nothing */ virtual void fromMap(const QVariantMap &map); /** * @brief Must be reimplemented, default implementationd does nothing */ virtual QVariantMap toMap() const; virtual void secretsFromMap(const QVariantMap &map); /** * @brief secretsFromStringMap is a convenience function * to set the secrets from a map of strings. * @param map to extract secrets from */ virtual void secretsFromStringMap(const NMStringMap &map); virtual QVariantMap secretsToMap() const; /** * @brief secretsToStringMap is a convenience function * to get the secrets to map of strings. * @return string map with current secrets */ virtual NMStringMap secretsToStringMap() const; virtual QStringList needSecrets(bool requestNew = false) const; /** * @brief Must be reimplemented, default implementationd does nothing */ virtual QString name() const; void setInitialized(bool initialized); bool isNull() const; void setType(SettingType type); SettingType type() const; protected: SettingPrivate *d_ptr; private: Q_DECLARE_PRIVATE(Setting) }; Q_DECLARE_OPERATORS_FOR_FLAGS(Setting::SecretFlags) NETWORKMANAGERQT_EXPORT QDebug operator<<(QDebug dbg, const Setting &setting); } #endif // NETWORKMANAGERQT_SETTING_H