diff --git a/daemon/main.cpp b/daemon/main.cpp index 0e90bd03..9fd191ef 100644 --- a/daemon/main.cpp +++ b/daemon/main.cpp @@ -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 . - **/ + */ #include #include @@ -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); diff --git a/daemon/mgmt/tables-config-section.cpp b/daemon/mgmt/tables-config-section.cpp new file mode 100644 index 00000000..0efa02db --- /dev/null +++ b/daemon/mgmt/tables-config-section.cpp @@ -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 . + */ + +#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 csMaxPacketsNode = + configSection.get_child_optional("cs_max_packets"); + + if (csMaxPacketsNode) + { + boost::optional valCsMaxPackets = + configSection.get_optional("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 diff --git a/daemon/mgmt/tables-config-section.hpp b/daemon/mgmt/tables-config-section.hpp new file mode 100644 index 00000000..482ceca6 --- /dev/null +++ b/daemon/mgmt/tables-config-section.hpp @@ -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 . + */ + +#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 diff --git a/daemon/table/cs.cpp b/daemon/table/cs.cpp index f750b61d..ad666d5c 100644 --- a/daemon/table/cs.cpp +++ b/daemon/table/cs.cpp @@ -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) { diff --git a/daemon/table/cs.hpp b/daemon/table/cs.hpp index 5e3b79d1..c5232934 100644 --- a/daemon/table/cs.hpp +++ b/daemon/table/cs.hpp @@ -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(); diff --git a/nfd.conf.sample.in b/nfd.conf.sample.in index 960c59c4..ac3f6171 100644 --- a/nfd.conf.sample.in +++ b/nfd.conf.sample.in @@ -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 { diff --git a/tests/daemon/mgmt/tables-config-section.cpp b/tests/daemon/mgmt/tables-config-section.cpp new file mode 100644 index 00000000..d27321f3 --- /dev/null +++ b/tests/daemon/mgmt/tables-config-section.cpp @@ -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 . + */ + +#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 diff --git a/tests/test-case.cpp.sample b/tests/test-case.cpp.sample index 259d75f0..560add27 100644 --- a/tests/test-case.cpp.sample +++ b/tests/test-case.cpp.sample @@ -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 . - **/ + */ // #include "unit-under-test.hpp" // Unit being tested MUST be included first, to ensure header compiles on its own.