# 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_TRICKLE
	bool "Enable Trickle algorithm"
	depends on NETWORKING
	default n
	help
	  Enable Trickle algorithm (RFC 6206) support. This only
	  includes Trickle library but IP stack does not call its
	  functions.

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 n

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
	select BLUETOOTH_SMP
	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
