# networking.kconf - Generic networking configuration options

#
# Copyright (c) 2015 Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
# Networking options
#

menuconfig NETWORKING
	bool
	prompt "Generic networking support"
	select NANO_TIMEOUTS
	select NANO_TIMERS
	select NET_BUF
	default n
	help
	  This option enabled generic networking support.

choice
prompt "IP stack"
depends on NETWORKING
help
	Select what IP stack to use. The legacy stack is
	Contiki based uIP stack.
default NET_UIP
config NET_UIP
	bool "uIP"
	help
	  Choose this if unsure.
endchoice

if NETWORKING && NET_UIP

config IP_BUF_RX_SIZE
	int "Number of IP net buffers to use when receiving data"
	default 1
	help
	Each network buffer will contain one received IPv6 or IPv4 packet.
	Each buffer will occupy 1280 bytes of memory.

config IP_BUF_TX_SIZE
	int "Number of IP net buffers to use when sending data"
	default 2
	help
	Each network buffer will contain one sent IPv6 or IPv4 packet.
	Each buffer will occupy 1280 bytes of memory.

config IP_RX_STACK_SIZE
	int "RX fiber stack size"
	default 1024
	help
	  Set the RX fiber stack size in bytes. The RX fiber is waiting
	  network packets from lower level bearers. It will then run the
	  packet through IP stack which validates the packet and passes
	  it eventually to application.

config IP_TX_STACK_SIZE
	int "TX fiber stack size"
	default 1024
	help
	  Set the TX fiber stack size in bytes. The TX fiber is waiting
	  data from application. It will then validate the data and push
	  it to network driver to be sent out.

config IP_TIMER_STACK_SIZE
	int "Timer fiber stack size"
	default 1536
	help
	  Set the timer fiber stack size in bytes. The timer fiber is
	  responsible for handling re-transmissions and periodic network
	  packet sending like IPv6 router solicitations.

config NET_MAX_CONTEXTS
	int "How many network context to use"
	default 2
	help
	  The network context is similar concept as network socket.
	  It defines a network endpoint and number of context depends
	  on application usage.

config UDP_MAX_CONNECTIONS
	int "How many UDP connections can be used"
	default 2
	help
	  Amount of concurrent UDP connections.

choice
prompt "Internet Protocol version"
depends on NETWORKING
help
	The IP stack can either support IPv6 or IPv4 but
	not both at the same time. The IPv6 support should
	be selected by default as there is limited set of
	network bearers provided that support IPv4.
default NETWORKING_WITH_IPV6
config NETWORKING_WITH_IPV6
	bool "IPv6"
	help
	  Choose this if unsure.
config NETWORKING_WITH_IPV4
	bool "IPv4"
	help
	  Legacy IP.
endchoice

config	NETWORKING_STATISTICS
	bool
	prompt "Enable IP statistics gathering"
	depends on NETWORKING
	default n
	help
	  This is only for debugging the network. Do not activate
	  this in live system! The option uses memory and slows
	  down IP packet processing.

if NETWORKING_WITH_IPV6
config	NETWORKING_IPV6_NO_ND
	bool
	prompt "Disable IPv6 neighbor discovery"
	depends on NETWORKING
	depends on NETWORKING_WITH_IPV6
	default n
	help
	  Normally ND should be enabled but in order to simplify
	  the network setup it can be turned off if using
	  slip and tun device.

config	NETWORKING_MAX_NEIGHBORS
	int "Max number of neighbors"
	depends on NETWORKING
	depends on NETWORKING_WITH_IPV6
	default 4
	help
	  Specifies the maximum number of neighbors that each node will
	  be able to handle.
endif

config	NETWORKING_WITH_TCP
	bool
	prompt "Enable TCP protocol"
	depends on NETWORKING
	default n
	help
	  Enable Transmission and Control Protocol (TCP) support.

config	TCP_MAX_CONNECTIONS
	int "Maximum number of connections"
	depends on NETWORKING_WITH_TCP
	default 2
	help
	  Tweak the TCP maximum segment size. Normally one should
	  not change this but let the IP stack to calculate a best
	  size for it.

