/** \file
\brief AnnotationRouter public header */
-#ifndef HH_AnnotationRouter_
-#define HH_AnnotationRouter_ 1
+#ifndef HH_SENF_PPI_AnnotationRouter_
+#define HH_SENF_PPI_AnnotationRouter_ 1
// Custom includes
#include <boost/ptr_container/ptr_map.hpp>
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 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 \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")
+ : senf::Exception("Duplicate senf::ppi::module::AnnotationRouter routing key ")
{ append(boost::lexical_cast<std::string>(key)); } };
private: