#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

if NET_6LOWPAN

config NET_6LOWPAN_NREASSBUF
	int "Number of preallocated reassembly buffers"
	default 2
	---help---
		Large IPv6 packets will be fragmented by 6LoWPAN into multiple
		frames and reconstitued into a reassembly buffer on the receiving
		side.  Each concurrent reassembly requires one buffer.  Reassembly
		buffers are large:  The size of the 6LoWPAN MTU plus some overhead
		for the reassembly state.

		Some reassembly buffers may be preallocated; some may be allocated
		dynamically from the stack.  The former require more static memory
		usage; the later require additional CPU cycles to perform the
		allocation and may effect deterministic behavior.  So this is a
		trade-off between resources and performance.  If the number of pre-
		allocated reassembly buffers are exhausted, the reassembly will
		continue with dynamically allocated reassembly buffers.

		This behavior can be changed with CONFIG_NET_6LOWPAN_REASS_STATIC

config NET_6LOWPAN_REASS_STATIC
	bool "Static reassembly buffers"
	default n
	---help---
		By default, reassembly buffers may be allocated dynamically from the
		stack when all of the statically allocation reassembly buffers are
		in use.  This will require additional CPU cycles to perform the
		allocation and may effect deterministic behavior.  This option may
		be selected to suppress all dynamica allocation of reassembly
		buffers.  In that case, only static reassembly buffers are available;
		when those are exhausted, frames that require reassembly will be lost.

choice
	prompt "6LoWPAN Compression"
	default NET_6LOWPAN_COMPRESSION_HC06

config NET_6LOWPAN_COMPRESSION_IPv6
	bool "IPv6 Dispatch"
	---help---
		Packets compression when only IPv6 dispatch is used.  There is no
		compression in this case, all fields are sent inline. We just add
		the IPv6 dispatch byte before the packet.

config NET_6LOWPAN_COMPRESSION_HC1
	bool "6LoWPAN HC1"
	---help---
		Compress IP/UDP header using HC1 and HC_UDP

config NET_6LOWPAN_COMPRESSION_HC06
	bool "6LoWPAN HC06"
	---help---
		Compress IP/UDP header using HC06 compression

endchoice # 6LoWPAN Compression

config NET_6LOWPAN_COMPRESSION_THRESHOLD
	int "Lower compression threshold"
	default 63
	depends on !NET_6LOWPAN_COMPRESSION_IPv6
	---help---
		CONFIG_NET_6LOWPAN_COMPRESSION_THRESHOLD sets a lower threshold for
		when packets should not be compressed.

config NET_6LOWPAN_MINPORT
	hex "Minimum port number"
	default 0xf0b0
	depends on NET_6LOWPAN_COMPRESSION_HC1
	---help---
		HC1 compression of UDP headersis feasible only if both src and dest
		ports are between CONFIG_NET_6LOWPAN_MINPORT and
		CONFIG_NET_6LOWPAN_MINPORT + 15, inclusive.

		All nodes must agree on the value of CONFIG_NET_6LOWPAN_MINPORT

if NET_6LOWPAN_COMPRESSION_HC06

config NET_6LOWPAN_MAXADDRCONTEXT
	int "Maximum address contexts"
	default 1
	---help---
		If we use IPHC compression, how many address contexts do we support?

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_0_0
	hex "Address context 0 Prefix 0"
	default 0xaa
	---help---
		Prefix 0 for address context zero (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 0)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_0_1
	hex "Address context 0 Prefix 1"
	default 0xaa
	---help---
		Prefix 1 for address context 0 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 0)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_0_2
	hex "Address context 0 Prefix 2"
	default 0xaa
	---help---
		Prefix 2 for address context 0 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 0)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_0_3
	hex "Address context 0 Prefix 3"
	default 0xaa
	---help---
		Prefix 3 for address context 0 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 0)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_0_4
	hex "Address context 0 Prefix 4"
	default 0xaa
	---help---
		Prefix 4 for address context 0 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 0)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_0_5
	hex "Address context 0 Prefix 5"
	default 0xaa
	---help---
		Prefix 5 for address context 0 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 0)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_0_6
	hex "Address context 0 Prefix 6"
	default 0xaa
	---help---
		Prefix 6 for address context 0 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 0)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_0_7
	hex "Address context 0 Prefix 7"
	default 0xaa
	---help---
		Prefix 7 for address context 0 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 0)

config NET_6LOWPAN_MAXADDRCONTEXT_PREINIT_1
	bool "Pre-initialize address context 1"
	default n
	---help---
		Preinitialize address context 1 for better header compression
		(Saves up to 13 bytes per 6lowpan packet).  Assumes
		CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 1)

