An Optimization for the Mobile Ad Hoc Network (MANET) Neighborhood Discovery Protocol (NHDP)
updates
Extracted elements (17)
The optimization is strictly optional and invisible to other protocols (e.g., OLSRv2) if the implementation conceals 2-Hop Tuples with N2_lost=true from higher-layer protocols. However, because some OLSRv2 implementations are not modularly separated from NHDP, the direct impact on RFC 7181 is also specified.
When link quality from a symmetric 1-hop neighbor drops below threshold, NHDP RFC 6130 removes corresponding 2-Hop Tuples immediately. This means that even a momentary quality drop causes symmetric 2-hop neighbor information to be permanently lost until the next HELLO messages are received, unlike 1-hop information which is retained. This RFC addresses that asymmetry.
A router implementing this optimization interoperates successfully with routers that implement RFC 6130 but do not implement this optimization, since the retained-but-ignored 2-Hop Tuples do not affect any externally visible behavior.
For OLSRv2 (RFC 7181), implementations MUST behave as if a 2-Hop Tuple only exists when N2_lost=false, and as if a change of N2_lost (in either direction) corresponds to a 2-Hop Tuple appearing or being removed for all MPR Set and Routing Set calculations.
If the NHDP implementation makes all 2-Hop Tuples visible to higher-layer protocols (including those with N2_lost=true), then protocols using RFC 6130 MUST ignore such 2-Hop Tuples with N2_lost=true.
In HELLO message processing (RFC 6130 Section 12.6 point 2), the condition for creating or updating a 2-Hop Tuple is changed from 'L_status = SYMMETRIC' to 'L_SYM_time not expired', so that Tuples are also created for links in the LOST state while still within their symmetric time window.
In OLSRv2 Section 17.6 (MPR recalculation triggers), 2-Hop Tuples with N2_lost=true MUST NOT trigger MPR recalculation; only tuples with N2_lost=false and valid metrics (N2_out_metric or N2_in_metric != UNKNOWN_METRIC) are considered, along with changes to N2_lost itself.
In OLSRv2 Sections 17.7, 18.4, 18.5, 19.1, and Appendix C.7, the condition on 2-Hop Tuples is tightened to additionally require N2_lost=false alongside the existing metric validity checks.
The constraint on each 2-Hop Tuple is updated: there MUST be an associated Link Tuple on the same MANET interface where L_neighbor_iface_addr_list equals N2_neighbor_iface_addr_list, L_SYM_time has not expired, AND L_lost equals N2_lost.
When a Link Tuple transitions from SYMMETRIC to LOST (L_lost set to true) while L_SYM_time has not expired, corresponding 2-Hop Tuples MUST have their N2_lost flag set to true rather than being removed.
When a new 2-Hop Tuple is created during HELLO processing, the N2_lost field MUST be initialized to the current value of L_lost for the corresponding Link Tuple.
When L_HEARD_time expires and either L_status changes from SYMMETRIC or L_SYM_time expires, the Section 13.2 actions (2-Hop Tuple updates) MUST be performed before the Section 13.3 actions for that Link Tuple.
When L_SYM_time expires or the Link Tuple is removed, all corresponding 2-Hop Tuples (those whose N2_neighbor_iface_addr_list overlaps with L_neighbor_iface_addr_list) MUST be removed.
While implementation of this optimization is OPTIONAL, if any of the changes specified in Section 4 are made, then all of those changes MUST be made.
A new boolean flag N2_lost is added to each 2-Hop Tuple in the 2-Hop Set. N2_lost=false when the corresponding Link Tuple has L_status=SYMMETRIC (L_lost=false); N2_lost=true when L_SYM_time has not expired but L_lost=true (L_status=LOST). In all other LOST cases, no 2-Hop Tuple is retained.
This optimization introduces no new security considerations to implementations of RFC 6130 or RFC 7181. It only retains information for the same duration it would have been usable under the original specification, so no additional attack surface is created.
N2_lost transitions: set to false when a 2-Hop Tuple is created under a SYMMETRIC link (L_lost=false); set to true when L_status changes from SYMMETRIC to LOST (L_lost set to true) while L_SYM_time has not yet expired; the 2-Hop Tuple is removed entirely when L_SYM_time expires or the Link Tuple is removed.