#
# 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 BOOTDEV_ETH
	bool "Enable bootdev for ethernet"
	depends on BOOTSTD
	default y
	help
	  Provide a bootdev for ethernet so that is it possible to boot
	  an operationg system over the network, using the PXE (Preboot
	  Execution Environment) 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 discarded 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.

config BOOTP_MAX_ROOT_PATH_LEN
	int "Option 17 root path length"
	default 64
	help
	  Select maximal length of option 17 root path.

config USE_GATEWAYIP
	bool "Set a default 'gateway' value in the environment"
	help
	  Defines a default value for the IP address of the default router
	  where packets to other networks are sent to.  (Environment variable
	  "gatewayip")

config GATEWAYIP
	string "Value of the default 'gateway' value in the environment"
	depends on USE_GATEWAYIP

config USE_IPADDR
	bool "Set a default 'ipaddr' value in the environment"
	help
	  Define a default value for the IP address to use for the default
	  Ethernet interface, in case this is not determined through e.g.
	  bootp.  (Environment variable "ipaddr")

config IPADDR
	string "Value of the default 'ipaddr' value in the environment"
	depends on USE_IPADDR

config USE_NETMASK
	bool "Set a default 'netmask' value in the environment"
	help
	  Defines a default value for the subnet mask (or routing prefix) which
	  is used to determine if an IP address belongs to the local subnet or
	  needs to be forwarded through a router.  (Environment variable "netmask")

config NETMASK
	string "Value of the default 'netmask' value in the environment"
	depends on USE_NETMASK

config USE_ROOTPATH
	bool "Set a default 'rootpath' value in the environment"

config ROOTPATH
	string "Value of the default 'rootpath' value in the environment"
	depends on USE_ROOTPATH
	default "/opt/nfsroot"

config USE_SERVERIP
	bool "Set a default 'serverip' value in the environment"
	help
	  Defines a default value for the IP address of a TFTP server to
	  contact when using the "tftboot" command.  (Environment variable
	  "serverip")

config SERVERIP
	string "Value of the default 'serverip' value in the environment"
	depends on USE_SERVERIP

config PROT_TCP
	bool "TCP stack"
	help
	  Enable a generic tcp framework that allows defining a custom
	  handler for tcp protocol.

config PROT_TCP_SACK
	bool "TCP SACK support"
	depends on PROT_TCP
	help
	  TCP protocol with SACK. SACK means selective acknowledgements.
	  By turning this option on TCP will learn what segments are already
	  received. So that it improves TCP's retransmission efficiency.
	  This option should be turn on if you want to achieve the fastest
	  file transfer possible.

config IPV6
	bool "IPv6 support"
	help
	  Enable IPv6 support. It includes Neighbour Discovery protocol, ICMPv6
	  and auxiliary stuff to make it work. Since it is enabled u-boot
	  network subsystem can get and handle incoming packets and send packets
	  through IPv6 network. It allows to use environment variables such as
	  ip6addr, serverip6. If a u-boot command is capable to parse an IPv6
	  address and find it, it will force using IPv6 in the network stack.

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.
