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

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

choice
	prompt "802.15.4 MAC Driver"
	depends on NETWORKING && NETWORKING_WITH_15_4
	help
	 The 802.15.4 layer can support nullmac or csma.
config	NETWORKING_WITH_15_4_MAC_NULL
	bool
	prompt "nullmac driver"
	help
	  Enable nullmac driver. All packets go straight through.

config	NETWORKING_WITH_15_4_MAC_CSMA
	bool
	prompt "csma driver"
	help
	  Enable csma driver. Will queue packets and retry transmissions.

endchoice

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 nullrdc.
config	NETWORKING_WITH_15_4_RDC_SICSLOWMAC
	bool
	prompt "sicslowmac driver"
	help
	  Enable sicslowmac driver.
config	NETWORKING_WITH_15_4_RDC_NULL
	bool
	prompt "nullrdc driver"
	help
	  Enable nullrdc 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"
	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.

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
