#
# Network configuration
#

menuconfig NET
	bool "Networking support"
	default y

if NET

config PROT_UDP
	bool "Enable generic udp framework"
	help
	  Enable a generic udp framework that allows defining a custom
	  handler for udp protocol.

config BOOTP_SEND_HOSTNAME
	bool "Send hostname to DNS server"
	help
	  Some DHCP servers are capable to do a dynamic update of a
	  DNS server. To do this, they need the hostname of the DHCP
	  requester.
	  If CONFIG_BOOTP_SEND_HOSTNAME is defined, the content
          of the "hostname" environment variable is passed as
          option 12 to the DHCP server.

config NET_RANDOM_ETHADDR
	bool "Random ethaddr if unset"
	help
	  Selecting this will allow the Ethernet interface to function even
	  when the ethaddr variable for that interface is unset.  In this case,
	  a random MAC address in the locally administered address space is
	  generated. It will be saved to the appropriate environment variable,
	  too.

config NETCONSOLE
	bool "NetConsole support"
	help
	  Support the 'nc' input/output device for networked console.
	  See README.NetConsole for details.

config IP_DEFRAG
	bool "Support IP datagram reassembly"
	help
	  Selecting this will enable IP datagram reassembly according
	  to the algorithm in RFC815.

config NET_MAXDEFRAG
	int "Size of buffer used for IP datagram reassembly"
	depends on IP_DEFRAG
	default 16384
	range 1024 65536
	help
	  This defines the size of the statically allocated buffer
	  used for reassembly, and thus an upper bound for the size of
	  IP datagrams that can be received.

config TFTP_BLOCKSIZE
	int "TFTP block size"
	default 1468
	help
	  Default TFTP block size.
	  The MTU is typically 1500 for ethernet, so a TFTP block of
	  1468 (MTU minus eth.hdrs) provides a good throughput with
	  almost-MTU block sizes.
	  You can also activate CONFIG_IP_DEFRAG to set a larger block.

config TFTP_WINDOWSIZE
	int "TFTP window size"
	default 1
	help
	  Default TFTP window size.
	  RFC7440 defines an optional window size of transmits,
	  before an ack response is required.
	  The default TFTP implementation implies a window size of 1.

config TFTP_TSIZE
	bool "Track TFTP transfers based on file size option"
	depends on CMD_TFTPBOOT
	default y if (ARCH_OMAP2PLUS || ARCH_K3)
	help
	  By default, TFTP progress bar is increased for each received UDP
	  frame, which can lead into long time being spent for sending
	  data over the UART. Enabling this option, TFTP queries the file
	  size from server, and if supported, limits the progress bar to
	  50 characters total which fits on single line.

config SERVERIP_FROM_PROXYDHCP
	bool "Get serverip value from Proxy DHCP response"
	help
	  Allows bootfile config to be fetched from Proxy DHCP server
		while IP is obtained from main DHCP server.

config SERVERIP_FROM_PROXYDHCP_DELAY_MS
	int "# of additional milliseconds to wait for ProxyDHCP response"
	default 100
	help
	  Amount of additional time to wait for ProxyDHCP response after
		receiving response from main DHCP server. Has no effect if
		SERVERIP_FROM_PROXYDHCP is false.

config KEEP_SERVERADDR
	bool "Write the server's MAC address to 'serveraddr'"
	default y if SANDBOX
	help
	  Keeps the server's MAC address, in the env 'serveraddr'
	  for passing to bootargs (like Linux's netconsole option). If this is
	  enabled, when an ARP reply is received, the server's IP address is
	  written there.

config UDP_CHECKSUM
	bool "Check the UDP checksum"
	default y if SANDBOX
	help
	  Enable this to verify the checksum on UDP packets. If the checksum
	  is wrong then the packet is discussed and an error is shown, like
	  "UDP wrong checksum 29374a23 30ff3826"

config BOOTP_SERVERIP
	bool "Use the 'serverip' env var for tftp, not bootp"
	help
	  Enable this if the TFTP server will be the 'serverip' environment
	  variable, not the BOOTP server. This affects the operation of both
	  bootp and tftp.

endif   # if NET
