#
# Network configuration
#

menuconfig NET
	bool "Networking support"
	default y

if NET

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.
	  A new MAC address will be generated on every boot and it will
	  not be added to the environment.

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

config NET_TFTP_VARS
	bool "Control TFTP timeout and count through environment"
	depends on CMD_NET
	default y
	help
	  If set, allows controlling the TFTP timeout through the
	  environment variable tftptimeout, and the TFTP maximum
	  timeout count through the variable tftptimeoutcountmax.
	  If unset, timeout and maximum are hard-defined as 1 second
	  and 10 timouts per TFTP transfer.

config BOOTP_BOOTPATH
	bool "Enable BOOTP BOOTPATH"
	depends on CMD_NET

config BOOTP_DNS
	bool "Enable bootp DNS"
	depends on CMD_NET

config BOOTP_GATEWAY
	bool "Enable BOOTP gateway"
	depends on CMD_NET

config BOOTP_HOSTNAME
	bool "Enable BOOTP hostname"
	depends on CMD_NET

config BOOTP_PXE
	bool "Enable BOOTP PXE"
	depends on CMD_NET

config BOOTP_SUBNETMASK
	bool "Enable BOOTP subnetmask"
	depends on CMD_NET
	depends on CMD_NET

config BOOTP_PXE_CLIENTARCH
	hex
	depends on CMD_NET
        default 0x16 if ARM64
        default 0x15 if ARM
        default 0 if X86

config BOOTP_VCI_STRING
	string
	depends on CMD_NET
	default "U-Boot.armv7" if CPU_V7 || CPU_V7M
	default "U-Boot.armv8" if ARM64
	default "U-Boot.arm" if ARM
	default "U-Boot"

endif   # if NET