config	TCP_DISABLE_ACTIVE_OPEN
	bool
	prompt "Disallow host to initiate connection attempt"
	depends on NETWORKING_WITH_TCP
	default n
	help
	  By default application is allowed to initiate a TCP
	  connection attempt. If the application is only acting
	  as a server, then some memory can be saved by disabling
	  the client role.

config	TCP_MSS
	int
	prompt "TCP maximum segment size"
	depends on NETWORKING_WITH_TCP
	default 0
	help
	  Tweak the TCP maximum segment size. Normally one should
	  not change this but let the IP stack to calculate a best
	  size for it.

config	TCP_RECEIVE_WINDOW
	int
	prompt "TCP receive window size"
	depends on NETWORKING_WITH_TCP
	default 0
	help
	  Tweak the TCP receive window size. Normally one should
	  not change this but let the IP stack to calculate a best
	  size for it.

config	NETWORKING_WITH_RPL
	bool
	prompt "Enable RPL (ripple) IPv6 mesh routing protocol"
	depends on NETWORKING && NETWORKING_WITH_IPV6
	default n
	help
	  Enable RPL (RFC 6550) IPv6 Routing Protocol for
	  Low-Power and Lossy Networks.

config	RPL_STATS
	bool
	prompt "Enable RPL statistics"
	depends on NETWORKING_WITH_RPL
	select NETWORKING_STATISTICS
	default n
	help
	  Enable RPL statistics support.

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

choice
prompt "Objective function"
depends on NETWORKING_WITH_RPL
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.
default RPL_WITH_MRHOF
config RPL_WITH_MRHOF
	bool "Minimum Rank with Hysteresis, RFC 6719"
	help
	  Choose this (MRHOF) if unsure.
config RPL_WITH_OF0
	bool "OF Zero, RFC 6552"
	help
	  Objective function zero (OF0).
endchoice

config	NETWORKING_WITH_LOOPBACK
	bool
	prompt "Enable loopback driver"
	depends on NETWORKING
	default n
	help
	  Enable a simple loopback driver that installs
	  IPv6 loopback addresses into routing table and
	  neighbor cache. All packets transmitted are
	  looped back to the receiving fifo/fiber.

config	NETWORK_LOOPBACK_TEST_COUNT
	int "How many packets the loopback test passes"
	depends on NETWORKING_WITH_LOOPBACK
	default 0
	help
	  If set to 0, then the loopback test runs forever.

choice
prompt "Wired networking support"
depends on NETWORKING
default NETWORKING_NO_WIRED
config NETWORKING_NO_WIRED
	bool "No wired network driver"
	help
	  Do not enable any wired network driver. It is still
	  possible to select other types of network drivers if
	  this option is selected.
config	NETWORKING_UART
	bool "Network UART/slip driver"
	select UART_PIPE
	help
	  Enable UART driver for passing IPv6 packets using slip.
config ETHERNET
	bool "Ethernet drivers"
	help
	  Include Ethernet drivers in system config. This
	  option enables Ethernet support in the core network
	  subsystem, but it is necessary to also select a
	  specific Ethernet device driver.
endchoice

config	NETWORKING_DEBUG_UART
	bool
	prompt "Network UART driver debug"
	depends on NETWORKING_UART && NETWORKING_WITH_LOGGING
	default n
	help
	  This option enables debug support for network UART
	  driver.

config	ETHERNET_DEBUG
	bool
	prompt "Network Ethernet driver debug"
	depends on NETWORKING_WITH_LOGGING && ETHERNET
	default n
	help
	  This option enables debug support for Ethernet drivers.

config	L2_BUFFERS
	bool
	default n

config	NETWORKING_WITH_15_4
	bool
	prompt "Enable 802.15.4 driver"
	depends on NETWORKING && NETWORKING_WITH_IPV6
	select L2_BUFFERS
	default n
	help
	  Enable 802.15.4 driver that receives the IPv6 packet,
	  does header compression on it and writes it to the
	  802.15.4 stack Tx FIFO. The 802.15.4 Tx fiber will pick up
	  the header compressed IPv6 6lowpan packet and fragment
	  it into suitable chunks ready to be sent to the 802.15.4
	  hw driver

config NETWORKING_WITH_15_4_ALWAYS_ACK
	bool
	prompt "Always request 802.15.4 packet acknowledgment"
	depends on NETWORKING_WITH_15_4
	default n
	help
	  This is meant to be used for testing only. Requesting an
	  acknowledgment on all data packet will draw power resource.
	  Use case for this option it for testing only.

# Using nullmac 802.15.4 driver only.
config	NETWORKING_WITH_15_4_MAC_NULL
	bool
	default y

choice
	prompt "802.15.4 RDC Driver"
	depends on NETWORKING && NETWORKING_WITH_15_4
	help
	 The 802.15.4 RDC (Radio Duty Cycle) layer can use either
	 sicslowmac or simplerdc.
config	NETWORKING_WITH_15_4_RDC_SIMPLE
	bool
	prompt "simplerdc driver"
	help
	  Enable simplerdc driver.
config	NETWORKING_WITH_15_4_RDC_SICSLOWMAC
	bool
	prompt "sicslowmac driver"
	help
	  Enable sicslowmac driver.
endchoice

config	15_4_RX_STACK_SIZE
	int "Stack size of 802.15.4 RX fiber"
	depends on NETWORKING_WITH_15_4
	default 1024
	help
	  Set the 802.15.4 RX fiber stack size in bytes. The RX fiber
	  is waiting network packets from 802.15.4 device driver.
	  It will then run the packet through 6LoWPAN stack which
	  uncompresses and de-fragments the packet and passes those to
	  upper layers.

config	15_4_TX_STACK_SIZE
	int "Stack size of 802.15.4 TX fiber"
	depends on NETWORKING_WITH_15_4
	default 4096
	help
	  Set the 802.15.4 TX fiber stack size in bytes. The TX fiber
	  is waiting network packets from IP stack. It then feeds those
	  to 6LoWPAN stack which compresses and fragments packets before
	  passing the fragments to 802.15.4 device driver. Note that
	  this stack needs to be bigger that TX stack because stack is
	  used to store the fragmented 802.15.4 packets.

config	15_4_BEACON_SUPPORT
	bool
	prompt "Enable 802.15.4 beacon support"
	depends on NETWORKING_WITH_15_4
	default n
	help
	  Enable 802.15.4 beacon support

config	15_4_BEACON_STATS
	bool
	prompt "Enable 802.15.4 beacon statistics"
	depends on NETWORKING_WITH_15_4
	depends on 15_4_BEACON_SUPPORT
	select NETWORKING_STATISTICS
	default n
	help
	  Enable 802.15.4 beacon statistics support.

config NETWORKING_WITH_15_4_PAN_ID
	hex
	prompt "IEEE 802.15.4 PAN id/address"
	depends on NETWORKING_WITH_15_4
	default 0xabcd
	help
	 All the 802.15.4 devices that want to connect to each
	 other need to have same PAN id (address).
	 Default PAN id is 0xABCD

choice
prompt "802.15.4 Radio Driver"
depends on NETWORKING && NETWORKING_WITH_15_4
default n
help
	The 802.15.4 layer can either support loopback within
	or loopback with uart but not both at the same time.

config	NETWORKING_WITH_15_4_TI_CC2520
	bool
	prompt "TI CC2520"
	select TEST_RANDOM_GENERATOR
	help
	  Enable Texas Instruments CC2520 802.15.4 radio driver.

config	NETWORKING_WITH_15_4_LOOPBACK
	bool
	prompt "Loopback"
	help
	  Enable 802.15.4 loopback radio driver that receives
	  the 802.15.4 frame and put it back 802.15.4 Rx Fifo.

config NETWORKING_WITH_15_4_LOOPBACK_UART
	bool
	prompt "Loopback with UART"
	select UART_PIPE
	help
	 Enable 802.15.4 loopback radio driver that sends
	 802.15.4 frames out of qemu through uart and receive
	 frames through uart. This way one can test 802.15.4 frames
	 between two qemus
endchoice

