senf::ppi::module::AnnotationRouter< AnnotationType > Class Template Reference
[Routing Modules]

Route packets to destination according to some annotation value More...

#include <senf/PPI/AnnotationRouter.hh>

Inheritance diagram for senf::ppi::module::AnnotationRouter< AnnotationType >:
Inheritance graph
[legend]

List of all members.


Detailed Description

template<class AnnotationType>
class senf::ppi::module::AnnotationRouter< AnnotationType >

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.

The AnnotationType template parameter defines the routing key. This annotation must support the following operations:

  • Comparison with '<' (LessThanComparable concept)
  • Copy construction and copy assignment (Copyable and Assignable concepts) (e.g. via compiler synthesized copy constructor and assignment operator)
  • Output streaming to an ostream via '<<' (for error description purposes) (OutputStreamable concept)
The following annotation can be used to route the packets according to a mac address.
struct TargetInterface
{
    senf::MACAddress mac;

    bool operator< (TargetInterface const & other)
        { return mac < other.mac; }

    TargetInterface(senf::MACAddress const & m)
        : mac (m) {}
};

std::ostream & operator<<(std::ostream & os, TargetInterface const & v)
    { os << v.mac; return os; }

The additional senf::MACAddress constructor allows to construct an instance directly from a mac address and allows to pass a senf::MACAddress value as routing key directly:

The special senf::ppi::connect() overload takes a third argument, the routing key. This must be an AnnotationType value or must be (explicitly) convertible to AnnotationType.

The input will be throttled whenever any of the outputs except defaultOutput are throttled.

Todo:
Call Module::v_init() on every connection change and remove disconnected connections from the container

Definition at line 97 of file AnnotationRouter.hh.


Classes

struct   DuplicateKeyException

Public Member Functions

  AnnotationRouter ()

Public Attributes

connector::PassiveInput  input
connector::ActiveOutput  defaultOutput

Constructor & Destructor Documentation

template<class AnnotationType >
senf::ppi::module::AnnotationRouter< AnnotationType >::
AnnotationRouter ()

Definition at line 34 of file AnnotationRouter.ct.


Member Data Documentation

template<class AnnotationType>
connector::ActiveOutput senf::ppi::module::AnnotationRouter< AnnotationType >::
defaultOutput

Definition at line 106 of file AnnotationRouter.hh.

template<class AnnotationType>
connector::PassiveInput senf::ppi::module::AnnotationRouter< AnnotationType >::
input

Definition at line 103 of file AnnotationRouter.hh.


The documentation for this class was generated from the following files: