# Kconfig.rpl - RPL Options

#
# Copyright (c) 2016 Intel Corporation.
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig NET_RPL
	bool "Enable RPL (Ripple) support"
	default n
	select NET_IPV6
	select NET_IPV6_NBR_CACHE
	select NET_ROUTE
	help
	See RFC 6550 and RFC 6551 for details. Enable this if required by
	the network needs.

if NET_RPL

choice
	prompt "Objective function"
	default NET_RPL_MRHOF
	help
	The objective function to use. All RPL nodes in a DODAG
	must use the same OF.
	The default is MRHOF, see RFC 6719 for details.
	Other alternative is OF0, see RFC 6552 for details.

config NET_RPL_MRHOF
	bool "Minimum Rank with Hysteresis, RFC 6719"
	help
	Choose this (MRHOF) if unsure.

config NET_RPL_OF0
	bool "OF Zero, RFC 6552"
	help
	Objective function zero (OF0).
endchoice

choice
	prompt "Routing Metric"
	default NET_RPL_MC_NONE
	help
	The routing metric to use. This must be a valid DAG Metric Container
	Object Type. When MRH OF (RFC6719) is used with ETX, no metric
	container must be used as the rank carries ETX directly.

config NET_RPL_MC_NONE
	bool "No routing metric"

config NET_RPL_MC_EXT
	bool "Estimated number of transmissions (ETX)"

config NET_RPL_MC_ENERGY
	bool "Energy based routing metric"
endchoice

choice
	prompt "Mode of operation (MOP)"
	default NET_RPL_MOP2
	help
	Mode of operation (MOP) level.
	MOP0 : No Downward routes maintained by RPL
	MOP1 : Non-Storing Mode of Operation
	MOP2 : Storing Mode of Operation with no multicast support
	MOP3 : Storing Mode of Operation with multicast support
	See RFC 6550 ch. 6.3.1 figure 15 for details.

config NET_RPL_MOP2
	bool "Storing Mode of Operation with no multicast support"
	help
	Choose this if unsure.

config NET_RPL_MOP3
	bool "Storing Mode of Operation with multicast support"
	select NET_ROUTE_MCAST
endchoice

config	NET_RPL_PROBING
	bool "Enable RPL probing"
	depends on NET_RPL
	default n
	help
	When enabled, probes will be sent periodically to keep
	parent link estimates up to date.

config	NET_RPL_MAX_INSTANCES
	int "Maximum number of RPL instances"
	depends on NET_RPL
	default 1
	help
	This determines how many RPL instances to allocate.

config	NET_RPL_MAX_DAG_PER_INSTANCE
	int "Maximum number of DAGs within an instance"
	depends on NET_RPL
	default 2
	help
	This determines how many DAG to allocate within one RPL instance.

config	NET_RPL_DAO_SPECIFY_DAG
	bool "Specify DAG when sending a DAO message."
	depends on NET_RPL
	default y
	help
	This determines whether the DAG is embedded into DAO ICMPv6 message.

config	NET_RPL_DIO_INTERVAL_MIN
	int "DIO interval."
	depends on NET_RPL
	default 12
	help
	The DIO interval value n represents 2^n ms.
	According to the specification, the default value is 3 which
	means 8 milliseconds. That is far too low when using duty cycling
	with wake-up intervals that are typically hundreds of milliseconds.
	We thus set the default to 2^12 ms = 4.096 s.

config	NET_RPL_DIO_INTERVAL_DOUBLINGS
	int "Maximum amount of timer doublings."
	depends on NET_RPL
	default 8
	help
	The maximum interval by default will be 2^(12+8) ms = 1048.576 s.
	RFC 6550 suggests a default value of 20, which would not be ok
	when we start with a minimum interval of 2^12.

config	NET_RPL_DIO_REDUNDANCY
	int "DIO redundancy."
	depends on NET_RPL
	default 10
	help
	RFC 6550 suggests a default value of 10. It is unclear what the basis
	of this suggestion is. Network operators might attain more efficient
	operation by tuning this parameter for specific deployments.
	See also RFC 6206.

config	NET_RPL_DEFAULT_LIFETIME_UNIT
	int "Default route lifetime unit."
	depends on NET_RPL
	default 65535
	help
	This is the granularity of time used in RPL lifetime values, in seconds.

config	NET_RPL_DEFAULT_LIFETIME
	int "Default route lifetime."
	depends on NET_RPL
	default 255
	help
	Default route lifetime as a multiple of the lifetime unit.

config	NET_RPL_MCAST_LIFETIME
	int "Multicast route lifetime."
	depends on NET_RPL_MOP3
	default 3
	help
	Multicast route lifetime as a multiple of the lifetime unit.

config	NET_RPL_MIN_HOP_RANK_INC
	int "Minimum hop rank increment"
	depends on NET_RPL
	default 256

config	NET_RPL_INIT_LINK_METRIC
	int "Initial link metric"
	depends on NET_RPL
	default 2
	help
	Initial metric attributed to a link when the ETX is unknown.

config	NET_RPL_DAO_TIMER
	int "DAO sending timer value"
	depends on NET_RPL
	default 4
	help
	How many seconds to wait before sending DAO.

config	NET_RPL_DAO_ACK
	bool "Node expecting DAO ACK"
	depends on NET_RPL
	default y
	help
	Node expecting DAO ACK for DAO message. Enable if interested
	in status of DAO message.

config  NET_RPL_DAO_MAX_RETRANSMISSIONS
	int "Max DAO retransmissions"
	depends on NET_RPL && NET_RPL_DAO_ACK
	default 4
	range 1 5
	help
	If NET_RPL_DAO_ACK enabled then node expects DAO ACK message from
	the parent. If DAO message is routed through different nodes, ACK
	may be lost. So retry sending DAO message for max number of trials.

config	NET_RPL_PREFERENCE
	int "DAG preference field default value"
	depends on NET_RPL
	default 0

config	NET_RPL_GROUNDED
	bool "DAG grounded default value"
	depends on NET_RPL
	default false
	help
	A grounded DODAG offers connectivity to hosts that are
	required for satisfying the application-defined goal.  A floating
	DODAG is not expected to satisfy the goal; in most cases, it only
	provides routes to nodes within the DODAG.

config	NET_RPL_DEFAULT_INSTANCE
	hex "Default DAG instance id"
	depends on NET_RPL
	default 0x1e
	help
	This value decides which DAG instance we should participate in
	by default.

config	NET_RPL_INSERT_HBH_OPTION
	bool "Add RPL Hop-by-hop ext header to sent UDP packets"
	depends on NET_RPL
	default y
	help
	This option control the insertion of the RPL Hop-by-Hop extension
	header into UDP packets originating from this node.

config	NET_RPL_DIS_SEND
	bool "Send DIS periodically"
	depends on NET_RPL
	default y
	help
	Enable periodic DODAG Information Solicitation message sending.

config	NET_RPL_DIS_INTERVAL
	int "Default DIS interval"
	depends on NET_RPL_DIS_SEND
	default 60
	help
	This value decides how often DIS messages are sent. The
	value is in seconds.

config NET_STATISTICS_RPL
	bool "Collect RPL statistics"
	depends on NET_STATISTICS
	default n
	help
	Keep track of RPL related statistics

config  NET_DEBUG_RPL
	bool "Debug RPL"
	default n
	depends on NET_RPL && NET_LOG
	help
	Enables RPL output debug messages

endif # NET_RPL
