#
# Network configuration
#

menuconfig NET
	bool "Networking support"
	default y

if NET

config ARP_TIMEOUT
	int "Milliseconds before trying ARP again"
	default 5000

config NET_RETRY_COUNT
	int "Number of timeouts before giving up"
	default 5
	help
	  This variable defines the number of retries for network operations
	  like ARP, RARP, TFTP, or BOOTP before giving up the operation.

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 SYS_FAULT_ECHO_LINK_DOWN
	bool "Echo the inverted Ethernet link state to the fault LED"
	help
	  Echo the inverted Ethernet link state to the fault LED.  Note, if
	  this option is active, then CONFIG_SYS_FAULT_MII_ADDR also needs to
	  be configured.

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_PORT
	bool "Set TFTP UDP source/destination ports via the environment"
	help
	  If this is defined, the environment variable tftpsrcp is used to
	  supply the TFTP UDP source port value.  If tftpsrcp isn't defined,
	  the normal pseudo-random port number generator is used.

	  Also, the environment variable tftpdstp is used to supply the TFTP
	  UDP destination port value.  If tftpdstp isn't defined, the normal
	  port 69 is used.

	  The purpose for tftpsrcp is to allow a TFTP server to blindly start
	  the TFTP transfer using the pre-configured target IP address and UDP
	  port. This has the effect of "punching through" the (Windows XP)
	  firewall, allowing the remainder of the TFTP transfer to proceed
	  normally.  A better solution is to properly configure the firewall,
	  but sometimes that is not allowed.

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

config SYS_RX_ETH_BUFFER
	int "Number of receive packet buffers"
	default 4
	help
	  Defines the number of Ethernet receive buffers. On some Ethernet
	  controllers it is recommended to set this value to 8 or even higher,
	  since all buffers can be full shortly after enabling the interface on
	  high Ethernet traffic.
