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

menu "Link Layer Discovery Protocol (LLDP) options"

config NET_LLDP
	bool "Enable LLDP"
	select NET_MGMT
	select NET_MGMT_EVENT
	help
	  Enable Link Layer Discovery Protocol (LLDP) Transmit support.
	  Please refer to IEEE Std 802.1AB for more information.

module = NET_LLDP
module-dep = NET_LOG
module-str = Log level for LLDP
module-help = Enables core LLDP code to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

#
# LLDP Tx state machine config
#
config NET_LLDP_TX_INTERVAL
	int "Time between transmissions in seconds (msgTxInterval)"
	default 30
	range 1 3600
	depends on NET_LLDP
	help
	  Interval between transmissions of LLDPDUs during normal
	  (non-fast mode) transmission periods. For further information
	  please refer to section 9.2.5.7 of the LLDP spec.

config NET_LLDP_TX_HOLD
	int "Multiplier of Tx Interval to result on Time to Live value"
	default 4
	range 1 100
	depends on NET_LLDP
	help
	  This value (msgTxHold) is used as a multiplier of
	  CONFIG_NET_LLDP_TX_INTERVAL, to determine the value to be used
	  as Time to Live in LLDP frames. For further information please
	  refer to section 9.2.5.6 of the LLDP spec.

#
# End of LLDPDU TLV CONFIG
#
config NET_LLDP_END_LLDPDU_TLV_ENABLED
	bool "Enable End of LLDPDU TLV"
	default y
	depends on NET_LLDP
	help
	  Tells whether LLDPDU packet will have marker at the end of the packet.

#
# CHASSIS ID TLV CONFIG
#
config NET_LLDP_CHASSIS_ID_SUBTYPE
	int "Chassis ID TLV subtype"
	default 4
	range 1 7
	depends on NET_LLDP
	help
	  Chassis ID subtype options are defined below.
	  Please refer to section 8.5.2.2 of the 802.1AB for more info.
	  Subtype 1 = Chassis component
	  Subtype 2 = Interface alias
	  Subtype 3 = Port component
	  Subtype 4 = MAC address
	  Subtype 5 = Network address
	  Subtype 6 = Interface name
	  Subtype 7 = Locally assigned
	  If subtype 4 is selected, MAC address, then configs
	  NET_LLDP_CHASSIS_ID_MAC0 through NET_LLDP_CHASSIS_ID_MAC5 must
	  be defined, otherwise you must use NET_LLDP_CHASSIS_ID instead.

if NET_LLDP_CHASSIS_ID_SUBTYPE = 4
config NET_LLDP_CHASSIS_ID_MAC0
	hex "Chassis ID MAC Address Byte 0"
	default 0x00
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 0 of the MAC address.

config NET_LLDP_CHASSIS_ID_MAC1
	hex "Chassis ID MAC Address Byte 1"
	default 0x00
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 1 of the MAC address.

config NET_LLDP_CHASSIS_ID_MAC2
	hex "Chassis ID MAC Address Byte 2"
	default 0x5e
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 2 of the MAC address.

config NET_LLDP_CHASSIS_ID_MAC3
	hex "Chassis ID MAC Address Byte 3"
	default 0x00
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 3 of the MAC address.

config NET_LLDP_CHASSIS_ID_MAC4
	hex "Chassis ID MAC Address Byte 4"
	default 0x53
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 4 of the MAC address.

config NET_LLDP_CHASSIS_ID_MAC5
	hex "Chassis ID MAC Address Byte 5"
	default 0x8d
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 5 of the MAC address.
endif

if NET_LLDP_CHASSIS_ID_SUBTYPE != 4
config NET_LLDP_CHASSIS_ID
	string "Chassis ID value"
	default "CHASSIS_ID_PLACEHOLDER"
endif

#
# PORT ID TLV CONFIG
#
config NET_LLDP_PORT_ID_SUBTYPE
	int "Port ID TLV subtype"
	default 5
	range 1 7
	depends on NET_LLDP
	help
	  Port ID subtype options are defined below.
	  Please refer to section 8.5.3.2 of the 802.1AB for more info.
	  Subtype 1 = Interface alias
	  Subtype 2 = Port component
	  Subtype 3 = MAC address
	  Subtype 4 = Network address
	  Subtype 5 = Interface name
	  Subtype 6 = Agent circuit ID
	  Subtype 7 = Locally assigned
	  If subtype 3 is selected (MAC address) then configs
	  NET_LLDP_PORT_ID_MAC0 through NET_LLDP_PORT_ID_MAC5 must
	  be defined, otherwise you must use NET_LLDP_PORT_ID instead.

if NET_LLDP_PORT_ID_SUBTYPE = 3
config NET_LLDP_PORT_ID_MAC0
	hex "Chassis ID MAC Address Byte 0"
	default 0x00
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 0 of the MAC address.

config NET_LLDP_PORT_ID_MAC1
	hex "Chassis ID MAC Address Byte 1"
	default 0x00
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 1 of the MAC address.

config NET_LLDP_PORT_ID_MAC2
	hex "Chassis ID MAC Address Byte 2"
	default 0x5e
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 2 of the MAC address.

config NET_LLDP_PORT_ID_MAC3
	hex "Chassis ID MAC Address Byte 3"
	default 0x00
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 3 of the MAC address.

config NET_LLDP_PORT_ID_MAC4
	hex "Chassis ID MAC Address Byte 4"
	default 0x53
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 4 of the MAC address.

config NET_LLDP_PORT_ID_MAC5
	hex "Chassis ID MAC Address Byte 5"
	default 0x8d
	range 0 0xff
	depends on NET_LLDP
	help
	  Byte 5 of the MAC address.
endif

if NET_LLDP_PORT_ID_SUBTYPE != 3
config NET_LLDP_PORT_ID
	string "Port ID value"
	default "PORT_ID_PLACEHOLDER"
endif

endmenu
