| Internet-Draft | HyMRPL | July 2026 |
| Silva Filho & Fontes | Expires 22 January 2027 | [Page] |
The Routing Protocol for Low-Power and Lossy Networks (RPL), defined in RFC 6550, enforces a single Mode of Operation (MOP) across all nodes within a DODAG. This rigidity prevents heterogeneous devices from independently selecting their forwarding behavior and creates permanent isolation between DODAGs operating with different MOPs.¶
This document defines HyMRPL, a Hybrid Mode of Operation (MOP=6) that enables per-node functional profiles within a single DODAG. Nodes independently adopt Class-S (storing-like) or Class-N (non-storing-like) behavior without modifying RPL control message formats. Additionally, this document specifies an Inter-DODAG Bridge mechanism that uses MOP Extension (MOPex) signaling to interconnect DODAGs with different MOPs through cross-DODAG route injection.¶
The mechanisms introduce zero additional control messages, maintain full backward compatibility via the J-flag in extended options, and have been validated with a functional implementation demonstrating 100% packet delivery ratio across MOP boundaries.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 22 January 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.¶
The Routing Protocol for Low-Power and Lossy Networks (RPL) [RFC6550] organizes communication through Destination-Oriented Directed Acyclic Graphs (DODAGs) and defines four Modes of Operation (MOP) that determine how downward routes are established and maintained. The MOP is a 3-bit field in DIO messages set globally by the DODAG root and enforced uniformly across all participating nodes.¶
This architectural constraint creates two problems in heterogeneous IoT deployments:¶
This document addresses both problems by defining:¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This document uses terminology from [RFC6550] and additionally defines:¶
RFC 6550 Section 6.3.1 specifies that the MOP field in DIO messages determines how downward routes are established for the entire DODAG. A node that does not support the advertised MOP MUST either join as a leaf (if it supports the MOP for upward routes only) or not join at all. This creates several operational challenges:¶
In a network where some nodes have sufficient memory for routing tables (suitable for Storing mode) while others are severely constrained (suitable for Non-Storing mode), the administrator must choose a single MOP. Choosing Storing (MOP=2) wastes the memory-constrained nodes' resources on routing tables they cannot adequately maintain. Choosing Non-Storing (MOP=1) wastes the capable nodes' resources by not utilizing their local forwarding ability, increasing latency for paths that could be resolved locally.¶
No mechanism exists in RFC 6550 for individual nodes to independently select their forwarding behavior based on their own resource constraints within a single DODAG.¶
When a network contains multiple DODAGs with different MOPs (e.g., a Storing DODAG for sensor nodes and a Non-Storing DODAG for actuators), no mechanism exists for:¶
This creates permanent isolation between MOP domains with no recovery mechanism defined in the protocol.¶
HyMRPL defines MOP=6 as a Hybrid Mode of Operation. When the DODAG root advertises MOP=6 in DIO messages, each node in the DODAG independently selects one of two functional profiles based on its own capabilities:¶
No modification is introduced to DIO, DAO, or DIS message formats. The hybrid logic operates entirely at the behavioral level within the RPL implementation.¶
A node operating under MOP=6 MUST select either Class-S or Class-N upon joining the DODAG. The selection mechanism is implementation-specific but SHOULD consider:¶
This document defines an adaptive selection model in Section 3.5 that computes a composite score from multiple metrics.¶
A node MAY change its class at runtime without requiring DODAG reconstruction. The class change takes effect at the next DAO transmission cycle. No DIO is emitted upon class change, and no global signaling is required.¶
Under MOP=6, DAO processing is class-dependent:¶
The DODAG root under MOP=6 MUST:¶
A Class-S node receiving a DAO from a child MUST:¶
The dual-DAO mechanism ensures the root always maintains complete topology visibility (enabling SRH for any Class-N path) while Class-S nodes simultaneously maintain local hop-by-hop routes for immediate descendants.¶
Three forwarding patterns emerge within a MOP=6 DODAG:¶
This document defines an OPTIONAL adaptive model for automatic class selection. The model computes a composite score S_i for node i:¶
S_i = w_pdr * (PDR_i / 100) + w_energy * (E_i / 100) + w_stab * I[parent_stable]¶
Where:¶
If S_i >= 0.75 (threshold), the node selects Class-S. Otherwise, it selects Class-N. A hysteresis of 3 consecutive evaluation cycles prevents oscillation.¶
Implementations MAY use different scoring functions, weights, or thresholds appropriate to their deployment scenario. The specific model defined here is RECOMMENDED as a baseline.¶
A node operating under MOP=6 MAY switch its class at runtime. The switch:¶
The switching mechanism is implementation-specific. This document recommends a secure command interface with authentication (e.g., HMAC-SHA256), replay protection (monotonic nonce), and rate limiting (maximum 3 switches per minute, minimum 10 seconds between switches) to prevent abuse.¶
The Inter-DODAG Bridge mechanism enables connectivity between DODAGs operating with different MOPs. A bridge node participates in multiple DODAGs simultaneously, translating routing information and enabling data forwarding across MOP boundaries.¶
The bridge leverages MOPex signaling [I-D.ietf-roll-mopex] to advertise its presence using MOP=7 (Extended) in DIO headers, with the real MOP carried in the extended option. This ensures backward compatibility: legacy nodes receiving MOP=7 DIOs will join as leaf per RFC 6550 Section 6.3.1 handling of unknown MOP values.¶
The bridge uses MOP=7 in the DIO header's MOP field (bits 5-3 of the mopprf byte) and appends a 4-byte Extended RPL Control Option per [I-D.ietf-roll-mopex]:¶
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| Opt Type | Option Length | Option Flags | MOPex Value | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+¶
Field descriptions:¶
A MOPex Bridge node operates with five components:¶
When building DIO messages, a bridge node MUST:¶
This allows MOPex-capable receivers to determine the bridge's true mode while legacy receivers see MOP=7 (unknown) and apply the behavior specified in RFC 6550 Section 6.3.1 for unknown MOP values (join as leaf if possible, or do not join).¶
When a bridge node receives a DIO from a DODAG with a MOP different from its native mode, it MUST:¶
A bridge node SHOULD support up to 4 simultaneous foreign DODAGs. If the foreign DODAG table is full, the bridge MUST NOT join additional foreign DODAGs.¶
The bridge MUST handle re-registration (updates to existing entries) when receiving subsequent DIOs from already-registered foreign DODAGs, and MUST remove entries when a foreign DODAG becomes unreachable (parent timeout or explicit notification).¶
The core mechanism enabling inter-DODAG connectivity. When the bridge processes a DAO from DODAG X containing targets T_1 through T_n, it MUST:¶
For each other DODAG Y (where Y != X) that the bridge participates in:¶
This causes the root of DODAG Y to install routes for T_1 through T_n via the bridge, enabling data forwarding from DODAG Y to nodes in DODAG X.¶
Route injection MUST include deduplication: before adding a target to DODAG Y, the bridge MUST check if an identical prefix is already present. Duplicate entries MUST NOT be added.¶
The bridge SHOULD maintain a maximum of 32 injected routes per foreign DODAG to prevent unbounded table growth.¶
When translating DAOs between DODAGs with different MOPs, the bridge performs format conversion:¶
A Storing-mode DAO contains RPL Target options without Transit Information (the DAO sender is the implicit next-hop). When translating to a Non-Storing DODAG, the bridge MUST:¶
A Non-Storing DAO contains RPL Target options with Transit Information carrying the full source routing path. When translating to a Storing DODAG, the bridge MUST:¶
MOP=6 DODAGs use a dual-DAO mechanism where DAOs are sent toward both the parent and the root. The bridge MUST handle both Storing-style DAOs (with aggregated targets from Class-S subtrees) and Non-Storing-style DAOs (with Transit Information from Class-N paths) using the appropriate translation rules above based on the target DODAG's MOP.¶
Once routes are injected and propagated via standard DAO mechanisms, cross-DODAG data forwarding requires no special handling at the bridge. The bridge acts as a regular intermediate hop:¶
No encapsulation, tunneling, or special packet marking is required for cross-DODAG data transit.¶
A bridge node receiving a DIO MUST scan all options in the DIO options area to locate the Extended RPL Control Option (type 0x80), regardless of option ordering. The bridge MUST NOT assume the destination prefix option (type 0x03) is always the first option after the DIO base header.¶
If a DIO carries MOP=7 in the header:¶
The J flag (Join as leaf only) in the MOPex option ensures incremental deployability:¶
Runtime class switching (Section 3.6) introduces a control plane interface that could be exploited by an attacker to force nodes into suboptimal classes, degrading network performance. Implementations providing external class switching interfaces MUST implement:¶
The cross-DODAG route injection mechanism (Section 4.3.3) creates a potential attack vector: a malicious bridge could advertise false routes between DODAGs, redirecting traffic through an attacker-controlled node (route poisoning).¶
Mitigations:¶
An attacker could emit DIOs with MOP=7 and a forged MOPex option to attract nodes. The J flag mitigates this by ensuring that nodes not understanding MOPex join only as leaf, limiting the attacker's ability to attract routing traffic. However, MOPex-capable nodes could still be deceived.¶
Deployments operating in adversarial environments SHOULD use RPL security mode (authenticated DIOs per RFC 6550 Section 10) in addition to the mechanisms defined here.¶
This document requests IANA to assign the following value in the "RPL Mode of Operation" registry defined by RFC 6550:¶
| Value | Description | Reference |
|---|---|---|
| 6 | Hybrid Mode (HyMRPL): Per-node Class-S/Class-N profiles within a single DODAG | [This Document] |
Note: MOP value 7 is defined by [I-D.ietf-roll-mopex] as "Extended MOP" and is not requested by this document. This document defines the semantics for MOPex Value = 6 in the MOPex Value Registry.¶
This document requests IANA to assign the following value in the "MOPex Value" registry defined by [I-D.ietf-roll-mopex]:¶
| Value | Description | Reference |
|---|---|---|
| 6 | Hybrid Mode of Operation (HyMRPL) | [This Document] |
[Note to RFC Editor: This section is to be removed before publication as an RFC. It is present per RFC 7942 [RFC7942].]¶
Organization: Instituto Metropole Digital, UFRN, Brazil¶
Implementation Name: rpld-hymrpl¶
Description: Extension of rpld (user-space RPL daemon for Linux) implementing both HyMRPL (MOP=6) and the MOPex bridge mechanism. The implementation adds approximately 1000 lines of C code to rpld.¶
Maturity Level: Experimental¶
Coverage: This implementation covers the full specification defined in this document including:¶
Licensing: Open source (available at https://github.com/CassiusClayB/rpld_hymrpl)¶
Implementation Experience:¶
Contact: Cassius Clay B. Silva Filho <cassius.filho.700@ufrn.edu.br>¶
The mechanisms defined in this document introduce minimal overhead:¶
| Aspect | HyMRPL (MOP=6) | MOPex Bridge |
|---|---|---|
| DIO size increase | 0 bytes | +4 bytes (MOPex option) |
| Additional control messages | 0 | 0 |
| Memory per node | +1 byte (class field) | ~2 KB (bridge state) |
| Code size | ~300 lines | ~700 lines |
The convergence advantage of MOP=6 over pure Storing mode grows superlinearly with network size (observed: 23% at 5 nodes to 35% at 20 nodes). This is because MOP=6 avoids the distributed routing table maintenance overhead that limits Storing mode scalability.¶
The bridge mechanism scales with the number of foreign DODAGs (bounded at 4) and the number of injected routes per foreign DODAG (bounded at 32). Deployments requiring more capacity may increase these bounds at the cost of additional memory on the bridge node.¶
Recommended deployment patterns:¶
ifaces = { {
ifname = "lowpan0",
dodag_root = true,
mode_of_operation = 6,
node_class = "S",
trickle_t = 8,
rpls = { {
instance = 1,
dags = { {
mode_of_operation = 6,
node_class = "S",
dest_prefix = "fd00:1::/64",
dodagid = "fd00:1::1",
}, }
}, }
}, }
¶
ifaces = { {
ifname = "lowpan0",
dodag_root = false,
mode_of_operation = 6,
node_class = "S",
trickle_t = 2,
mopex_bridge = true,
mopex_accept_foreign = true,
}, }
¶
DODAG A (MOP=6, HyMRPL) DODAG B (MOP=2, Storing)
======================== =========================
+--------+ +--------+
| Root A | | Root B |
| MOP=6 | | MOP=2 |
+---+----+ +---+----+
| |
+----+----+ +----+----+
| | | |
+---+--+ +--+---+ +---+--+ +--+---+
|Node A1| |Node A2| |Node B1| |Node B2|
|Class-S| |Class-N| |Storing| |Storing|
+-------+ +---+---+ +-------+ +-------+
|
+----+----+
| BRIDGE |
| MOP=7 | <-- advertises MOP=7 + option 0x80
| native=6| joins both DODAGs
+----+----+
|
(connected to Root B's domain)
Cross-DODAG path:
Node A1 -> Root A -> Bridge -> Root B -> Node B1
¶
The following results were obtained from the rpld-hymrpl implementation running on Mininet-WiFi with 6LoWPAN over mac802154_hwsim (Linux kernel 6.11.0).¶
| Metric | Storing | Non-Storing | HyMRPL |
|---|---|---|---|
| Convergence (s) | 12.63 | 9.81 | 9.77 |
| PDR 1-3 hop | 100% | 100% | 100% |
| Latency 3-hop (ms) | 0.21 | 0.29 | 0.29 |
| DIO count (15s) | 33 | 45 | 45 |
| Metric | Value |
|---|---|
| Bridge MOPex DIOs emitted | 18+ per run |
| Foreign DODAGs registered | 2 |
| Cross-DODAG injections | 18 per run |
| Cross-DODAG PDR | 100% |
| Cross-DODAG latency | 0.3 ms |
| Data packets through bridge | 10,266 |
| Convergence time | ~15 s |
| Mode | PDR under failure |
|---|---|
| Storing | 79.5% |
| Non-Storing | 64.1% |
| HyMRPL (MOP=6) | 87.2% |
The dual reconvergence mechanism (centralized SRH + local hop-by-hop) provides a 23 percentage point advantage over Non-Storing under intermediate node failure.¶
The authors thank the developers of rpld for providing the base RPL daemon implementation, and the Mininet-WiFi team for the 6LoWPAN emulation framework used in experimental validation.¶