if NET_6LOWPAN_MAXADDRCONTEXT_PREINIT_1

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_1_0
	hex "Address context 1 Prefix 0"
	default 0xaa
	---help---
		Prefix 0 for address context 1 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 1)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_1_1
	hex "Address context 1 Prefix 1"
	default 0xaa
	---help---
		Prefix 1 for address context 1 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 1)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_1_2
	hex "Address context 1 Prefix 2"
	default 0xaa
	---help---
		Prefix 2 for address context 1 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 1)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_1_3
	hex "Address context 1 Prefix 3"
	default 0xaa
	---help---
		Prefix 3 for address context 1 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 1)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_1_4
	hex "Address context 1 Prefix 4"
	default 0xaa
	---help---
		Prefix 4 for address context 1 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 1)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_1_5
	hex "Address context 1 Prefix 5"
	default 0xaa
	---help---
		Prefix 5 for address context 1 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 1)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_1_6
	hex "Address context 1 Prefix 6"
	default 0xaa
	---help---
		Prefix 6 for address context 1 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 1)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_1_7
	hex "Address context 1 Prefix 7"
	default 0xaa
	---help---
		Prefix 7 for address context 1 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 1)

endif # NET_6LOWPAN_MAXADDRCONTEXT_PREINIT_1

config NET_6LOWPAN_MAXADDRCONTEXT_PREINIT_2
	bool "Pre-initialize address context 2"
	default n
	depends on NET_6LOWPAN_MAXADDRCONTEXT_PREINIT_1
	---help---
		Preinitialize any address contexts for better header compression
		(Saves up to 13 bytes per 6lowpan packet).  Assumes
		CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 2)

if NET_6LOWPAN_MAXADDRCONTEXT_PREINIT_2

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_2_0
	hex "Address context 2 Prefix 0"
	default 0xaa
	---help---
		Prefix 0 for address context 2 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 2)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_2_1
	hex "Address context 2 Prefix 1"
	default 0xaa
	---help---
		Prefix 1 for address context 2 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 2)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_2_2
	hex "Address context 2 Prefix 2"
	default 0xaa
	---help---
		Prefix 2 for address context 2 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 2)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_2_3
	hex "Address context 2 Prefix 3"
	default 0xaa
	---help---
		Prefix 3 for address context 2 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 2)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_2_4
	hex "Address context 2 Prefix 4"
	default 0xaa
	---help---
		Prefix 4 for address context 2 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 2)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_2_5
	hex "Address context 2 Prefix 5"
	default 0xaa
	---help---
		Prefix 5 for address context 2 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 2)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_2_6
	hex "Address context 2 Prefix 6"
	default 0xaa
	---help---
		Prefix 6 for address context 2 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 2)

config NET_6LOWPAN_MAXADDRCONTEXT_PREFIX_2_7
	hex "Address context 2 Prefix 7"
	default 0xaa
	---help---
		Prefix 7 for address context 2 (assumes CONFIG_NET_6LOWPAN_MAXADDRCONTEXT >= 2)

endif # NET_6LOWPAN_MAXADDRCONTEXT_PREINIT_2
endif # NET_6LOWPAN_COMPRESSION_HC06

config NET_6LOWPAN_EXTENDEDADDR
	bool "Extended IEEE 802.15.4 address"
	default n
	---help---
		By default, a 2-byte short address is used for the IEEE802.15.4 MAC
		device's link layer address.  If this option is selected, then an
		8-byte extended address will be used.

		All devices operating on a network have unique, 8-byte addresses,
		referred to as extended addresses.  A device will use either the
		extended address for direct communication within the PAN or the
		short 2-byte address that was allocated by the PAN coordinator when
		the device associated.

config NET_6LOWPAN_MAXAGE
	int "Packet reassembly timeout"
	default 20
	---help---
		Timeout for packet reassembly at the 6lowpan layer in units of
		seconds (should be < 60s)

config NET_6LOWPAN_MAX_MACTRANSMITS
	int "Max MAC transmissions"
	default 4
	range 1 255
	---help---
		CONFIG_NET_6LOWPAN_MAX_MACTRANSMITS specifies how many times the MAC
		layer should resend packets if no link-layer ACK was received. This
		only makes sense with the csma_driver.

config NET_6LOWPAN_PKTSIZE
	int "6LoWPAN packet buffer size"
	default 1294
	range 590 1518
	---help---
		Packet buffer size.  This size includes the TCP/UDP payload plus the
		size of TCP/UDP header, the IP header, and the Ethernet header.
		This value is related to the MTU (Maximum Transmission Unit), except
		that it includes the size of the link layer header; the payload is
		the MSS (Maximum Segment Size).  6LoWPAN has no link layer header (at
		least in the packet buffer which is only used for re-assembly).  So
		for 6LoWPAN the MTU is the same as the PKTSIZE.

		NOTE that this option depends on fragmentation support.  By
		supporting fragmentation, we can handle quite large "logical" packet
		sizes.  Without fragmentation support, the MTU is equal to the frame
		size and that has already been selected.

config NET_6LOWPAN_DUMPBUFFER
	bool "Enable dumping of buffer data"
	default n
	depends on DEBUG_NET_INFO
	---help---
		Enable dumping of all packet and frame buffers coming into and out
		of the 6LoWPAN logic.  This will generate a large volume of data if
		selected.

endif # NET_6LOWPAN
