// Custom includes
#include <boost/ptr_container/ptr_map.hpp>
+#include "../Utils/String.hh"
#include "Module.hh"
#include "Connectors.hh"
namespace ppi {
namespace module {
- /** \brief Route packets to destination according to some annotation value
+ /** \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 \link packet_usage_annotation packet annotation\endlink. Each output connected
+ on a \ref packet_usage_annotation "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.
The \a AnnotationType template parameter defines the routing key. This annotation must
support the following operations:
- \li Comparison with '<'
- \li Copy-construction
- \li Output streaming to an ostream via '<<'
+ \li Comparison with '<' (\c LessThanComparable concept)
+ \li Copy construction and copy assignment (\c Copyable und \c Assignable concepts)
+ (e.g. via compiler synthesized copy constructor and assignment operator)
+ \li Output streaming to an ostream via '\c <<' (for error description purposes) (\c
+ OutputStreamable concept)
The following annotation can be used to route the packets according to a mac address.
\code
mac address and allows to pass a senf::MACAddress value as routing key directly:
\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"));
\endcode
struct DuplicateKeyException : public senf::Exception
{ DuplicateKeyException(AnnotationType const & key)
: senf::Exception("Duplicate senf::ppi::module::AnnotationRouter routing key ")
- { append(boost::lexical_cast<std::string>(key)); } };
+ { append( senf::str(key)); } };
private:
connector::ActiveOutput<> & newOutput(AnnotationType const & key);