The routing protocol for low power and lossy networks defines the creation and management of downward routes with two modes of operations:
1. Storing Mode
2. Non-storing Mode
For storing mode, routing tables are stored on each node, which can impose a significant memory footprint in large networks and be hard to maintain consistently, but there is on the other hand no need for potentially large source routing headers in the IPv6 packets.
RPL-Lite does not support the storing mode. To enable the storing mode, select RPL-Classic in the Makefile:
MAKE_ROUTING = MAKE_ROUTING_RPL_CLASSIC
The storing mode is the default for RPL-Classic. Alternatively, it can also be explicitly enabled with:
#define RPL_CONF_MOP RPL_MOP_STORING_NO_MULTICAST
or, if multicast routing is desired, with:
#define RPL_CONF_MOP RPL_MOP_STORING_MULTICAST
For non-storing mode, IPv6 source routing is employed, which means that nodes do not have to store routing tables for nodes below them in the DODAG. On the other hand, packets can get large if many hops are along the path, whose addresses would then need to be embedded in the source routing header.
The DODAG root node still has to store the routing table of the whole network, so its memory usage will still be high in large networks.
To enable the non-storing mode, either select RPL-Lite (where it is the default), or use this configuration:
#define RPL_CONF_MOP RPL_MOP_NON_STORING