# Kconfig - SLIP driver configuration options

#
# Copyright (c) 2016 Intel Corporation
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3) Neither the name of Intel Corporation nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#

#
# SLIP options
#
menuconfig SLIP
	bool
	prompt "SLIP driver"
	select UART_PIPE
	select UART_INTERRUPT_DRIVEN

if SLIP

config	SLIP_DRV_NAME
	string "SLIP Driver name"
	default "slip"
	help
	  This option sets the driver name

config	SLIP_MTU
	int "SLIP MTU"
	default 1500
	range 80 1500
	help
	  This option sets the MTU for the SLIP connection.
	  The value is only used when fragmenting the network
	  data into net_buf's. The actual SLIP connection
	  does not use this value.

config	SLIP_DEBUG
	bool "SLIP driver debug"
	default n
	help
	  This option enables debug support for SLIP driver.

config	SLIP_STATISTICS
	bool "SLIP network connection statistics"
	default n
	help
	  This option enables statistics support for SLIP driver.

config  SLIP_TAP
	bool "Use TAP interface to host"
	default n
	select NET_L2_ETHERNET
	help
	  By default TUN is used. In TAP the Ethernet frames
	  are transferred over SLIP.


config	SLIP_MAC_ADDR
	string "MAC address for the interface"
	default ""
	help
	  Specify a MAC address for the SLIP interface in the form of
	  six hex 8-bit chars separaed by colons (eg:
	  aa:33:cc:22:e2:c0).  The default is an empty string, which
	  means the code will make 00:00:5E:00:53:XX, where XX will be
	  random.

endif
