/** \brief Route packets to destination according to some annotation value
This router takes packet on a single input and directs them to one of it outputs depending
- on a packet annotation. Each output connected will be associated with a single annotation
- value. Incoming packets for which no matching output is found are directed to a default
- output. If this output is left unconnected, those packets will be dropped.
+ on a \link packet_usage_annotation packet annotation\endlink. Each output connected
+ will be associated with a single annotation value. Incoming packets for which no matching
+ output is found are directed to a default output. If this output is left unconnected, those
+ packets will be dropped.
The \a AnnotationType template parameter defines the routing key. This annotation must
support the following operations:
namespace senf {
namespace ppi {
+#ifdef DOXYGEN
+
/** \brief Connect modules
senf::ppi::connect() establishes a connection between two modules or, to be more precise,
\li Either or both of the connectors are untyped (they accept/send arbitrary senf::Packet's)
\li Both connectors send/accept the exactly same packet type.
+ Depending on the type of input or output, the connect call may require additional
+ arguments. See the respective module documentation for more information
+
\throws connector::IncompatibleConnectorsException if the two connectors are not type
compatible.
\see \ref ppi_connections
*/
- void connect(connector::GenericActiveOutput & source, connector::GenericPassiveInput & target);
+ void connect(connector::Connector & source, connector::Connector & target, ...);
- /** \brief Connect modules
- \see connect() */
+#else
+
+ void connect(connector::GenericActiveOutput & source, connector::GenericPassiveInput & target);
void connect(connector::GenericPassiveOutput & source, connector::GenericActiveInput & target);
+#endif
+
#ifndef DOXYGEN
template <class T, class C>
\section intro_usage Using the Console: Configuration files, Network console
+ \seechapter \ref console_access
There are several ways to access the node tree:
\li By parsing configuration files
\li By parsing command line parameters
\li By providing interactive or non-interactive network console access
- \see console_access
-
\section intro_nodes The node tree
+ \seechapter \ref node_tree
The basic idea is, that the console/config library manages a directory structure of parameters
and auxiliary commands. Parameters are just commands which set a parameter value so everything
is either a directory entry (senf::console::DirectoryNode) or a command
(senf::console::CommandNode).
- \see \ref node_tree
-
\section intro_commands Implementing console/config commands
+ \seechapter \ref console_commands
The console/config language does not define, how arguments are passed to the commands, it just
tokenizes the input and passes the tokens to the commands which then handle the
which will be called with an already parsed integer value (or throw a
senf::console::SyntaxErrorException if the conversion fails). This will be the most often used
command.
-
- \see \ref console_commands
*/
/** \defgroup console_access Accessing the Console/Config tree