The SENF modules

The framework is made up of several modular components. When using the library, it is possible to selectively choose to use only a subset of the implemented modules.

See also
senf_overview

libPPI: Packet Processing Infrastructure

The Packet Processing Infrastructure implements a modular framework for implementing packet oriented network applications. The library provides a large set of pre-defined modules as well as the necessary helpers to implement application specific processing modules.

See also
libPPI API reference

libSocket: C++ abstraction of the BSD socket API

This library provides a high performance and object oriented abstraction of the standard socket API. It utilizes a flexible and extensible policy based design. The library provides predefined types for the important socket types (UDP and TCP sockets etc) including raw and packet sockets.

See also
libSocket API reference

libPackets: Network packet manipulation

This library provides a very flexible infrastructure to parse, create and otherwise manipulate packetized network data. Included is a library of several protocol parsers covering the basic IPv4 and IPv6 network protocols down to the Ethernet layer.

See also
libPackets API reference

libScheduler: Asynchronous event handling

The scheduler library provides an object oriented interface to the standard UNIX select type event dispatcher. It is based on the high performance epoll system call. It provides support for read/write events as well as simple timer based events.

See also
libScheduler API reference

libUtils: Collection of arbitrary utilities

This library is used be most all of the other modules for miscellaneous tools and utilities. We have

  • Simple functions to manage daemon processes
  • Standard exception classes
  • senf::intrusive_refcount to simplify the implementation of classes usable with boost::intrusive_ptr
  • boost::bind extensions
  • An interface to the g++ de-mangler integrated with type_info
  • Typedefs and rudimentary methods to simplify handling high-resolution time values
See also
libUtils API reference