# Kconfig.rpl - RPL Options

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

menuconfig NET_RPL
	bool "Enable RPL (Ripple) support"
	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

config NET_RPL_PREFIX
	string "Network IPv6 prefix"
	help
	  What is the DAG id (prefix) of the RPL network. This is only used
	  if you are creating a root node. You should specify here the full
	  IPv6 address as that is used as a root node address.
	  Example: 2001:db8::1/64

choice
	prompt "Network type"
	default NET_RPL_L2_IEEE802154 if NET_L2_IEEE802154
	default NET_RPL_L2_ANY
	help
	  The type of the network that this RPL device is supporting.
	  Currently all the nodes in the network need to be the same type
	  like IEEE 802.15.4.

config NET_RPL_L2_ANY
	bool "Any network type"

config NET_RPL_L2_IEEE802154
	bool "IEEE 802.15.4"

endchoice

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_ETX
	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
	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_MAX_PARENTS
	int "Maximum number of parents for one node"
	default NET_IPV6_MAX_NEIGHBORS
	help
	  This determines how many RPL parents each node can have.

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 1
	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
	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
	help
	  Keep track of RPL related statistics

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

endif # NET_RPL