config	NETWORKING_WITH_BT
	bool
	prompt "Enable Bluetooth driver"
	depends on NETWORKING && NETWORKING_WITH_IPV6
	select L2_BUFFERS
	select NETWORKING_IPV6_NO_ND
	select NETWORKING_WITH_6LOWPAN
	select 6LOWPAN_COMPRESSION_IPHC
	select BLUETOOTH
	select BLUETOOTH_PERIPHERAL
	select BLUETOOTH_L2CAP_DYNAMIC_CHANNEL
	default n
	help
	  Enable Bluetooth driver that send and receives IPv6 packets,
	  does header compression on it and writes it to the
	  Bluetooth stack via L2CAP channel.

config	NETWORKING_WITH_6LOWPAN
	bool
	prompt "Enable 6LoWPAN (IPv6 compression) in the uIP stack"
	depends on NETWORKING
	depends on NETWORKING_WITH_15_4 || NETWORKING_WITH_BT
	default n
	help
	  Enable 6LoWPAN in uIP stack. Currently this requires 802.15.4
	  stack to be enabled.

choice
prompt "6LoWPAN compression method"
depends on NETWORKING_WITH_6LOWPAN
help
	Select the compression method that is used in 6LoWPAN.
default 6LOWPAN_COMPRESSION_IPV6
config 6LOWPAN_COMPRESSION_IPV6
	bool "No compression"
	help
	  Choose this if unsure.
config 6LOWPAN_COMPRESSION_IPHC
	bool "IP header compression"
	help
	  IP header compression
endchoice

config	TINYDTLS
	bool
	prompt "Enable tinyDTLS support."
	depends on NETWORKING
	default n
	help
	  Enable tinyDTLS support so that applications can use it.
	  This is needed at least in CoAP.

config	TINYDTLS_DEBUG
	bool
	prompt "Enable tinyDTLS debugging support."
	depends on TINYDTLS
	default n
	help
	  Enable tinyDTLS debugging support.

config	ER_COAP
	bool
	prompt "Enable Erbium CoAP engine support."
	depends on NETWORKING
	default n
	help
	  Enable Erbium CoAP engine support so that applications can use it.

config	ER_COAP_WITH_DTLS
	bool
	prompt "Use DTLS in CoAP"
	depends on ER_COAP
	select TINYDTLS
	default n
	help
	  Make CoAP engine use DTLS. Note that if you activate DTLS, you
	  are not able to send or receive non-DTLS CoAP messages, and
	  vice versa.

config  ER_COAP_LINK_FORMAT_FILTERING
	bool "Enable link format filtering"
	select MINIMAL_LIBC_EXTENDED
	default n
	help
	  Make CoAP engine support link format filters.

config	COAP_STATS
	bool
	prompt "Enable CoAP statistics"
	depends on ER_COAP
	select NETWORKING_STATISTICS
	default n
	help
	  Enable CoAP statistics support.

config	ER_COAP_CLIENT
	bool
	prompt "Enable CoAP client support"
	depends on ER_COAP
	default n
	help
	  Compile in client CoAP support.

config	DHCP
	bool
	prompt "Enable DHCP support."
	depends on NETWORKING && NETWORKING_WITH_IPV4
	default n
	help
	  Enable DHCP support so that applications can use it.
choice
prompt "DHCP message type"
depends on DHCP
help
	Select the DHCP message type broadcast or unicast.
default DHCP_BROADCAST
config DHCP_BROADCAST
	bool "Broadcast message"
	help
	  Choose this if unsure.
config DHCP_UNICAST
	bool "Unicast message"
	help
	  DHCP message type
endchoice

config NET_SANITY_TEST
	bool
	prompt "Enable networking sanity test"
	depends on NETWORKING
	default n
	help
	 Enable networking sanity tests. Network sanity test
	 verification and test report submission will fall under
	 this config.

config NET_15_4_LOOPBACK_NUM
	int
	prompt "Number of times loopback test runs"
	depends on (NETWORKING_WITH_15_4_LOOPBACK || NETWORKING_WITH_15_4_LOOPBACK_UART) && NET_SANITY_TEST
	default 0
	help
	 Number of times loopback test runs, 0 means infinite.

config	NET_TESTING
	bool
	prompt "Enable network testing setup"
	depends on NETWORKING
	default n
	help
	  Setup the network stack such a way that it is suitable for
	  testing with Qemu and slip.

endif

if NETWORKING

source "net/ip/Kconfig.debug"

endif
