#
# Controller Area Network (CAN) network layer core configuration
#

menuconfig CAN
	depends on NET
	tristate "CAN bus subsystem support"
	---help---
	  Controller Area Network (CAN) is a slow (up to 1Mbit/s) serial
	  communications protocol which was developed by Bosch in
	  1991, mainly for automotive, but now widely used in marine
	  (NMEA2000), industrial, and medical applications.
	  More information on the CAN network protocol family PF_CAN
	  is contained in <Documentation/networking/can.txt>.

	  If you want CAN support you should say Y here and also to the
	  specific driver for your controller(s) below.

config CAN_RAW
	tristate "Raw CAN Protocol (raw access with CAN-ID filtering)"
	depends on CAN
	default N
	---help---
	  The raw CAN protocol option offers access to the CAN bus via
	  the BSD socket API. You probably want to use the raw socket in
	  most cases where no higher level protocol is being used. The raw
	  socket has several filter options e.g. ID masking / error frames.
	  To receive/send raw CAN messages, use AF_CAN with protocol CAN_RAW.

config CAN_BCM
	tristate "Broadcast Manager CAN Protocol (with content filtering)"
	depends on CAN
	default N
	---help---
	  The Broadcast Manager offers content filtering, timeout monitoring,
	  sending of RTR frames, and cyclic CAN messages without permanent user
	  interaction. The BCM can be 'programmed' via the BSD socket API and
	  informs you on demand e.g. only on content updates / timeouts.
	  You probably want to use the bcm socket in most cases where cyclic
	  CAN messages are used on the bus (e.g. in automotive environments).
	  To use the Broadcast Manager, use AF_CAN with protocol CAN_BCM.


source "drivers/net/can/Kconfig"
