blob: 3e089869303a51236a99d84a2c04dfcd30cb83ac [file]
/*
* Copyright (c) 2019, The OpenThread Authors.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file
* This file includes compile-time configurations for Parent Search.
*/
#ifndef OT_CORE_CONFIG_PARENT_SEARCH_H_
#define OT_CORE_CONFIG_PARENT_SEARCH_H_
/**
* @addtogroup config-parent-search
*
* @brief
* This module includes configuration variables for Parent Search.
*
* @{
*/
/**
* @def OPENTHREAD_CONFIG_PARENT_SEARCH_ENABLE
*
* Define as 1 to enable the periodic parent search feature.
*
*
* When this feature is enabled, an end device/child (while staying attached) periodically searches for a potentially
* better parent and switches parents if a better one is found.
*
* The parent search mechanism depends on whether the device is an FTD child or an MTD child.
*
* FTD Child
*
* - An FTD child receives and processes MLE Advertisements from neighboring routers. It uses this information to track
* the one-way link quality to each, which is later used to compare and select potential new parents.
* - Every `OPENTHREAD_CONFIG_PARENT_SEARCH_CHECK_INTERVAL` seconds, an FTD child tries to select a better parent.
* The FTD child checks the list of neighboring routers and the tracked link quality information. A new parent is
* selected only if its average RSS exceeds the current parent's RSS by a margin specified by the configuration
* `OPENTHREAD_CONFIG_PARENT_SEARCH_RSS_MARGIN` configuration.
* - If the attach attempt to the selected router fails (e.g., the router already has the maximum number of children it
* can support), the FTD child ensures that the same router cannot be selected again until a "reselect timeout"
* expires. This avoids repeated attempts to the same router. This timeout is specified by the configuration
* `OPENTHREAD_CONFIG_PARENT_SEARCH_RESELECT_TIMEOUT`.
*
* MTD Child
*
* - Every `OPENTHREAD_CONFIG_PARENT_SEARCH_CHECK_INTERVAL` seconds, an MTD child checks its average RSS to its
* current parent. The child starts a parent search process only if the average RSS is below
* `OPENTHREAD_CONFIG_PARENT_SEARCH_RSS_THRESHOLD`.
* - This ensures that an MTD child already attached to a parent with good link quality does not waste energy
* searching for better parents.
* - The MTD child sends an MLE Parent Request to discover possible new parents. Because this process can be
* power-consuming (the child needs to stay in RX mode to collect parent responses), and to limit its impact on
* battery-powered devices, after a parent search is triggered on an MTD, the MTD child does not trigger another
* one before the specified backoff interval (`OPENTHREAD_CONFIG_PARENT_SEARCH_BACKOFF_INTERVAL`) expires.
*
* This feature is enabled by default on FTD builds. It is recommended that it also be enabled on MTD builds. This may
* require the platform integrator (device vendor) to select appropriate configuration values for this feature,
* particularly `OPENTHREAD_CONFIG_PARENT_SEARCH_BACKOFF_INTERVAL`, which can impact how often a (battery-powered)
* sleepy child may search for a parent, taking into account its impact on the device's battery life.
*/
#ifndef OPENTHREAD_CONFIG_PARENT_SEARCH_ENABLE
#define OPENTHREAD_CONFIG_PARENT_SEARCH_ENABLE OPENTHREAD_FTD
#endif
/**
* @def OPENTHREAD_CONFIG_PARENT_SEARCH_CHECK_INTERVAL
*
* Specifies the interval in seconds for a child to check the trigger condition to perform a parent search.
*
* Applicable only if periodic parent search feature is enabled (see `OPENTHREAD_CONFIG_PARENT_SEARCH_ENABLE`).
*/
#ifndef OPENTHREAD_CONFIG_PARENT_SEARCH_CHECK_INTERVAL
#define OPENTHREAD_CONFIG_PARENT_SEARCH_CHECK_INTERVAL (9 * 60)
#endif
/**
* @def OPENTHREAD_CONFIG_PARENT_SEARCH_BACKOFF_INTERVAL
*
* Specifies the backoff interval in seconds for a child to not perform a parent search after triggering one. This is
* used when device is an MTD child.
*
* Applicable only if periodic parent search feature is enabled (see `OPENTHREAD_CONFIG_PARENT_SEARCH_ENABLE`).
*/
#ifndef OPENTHREAD_CONFIG_PARENT_SEARCH_BACKOFF_INTERVAL
#define OPENTHREAD_CONFIG_PARENT_SEARCH_BACKOFF_INTERVAL (10 * 60 * 60)
#endif
/**
* @def OPENTHREAD_CONFIG_PARENT_SEARCH_RSS_THRESHOLD
*
* Specifies the RSS threshold used to trigger a parent search.
*
* Applicable only if periodic parent search feature is enabled (see `OPENTHREAD_CONFIG_PARENT_SEARCH_ENABLE`).
*/
#ifndef OPENTHREAD_CONFIG_PARENT_SEARCH_RSS_THRESHOLD
#define OPENTHREAD_CONFIG_PARENT_SEARCH_RSS_THRESHOLD -65
#endif
/**
* @def OPENTHREAD_CONFIG_PARENT_SEARCH_RESELECT_TIMEOUT
*
* Specifies parent reselect timeout duration in seconds used on FTD child devices. When an attach attempt to a
* neighboring router selected as a potential new parent fails, the same router cannot be selected again until this
* timeout expires.
*
* Applicable only if periodic parent search feature is enabled (see `OPENTHREAD_CONFIG_PARENT_SEARCH_ENABLE`).
*/
#ifndef OPENTHREAD_CONFIG_PARENT_SEARCH_RESELECT_TIMEOUT
#define OPENTHREAD_CONFIG_PARENT_SEARCH_RESELECT_TIMEOUT (90 * 60)
#endif
/**
* @def OPENTHREAD_CONFIG_PARENT_SEARCH_RSS_MARGIN
*
* Specifies the RSS margin over the current parent RSS for allowing selection of a neighboring router as a potential
* new parent to attach to. Used on FTD child devices.
*/
#ifndef OPENTHREAD_CONFIG_PARENT_SEARCH_RSS_MARGIN
#define OPENTHREAD_CONFIG_PARENT_SEARCH_RSS_MARGIN 7
#endif
/*
* @}
*/
#endif // OT_CORE_CONFIG_PARENT_SEARCH_H_