diff --git a/autotests/settings/CMakeLists.txt b/autotests/settings/CMakeLists.txt index ef14086..22a7da5 100644 --- a/autotests/settings/CMakeLists.txt +++ b/autotests/settings/CMakeLists.txt @@ -1,44 +1,45 @@ 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 + dcbsettingtest gsmsettingtest infinibandsettingtest iptunnelsettingtest ipv4settingtest ipv6settingtest matchsettingtest macsecsettingtest olpcmeshsettingtest ovsbridgesettingtest ovsinterfacesettingtest ovspatchsettingtest ovsportsettingtest pppsettingtest pppoesettingtest proxysettingtest serialsettingtest teamportsettingtest tunsettingtest tcsettingtest usersettingtest vlansettingtest vxlansettingtest vpnsettingtest wimaxsettingtest wiredsettingtest wirelesssettingtest wirelesssecuritysettingtest ) diff --git a/autotests/settings/dcbsettingtest.cpp b/autotests/settings/dcbsettingtest.cpp new file mode 100644 index 0000000..c482eba --- /dev/null +++ b/autotests/settings/dcbsettingtest.cpp @@ -0,0 +1,144 @@ +/* + 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 "dcbsettingtest.h" + +#include "settings/dcbsetting.h" + +#include + +#include + +void DcbSettingTest::testSetting_data() +{ + QTest::addColumn("appFcoeMode"); + QTest::addColumn("appFcoePriority"); + QTest::addColumn("appFipPriority"); + QTest::addColumn("appIscsiPriority"); + QTest::addColumn("appFcoeFlags"); + QTest::addColumn("appFipFlags"); + QTest::addColumn("appIscsiFlags"); + QTest::addColumn("priorityGroupFlags"); + QTest::addColumn("priorityFlowControlFlags"); + QTest::addColumn("priorityFlowControl"); + QTest::addColumn("priorityBandwidth"); + QTest::addColumn("priorityGroupBandwidth"); + QTest::addColumn("priorityGroupId"); + QTest::addColumn("priorityStrictBandwidth"); + QTest::addColumn("priorityTrafficClass"); + + UIntList priorityFlowControl = {1, 1, 1, 1, 1, 1, 1, 1}; + UIntList priorityBandwidth = {6, 5, 6, 4, 6, 3, 6, 2}; + UIntList priorityGroupBandwidth = {6, 5, 6, 4, 6, 3, 6, 2}; + UIntList priorityGroupId = {6, 5, 6, 4, 6, 3, 6, 2}; + UIntList priorityStrictBandwidth = {1, 1, 1, 1, 1, 1, 1, 1}; + UIntList priorityTrafficClass = {6, 5, 6, 4, 6, 3, 6, 2}; + + QTest::newRow("setting1") + << QString("vn2vn") // appFcoeMode + << (qint32)2 // appFcoePriority + << (qint32)2 // appFipPriority + << (qint32)2 // appIscsiPriority + << (qint32)2 // appFcoeFlags + << (qint32)2 // appFipFlags + << (qint32)2 // appIscsiFlags + << (qint32)2 // priorityGroupFlags + << (qint32)2 // priorityFlowControlFlags + << priorityFlowControl // priorityFlowControl + << priorityBandwidth // priorityBandwidth + << priorityGroupBandwidth // priorityGroupBandwidth + << priorityGroupId // priorityGroupId + << priorityStrictBandwidth // priorityStrictBandwidth + << priorityTrafficClass; // priorityTrafficClass +} + +void DcbSettingTest::testSetting() +{ + QFETCH(QString, appFcoeMode); + QFETCH(qint32, appFcoePriority); + QFETCH(qint32, appFipPriority); + QFETCH(qint32, appIscsiPriority); + QFETCH(qint32, appFcoeFlags); + QFETCH(qint32, appFipFlags); + QFETCH(qint32, appIscsiFlags); + QFETCH(qint32, priorityGroupFlags); + QFETCH(qint32, priorityFlowControlFlags); + + QFETCH(UIntList, priorityFlowControl); + QFETCH(UIntList, priorityBandwidth); + QFETCH(UIntList, priorityGroupBandwidth); + QFETCH(UIntList, priorityGroupId); + QFETCH(UIntList, priorityStrictBandwidth); + QFETCH(UIntList, priorityTrafficClass); + + QVariantMap map; + + map.insert(QLatin1String(NM_SETTING_DCB_APP_FCOE_MODE), appFcoeMode); + map.insert(QLatin1String(NM_SETTING_DCB_APP_FCOE_PRIORITY), appFcoePriority); + map.insert(QLatin1String(NM_SETTING_DCB_APP_FIP_PRIORITY), appFipPriority); + map.insert(QLatin1String(NM_SETTING_DCB_APP_ISCSI_PRIORITY), appIscsiPriority); + map.insert(QLatin1String(NM_SETTING_DCB_APP_FCOE_FLAGS), appFcoeFlags); + map.insert(QLatin1String(NM_SETTING_DCB_APP_FIP_FLAGS), appFipFlags); + map.insert(QLatin1String(NM_SETTING_DCB_APP_ISCSI_FLAGS), appIscsiFlags); + map.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_FLAGS), priorityGroupFlags); + map.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS), priorityFlowControlFlags); + + map.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL), QVariant::fromValue(priorityFlowControl)); + map.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_BANDWIDTH), QVariant::fromValue(priorityBandwidth)); + map.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH), QVariant::fromValue(priorityGroupBandwidth)); + map.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_ID), QVariant::fromValue(priorityGroupId)); + map.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH), QVariant::fromValue(priorityStrictBandwidth)); + map.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS), QVariant::fromValue(priorityTrafficClass)); + + NetworkManager::DcbSetting 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()) { + if (it.key() != QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL) && + it.key() != QLatin1String(NM_SETTING_DCB_PRIORITY_BANDWIDTH) && + it.key() != QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH) && + it.key() != QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_ID) && + it.key() != QLatin1String(NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH) && + it.key() != QLatin1String(NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS)) + { + QCOMPARE(it.value(), map1.value(it.key())); + } + ++it; + } + + QCOMPARE(map.value(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL)).value(), + map1.value(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL)).value()); + QCOMPARE(map.value(QLatin1String(NM_SETTING_DCB_PRIORITY_BANDWIDTH)).value(), + map1.value(QLatin1String(NM_SETTING_DCB_PRIORITY_BANDWIDTH)).value()); + QCOMPARE(map.value(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH)).value(), + map1.value(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH)).value()); + QCOMPARE(map.value(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_ID)).value(), + map1.value(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_ID)).value()); + QCOMPARE(map.value(QLatin1String(NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH)).value(), + map1.value(QLatin1String(NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH)).value()); + QCOMPARE(map.value(QLatin1String(NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS)).value(), + map1.value(QLatin1String(NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS)).value()); +} + +QTEST_MAIN(DcbSettingTest) diff --git a/autotests/settings/dcbsettingtest.h b/autotests/settings/dcbsettingtest.h new file mode 100644 index 0000000..0d5a0c4 --- /dev/null +++ b/autotests/settings/dcbsettingtest.h @@ -0,0 +1,36 @@ +/* + 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_DCBSETTING_TEST_H +#define NETWORKMANAGERQT_DCBSETTING_TEST_H + +#include + +class DcbSettingTest : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void testSetting_data(); + void testSetting(); +}; + +#endif // NETWORKMANAGERQT_DCBSETTING_TEST_H + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7eb1c3e..72b7fcf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,288 +1,289 @@ # 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/dcbsetting.cpp settings/gsmsetting.cpp settings/iptunnelsetting.cpp settings/ipv4setting.cpp settings/ipv6setting.cpp settings/infinibandsetting.cpp settings/macsecsetting.cpp settings/matchsetting.cpp settings/olpcmeshsetting.cpp settings/ovsbridgesetting.cpp settings/ovsinterfacesetting.cpp settings/ovspatchsetting.cpp settings/ovsportsetting.cpp settings/pppsetting.cpp settings/pppoesetting.cpp settings/proxysetting.cpp settings/setting.cpp settings/serialsetting.cpp settings/security8021xsetting.cpp settings/teamportsetting.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/tcsetting.cpp settings/genericsetting.cpp settings/tunsetting.cpp settings/usersetting.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/dcbsetting.cpp b/src/settings/dcbsetting.cpp new file mode 100644 index 0000000..57952d8 --- /dev/null +++ b/src/settings/dcbsetting.cpp @@ -0,0 +1,553 @@ +/* + 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 "dcbsetting.h" +#include "dcbsetting_p.h" + +#include + +NetworkManager::DcbSettingPrivate::DcbSettingPrivate() + : name(NM_SETTING_DCB_SETTING_NAME) + , appFcoeMode(NM_SETTING_DCB_FCOE_MODE_FABRIC) + , appFcoePriority(-1) + , appFipPriority(-1) + , appIscsiPriority(-1) + , priorityFlowControl({0, 0, 0, 0, 0, 0, 0, 0}) + , priorityBandwidth({0, 0, 0, 0, 0, 0, 0, 0}) + , priorityGroupBandwidth({0, 0, 0, 0, 0, 0, 0, 0}) + , priorityGroupId({0, 0, 0, 0, 0, 0, 0, 0}) + , priorityStrictBandwidth({0, 0, 0, 0, 0, 0, 0, 0}) + , priorityTrafficClass({0, 0, 0, 0, 0, 0, 0, 0}) +{ } + +NetworkManager::DcbSetting::DcbSetting() + : Setting(Setting::Dcb) + , d_ptr(new DcbSettingPrivate()) +{ } + +NetworkManager::DcbSetting::DcbSetting(const Ptr &other) + : Setting(other) + , d_ptr(new DcbSettingPrivate()) +{ + setAppFcoeMode(other->appFcoeMode()); + setAppFcoePriority(other->appFcoePriority()); + setAppFipPriority(other->appFipPriority()); + setAppIscsiPriority(other->appIscsiPriority()); + setAppFcoeFlags(other->appFcoeFlags()); + setAppFipFlags(other->appFipFlags()); + setAppIscsiFlags(other->appIscsiFlags()); + setPriorityGroupFlags(other->priorityGroupFlags()); + setPriorityFlowControlFlags(other->priorityFlowControlFlags()); + setPriorityFlowControl(other->priorityFlowControl()); + setPriorityBandwidth(other->priorityBandwidth()); + setPriorityGroupBandwidth(other->priorityGroupBandwidth()); + setPriorityGroupId(other->priorityGroupId()); + setPriorityStrictBandwidth(other->priorityStrictBandwidth()); + setPriorityTrafficClass(other->priorityTrafficClass()); +} + +NetworkManager::DcbSetting::~DcbSetting() +{ + delete d_ptr; +} + +QString NetworkManager::DcbSetting::name() const +{ + Q_D(const DcbSetting); + + return d->name; +} + +void NetworkManager::DcbSetting::setAppFcoeMode(const QString &mode) +{ + Q_D(DcbSetting); + + d->appFcoeMode = mode; +} + +QString NetworkManager::DcbSetting::appFcoeMode() const +{ + Q_D(const DcbSetting); + + return d->appFcoeMode; +} + +void NetworkManager::DcbSetting::setAppFcoePriority(qint32 priority) +{ + Q_D(DcbSetting); + + d->appFcoePriority = priority; +} + +qint32 NetworkManager::DcbSetting::appFcoePriority() const +{ + Q_D(const DcbSetting); + + return d->appFcoePriority; +} + +void NetworkManager::DcbSetting::setAppFipPriority(qint32 priority) +{ + Q_D(DcbSetting); + + d->appFipPriority = priority; +} + +qint32 NetworkManager::DcbSetting::appFipPriority() const +{ + Q_D(const DcbSetting); + + return d->appFipPriority; +} + +void NetworkManager::DcbSetting::setAppIscsiPriority(qint32 priority) +{ + Q_D(DcbSetting); + + d->appIscsiPriority = priority; +} + +qint32 NetworkManager::DcbSetting::appIscsiPriority() const +{ + Q_D(const DcbSetting); + + return d->appIscsiPriority; +} + +void NetworkManager::DcbSetting::setAppFcoeFlags(NetworkManager::DcbSetting::DcbFlags flags) +{ + Q_D(DcbSetting); + + d->appFcoeFlags = flags; +} + +NetworkManager::DcbSetting::DcbFlags NetworkManager::DcbSetting::appFcoeFlags() const +{ + Q_D(const DcbSetting); + + return d->appFcoeFlags; +} + +void NetworkManager::DcbSetting::setAppFipFlags(NetworkManager::DcbSetting::DcbFlags flags) +{ + Q_D(DcbSetting); + + d->appFipFlags = flags; +} + +NetworkManager::DcbSetting::DcbFlags NetworkManager::DcbSetting::appFipFlags() const +{ + Q_D(const DcbSetting); + + return d->appFipFlags; +} + +void NetworkManager::DcbSetting::setAppIscsiFlags(NetworkManager::DcbSetting::DcbFlags flags) +{ + Q_D(DcbSetting); + + d->appIscsiFlags = flags; +} + +NetworkManager::DcbSetting::DcbFlags NetworkManager::DcbSetting::appIscsiFlags() const +{ + Q_D(const DcbSetting); + + return d->appIscsiFlags; +} + +void NetworkManager::DcbSetting::setPriorityGroupFlags(NetworkManager::DcbSetting::DcbFlags flags) +{ + Q_D(DcbSetting); + + d->priorityGroupFlags = flags; +} + +NetworkManager::DcbSetting::DcbFlags NetworkManager::DcbSetting::priorityGroupFlags() const +{ + Q_D(const DcbSetting); + + return d->priorityGroupFlags; +} + +void NetworkManager::DcbSetting::setPriorityFlowControlFlags(NetworkManager::DcbSetting::DcbFlags flags) +{ + Q_D(DcbSetting); + + d->priorityFlowControlFlags = flags; +} + +NetworkManager::DcbSetting::DcbFlags NetworkManager::DcbSetting::priorityFlowControlFlags() const +{ + Q_D(const DcbSetting); + + return d->priorityFlowControlFlags; +} + +void NetworkManager::DcbSetting::setPriorityFlowControl(quint32 userPriority, bool enabled) +{ + Q_D(DcbSetting); + + if (userPriority < 8) { + d->priorityFlowControl[userPriority] = enabled; + } +} + +bool NetworkManager::DcbSetting::priorityFlowControl(quint32 userPriority) const +{ + Q_D(const DcbSetting); + + if (userPriority < 8) { + return d->priorityFlowControl.value(userPriority); + } + return false; +} + +void NetworkManager::DcbSetting::setPriorityFlowControl(const UIntList &list) +{ + Q_D(DcbSetting); + + d->priorityFlowControl = list; +} + +UIntList NetworkManager::DcbSetting::priorityFlowControl() const +{ + Q_D(const DcbSetting); + + return d->priorityFlowControl; +} + +void NetworkManager::DcbSetting::setPriorityBandwidth(quint32 userPriority, quint32 bandwidthPercent) +{ + Q_D(DcbSetting); + + if (userPriority < 8) { + d->priorityBandwidth[userPriority] = bandwidthPercent; + } +} + +quint32 NetworkManager::DcbSetting::priorityBandwidth(quint32 userPriority) const +{ + Q_D(const DcbSetting); + + if (userPriority < 8) { + return d->priorityBandwidth.value(userPriority); + } + return 0; +} + +void NetworkManager::DcbSetting::setPriorityBandwidth(const UIntList &list) +{ + Q_D(DcbSetting); + + d->priorityBandwidth = list; +} + +UIntList NetworkManager::DcbSetting::priorityBandwidth() const +{ + Q_D(const DcbSetting); + + return d->priorityBandwidth; +} + +void NetworkManager::DcbSetting::setPriorityGroupBandwidth(quint32 groupId, quint32 bandwidthPercent) +{ + Q_D(DcbSetting); + + if (groupId < 8) { + d->priorityGroupBandwidth[groupId] = bandwidthPercent; + } +} + +quint32 NetworkManager::DcbSetting::priorityGroupBandwidth(quint32 groupId) const +{ + Q_D(const DcbSetting); + + if (groupId < 8) { + return d->priorityGroupBandwidth.value(groupId); + } + return 0; +} + +void NetworkManager::DcbSetting::setPriorityGroupBandwidth(const UIntList &list) +{ + Q_D(DcbSetting); + + d->priorityGroupBandwidth = list; +} + +UIntList NetworkManager::DcbSetting::priorityGroupBandwidth() const +{ + Q_D(const DcbSetting); + + return d->priorityGroupBandwidth; +} + +void NetworkManager::DcbSetting::setPriorityGroupId(quint32 userPriority, quint32 groupId) +{ + Q_D(DcbSetting); + + if (userPriority < 8) { + d->priorityGroupId[userPriority] = groupId; + } +} + +quint32 NetworkManager::DcbSetting::priorityGroupId(quint32 userPriority) const +{ + Q_D(const DcbSetting); + + if (userPriority < 8) { + return d->priorityGroupId.value(userPriority); + } + return 0; +} + +void NetworkManager::DcbSetting::setPriorityGroupId(const UIntList &list) +{ + Q_D(DcbSetting); + + d->priorityGroupId = list; +} + +UIntList NetworkManager::DcbSetting::priorityGroupId() const +{ + Q_D(const DcbSetting); + + return d->priorityGroupId; +} + +void NetworkManager::DcbSetting::setPriorityStrictBandwidth(quint32 userPriority, bool strict) +{ + Q_D(DcbSetting); + + if (userPriority < 8) { + d->priorityStrictBandwidth[userPriority] = strict; + } +} + +bool NetworkManager::DcbSetting::priorityStrictBandwidth(quint32 userPriority) const +{ + Q_D(const DcbSetting); + + if (userPriority < 8) { + return d->priorityStrictBandwidth.value(userPriority); + } + return false; +} + +void NetworkManager::DcbSetting::setPriorityStrictBandwidth(const UIntList &list) +{ + Q_D(DcbSetting); + + d->priorityStrictBandwidth = list; +} + +UIntList NetworkManager::DcbSetting::priorityStrictBandwidth() const +{ + Q_D(const DcbSetting); + + return d->priorityStrictBandwidth; +} + +void NetworkManager::DcbSetting::setPriorityTrafficClass(quint32 userPriority, quint32 trafficClass) +{ + Q_D(DcbSetting); + + if (userPriority < 8) { + d->priorityTrafficClass[userPriority] = trafficClass; + } +} + +quint32 NetworkManager::DcbSetting::priorityTrafficClass(quint32 userPriority) const +{ + Q_D(const DcbSetting); + + if (userPriority < 8) { + return d->priorityTrafficClass.value(userPriority); + } + return 0; +} + +void NetworkManager::DcbSetting::setPriorityTrafficClass(const UIntList &list) +{ + Q_D(DcbSetting); + + d->priorityTrafficClass = list; +} + +UIntList NetworkManager::DcbSetting::priorityTrafficClass() const +{ + Q_D(const DcbSetting); + + return d->priorityTrafficClass; +} + +void NetworkManager::DcbSetting::fromMap(const QVariantMap &setting) +{ + if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_FCOE_MODE))) { + setAppFcoeMode(setting.value(QLatin1String(NM_SETTING_DCB_APP_FCOE_MODE)).toString()); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_FCOE_PRIORITY))) { + setAppFcoePriority(setting.value(QLatin1String(NM_SETTING_DCB_APP_FCOE_PRIORITY)).toInt()); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_FIP_PRIORITY))) { + setAppFipPriority(setting.value(QLatin1String(NM_SETTING_DCB_APP_FIP_PRIORITY)).toInt()); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_ISCSI_PRIORITY))) { + setAppIscsiPriority(setting.value(QLatin1String(NM_SETTING_DCB_APP_ISCSI_PRIORITY)).toInt()); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_FCOE_FLAGS))) { + setAppFcoeFlags(static_cast(setting.value(QLatin1String(NM_SETTING_DCB_APP_FCOE_FLAGS)).toUInt())); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_FIP_FLAGS))) { + setAppFipFlags(static_cast(setting.value(QLatin1String(NM_SETTING_DCB_APP_FIP_FLAGS)).toUInt())); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_APP_ISCSI_FLAGS))) { + setAppIscsiFlags(static_cast(setting.value(QLatin1String(NM_SETTING_DCB_APP_ISCSI_FLAGS)).toUInt())); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_FLAGS))) { + setPriorityGroupFlags(static_cast(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_FLAGS)).toUInt())); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS))) { + setPriorityFlowControlFlags(static_cast(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS)).toUInt())); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL))) { + setPriorityFlowControl(qdbus_cast(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL)))); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_BANDWIDTH))) { + setPriorityBandwidth(qdbus_cast(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_BANDWIDTH)))); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH))) { + setPriorityGroupBandwidth(qdbus_cast(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH)))); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_ID))) { + setPriorityGroupId(qdbus_cast(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_ID)))); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH))) { + setPriorityStrictBandwidth(qdbus_cast(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH)))); + } + + if (setting.contains(QLatin1String(NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS))) { + setPriorityTrafficClass(qdbus_cast(setting.value(QLatin1String(NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS)))); + } +} + +QVariantMap NetworkManager::DcbSetting::toMap() const +{ + QVariantMap setting; + + if (!appFcoeMode().isEmpty()) { + setting.insert(QLatin1String(NM_SETTING_DCB_APP_FCOE_MODE), appFcoeMode()); + } + + if (appFcoePriority() >= 0) { + setting.insert(QLatin1String(NM_SETTING_DCB_APP_FCOE_PRIORITY), appFcoePriority()); + } + + if (appFipPriority() >= 0) { + setting.insert(QLatin1String(NM_SETTING_DCB_APP_FIP_PRIORITY), appFipPriority()); + } + + if (appIscsiPriority() >= 0) { + setting.insert(QLatin1String(NM_SETTING_DCB_APP_ISCSI_PRIORITY), appIscsiPriority()); + } + + setting.insert(QLatin1String(NM_SETTING_DCB_APP_FCOE_FLAGS), (int)appFcoeFlags()); + setting.insert(QLatin1String(NM_SETTING_DCB_APP_FIP_FLAGS), (int)appFipFlags()); + setting.insert(QLatin1String(NM_SETTING_DCB_APP_ISCSI_FLAGS), (int)appIscsiFlags()); + setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_FLAGS), (int)priorityGroupFlags()); + setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS), (int)priorityFlowControlFlags()); + + setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL), QVariant::fromValue(priorityFlowControl())); + setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_BANDWIDTH), QVariant::fromValue(priorityBandwidth())); + setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH), QVariant::fromValue(priorityGroupBandwidth())); + setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_GROUP_ID), QVariant::fromValue(priorityGroupId())); + setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH), QVariant::fromValue(priorityStrictBandwidth())); + setting.insert(QLatin1String(NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS), QVariant::fromValue(priorityTrafficClass())); + + return setting; +} + +QDebug NetworkManager::operator <<(QDebug dbg, const NetworkManager::DcbSetting &setting) +{ + dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n'; + dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; + + dbg.nospace() << NM_SETTING_DCB_APP_FCOE_MODE << ": " << setting.appFcoeMode() << '\n'; + dbg.nospace() << NM_SETTING_DCB_APP_FCOE_PRIORITY << ": " << setting.appFcoePriority() << '\n'; + dbg.nospace() << NM_SETTING_DCB_APP_FIP_PRIORITY << ": " << setting.appFipPriority() << '\n'; + dbg.nospace() << NM_SETTING_DCB_APP_ISCSI_PRIORITY << ": " << setting.appIscsiPriority() << '\n'; + dbg.nospace() << NM_SETTING_DCB_APP_FCOE_FLAGS << ": " << setting.appFcoeFlags() << '\n'; + dbg.nospace() << NM_SETTING_DCB_APP_FIP_FLAGS << ": " << setting.appFipFlags() << '\n'; + dbg.nospace() << NM_SETTING_DCB_APP_ISCSI_FLAGS << ": " << setting.appIscsiFlags() << '\n'; + dbg.nospace() << NM_SETTING_DCB_PRIORITY_GROUP_FLAGS << ": " << setting.priorityGroupFlags() << '\n'; + dbg.nospace() << NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS << ": " << setting.priorityFlowControlFlags() << '\n'; + + dbg.nospace() << NM_SETTING_DCB_PRIORITY_FLOW_CONTROL << ": "; + Q_FOREACH (const quint32 enabled, setting.priorityFlowControl()) { + dbg.nospace() << enabled << ' '; + } + dbg.nospace() << '\n'; + + dbg.nospace() << NM_SETTING_DCB_PRIORITY_BANDWIDTH << ": "; + Q_FOREACH (const quint32 bandwidthPercent, setting.priorityBandwidth()) { + dbg.nospace() << bandwidthPercent << ' '; + } + dbg.nospace() << '\n'; + + dbg.nospace() << NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH << ": "; + Q_FOREACH (const quint32 bandwidthPercent, setting.priorityGroupBandwidth()) { + dbg.nospace() << bandwidthPercent << ' '; + } + dbg.nospace() << '\n'; + + dbg.nospace() << NM_SETTING_DCB_PRIORITY_GROUP_ID << ": "; + Q_FOREACH (const quint32 groupId, setting.priorityGroupId()) { + dbg.nospace() << groupId << ' '; + } + dbg.nospace() << '\n'; + + dbg.nospace() << NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH << ": "; + Q_FOREACH (const quint32 strict, setting.priorityStrictBandwidth()) { + dbg.nospace() << strict << ' '; + } + dbg.nospace() << '\n'; + + dbg.nospace() << NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS << ": "; + Q_FOREACH (const quint32 trafficClass, setting.priorityTrafficClass()) { + dbg.nospace() << trafficClass << ' '; + } + dbg.nospace() << '\n'; + + return dbg.maybeSpace(); +} diff --git a/src/settings/dcbsetting.h b/src/settings/dcbsetting.h new file mode 100644 index 0000000..c9b2b41 --- /dev/null +++ b/src/settings/dcbsetting.h @@ -0,0 +1,130 @@ +/* + 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_DCBSETTING_H +#define NETWORKMANAGERQT_DCBSETTING_H + +#include +#include "setting.h" + +#include + +namespace NetworkManager +{ + +class DcbSettingPrivate; + +/** + * Represents Dcb setting + */ +class NETWORKMANAGERQT_EXPORT DcbSetting : public Setting +{ +public: + typedef QSharedPointer Ptr; + typedef QList List; + + enum DcbFlagType { + None = 0, + Enable = 0x01, + Advertise = 0x02, + Willing = 0x04 + }; + Q_DECLARE_FLAGS(DcbFlags, DcbFlagType) + + DcbSetting(); + explicit DcbSetting(const Ptr &other); + ~DcbSetting() override; + + QString name() const override; + + void setAppFcoeMode(const QString &mode); + QString appFcoeMode() const; + + void setAppFcoePriority(qint32 priority); + qint32 appFcoePriority() const; + + void setAppFipPriority(qint32 priority); + qint32 appFipPriority() const; + + void setAppIscsiPriority(qint32 priority); + qint32 appIscsiPriority() const; + + void setAppFcoeFlags(DcbFlags flags); + DcbFlags appFcoeFlags() const; + + void setAppFipFlags(DcbFlags flags); + DcbFlags appFipFlags() const; + + void setAppIscsiFlags(DcbFlags flags); + DcbFlags appIscsiFlags() const; + + void setPriorityGroupFlags(DcbFlags flags); + DcbFlags priorityGroupFlags() const; + + void setPriorityFlowControlFlags(DcbFlags flags); + DcbFlags priorityFlowControlFlags() const; + + void setPriorityFlowControl(quint32 userPriority, bool enabled); + bool priorityFlowControl(quint32 userPriority) const; + void setPriorityFlowControl(const UIntList &list); + UIntList priorityFlowControl() const; + + void setPriorityBandwidth(quint32 userPriority, quint32 bandwidthPercent); + quint32 priorityBandwidth(quint32 userPriority) const; + void setPriorityBandwidth(const UIntList &list); + UIntList priorityBandwidth() const; + + void setPriorityGroupBandwidth(quint32 groupId, quint32 bandwidthPercent); + quint32 priorityGroupBandwidth(quint32 groupId) const; + void setPriorityGroupBandwidth(const UIntList &list); + UIntList priorityGroupBandwidth() const; + + void setPriorityGroupId(quint32 userPriority, quint32 groupId); + quint32 priorityGroupId(quint32 userPriority) const; + void setPriorityGroupId(const UIntList &list); + UIntList priorityGroupId() const; + + void setPriorityStrictBandwidth(quint32 userPriority, bool strict); + bool priorityStrictBandwidth(quint32 userPriority) const; + void setPriorityStrictBandwidth(const UIntList &list); + UIntList priorityStrictBandwidth() const; + + void setPriorityTrafficClass(quint32 userPriority, quint32 trafficClass); + quint32 priorityTrafficClass(quint32 userPriority) const; + void setPriorityTrafficClass(const UIntList &list); + UIntList priorityTrafficClass() const; + + void fromMap(const QVariantMap &setting) override; + + QVariantMap toMap() const override; + +protected: + DcbSettingPrivate *d_ptr; + +private: + Q_DECLARE_PRIVATE(DcbSetting) +}; +Q_DECLARE_OPERATORS_FOR_FLAGS(DcbSetting::DcbFlags) + +NETWORKMANAGERQT_EXPORT QDebug operator<<(QDebug dbg, const DcbSetting &setting); + +} + +#endif // NETWORKMANAGERQT_DCBSETTING_H diff --git a/src/settings/dcbsetting_p.h b/src/settings/dcbsetting_p.h new file mode 100644 index 0000000..0f8e981 --- /dev/null +++ b/src/settings/dcbsetting_p.h @@ -0,0 +1,55 @@ +/* + 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_DCBSETTING_P_H +#define NETWORKMANAGERQT_DCBSETTING_P_H + +#include + +namespace NetworkManager +{ + +class DcbSettingPrivate +{ +public: + DcbSettingPrivate(); + + QString name; + + QString appFcoeMode; + qint32 appFcoePriority; + qint32 appFipPriority; + qint32 appIscsiPriority; + NetworkManager::DcbSetting::DcbFlags appFcoeFlags; + NetworkManager::DcbSetting::DcbFlags appFipFlags; + NetworkManager::DcbSetting::DcbFlags appIscsiFlags; + NetworkManager::DcbSetting::DcbFlags priorityGroupFlags; + NetworkManager::DcbSetting::DcbFlags priorityFlowControlFlags; + UIntList priorityFlowControl; + UIntList priorityBandwidth; + UIntList priorityGroupBandwidth; + UIntList priorityGroupId; + UIntList priorityStrictBandwidth; + UIntList priorityTrafficClass; +}; + +} + +#endif // NETWORKMANAGERQT_DCBSETTING_P_H diff --git a/src/settings/setting.cpp b/src/settings/setting.cpp index 3ac5a7a..8033619 100644 --- a/src/settings/setting.cpp +++ b/src/settings/setting.cpp @@ -1,358 +1,363 @@ /* 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 #if !NM_CHECK_VERSION(1, 14, 0) #define NM_SETTING_MATCH_SETTING_NAME "match" #endif #if !NM_CHECK_VERSION(1, 10, 0) #define NM_SETTING_OVS_BRIDGE_SETTING_NAME "ovs-bridge" #define NM_SETTING_OVS_INTERFACE_SETTING_NAME "ovs-interface" #define NM_SETTING_OVS_PATCH_SETTING_NAME "ovs-patch" #define NM_SETTING_OVS_PORT_SETTING_NAME "ovs-port" #define NM_SETTING_TC_CONFIG_SETTING_NAME "tc" #define NM_SETTING_TEAM_PORT_SETTING_NAME "team-port" #endif #if !NM_CHECK_VERSION(1, 8, 0) #define NM_SETTING_USER_SETTING_NAME "user" #endif #if !NM_CHECK_VERSION(1, 6, 0) #define NM_SETTING_MACSEC_SETTING_NAME "macsec" #define NM_SETTING_PROXY_SETTING_NAME "proxy" #endif 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 Proxy: typeString = QLatin1String(NM_SETTING_PROXY_SETTING_NAME); break; case User: typeString = QLatin1String(NM_SETTING_USER_SETTING_NAME); break; case OvsInterface: typeString = QLatin1String(NM_SETTING_OVS_INTERFACE_SETTING_NAME); break; case OvsBridge: typeString = QLatin1String(NM_SETTING_OVS_BRIDGE_SETTING_NAME); break; case OvsPatch: typeString = QLatin1String(NM_SETTING_OVS_PATCH_SETTING_NAME); break; case OvsPort: typeString = QLatin1String(NM_SETTING_OVS_PORT_SETTING_NAME); break; case Match: typeString = QLatin1String(NM_SETTING_MATCH_SETTING_NAME); break; case Tc: typeString = QLatin1String(NM_SETTING_TC_CONFIG_SETTING_NAME); break; case TeamPort: typeString = QLatin1String(NM_SETTING_TEAM_PORT_SETTING_NAME); break; case Macsec: typeString = QLatin1String(NM_SETTING_MACSEC_SETTING_NAME); break; + case Dcb: + typeString = QLatin1String(NM_SETTING_DCB_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; } else if (typeString == QLatin1String(NM_SETTING_USER_SETTING_NAME)) { type = User; } else if (typeString == QLatin1String(NM_SETTING_PROXY_SETTING_NAME)) { type = Proxy; } else if (typeString == QLatin1String(NM_SETTING_OVS_INTERFACE_SETTING_NAME)) { type = OvsInterface; } else if (typeString == QLatin1String(NM_SETTING_OVS_BRIDGE_SETTING_NAME)) { type = OvsBridge; } else if (typeString == QLatin1String(NM_SETTING_OVS_PATCH_SETTING_NAME)) { type = OvsPatch; } else if (typeString == QLatin1String(NM_SETTING_OVS_PORT_SETTING_NAME)) { type = OvsPort; } else if (typeString == QLatin1String(NM_SETTING_MATCH_SETTING_NAME)) { type = Match; } else if (typeString == QLatin1String(NM_SETTING_TC_CONFIG_SETTING_NAME)) { type = Tc; } else if (typeString == QLatin1String(NM_SETTING_TEAM_PORT_SETTING_NAME)) { type = TeamPort; } else if (typeString == QLatin1String(NM_SETTING_MACSEC_SETTING_NAME)) { type = Macsec; + } else if (typeString == QLatin1String(NM_SETTING_DCB_SETTING_NAME)) { + type = Dcb; } 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 2ba13d5..19dedd4 100644 --- a/src/settings/setting.h +++ b/src/settings/setting.h @@ -1,164 +1,165 @@ /* 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, IpTunnel, Proxy, User, OvsBridge, OvsInterface, OvsPatch, OvsPort, Match, Tc, TeamPort, - Macsec + Macsec, + Dcb }; 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