mgmt, main: add "tables" configuration file section and processor
refs: #1623 Change-Id: If54097ba738381f7a75d755933e20b35387ff1d4
This commit is contained in:
committed by
Alex Afanasyev
parent
0417d2adf7
commit
3a4f83dc7e
+26
-7
@@ -1,11 +1,12 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/**
|
||||
* Copyright (c) 2014 Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology
|
||||
* Copyright (c) 2014, Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology,
|
||||
* The University of Memphis
|
||||
*
|
||||
* This file is part of NFD (Named Data Networking Forwarding Daemon).
|
||||
* See AUTHORS.md for complete list of NFD authors and contributors.
|
||||
@@ -20,7 +21,7 @@
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
**/
|
||||
*/
|
||||
|
||||
#include <getopt.h>
|
||||
#include <boost/filesystem.hpp>
|
||||
@@ -37,6 +38,7 @@
|
||||
#include "mgmt/status-server.hpp"
|
||||
#include "core/config-file.hpp"
|
||||
#include "mgmt/general-config-section.hpp"
|
||||
#include "mgmt/tables-config-section.hpp"
|
||||
|
||||
namespace nfd {
|
||||
|
||||
@@ -137,6 +139,15 @@ public:
|
||||
ConfigFile config((IgnoreRibAndLogSections()));
|
||||
|
||||
general::setConfigFile(config);
|
||||
|
||||
TablesConfigSection tablesConfig(m_forwarder->getCs(),
|
||||
m_forwarder->getPit(),
|
||||
m_forwarder->getFib(),
|
||||
m_forwarder->getStrategyChoice(),
|
||||
m_forwarder->getMeasurements());
|
||||
|
||||
tablesConfig.setConfigFile(config);
|
||||
|
||||
m_internalFace->getValidator().setConfigFile(config);
|
||||
|
||||
m_forwarder->addFace(m_internalFace);
|
||||
@@ -271,6 +282,14 @@ public:
|
||||
|
||||
general::setConfigFile(config);
|
||||
|
||||
TablesConfigSection tablesConfig(m_forwarder->getCs(),
|
||||
m_forwarder->getPit(),
|
||||
m_forwarder->getFib(),
|
||||
m_forwarder->getStrategyChoice(),
|
||||
m_forwarder->getMeasurements());
|
||||
|
||||
tablesConfig.setConfigFile(config);
|
||||
|
||||
m_internalFace->getValidator().setConfigFile(config);
|
||||
m_faceManager->setConfigFile(config);
|
||||
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/**
|
||||
* Copyright (c) 2014, Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology,
|
||||
* The University of Memphis
|
||||
*
|
||||
* This file is part of NFD (Named Data Networking Forwarding Daemon).
|
||||
* See AUTHORS.md for complete list of NFD authors and contributors.
|
||||
*
|
||||
* NFD is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Foundation,
|
||||
* either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* NFD 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "tables-config-section.hpp"
|
||||
|
||||
#include "common.hpp"
|
||||
#include "core/logger.hpp"
|
||||
#include "core/config-file.hpp"
|
||||
|
||||
namespace nfd {
|
||||
|
||||
NFD_LOG_INIT("TablesConfigSection");
|
||||
|
||||
TablesConfigSection::TablesConfigSection(Cs& cs,
|
||||
Pit& pit,
|
||||
Fib& fib,
|
||||
StrategyChoice& strategyChoice,
|
||||
Measurements& measurements)
|
||||
: m_cs(cs)
|
||||
// , m_pit(pit)
|
||||
// , m_fib(fib)
|
||||
// , m_strategyChoice(strategyChoice)
|
||||
// , m_measurements(measurements)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
TablesConfigSection::onConfig(const ConfigSection& configSection,
|
||||
bool isDryRun,
|
||||
const std::string& filename)
|
||||
{
|
||||
// tables
|
||||
// {
|
||||
// cs_max_packets 65536
|
||||
// }
|
||||
|
||||
boost::optional<const ConfigSection&> csMaxPacketsNode =
|
||||
configSection.get_child_optional("cs_max_packets");
|
||||
|
||||
if (csMaxPacketsNode)
|
||||
{
|
||||
boost::optional<size_t> valCsMaxPackets =
|
||||
configSection.get_optional<size_t>("cs_max_packets");
|
||||
|
||||
if (!valCsMaxPackets)
|
||||
{
|
||||
throw ConfigFile::Error("Invalid value for option \"cs_max_packets\""
|
||||
" in \"tables\" section");
|
||||
}
|
||||
else if (!isDryRun)
|
||||
{
|
||||
m_cs.setLimit(*valCsMaxPackets);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TablesConfigSection::setConfigFile(ConfigFile& configFile)
|
||||
{
|
||||
configFile.addSectionHandler("tables",
|
||||
bind(&TablesConfigSection::onConfig, this, _1, _2, _3));
|
||||
}
|
||||
|
||||
} // namespace nfd
|
||||
@@ -0,0 +1,67 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/**
|
||||
* Copyright (c) 2014, Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology,
|
||||
* The University of Memphis
|
||||
*
|
||||
* This file is part of NFD (Named Data Networking Forwarding Daemon).
|
||||
* See AUTHORS.md for complete list of NFD authors and contributors.
|
||||
*
|
||||
* NFD is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Foundation,
|
||||
* either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* NFD 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef NFD_MGMT_TABLES_CONFIG_SECTION_HPP
|
||||
#define NFD_MGMT_TABLES_CONFIG_SECTION_HPP
|
||||
|
||||
#include "table/fib.hpp"
|
||||
#include "table/pit.hpp"
|
||||
#include "table/cs.hpp"
|
||||
#include "table/measurements.hpp"
|
||||
#include "table/strategy-choice.hpp"
|
||||
|
||||
#include "core/config-file.hpp"
|
||||
|
||||
namespace nfd {
|
||||
|
||||
class TablesConfigSection
|
||||
{
|
||||
public:
|
||||
|
||||
TablesConfigSection(Cs& cs,
|
||||
Pit& pit,
|
||||
Fib& fib,
|
||||
StrategyChoice& strategyChoice,
|
||||
Measurements& measurements);
|
||||
|
||||
void
|
||||
setConfigFile(ConfigFile& configFile);
|
||||
|
||||
void
|
||||
onConfig(const ConfigSection& configSection,
|
||||
bool isDryRun,
|
||||
const std::string& filename);
|
||||
|
||||
private:
|
||||
Cs& m_cs;
|
||||
// Pit& m_pit;
|
||||
// Fib& m_fib;
|
||||
// StrategyChoice& m_strategyChoice;
|
||||
// Measurements& m_measurements;
|
||||
};
|
||||
|
||||
} // namespace nfd
|
||||
|
||||
#endif // NFD_MGMT_TABLES_CONFIG_SECTION_HPP
|
||||
+8
-7
@@ -1,11 +1,12 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/**
|
||||
* Copyright (c) 2014 Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology
|
||||
* Copyright (c) 2014, Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology,
|
||||
* The University of Memphis
|
||||
*
|
||||
* This file is part of NFD (Named Data Networking Forwarding Daemon).
|
||||
* See AUTHORS.md for complete list of NFD authors and contributors.
|
||||
@@ -36,7 +37,7 @@ NFD_LOG_INIT("ContentStore");
|
||||
|
||||
namespace nfd {
|
||||
|
||||
Cs::Cs(int nMaxPackets)
|
||||
Cs::Cs(size_t nMaxPackets)
|
||||
: m_nMaxPackets(nMaxPackets)
|
||||
, m_nPackets(0)
|
||||
{
|
||||
|
||||
+8
-7
@@ -1,11 +1,12 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/**
|
||||
* Copyright (c) 2014 Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology
|
||||
* Copyright (c) 2014, Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology,
|
||||
* The University of Memphis
|
||||
*
|
||||
* This file is part of NFD (Named Data Networking Forwarding Daemon).
|
||||
* See AUTHORS.md for complete list of NFD authors and contributors.
|
||||
@@ -100,7 +101,7 @@ class Cs : noncopyable
|
||||
{
|
||||
public:
|
||||
explicit
|
||||
Cs(int nMaxPackets = 65536); // ~500MB with average packet size = 8KB
|
||||
Cs(size_t nMaxPackets = 10);
|
||||
|
||||
~Cs();
|
||||
|
||||
|
||||
@@ -42,6 +42,15 @@ log
|
||||
; Forwarder INFO
|
||||
}
|
||||
|
||||
; The tables section configures the CS, PIT, FIB, Strategy Choice, and Measurements
|
||||
tables
|
||||
{
|
||||
|
||||
; ContentStore size limit in number of packets
|
||||
; default is 65536, about 500MB with 8KB packet size
|
||||
cs_max_packets 65536
|
||||
}
|
||||
|
||||
; The face_system section defines what faces and channels are created.
|
||||
face_system
|
||||
{
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/**
|
||||
* Copyright (c) 2014, Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology,
|
||||
* The University of Memphis
|
||||
*
|
||||
* This file is part of NFD (Named Data Networking Forwarding Daemon).
|
||||
* See AUTHORS.md for complete list of NFD authors and contributors.
|
||||
*
|
||||
* NFD is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Foundation,
|
||||
* either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* NFD 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "mgmt/tables-config-section.hpp"
|
||||
#include "fw/forwarder.hpp"
|
||||
|
||||
|
||||
#include "tests/test-common.hpp"
|
||||
|
||||
namespace nfd {
|
||||
namespace tests {
|
||||
|
||||
class TablesConfigSectionFixture : protected BaseFixture
|
||||
{
|
||||
public:
|
||||
|
||||
TablesConfigSectionFixture()
|
||||
: m_cs(m_forwarder.getCs())
|
||||
, m_pit(m_forwarder.getPit())
|
||||
, m_fib(m_forwarder.getFib())
|
||||
, m_strategyChoice(m_forwarder.getStrategyChoice())
|
||||
, m_measurements(m_forwarder.getMeasurements())
|
||||
, m_tablesConfig(m_cs, m_pit, m_fib, m_strategyChoice, m_measurements)
|
||||
{
|
||||
m_tablesConfig.setConfigFile(m_config);
|
||||
}
|
||||
|
||||
void
|
||||
runConfig(const std::string& CONFIG, bool isDryRun)
|
||||
{
|
||||
m_config.parse(CONFIG, isDryRun, "dummy-config");
|
||||
}
|
||||
|
||||
bool
|
||||
validateException(const ConfigFile::Error& exception, const std::string& expectedMsg)
|
||||
{
|
||||
return exception.what() == expectedMsg;
|
||||
}
|
||||
|
||||
protected:
|
||||
Forwarder m_forwarder;
|
||||
|
||||
Cs& m_cs;
|
||||
Pit& m_pit;
|
||||
Fib& m_fib;
|
||||
StrategyChoice& m_strategyChoice;
|
||||
Measurements& m_measurements;
|
||||
|
||||
TablesConfigSection m_tablesConfig;
|
||||
ConfigFile m_config;
|
||||
|
||||
};
|
||||
|
||||
BOOST_FIXTURE_TEST_SUITE(TestTableConfigSection, TablesConfigSectionFixture)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(EmptyTablesSection)
|
||||
{
|
||||
const std::string CONFIG =
|
||||
"tables\n"
|
||||
"{\n"
|
||||
"}\n";
|
||||
|
||||
const size_t nCsMaxPackets = m_cs.getLimit();
|
||||
|
||||
BOOST_REQUIRE_NO_THROW(runConfig(CONFIG, true));
|
||||
|
||||
BOOST_CHECK_EQUAL(m_cs.getLimit(), nCsMaxPackets);
|
||||
|
||||
BOOST_REQUIRE_NO_THROW(runConfig(CONFIG, false));
|
||||
|
||||
BOOST_CHECK_EQUAL(m_cs.getLimit(), nCsMaxPackets);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ValidCsMaxPackets)
|
||||
{
|
||||
const std::string CONFIG =
|
||||
"tables\n"
|
||||
"{\n"
|
||||
" cs_max_packets 101\n"
|
||||
"}\n";
|
||||
|
||||
BOOST_REQUIRE_NE(m_cs.getLimit(), 101);
|
||||
|
||||
BOOST_REQUIRE_NO_THROW(runConfig(CONFIG, true));
|
||||
|
||||
BOOST_CHECK_NE(m_cs.getLimit(), 101);
|
||||
|
||||
BOOST_REQUIRE_NO_THROW(runConfig(CONFIG, false));
|
||||
|
||||
BOOST_CHECK_EQUAL(m_cs.getLimit(), 101);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(MissingValueCsMaxPackets)
|
||||
{
|
||||
const std::string CONFIG =
|
||||
"tables\n"
|
||||
"{\n"
|
||||
" cs_max_packets\n"
|
||||
"}\n";
|
||||
|
||||
const std::string expectedMsg =
|
||||
"Invalid value for option \"cs_max_packets\" in \"tables\" section";
|
||||
|
||||
BOOST_CHECK_EXCEPTION(runConfig(CONFIG, true),
|
||||
ConfigFile::Error,
|
||||
bind(&TablesConfigSectionFixture::validateException,
|
||||
this, _1, expectedMsg));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(InvalidValueCsMaxPackets)
|
||||
{
|
||||
const std::string CONFIG =
|
||||
"tables\n"
|
||||
"{\n"
|
||||
" cs_max_packets invalid\n"
|
||||
"}\n";
|
||||
|
||||
const std::string expectedMsg =
|
||||
"Invalid value for option \"cs_max_packets\" in \"tables\" section";
|
||||
|
||||
BOOST_CHECK_EXCEPTION(runConfig(CONFIG, true),
|
||||
ConfigFile::Error,
|
||||
bind(&TablesConfigSectionFixture::validateException,
|
||||
this, _1, expectedMsg));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
} // namespace tests
|
||||
} // namespace nfd
|
||||
@@ -1,11 +1,12 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/**
|
||||
* Copyright (c) 2014 Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology
|
||||
* Copyright (c) 2014, Regents of the University of California,
|
||||
* Arizona Board of Regents,
|
||||
* Colorado State University,
|
||||
* University Pierre & Marie Curie, Sorbonne University,
|
||||
* Washington University in St. Louis,
|
||||
* Beijing Institute of Technology,
|
||||
* The University of Memphis
|
||||
*
|
||||
* This file is part of NFD (Named Data Networking Forwarding Daemon).
|
||||
* See AUTHORS.md for complete list of NFD authors and contributors.
|
||||
@@ -20,7 +21,7 @@
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
**/
|
||||
*/
|
||||
|
||||
// #include "unit-under-test.hpp"
|
||||
// Unit being tested MUST be included first, to ensure header compiles on its own.
|
||||
|
||||
Reference in New Issue
Block a user