# 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.

if NETWORKING

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.

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

source "net/ip/Kconfig.debug"

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.
endif

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.

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	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 CONFIG_NETWORKING_WITH_15_4
	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	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 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.

endif
