From 3c276bc40b4eedb9c995968afddbf643f4157121 Mon Sep 17 00:00:00 2001 From: Vadim Kurland Date: Mon, 2 May 2011 14:34:34 -0700 Subject: [PATCH] see #2367 using QComboBox to choose between "none", "queue" and "pipe" for ipfw classification --- src/libgui/RuleOptionsDialog.cpp | 53 ++++++++++++--------------- src/libgui/platforms.cpp | 13 +++++++ src/libgui/platforms.h | 2 + src/libgui/ruleoptionsdialog_q.ui | 61 ++++++++++++++----------------- 4 files changed, 66 insertions(+), 63 deletions(-) diff --git a/src/libgui/RuleOptionsDialog.cpp b/src/libgui/RuleOptionsDialog.cpp index 9833e263e..8b30564ae 100644 --- a/src/libgui/RuleOptionsDialog.cpp +++ b/src/libgui/RuleOptionsDialog.cpp @@ -103,6 +103,7 @@ void RuleOptionsDialog::loadFWObject(FWObject *o) // build a map for combobox so visible combobox items can be localized QStringList route_options = getRouteOptions_pf_ipf(platform); QStringList route_load_options = getRouteLoadOptions_pf(platform); + QStringList classify_options_ipfw = getClassifyOptions_ipfw(platform); Rule *rule = dynamic_cast(o); FWOptions *ropt = rule->getOptionsObject(); @@ -241,9 +242,10 @@ void RuleOptionsDialog::loadFWObject(FWObject *o) data.registerOption(m_dialog->ipf_keep_frags, ropt, "ipf_keep_frags"); // Route - data.registerOption(m_dialog->ipf_route_option, ropt, "ipf_route_option", - route_options); - data.registerOption(m_dialog->ipf_route_opt_if, ropt, "ipf_route_opt_if"); + data.registerOption(m_dialog->ipf_route_option, ropt, + "ipf_route_option", route_options); + data.registerOption(m_dialog->ipf_route_opt_if, ropt, + "ipf_route_opt_if"); data.registerOption(m_dialog->ipf_route_opt_addr, ropt, "ipf_route_opt_addr"); } @@ -292,6 +294,12 @@ void RuleOptionsDialog::loadFWObject(FWObject *o) data.registerOption(m_dialog->pf_synproxy, ropt, "pf_synproxy"); + // Tag + FWObject *o = policy_rule->getTagObject(); + m_dialog->pfTagDropArea->setObject(o); + m_dialog->pfTagDropArea->update(); + + // Classify data.registerOption(m_dialog->pf_classify_str, ropt, "pf_classify_str"); // Route @@ -302,27 +310,17 @@ void RuleOptionsDialog::loadFWObject(FWObject *o) route_options); data.registerOption(m_dialog->pf_route_opt_if, ropt, "pf_route_opt_if"); data.registerOption(m_dialog->pf_route_opt_addr, ropt, "pf_route_opt_addr"); - - FWObject *o = policy_rule->getTagObject(); - m_dialog->pfTagDropArea->setObject(o); - m_dialog->pfTagDropArea->update(); } if (platform=="ipfw") { - data.registerOption(m_dialog->ipfw_stateless, ropt,"stateless"); - data.registerOption(m_dialog->usePortNum, ropt, "ipfw_pipe_queue_num"); + data.registerOption(m_dialog->ipfw_stateless, ropt, "stateless"); /* #2367 */ - - data.registerOption(m_dialog->ipfw_classify, ropt, "classification"); - - if (ropt->getInt("ipfw_classify_method") == DUMMYNETPIPE) - { - m_dialog->useDummyNetPipe->setChecked(1); - } else { - m_dialog->useDummyNetQueue->setChecked(1); - } + // Classify + data.registerOption(m_dialog->ipfw_classify_method, ropt, + "ipfw_classify_method", classify_options_ipfw); + data.registerOption(m_dialog->usePortNum, ropt, "ipfw_pipe_queue_num"); } if (platform=="iosacl" || platform=="procurve_acl") @@ -446,29 +444,24 @@ void RuleOptionsDialog::applyChanges() policy_rule->setTagObject(tag_object); policy_rule->setClassification( - ! ropt->getStr("pf_classify_str").empty()); + ! new_rule_options->getStr("pf_classify_str").empty()); policy_rule->setRouting( - ! ropt->getStr("pf_route_option").empty() && - ropt->getStr("pf_route_option") != "none"); + ! new_rule_options->getStr("pf_route_option").empty() && + new_rule_options->getStr("pf_route_option") != "none"); } if (platform=="ipf") { policy_rule->setRouting( - ! ropt->getStr("ipf_route_option").empty() && - ropt->getStr("ipf_route_option") != "none"); + ! new_rule_options->getStr("ipf_route_option").empty() && + new_rule_options->getStr("ipf_route_option") != "none"); } if (platform=="ipfw") { - // rule option "classification" is set via checkbox and was - // set by the call to data.saveAll() above - - if (m_dialog->useDummyNetPipe->isChecked()) - new_rule_options->setInt("ipfw_classify_method", DUMMYNETPIPE); - else - new_rule_options->setInt("ipfw_classify_method", DUMMYNETQUEUE); + policy_rule->setClassification( + new_rule_options->getInt("ipfw_classify_method") > -1); } } diff --git a/src/libgui/platforms.cpp b/src/libgui/platforms.cpp index 3a7579547..2fc0209f2 100644 --- a/src/libgui/platforms.cpp +++ b/src/libgui/platforms.cpp @@ -63,6 +63,7 @@ QStringList actionsOnReject; QStringList routeOptions_pf_ipf; QStringList routeLoadOptions_pf; QStringList limitSuffixes; +QStringList classifyOptions_ipfw; void init_platforms() { @@ -166,6 +167,13 @@ void init_platforms() routeLoadOptions_pf.push_back(QObject::tr("Round Robin")); routeLoadOptions_pf.push_back("round_robin"); + classifyOptions_ipfw.push_back(QObject::tr("None")); + classifyOptions_ipfw.push_back("-1"); + classifyOptions_ipfw.push_back(QObject::tr("dummynet(4) 'pipe'")); + classifyOptions_ipfw.push_back("1"); + classifyOptions_ipfw.push_back(QObject::tr("dummynet(4) 'queue'")); + classifyOptions_ipfw.push_back("2"); + limitSuffixes.push_back(""); limitSuffixes.push_back(""); limitSuffixes.push_back(QObject::tr("/day")); @@ -673,6 +681,11 @@ const QStringList& getRouteLoadOptions_pf(const QString&) return routeLoadOptions_pf; } +const QStringList& getClassifyOptions_ipfw(const QString&) +{ + return classifyOptions_ipfw; +} + const QStringList& getLimitSuffixes(const QString&) { return limitSuffixes; diff --git a/src/libgui/platforms.h b/src/libgui/platforms.h index 9444b8dcc..6f0b987c6 100644 --- a/src/libgui/platforms.h +++ b/src/libgui/platforms.h @@ -139,6 +139,8 @@ const QStringList& getRouteOptions_pf_ipf(const QString &platform); const QStringList& getRouteLoadOptions_pf(const QString &platform); +const QStringList& getClassifyOptions_ipfw(const QString &platform); + /** * returns a list of Limit Suffixes (mapping list) */ diff --git a/src/libgui/ruleoptionsdialog_q.ui b/src/libgui/ruleoptionsdialog_q.ui index 1c2609b63..979b0736e 100644 --- a/src/libgui/ruleoptionsdialog_q.ui +++ b/src/libgui/ruleoptionsdialog_q.ui @@ -6,8 +6,8 @@ 0 0 - 1412 - 332 + 1580 + 357 @@ -41,7 +41,7 @@ 0 - 2 + 3 @@ -1635,7 +1635,7 @@ QTabWidget::Triangular - 0 + 6 @@ -2480,7 +2480,7 @@ QTabWidget::Triangular - 0 + 1 @@ -2556,13 +2556,6 @@ - - - Classify packets - - - - Packet classification can be implemented in different ways: @@ -2575,27 +2568,32 @@ - + - false + true - - - - use dummynet(4) 'pipe' - - - - - - - use dummynet(4) 'queue' - + + + + + None + + + + + dummynet(4) 'pipe' + + + + + dummynet(4) 'queue' + + @@ -2608,7 +2606,7 @@ - + @@ -2621,7 +2619,7 @@ - + Qt::Horizontal @@ -2637,7 +2635,7 @@ - + Qt::Horizontal @@ -2650,7 +2648,7 @@ - + Qt::Vertical @@ -3013,9 +3011,6 @@ pf_fastroute pf_route_load_option ipfw_stateless - ipfw_classify - useDummyNetPipe - useDummyNetQueue usePortNum pix_disable_rule_log pix_logLevel