This is the documentation for the latest (main) development branch of Zephyr. If you are looking for the documentation of previous releases, use the drop-down list at the bottom of the left panel and select the desired version.

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.