# Kconfig - netusb configuration options

#
# Copyright (c) 2017 Intel Corp.
#
# SPDX-License-Identifier: Apache-2.0
#

menu "USB Device Networking support"
	depends on USB_DEVICE_STACK

config USB_DEVICE_NETWORK
	bool
	select NET_L2_ETHERNET

config USB_DEVICE_NETWORK_ECM
	bool "USB Ethernet Control Model (ECM) Networking device"
	select USB_DEVICE_NETWORK
	help
	  Ethernet Control Model (ECM) is a part of  Communications Device
	  Class (CDC) USB protocol specified by USB-IF.

config USB_DEVICE_NETWORK_EEM
	bool "USB Ethernet Emulation Model (EEM) Networking device"
	select USB_DEVICE_NETWORK
	help
	  Ethernet Emulation Model (EEM) is part of  Communications Device
	  Class (CDC) USB protocol and can be used to encapsulate Ethernet
	  frames for transport over USB.

config USB_DEVICE_NETWORK_RNDIS
	bool "USB Remote NDIS (RNDIS) Networking device"
	select USB_DEVICE_NETWORK
	select USB_COMPOSITE_DEVICE
	help
	  Remote NDIS (RNDIS) is commonly used Microsoft vendor protocol with
	  Specification available from Microsoft web site.

if USB_DEVICE_NETWORK_ECM

config CDC_ECM_INTERRUPT_EP_MPS
	int
	default 16
	help
	  CDC ECM class interrupt endpoint size

config CDC_ECM_BULK_EP_MPS
	int
	default 64
	help
	  CDC ECM class bulk endpoint size

config USB_DEVICE_NETWORK_ECM_MAC
	string
	default "00005E005301"
	help
	  MAC Host OS Address string.
	  MAC Address which would be assigned to network device, created in
	  the Host's Operating System. Use RFC 7042 Documentation values as
	  default MAC.

endif # USB_DEVICE_NETWORK_ECM

if USB_DEVICE_NETWORK_EEM

config CDC_EEM_BULK_EP_MPS
	int
	default 64

endif #USB_DEVICE_NETWORK_EEM

if USB_DEVICE_NETWORK_RNDIS

config RNDIS_INTERRUPT_EP_MPS
	int
	default 16
	help
	  RNDIS interrupt endpoint size

config RNDIS_BULK_EP_MPS
	int
	default 64
	help
	  RNDIS bulk endpoint size

endif # USB_DEVICE_NETWORK_RNDIS

if USB_DEVICE_NETWORK

module = USB_DEVICE_NETWORK
module-dep = LOG
module-str = USB Device Network log level
source "subsys/net/Kconfig.template.log_config.net"

endif # USB_DEVICE_NETWORK

endmenu # USB Device Networking support
