Trickle Timer Library

Overview

The Trickle timer library implements IETF RFC6206 (Trickle Algorithm).

The Trickle algorithm allows nodes in a lossy shared medium (e.g., low-power and lossy networks) to exchange information in a highly robust, energy efficient, simple, and scalable manner.

API Reference

group trickle

Trickle algorithm library.

Typedefs

typedef void (*net_trickle_cb_t)(struct net_trickle *trickle, bool do_suppress, void *user_data)

Trickle timer callback.

The callback is called after Trickle timeout expires.

Param trickle:

The trickle context to use.

Param do_suppress:

Is TX allowed (true) or not (false).

Param user_data:

The user data given in net_trickle_start() call.

Functions

int net_trickle_create(struct net_trickle *trickle, uint32_t Imin, uint8_t Imax, uint8_t k)

Create a Trickle timer.

Parameters:
  • trickle – Pointer to Trickle struct.

  • Imin – Imin configuration parameter in ms.

  • Imax – Max number of doublings.

  • k – Redundancy constant parameter. See RFC 6206 for details.

Returns:

Return 0 if ok and <0 if error.

int net_trickle_start(struct net_trickle *trickle, net_trickle_cb_t cb, void *user_data)

Start a Trickle timer.

Parameters:
  • trickle – Pointer to Trickle struct.

  • cb – User callback to call at time T within the current trickle interval

  • user_data – User pointer that is passed to callback.

Returns:

Return 0 if ok and <0 if error.

int net_trickle_stop(struct net_trickle *trickle)

Stop a Trickle timer.

Parameters:
  • trickle – Pointer to Trickle struct.

Returns:

Return 0 if ok and <0 if error.

void net_trickle_consistency(struct net_trickle *trickle)

To be called by the protocol handler when it hears a consistent network transmission.

Parameters:
  • trickle – Pointer to Trickle struct.

void net_trickle_inconsistency(struct net_trickle *trickle)

To be called by the protocol handler when it hears an inconsistent network transmission.

Parameters:
  • trickle – Pointer to Trickle struct.

static inline bool net_trickle_is_running(struct net_trickle *trickle)

Check if the Trickle timer is running or not.

Parameters:
  • trickle – Pointer to Trickle struct.

Returns:

Return True if timer is running and False if not.

struct net_trickle
#include <trickle.h>

The variable names are taken directly from RFC 6206 when applicable.

Note that the struct members should not be accessed directly but only via the Trickle API.

Public Members

uint32_t I

Current interval size.

uint32_t Imin

Min interval size in ms.

uint32_t Istart

Start of the interval in ms.

uint32_t Imax_abs

Max interval size in ms (not doublings)

uint8_t Imax

Max number of doublings.

uint8_t k

Redundancy constant.

uint8_t c

Consistency counter.

bool double_to

Flag telling if the internval is doubled.

struct k_work_delayable timer

Internal timer struct.

net_trickle_cb_t cb

Callback to be called when timer expires.

void *user_data

User specific opaque data.