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

menuconfig NET_LLDP
	bool "Enable Link Layer Discovery Protocol (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.

if NET_LLDP

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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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

endif # NET_LLDP
