OONF Plugins

From OLSR.org Wiki
Jump to: navigation, search

The OLSR.org Network Framework is mostly a collection of plugins (also called subsystems) which can be combined with the three main APIs to build a network application.

Plugins can depend on each other as long as there is no cycle. All plugins can expect all three main APIs being available.

There are multiple categories of plugins for OONF.

You can get a list of possible configuration options of a plugin by using the --schema parameter:

 olsrd2 --schema=<name-of-plugin>

Dependencies between plugin categories

All plugins depend on the three OONF API's, OONF Common, OONF Config and OONF Core.

All OLSRv2 plugins depend on the NHDP Plugin, either directly or indirectly through the OLSRv2 Plugin.

Most Generic plugins, NHDP plugins, OLSRv2 plugins and Crypto Plugins depend on one or more Subsystem plugins.


The Subsystem plugins are a former 4th main API library. They contain most of the network and timer functionality of OONF and highly depends on each other.

All subsystems that start with os_ are operation system dependent and might have slightly different behavior depending on the operation system OONF was compiled for.

Most of the other plugins depend on multiple Subsystems.

All of the Subsystem Plugins export API functions that can be used by other Plugins.

oonf_class block memory manager
oonf_clock internal time handling
oonf_duplicate_set memorize and recognize sequence number duplicates
oonf_http mini http server
oonf_interface interface data and change listener
oonf_layer2 storage of layer2 data about interfaces and neighbors
oonf_packet_socket dualstack UDP socket handler
oonf_rfc5444 RFC 5444 parser/generator and target/interface management
oonf_socket generic socket scheduler
oonf_stream_socket dualstack TCP socket handler
oonf_telnet telnet service for OONF
oonf_timer timer scheduler
oonf_viewer helper class to build view commands for telnet
os_clock get monotonic time in milliseconds
os_interface configure interface addresses and mesh behavior
os_socket wrapper for all kind of network/socket function calls
os_routing set, remove and query system routing tables
os_system query basic OS configuration

Generic plugins

Generic plugins only depend on subsystems, not on other plugins.

cfg_compact Standard configuration format for OONF
cfg_uciloader OpenWRT UCI configuration format for OONF
dlep_radio DLEP radio implementation
dlep_router DLEP router implementation
example Small example plugin
eth_listener grabs link-speed of ethernet interfaces for layer2 database
layer2_generator generator for layer2 database test-data
layer2info get layer2 database content through telnet
link_config set layer2 database data in configuration file
nl80211_listener query Linux wifi cards layer2 data
plugin_controller load and unload plugins through telnet
remotecontrol change configuration and remote logging through telnet
systeminfo get basic OONF information through telnet

NHDP plugins

The NHDP plugins are the IETF RFC 6130: Neighborhood Discovery Protocol (NHDP) implementation and all plugins that depend on it.

auto_ll4 automatic configuration of IPv4 interface addresses
constant_metric a metric that pulls it costs out of the configuration
ff_dat_metric directional Airtime metric
hysteresis_olsrv1 example hysteresis implementation based on the suggestion in RFC3626
mpr example MPR implementation based on the suggestion in RFC7181
neighbor_probing plugin that probes neighbors with unicast traffic to allow the measurement of the link speed
nhdp the NHDP implementation including the NHDP API for other plugins
nhdpcheck syntax checking for incoming NHDP traffic
nhdpinfo information about the NHDP databases through telnet

OLSRv2 plugins

The OLSRv2 plugins are the RFC 7181: Optimized Link State Routing Protocol v2 implementation and all plugins that depend on it. The OLSRv2 plugin itself of course depends on the NHDP Plugin.

netjsoninfo JSON output as defined by the NetJSON project.
lan_import Automatic import of routing tables as locally attached networks
olsrv2 the OLSRv2 implementation including the OLSRv2 API for other plugins.
olsrv2info information about the OLSRv2 databases through telnet
route_modifier modify the table, protocol and distance of routes through configuration

Crypto plugins

The Crypto plugins are plugins that provide cryptographic algorithms or extensions for other OONF plugins.

hash_tomcrypt a wrapper for libtomcrypt that provides SHA 1/2 hashes and HMAC for the RFC5444 Signature Plugin.
rfc5444_signature an API provider for other plugins to defines message and packet level RFC5444 signatures as defined in

RFC 7182: Optimized Link State Routing Protocol v2

simple_security provides HMAC based RFC5444 signatures and replay protection
sharedkey_sig Test plugin with HMAC based shared key signatures for RFC5444 messages and packets