Skip to content
Snippets Groups Projects
Commit de564f2f authored by g0dil's avatar g0dil
Browse files

PPI: Rename ActiveSplitter to ActiveDuplicatorPPI: Add / fix documentation

parent b7f0c358
No related branches found
No related tags found
No related merge requests found
...@@ -75,7 +75,7 @@ namespace module { ...@@ -75,7 +75,7 @@ namespace module {
mac address and allows to pass a senf::MACAddress value as routing key directly: mac address and allows to pass a senf::MACAddress value as routing key directly:
\code \code
senf::ppi::module::AnnotationRouter router; senf::ppi::module::AnnotationRouter<TargetInterface> router;
senf::ppi::connect(router, target1, senf::MACAddress::from_string("00:1a:2b:04:06:08")); senf::ppi::connect(router, target1, senf::MACAddress::from_string("00:1a:2b:04:06:08"));
\endcode \endcode
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
PROJECT_NAME = libPPI PROJECT_NAME = libPPI
GENERATE_TAGFILE = doc/PPI.tag GENERATE_TAGFILE = doc/PPI.tag
RECURSIVE = Yes RECURSIVE = No
SHOW_DIRECTORIES = Yes SHOW_DIRECTORIES = Yes
EXCLUDE = NetEmu INPUT = . detail
TAGFILES = \ TAGFILES = \
"$(TOPDIR)/Scheduler/doc/Scheduler.tag" \ "$(TOPDIR)/Scheduler/doc/Scheduler.tag" \
......
...@@ -21,19 +21,19 @@ ...@@ -21,19 +21,19 @@
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/** \file /** \file
\brief Splitters non-inline non-template implementation */ \brief Duplicators non-inline non-template implementation */
#include "Splitters.hh" #include "Duplicators.hh"
//#include "Splitters.ih" //#include "Duplicators.ih"
// Custom includes // Custom includes
//#include "Splitters.mpp" //#include "Duplicators.mpp"
#define prefix_ #define prefix_
///////////////////////////////cc.p//////////////////////////////////////// ///////////////////////////////cc.p////////////////////////////////////////
prefix_ senf::ppi::connector::ActiveOutput<> & prefix_ senf::ppi::connector::ActiveOutput<> &
senf::ppi::module::ActiveSplitter::newOutput() senf::ppi::module::ActiveDuplicator::newOutput()
{ {
outputs_.push_back(new connector::ActiveOutput<>()); outputs_.push_back(new connector::ActiveOutput<>());
connector::ActiveOutput<> & output (outputs_.back()); connector::ActiveOutput<> & output (outputs_.back());
...@@ -43,7 +43,7 @@ senf::ppi::module::ActiveSplitter::newOutput() ...@@ -43,7 +43,7 @@ senf::ppi::module::ActiveSplitter::newOutput()
return output; return output;
} }
prefix_ void senf::ppi::module::ActiveSplitter::request() prefix_ void senf::ppi::module::ActiveDuplicator::request()
{ {
Packet p (input()); Packet p (input());
Outputs::iterator i (outputs_.begin()); Outputs::iterator i (outputs_.begin());
...@@ -54,7 +54,7 @@ prefix_ void senf::ppi::module::ActiveSplitter::request() ...@@ -54,7 +54,7 @@ prefix_ void senf::ppi::module::ActiveSplitter::request()
///////////////////////////////cc.e//////////////////////////////////////// ///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_ #undef prefix_
//#include "Splitters.mpp" //#include "Duplicators.mpp"
// Local Variables: // Local Variables:
......
...@@ -21,9 +21,9 @@ ...@@ -21,9 +21,9 @@
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/** \file /** \file
\brief Splitters inline non-template implementation */ \brief Duplicators inline non-template implementation */
//#include "Splitters.ih" //#include "Duplicators.ih"
// Custom includes // Custom includes
...@@ -31,12 +31,12 @@ ...@@ -31,12 +31,12 @@
///////////////////////////////cci.p/////////////////////////////////////// ///////////////////////////////cci.p///////////////////////////////////////
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// senf::ppi::module::ActiveSplitter // senf::ppi::module::ActiveDuplicator
prefix_ senf::ppi::module::ActiveSplitter::ActiveSplitter() prefix_ senf::ppi::module::ActiveDuplicator::ActiveDuplicator()
{ {
noroute(input); noroute(input);
input.onRequest(&ActiveSplitter::request); input.onRequest(&ActiveDuplicator::request);
} }
///////////////////////////////cci.e/////////////////////////////////////// ///////////////////////////////cci.e///////////////////////////////////////
......
...@@ -21,9 +21,9 @@ ...@@ -21,9 +21,9 @@
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/** \file /** \file
\brief Splitters inline template implementation */ \brief Duplicators inline template implementation */
//#include "Splitters.ih" //#include "Duplicators.ih"
// Custom includes // Custom includes
#include "Setup.hh" #include "Setup.hh"
...@@ -33,14 +33,14 @@ ...@@ -33,14 +33,14 @@
template <class Target> template <class Target>
prefix_ senf::ppi::connector::GenericActiveOutput & prefix_ senf::ppi::connector::GenericActiveOutput &
senf::ppi::connect(module::ActiveSplitter & source, Target & target) senf::ppi::connect(module::ActiveDuplicator & source, Target & target)
{ {
return source.connect(target); return source.connect(target);
} }
template <class Target> template <class Target>
prefix_ senf::ppi::connector::GenericActiveOutput & prefix_ senf::ppi::connector::GenericActiveOutput &
senf::ppi::module::ActiveSplitter::connect(Target & target) senf::ppi::module::ActiveDuplicator::connect(Target & target)
{ {
connector::GenericActiveOutput & output (newOutput()); connector::GenericActiveOutput & output (newOutput());
ppi::connect(output, target); ppi::connect(output, target);
......
...@@ -21,10 +21,10 @@ ...@@ -21,10 +21,10 @@
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/** \file /** \file
\brief Splitters public header */ \brief Duplicators public header */
#ifndef HH_SENF_PPI_Splitters_ #ifndef HH_SENF_PPI_Duplicators_
#define HH_SENF_PPI_Splitters_ 1 #define HH_SENF_PPI_Duplicators_ 1
// Custom includes // Custom includes
#include <boost/ptr_container/ptr_vector.hpp> #include <boost/ptr_container/ptr_vector.hpp>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#include "Connectors.hh" #include "Connectors.hh"
#include "Module.hh" #include "Module.hh"
//#include "Splitters.mpp" //#include "Duplicators.mpp"
///////////////////////////////hh.p//////////////////////////////////////// ///////////////////////////////hh.p////////////////////////////////////////
namespace senf { namespace senf {
...@@ -41,20 +41,37 @@ namespace ppi { ...@@ -41,20 +41,37 @@ namespace ppi {
#ifndef DOXYGEN #ifndef DOXYGEN
template <class Target> template <class Target>
connector::GenericActiveOutput & connect(module::ActiveSplitter & source, Target & target); connector::GenericActiveOutput & connect(module::ActiveDuplicator & source, Target & target);
#endif #endif
namespace module { namespace module {
class ActiveSplitter /** \brief Copy every incoming packet to each output
ActiveDuplicator will take every received packet and push it out to each connected output.
Since ActiveDuplicator allows any number of incoming packet streams, the input connectors
are dynamically managed. A special senf::ppi::connect() overload is used to dynamically
create the needed input connectors. This hides this extra functionality from the user.
\code
senf::ppi::module::ActiveDuplicator dup;
senf::ppi::connect(sourceModule, dup);
senf::ppi::connect(dup, targetModule1);
senf::ppi::connect(dup, targetModule2.some_input);
\endcode
\ingroup routing_modules
*/
class ActiveDuplicator
: public Module : public Module
{ {
SENF_PPI_MODULE(ActiveSplitter); SENF_PPI_MODULE(ActiveDuplicator);
public: public:
connector::PassiveInput<> input; connector::PassiveInput<> input;
ActiveSplitter(); ActiveDuplicator();
private: private:
connector::ActiveOutput<> & newOutput(); connector::ActiveOutput<> & newOutput();
...@@ -77,9 +94,9 @@ namespace module { ...@@ -77,9 +94,9 @@ namespace module {
///////////////////////////////hh.e//////////////////////////////////////// ///////////////////////////////hh.e////////////////////////////////////////
#include "Splitters.cci" #include "Duplicators.cci"
//#include "Splitters.ct" //#include "Duplicators.ct"
#include "Splitters.cti" #include "Duplicators.cti"
#endif #endif
......
...@@ -21,13 +21,13 @@ ...@@ -21,13 +21,13 @@
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/** \file /** \file
\brief Splitters.test unit tests */ \brief Duplicators.test unit tests */
//#include "Splitters.test.hh" //#include "Duplicators.test.hh"
//#include "Splitters.test.ih" //#include "Duplicators.test.ih"
// Custom includes // Custom includes
#include "Splitters.hh" #include "Duplicators.hh"
#include "DebugModules.hh" #include "DebugModules.hh"
#include "Setup.hh" #include "Setup.hh"
#include "../Packets/Packets.hh" #include "../Packets/Packets.hh"
...@@ -43,16 +43,16 @@ namespace connector = ppi::connector; ...@@ -43,16 +43,16 @@ namespace connector = ppi::connector;
namespace module = ppi::module; namespace module = ppi::module;
namespace debug = module::debug; namespace debug = module::debug;
BOOST_AUTO_UNIT_TEST(activeSplitter) BOOST_AUTO_UNIT_TEST(activeDuplicator)
{ {
debug::ActiveSource source; debug::ActiveSource source;
module::ActiveSplitter splitter; module::ActiveDuplicator duplicator;
debug::PassiveSink sink1; debug::PassiveSink sink1;
debug::PassiveSink sink2; debug::PassiveSink sink2;
ppi::connect(source, splitter); ppi::connect(source, duplicator);
ppi::connect(splitter, sink1); ppi::connect(duplicator, sink1);
ppi::connect(splitter, sink2); ppi::connect(duplicator, sink2);
ppi::init(); ppi::init();
senf::Packet p (senf::DataPacket::create()); senf::Packet p (senf::DataPacket::create());
......
...@@ -61,8 +61,6 @@ namespace module { ...@@ -61,8 +61,6 @@ namespace module {
\li \ref io_modules receive external data or forward packets out of the PPI \li \ref io_modules receive external data or forward packets out of the PPI
\li \ref routing_modules forward packets within the network \li \ref routing_modules forward packets within the network
\li \ref adapter_modules are used to connect incompatible connectors to each other \li \ref adapter_modules are used to connect incompatible connectors to each other
\todo Implement Spliters: PassiveSplitter, PrioritySplitter, CloneSplitter
*/ */
/** \defgroup io_modules Source/Sink Modules /** \defgroup io_modules Source/Sink Modules
......
...@@ -37,6 +37,40 @@ namespace senf { ...@@ -37,6 +37,40 @@ namespace senf {
namespace ppi { namespace ppi {
namespace module { namespace module {
/** \brief Base class providing simple monitor module support
A monitor module is a module which needs information about traversing packets but does not
really act on the packets. Because of this, it is \e optional to connect the output: If the
output is not connected, the packets will be silently dropped.
This allows to add monitor modules either into an existing chain or add them using an
ActiveDuplicator.
To write a monitor module, derive from senf::ppi::module::MonitorModule instead of
senf::ppi::module and implement v_handlePacket():
\code
class CountPackets
: public senf::ppi::module::MonitorModule<>
{
SENF_PPI_MODULE(CountPackets);
public:
SomeMonitor() : counter_ (0u) {}
private:
virtual void v_handlePacket(Packet const & p)
{ ++ counter_; }
unsigned counter_;
};
\endcode
You may of course add events (or even further connectors besides \c input and \c output
provided by MonitorModule) to the module.
\tparam PacketType type of packet expected on input and sent on output. This is also the
type of the v_handlePacket() argument.
*/
template <class PacketType=Packet> template <class PacketType=Packet>
class MonitorModule : public Module class MonitorModule : public Module
{ {
...@@ -47,7 +81,7 @@ namespace module { ...@@ -47,7 +81,7 @@ namespace module {
protected: protected:
MonitorModule(); MonitorModule();
virtual void v_handlePacket(PacketType const & p) = 0; virtual void v_handlePacket(PacketType const & p) = 0; ///< Called for each packet
private: private:
void request(); void request();
......
...@@ -72,7 +72,7 @@ namespace ppi { ...@@ -72,7 +72,7 @@ namespace ppi {
} }
class PassiveJoin; class PassiveJoin;
class PriorityJoin; class PriorityJoin;
class ActiveSplitter; class ActiveDuplicator;
} }
namespace connector { namespace connector {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment